Revendor github.com/Microsoft/hcsshim
1. Revendors github.com/Microsoft/hcsshim to the latest known good commit. This includes numerous bug fixes and improvements. 2. Vendors indirect dependency on go.opencensus.io since hcsshim now uses trace correlation. Signed-off-by: Justin Terry (VM) <juterry@microsoft.com>
This commit is contained in:
		
							
								
								
									
										75
									
								
								vendor/github.com/Microsoft/hcsshim/container.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										75
									
								
								vendor/github.com/Microsoft/hcsshim/container.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,8 +1,10 @@
 | 
			
		||||
package hcsshim
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"context"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"os"
 | 
			
		||||
	"sync"
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
	"github.com/Microsoft/hcsshim/internal/hcs"
 | 
			
		||||
@@ -52,7 +54,10 @@ const (
 | 
			
		||||
type ResourceModificationRequestResponse = schema1.ResourceModificationRequestResponse
 | 
			
		||||
 | 
			
		||||
type container struct {
 | 
			
		||||
	system *hcs.System
 | 
			
		||||
	system   *hcs.System
 | 
			
		||||
	waitOnce sync.Once
 | 
			
		||||
	waitErr  error
 | 
			
		||||
	waitCh   chan struct{}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// createComputeSystemAdditionalJSON is read from the environment at initialisation
 | 
			
		||||
@@ -71,61 +76,87 @@ func CreateContainer(id string, c *ContainerConfig) (Container, error) {
 | 
			
		||||
		return nil, fmt.Errorf("failed to merge additional JSON '%s': %s", createContainerAdditionalJSON, err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	system, err := hcs.CreateComputeSystem(id, fullConfig)
 | 
			
		||||
	system, err := hcs.CreateComputeSystem(context.Background(), id, fullConfig)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	return &container{system}, err
 | 
			
		||||
	return &container{system: system}, err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// OpenContainer opens an existing container by ID.
 | 
			
		||||
func OpenContainer(id string) (Container, error) {
 | 
			
		||||
	system, err := hcs.OpenComputeSystem(id)
 | 
			
		||||
	system, err := hcs.OpenComputeSystem(context.Background(), id)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	return &container{system}, err
 | 
			
		||||
	return &container{system: system}, err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// GetContainers gets a list of the containers on the system that match the query
 | 
			
		||||
func GetContainers(q ComputeSystemQuery) ([]ContainerProperties, error) {
 | 
			
		||||
	return hcs.GetComputeSystems(q)
 | 
			
		||||
	return hcs.GetComputeSystems(context.Background(), q)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Start synchronously starts the container.
 | 
			
		||||
func (container *container) Start() error {
 | 
			
		||||
	return convertSystemError(container.system.Start(), container)
 | 
			
		||||
	return convertSystemError(container.system.Start(context.Background()), container)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Shutdown requests a container shutdown, but it may not actually be shutdown until Wait() succeeds.
 | 
			
		||||
func (container *container) Shutdown() error {
 | 
			
		||||
	return convertSystemError(container.system.Shutdown(), container)
 | 
			
		||||
	err := container.system.Shutdown(context.Background())
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return convertSystemError(err, container)
 | 
			
		||||
	}
 | 
			
		||||
	return &ContainerError{Container: container, Err: ErrVmcomputeOperationPending, Operation: "hcsshim::ComputeSystem::Shutdown"}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Terminate requests a container terminate, but it may not actually be terminated until Wait() succeeds.
 | 
			
		||||
func (container *container) Terminate() error {
 | 
			
		||||
	return convertSystemError(container.system.Terminate(), container)
 | 
			
		||||
	err := container.system.Terminate(context.Background())
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return convertSystemError(err, container)
 | 
			
		||||
	}
 | 
			
		||||
	return &ContainerError{Container: container, Err: ErrVmcomputeOperationPending, Operation: "hcsshim::ComputeSystem::Terminate"}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Waits synchronously waits for the container to shutdown or terminate.
 | 
			
		||||
func (container *container) Wait() error {
 | 
			
		||||
	return convertSystemError(container.system.Wait(), container)
 | 
			
		||||
	err := container.system.Wait()
 | 
			
		||||
	if err == nil {
 | 
			
		||||
		err = container.system.ExitError()
 | 
			
		||||
	}
 | 
			
		||||
	return convertSystemError(err, container)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// WaitTimeout synchronously waits for the container to terminate or the duration to elapse. It
 | 
			
		||||
// returns false if timeout occurs.
 | 
			
		||||
func (container *container) WaitTimeout(t time.Duration) error {
 | 
			
		||||
	return convertSystemError(container.system.WaitTimeout(t), container)
 | 
			
		||||
func (container *container) WaitTimeout(timeout time.Duration) error {
 | 
			
		||||
	container.waitOnce.Do(func() {
 | 
			
		||||
		container.waitCh = make(chan struct{})
 | 
			
		||||
		go func() {
 | 
			
		||||
			container.waitErr = container.Wait()
 | 
			
		||||
			close(container.waitCh)
 | 
			
		||||
		}()
 | 
			
		||||
	})
 | 
			
		||||
	t := time.NewTimer(timeout)
 | 
			
		||||
	defer t.Stop()
 | 
			
		||||
	select {
 | 
			
		||||
	case <-t.C:
 | 
			
		||||
		return &ContainerError{Container: container, Err: ErrTimeout, Operation: "hcsshim::ComputeSystem::Wait"}
 | 
			
		||||
	case <-container.waitCh:
 | 
			
		||||
		return container.waitErr
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Pause pauses the execution of a container.
 | 
			
		||||
func (container *container) Pause() error {
 | 
			
		||||
	return convertSystemError(container.system.Pause(), container)
 | 
			
		||||
	return convertSystemError(container.system.Pause(context.Background()), container)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Resume resumes the execution of a container.
 | 
			
		||||
func (container *container) Resume() error {
 | 
			
		||||
	return convertSystemError(container.system.Resume(), container)
 | 
			
		||||
	return convertSystemError(container.system.Resume(context.Background()), container)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// HasPendingUpdates returns true if the container has updates pending to install
 | 
			
		||||
@@ -135,7 +166,7 @@ func (container *container) HasPendingUpdates() (bool, error) {
 | 
			
		||||
 | 
			
		||||
// Statistics returns statistics for the container. This is a legacy v1 call
 | 
			
		||||
func (container *container) Statistics() (Statistics, error) {
 | 
			
		||||
	properties, err := container.system.Properties(schema1.PropertyTypeStatistics)
 | 
			
		||||
	properties, err := container.system.Properties(context.Background(), schema1.PropertyTypeStatistics)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return Statistics{}, convertSystemError(err, container)
 | 
			
		||||
	}
 | 
			
		||||
@@ -145,7 +176,7 @@ func (container *container) Statistics() (Statistics, error) {
 | 
			
		||||
 | 
			
		||||
// ProcessList returns an array of ProcessListItems for the container. This is a legacy v1 call
 | 
			
		||||
func (container *container) ProcessList() ([]ProcessListItem, error) {
 | 
			
		||||
	properties, err := container.system.Properties(schema1.PropertyTypeProcessList)
 | 
			
		||||
	properties, err := container.system.Properties(context.Background(), schema1.PropertyTypeProcessList)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, convertSystemError(err, container)
 | 
			
		||||
	}
 | 
			
		||||
@@ -155,7 +186,7 @@ func (container *container) ProcessList() ([]ProcessListItem, error) {
 | 
			
		||||
 | 
			
		||||
// This is a legacy v1 call
 | 
			
		||||
func (container *container) MappedVirtualDisks() (map[int]MappedVirtualDiskController, error) {
 | 
			
		||||
	properties, err := container.system.Properties(schema1.PropertyTypeMappedVirtualDisk)
 | 
			
		||||
	properties, err := container.system.Properties(context.Background(), schema1.PropertyTypeMappedVirtualDisk)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, convertSystemError(err, container)
 | 
			
		||||
	}
 | 
			
		||||
@@ -165,20 +196,20 @@ func (container *container) MappedVirtualDisks() (map[int]MappedVirtualDiskContr
 | 
			
		||||
 | 
			
		||||
// CreateProcess launches a new process within the container.
 | 
			
		||||
func (container *container) CreateProcess(c *ProcessConfig) (Process, error) {
 | 
			
		||||
	p, err := container.system.CreateProcess(c)
 | 
			
		||||
	p, err := container.system.CreateProcessNoStdio(c)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, convertSystemError(err, container)
 | 
			
		||||
	}
 | 
			
		||||
	return &process{p}, nil
 | 
			
		||||
	return &process{p: p.(*hcs.Process)}, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// OpenProcess gets an interface to an existing process within the container.
 | 
			
		||||
func (container *container) OpenProcess(pid int) (Process, error) {
 | 
			
		||||
	p, err := container.system.OpenProcess(pid)
 | 
			
		||||
	p, err := container.system.OpenProcess(context.Background(), pid)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, convertSystemError(err, container)
 | 
			
		||||
	}
 | 
			
		||||
	return &process{p}, nil
 | 
			
		||||
	return &process{p: p}, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Close cleans up any state associated with the container but does not terminate or wait for it.
 | 
			
		||||
@@ -188,5 +219,5 @@ func (container *container) Close() error {
 | 
			
		||||
 | 
			
		||||
// Modify the System
 | 
			
		||||
func (container *container) Modify(config *ResourceModificationRequestResponse) error {
 | 
			
		||||
	return convertSystemError(container.system.Modify(config), container)
 | 
			
		||||
	return convertSystemError(container.system.Modify(context.Background(), config), container)
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user