"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"
)
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)
}
// 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":
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 {
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
if !runner.enableMemoryLimit {
ram = 0
}
- runner.executorStdin = stdin
- runner.executorStdout = stdout
- runner.executorStderr = stderr
if runner.Container.RuntimeConstraints.CUDA.DeviceCount > 0 {
nvidiaModprobe(runner.CrunchLog)