[ARVADOS] created: 9d33e0c4f98da668b23b85c54d20d22fe4b0f342

Git user git at public.curoverse.com
Wed May 17 11:04:10 EDT 2017


        at  9d33e0c4f98da668b23b85c54d20d22fe4b0f342 (commit)


commit 9d33e0c4f98da668b23b85c54d20d22fe4b0f342
Author: Peter Amstutz <peter.amstutz at curoverse.com>
Date:   Wed May 17 11:04:06 2017 -0400

    11718: Update crunch-run for docker client API change in ContainerWait().

diff --git a/services/crunch-run/crunchrun.go b/services/crunch-run/crunchrun.go
index c56dbc5..de289dd 100644
--- a/services/crunch-run/crunchrun.go
+++ b/services/crunch-run/crunchrun.go
@@ -66,7 +66,7 @@ type ThinDockerClient interface {
 		networkingConfig *dockernetwork.NetworkingConfig, containerName string) (dockercontainer.ContainerCreateCreatedBody, error)
 	ContainerStart(ctx context.Context, container string, options dockertypes.ContainerStartOptions) error
 	ContainerStop(ctx context.Context, container string, timeout *time.Duration) error
-	ContainerWait(ctx context.Context, container string) (int64, error)
+	ContainerWait(ctx context.Context, container string, condition dockercontainer.WaitCondition) (<-chan dockercontainer.ContainerWaitOKBody, <-chan error)
 	ImageInspectWithRaw(ctx context.Context, image string) (dockertypes.ImageInspect, []byte, error)
 	ImageLoad(ctx context.Context, input io.Reader, quiet bool) (dockertypes.ImageLoadResponse, error)
 	ImageRemove(ctx context.Context, image string, options dockertypes.ImageRemoveOptions) ([]dockertypes.ImageDeleteResponseItem, error)
@@ -100,8 +100,8 @@ func (proxy ThinDockerClientProxy) ContainerStop(ctx context.Context, container
 }
 
 // ContainerWait invokes dockerclient.Client.ContainerWait
-func (proxy ThinDockerClientProxy) ContainerWait(ctx context.Context, container string) (int64, error) {
-	return proxy.Docker.ContainerWait(ctx, container)
+func (proxy ThinDockerClientProxy) ContainerWait(ctx context.Context, container string, condition dockercontainer.WaitCondition) (<-chan dockercontainer.ContainerWaitOKBody, <-chan error) {
+	return proxy.Docker.ContainerWait(ctx, container, condition)
 }
 
 // ImageInspectWithRaw invokes dockerclient.Client.ImageInspectWithRaw
@@ -862,21 +862,28 @@ func (runner *ContainerRunner) StartContainer() error {
 
 // WaitFinish waits for the container to terminate, capture the exit code, and
 // close the stdout/stderr logging.
-func (runner *ContainerRunner) WaitFinish() error {
+func (runner *ContainerRunner) WaitFinish() (err error) {
 	runner.CrunchLog.Print("Waiting for container to finish")
 
-	waitDocker, err := runner.Docker.ContainerWait(context.TODO(), runner.ContainerID)
+	waitOk, waitErr := runner.Docker.ContainerWait(context.TODO(), runner.ContainerID, "not-running")
+
+	var waitBody dockercontainer.ContainerWaitOKBody
+	select {
+	case waitBody = <-waitOk:
+	case err = <-waitErr:
+	}
+
 	if err != nil {
 		return fmt.Errorf("container wait: %v", err)
 	}
 
-	runner.CrunchLog.Printf("Container exited with code: %v", waitDocker)
-	code := int(waitDocker)
+	runner.CrunchLog.Printf("Container exited with code: %v", waitBody.StatusCode)
+	code := int(waitBody.StatusCode)
 	runner.ExitCode = &code
 
 	waitMount := runner.ArvMountExit
 	select {
-	case err := <-waitMount:
+	case err = <-waitMount:
 		runner.CrunchLog.Printf("arv-mount exited before container finished: %v", err)
 		waitMount = nil
 		runner.stop()
diff --git a/services/crunch-run/crunchrun_test.go b/services/crunch-run/crunchrun_test.go
index 37fe32a..8cefbed 100644
--- a/services/crunch-run/crunchrun_test.go
+++ b/services/crunch-run/crunchrun_test.go
@@ -139,8 +139,15 @@ func (t *TestDockerClient) ContainerStop(ctx context.Context, container string,
 	return nil
 }
 
-func (t *TestDockerClient) ContainerWait(ctx context.Context, container string) (int64, error) {
-	return int64(t.finish), nil
+func (t *TestDockerClient) ContainerWait(ctx context.Context, container string, condition dockercontainer.WaitCondition) (<-chan dockercontainer.ContainerWaitOKBody, <-chan error) {
+	body := make(chan dockercontainer.ContainerWaitOKBody)
+	err := make(chan error)
+	go func() {
+		body <- dockercontainer.ContainerWaitOKBody{StatusCode: int64(t.finish)}
+		close(body)
+		close(err)
+	}()
+	return body, err
 }
 
 func (t *TestDockerClient) ImageInspectWithRaw(ctx context.Context, image string) (dockertypes.ImageInspect, []byte, error) {

-----------------------------------------------------------------------


hooks/post-receive
-- 




More information about the arvados-commits mailing list