projects
/
arvados.git
/ blobdiff
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
13111: Merge branch 'master' into 12308-go-fuse
[arvados.git]
/
services
/
crunch-run
/
crunchrun.go
diff --git
a/services/crunch-run/crunchrun.go
b/services/crunch-run/crunchrun.go
index 8d935604ee03e7b92c66421636a505d8dbcbbe95..a9f1c25d37fa1714868d371c245dc7aa8d041543 100644
(file)
--- a/
services/crunch-run/crunchrun.go
+++ b/
services/crunch-run/crunchrun.go
@@
-103,17
+103,16
@@
type ContainerRunner struct {
LogsPDH *string
RunArvMount
MkTempDir
LogsPDH *string
RunArvMount
MkTempDir
- ArvMount *exec.Cmd
- ArvMountPoint string
- HostOutputDir string
- CleanupTempDir []string
- Binds []string
- Volumes map[string]struct{}
- OutputPDH *string
- SigChan chan os.Signal
- ArvMountExit chan error
- finalState string
- parentTemp string
+ ArvMount *exec.Cmd
+ ArvMountPoint string
+ HostOutputDir string
+ Binds []string
+ Volumes map[string]struct{}
+ OutputPDH *string
+ SigChan chan os.Signal
+ ArvMountExit chan error
+ finalState string
+ parentTemp string
statLogger io.WriteCloser
statReporter *crunchstat.Reporter
statLogger io.WriteCloser
statReporter *crunchstat.Reporter
@@
-503,7
+502,6
@@
func (runner *ContainerRunner) SetupMounts() (err error) {
if staterr != nil {
return fmt.Errorf("While Chmod temp dir: %v", err)
}
if staterr != nil {
return fmt.Errorf("While Chmod temp dir: %v", err)
}
- runner.CleanupTempDir = append(runner.CleanupTempDir, tmpdir)
runner.Binds = append(runner.Binds, fmt.Sprintf("%s:%s", tmpdir, bind))
if bind == runner.Container.OutputPath {
runner.HostOutputDir = tmpdir
runner.Binds = append(runner.Binds, fmt.Sprintf("%s:%s", tmpdir, bind))
if bind == runner.Container.OutputPath {
runner.HostOutputDir = tmpdir
@@
-523,7
+521,6
@@
func (runner *ContainerRunner) SetupMounts() (err error) {
if err != nil {
return fmt.Errorf("creating temp dir: %v", err)
}
if err != nil {
return fmt.Errorf("creating temp dir: %v", err)
}
- runner.CleanupTempDir = append(runner.CleanupTempDir, tmpdir)
tmpfn := filepath.Join(tmpdir, "mountdata.json")
err = ioutil.WriteFile(tmpfn, jsondata, 0644)
if err != nil {
tmpfn := filepath.Join(tmpdir, "mountdata.json")
err = ioutil.WriteFile(tmpfn, jsondata, 0644)
if err != nil {
@@
-536,7
+533,6
@@
func (runner *ContainerRunner) SetupMounts() (err error) {
if err != nil {
return fmt.Errorf("creating temp dir: %v", err)
}
if err != nil {
return fmt.Errorf("creating temp dir: %v", err)
}
- runner.CleanupTempDir = append(runner.CleanupTempDir, tmpdir)
err = gitMount(mnt).extractTree(runner.ArvClient, tmpdir, token)
if err != nil {
return err
err = gitMount(mnt).extractTree(runner.ArvClient, tmpdir, token)
if err != nil {
return err
@@
-579,25
+575,37
@@
func (runner *ContainerRunner) SetupMounts() (err error) {
}
for _, cp := range copyFiles {
}
for _, cp := range copyFiles {
-
dir
, err := os.Stat(cp.src)
+
st
, err := os.Stat(cp.src)
if err != nil {
return fmt.Errorf("While staging writable file from %q to %q: %v", cp.src, cp.bind, err)
}
if err != nil {
return fmt.Errorf("While staging writable file from %q to %q: %v", cp.src, cp.bind, err)
}
- if
dir
.IsDir() {
+ if
st
.IsDir() {
err = filepath.Walk(cp.src, func(walkpath string, walkinfo os.FileInfo, walkerr error) error {
if walkerr != nil {
return walkerr
}
err = filepath.Walk(cp.src, func(walkpath string, walkinfo os.FileInfo, walkerr error) error {
if walkerr != nil {
return walkerr
}
+ target := path.Join(cp.bind, walkpath[len(cp.src):])
if walkinfo.Mode().IsRegular() {
if walkinfo.Mode().IsRegular() {
- return copyfile(walkpath, path.Join(cp.bind, walkpath[len(cp.src):]))
+ copyerr := copyfile(walkpath, target)
+ if copyerr != nil {
+ return copyerr
+ }
+ return os.Chmod(target, walkinfo.Mode()|0777)
} else if walkinfo.Mode().IsDir() {
} else if walkinfo.Mode().IsDir() {
- return os.MkdirAll(path.Join(cp.bind, walkpath[len(cp.src):]), 0777)
+ mkerr := os.MkdirAll(target, 0777)
+ if mkerr != nil {
+ return mkerr
+ }
+ return os.Chmod(target, walkinfo.Mode()|os.ModeSetgid|0777)
} else {
return fmt.Errorf("Source %q is not a regular file or directory", cp.src)
}
})
} else {
return fmt.Errorf("Source %q is not a regular file or directory", cp.src)
}
})
- } else {
+ } else
if st.Mode().IsRegular()
{
err = copyfile(cp.src, cp.bind)
err = copyfile(cp.src, cp.bind)
+ if err == nil {
+ err = os.Chmod(cp.bind, st.Mode()|0777)
+ }
}
if err != nil {
return fmt.Errorf("While staging writable file from %q to %q: %v", cp.src, cp.bind, err)
}
if err != nil {
return fmt.Errorf("While staging writable file from %q to %q: %v", cp.src, cp.bind, err)
@@
-1428,12
+1436,6
@@
func (runner *ContainerRunner) CleanupDirs() {
}
}
}
}
- for _, tmpdir := range runner.CleanupTempDir {
- if rmerr := os.RemoveAll(tmpdir); rmerr != nil {
- runner.CrunchLog.Printf("While cleaning up temporary directory %s: %v", tmpdir, rmerr)
- }
- }
-
if rmerr := os.RemoveAll(runner.parentTemp); rmerr != nil {
runner.CrunchLog.Printf("While cleaning up temporary directory %s: %v", runner.parentTemp, rmerr)
}
if rmerr := os.RemoveAll(runner.parentTemp); rmerr != nil {
runner.CrunchLog.Printf("While cleaning up temporary directory %s: %v", runner.parentTemp, rmerr)
}
@@
-1774,7
+1776,7
@@
func main() {
os.Exit(1)
}
os.Exit(1)
}
- parentTemp, tmperr := cr.MkTempDir("", "crunch-run")
+ parentTemp, tmperr := cr.MkTempDir("", "crunch-run
."+containerId+".
")
if tmperr != nil {
log.Fatalf("%s: %v", containerId, tmperr)
}
if tmperr != nil {
log.Fatalf("%s: %v", containerId, tmperr)
}