X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/5dfd9a57f9d65ea91295e8502cf7f6e748fc4010..15a36415708345e2361741606cc0e06bbd9e40c6:/lib/crunchrun/crunchrun.go diff --git a/lib/crunchrun/crunchrun.go b/lib/crunchrun/crunchrun.go index 8627045411..0fe8237bc7 100644 --- a/lib/crunchrun/crunchrun.go +++ b/lib/crunchrun/crunchrun.go @@ -40,7 +40,6 @@ import ( "git.arvados.org/arvados.git/sdk/go/arvadosclient" "git.arvados.org/arvados.git/sdk/go/ctxlog" "git.arvados.org/arvados.git/sdk/go/keepclient" - "git.arvados.org/arvados.git/sdk/go/manifest" "golang.org/x/sys/unix" ) @@ -76,7 +75,6 @@ var ErrCancelled = errors.New("Cancelled") type IKeepClient interface { BlockWrite(context.Context, arvados.BlockWriteOptions) (arvados.BlockWriteResponse, error) ReadAt(locator string, p []byte, off int) (int, error) - ManifestFileReader(m manifest.Manifest, filename string) (arvados.File, error) LocalLocator(locator string) (string, error) SetStorageClasses(sc []string) } @@ -928,7 +926,7 @@ func (runner *ContainerRunner) getStdoutFile(mntPath string) (*os.File, error) { // CreateContainer creates the docker container. func (runner *ContainerRunner) CreateContainer(imageID string, bindmounts map[string]bindmount) error { - var stdin io.ReadCloser = ioutil.NopCloser(bytes.NewReader(nil)) + var stdin io.Reader if mnt, ok := runner.Container.Mounts["stdin"]; ok { switch mnt.Kind { case "collection": @@ -944,28 +942,35 @@ func (runner *ContainerRunner) CreateContainer(imageID string, bindmounts map[st return err } stdin = f + runner.executorStdin = f case "json": j, err := json.Marshal(mnt.Content) if err != nil { return fmt.Errorf("error encoding stdin json data: %v", err) } - stdin = ioutil.NopCloser(bytes.NewReader(j)) + stdin = bytes.NewReader(j) + runner.executorStdin = io.NopCloser(nil) default: return fmt.Errorf("stdin mount has unsupported kind %q", mnt.Kind) } + } else { + stdin = bytes.NewReader(nil) + runner.executorStdin = ioutil.NopCloser(nil) } - var stdout, stderr io.WriteCloser + var stdout, stderr io.Writer if mnt, ok := runner.Container.Mounts["stdout"]; ok { f, err := runner.getStdoutFile(mnt.Path) if err != nil { return err } stdout = f + runner.executorStdout = f } else if w, err := runner.openLogFile("stdout"); err != nil { return err } else { - stdout = w + stdout = newTimestamper(w) + runner.executorStdout = w } if mnt, ok := runner.Container.Mounts["stderr"]; ok { @@ -974,10 +979,12 @@ func (runner *ContainerRunner) CreateContainer(imageID string, bindmounts map[st return err } stderr = f + runner.executorStderr = f } else if w, err := runner.openLogFile("stderr"); err != nil { return err } else { - stderr = w + stderr = newTimestamper(w) + runner.executorStderr = w } env := runner.Container.Environment @@ -1006,9 +1013,6 @@ func (runner *ContainerRunner) CreateContainer(imageID string, bindmounts map[st if !runner.enableMemoryLimit { ram = 0 } - runner.executorStdin = stdin - runner.executorStdout = stdout - runner.executorStderr = stderr if runner.Container.RuntimeConstraints.CUDA.DeviceCount > 0 { nvidiaModprobe(runner.CrunchLog)