8015: Fix tests again for endianness of Docker logs, added --read-write to arv-mount...
authorPeter Amstutz <peter.amstutz@curoverse.com>
Tue, 16 Feb 2016 18:28:20 +0000 (13:28 -0500)
committerPeter Amstutz <peter.amstutz@curoverse.com>
Tue, 16 Feb 2016 18:28:20 +0000 (13:28 -0500)
services/crunch-run/crunchrun.go
services/crunch-run/crunchrun_test.go
services/crunch-run/logging.go
services/crunch-run/logging_test.go
services/crunch-run/upload_test.go

index 2dbe9864c0f635a595a9128f21e1f6ba884e6597..64f0d77b7eb948d64f7ba8344153827408307a55 100644 (file)
@@ -243,7 +243,7 @@ func (runner *ContainerRunner) SetupMounts() (err error) {
 
        pdhOnly := true
        tmpcount := 0
-       arvMountCmd := []string{"--foreground", "--allow-other"}
+       arvMountCmd := []string{"--foreground", "--allow-other", "--read-write"}
        collectionPaths := []string{}
        runner.Binds = nil
 
@@ -289,7 +289,7 @@ func (runner *ContainerRunner) SetupMounts() (err error) {
                                if staterr != nil {
                                        return fmt.Errorf("While Stat on temp dir: %v", staterr)
                                }
-                               err = os.Chmod(runner.HostOutputDir, st.Mode()|os.ModeSetgid)
+                               err = os.Chmod(runner.HostOutputDir, st.Mode()|os.ModeSetgid|0777)
                                if staterr != nil {
                                        return fmt.Errorf("While Chmod temp dir: %v", err)
                                }
@@ -338,7 +338,7 @@ func (runner *ContainerRunner) ProcessDockerAttach(containerReader io.Reader) {
                _, readerr := io.ReadAtLeast(containerReader, header, 8)
 
                if readerr == nil {
-                       readsize := int64(header[4]) | (int64(header[5]) << 8) | (int64(header[6]) << 16) | (int64(header[7]) << 24)
+                       readsize := int64(header[7]) | (int64(header[6]) << 8) | (int64(header[5]) << 16) | (int64(header[4]) << 24)
                        if header[0] == 1 {
                                // stdout
                                _, readerr = io.CopyN(runner.Stdout, containerReader, readsize)
@@ -600,6 +600,13 @@ func (runner *ContainerRunner) NewArvLogWriter(name string) io.WriteCloser {
 func (runner *ContainerRunner) Run() (err error) {
        runner.CrunchLog.Printf("Executing container '%s'", runner.ContainerRecord.UUID)
 
+       hostname, hosterr := os.Hostname()
+       if hosterr != nil {
+               runner.CrunchLog.Printf("Error getting hostname '%v'", hosterr)
+       } else {
+               runner.CrunchLog.Printf("Executing on host '%s'", runner.ContainerRecord.UUID, hostname)
+       }
+
        var runerr, waiterr error
 
        defer func() {
@@ -706,36 +713,39 @@ func NewContainerRunner(api IArvadosClient,
        cr.LogCollection = &CollectionWriter{kc, nil, sync.Mutex{}}
        cr.ContainerRecord.UUID = containerUUID
        cr.CrunchLog = NewThrottledLogger(cr.NewLogWriter("crunch-run"))
+       cr.CrunchLog.Immediate = log.New(os.Stderr, containerUUID+" ", 0)
        return cr
 }
 
 func main() {
        flag.Parse()
 
+       containerId := flag.Arg(0)
+
        api, err := arvadosclient.MakeArvadosClient()
        if err != nil {
-               log.Fatalf("%s: %v", flag.Arg(0), err)
+               log.Fatalf("%s: %v", containerId, err)
        }
        api.Retries = 8
 
        var kc *keepclient.KeepClient
        kc, err = keepclient.MakeKeepClient(&api)
        if err != nil {
-               log.Fatalf("%s: %v", flag.Arg(0), err)
+               log.Fatalf("%s: %v", containerId, err)
        }
        kc.Retries = 4
 
        var docker *dockerclient.DockerClient
        docker, err = dockerclient.NewDockerClient("unix:///var/run/docker.sock", nil)
        if err != nil {
-               log.Fatalf("%s: %v", flag.Arg(0), err)
+               log.Fatalf("%s: %v", containerId, err)
        }
 
-       cr := NewContainerRunner(api, kc, docker, flag.Arg(0))
+       cr := NewContainerRunner(api, kc, docker, containerId)
 
        err = cr.Run()
        if err != nil {
-               log.Fatalf("%s: %v", flag.Arg(0), err)
+               log.Fatalf("%s: %v", containerId, err)
        }
 
 }
index 6569df17719de6837d13369bcb7df2e1bc6760bc..bf75e7f0eab2e539f97744f2315b9130ff4fa48f 100644 (file)
@@ -355,7 +355,7 @@ func dockerLog(fd byte, msg string) []byte {
        by := []byte(msg)
        header := make([]byte, 8+len(by))
        header[0] = fd
-       header[4] = byte(len(by))
+       header[7] = byte(len(by))
        copy(header[8:], by)
        return header
 }
@@ -681,7 +681,7 @@ func (s *TestSuite) TestSetupMounts(c *C) {
 
                err := cr.SetupMounts()
                c.Check(err, IsNil)
-               c.Check(am.Cmd, DeepEquals, []string{"--foreground", "--allow-other", "--mount-by-pdh", "by_id", "/tmp/mktmpdir1"})
+               c.Check(am.Cmd, DeepEquals, []string{"--foreground", "--allow-other", "--read-write", "--mount-by-pdh", "by_id", "/tmp/mktmpdir1"})
                c.Check(cr.Binds, DeepEquals, []string{"/tmp/mktmpdir2:/tmp"})
                cr.CleanupDirs()
        }
@@ -696,7 +696,7 @@ func (s *TestSuite) TestSetupMounts(c *C) {
 
                err := cr.SetupMounts()
                c.Check(err, IsNil)
-               c.Check(am.Cmd, DeepEquals, []string{"--foreground", "--allow-other", "--mount-tmp", "tmp0", "--mount-by-pdh", "by_id", "/tmp/mktmpdir1"})
+               c.Check(am.Cmd, DeepEquals, []string{"--foreground", "--allow-other", "--read-write", "--mount-tmp", "tmp0", "--mount-by-pdh", "by_id", "/tmp/mktmpdir1"})
                c.Check(cr.Binds, DeepEquals, []string{"/tmp/mktmpdir1/tmp0:/keeptmp"})
                cr.CleanupDirs()
        }
@@ -713,7 +713,7 @@ func (s *TestSuite) TestSetupMounts(c *C) {
 
                err := cr.SetupMounts()
                c.Check(err, IsNil)
-               c.Check(am.Cmd, DeepEquals, []string{"--foreground", "--allow-other", "--mount-tmp", "tmp0", "--mount-by-pdh", "by_id", "/tmp/mktmpdir1"})
+               c.Check(am.Cmd, DeepEquals, []string{"--foreground", "--allow-other", "--read-write", "--mount-tmp", "tmp0", "--mount-by-pdh", "by_id", "/tmp/mktmpdir1"})
                var ss sort.StringSlice = cr.Binds
                ss.Sort()
                c.Check(cr.Binds, DeepEquals, []string{"/tmp/mktmpdir1/by_id/59389a8f9ee9d399be35462a0f92541c+53:/keepinp:ro",
index 09b328a3cbdcfaeaed8fe44a579ca5b995ff2fa3..20928dbef769b0d4dd419ec0f8693541c93ba369 100644 (file)
@@ -35,6 +35,7 @@ type ThrottledLogger struct {
        stop        bool
        flusherDone chan bool
        Timestamper
+       Immediate *log.Logger
 }
 
 // RFC3339Fixed is a fixed-width version of RFC3339 with microsecond precision,
@@ -59,6 +60,9 @@ func (tl *ThrottledLogger) Write(p []byte) (n int, err error) {
        sc := bufio.NewScanner(bytes.NewBuffer(p))
        for sc.Scan() {
                _, err = fmt.Fprintf(tl.buf, "%s %s\n", now, sc.Text())
+               if tl.Immediate != nil {
+                       tl.Immediate.Printf("%s %s\n", now, sc.Text())
+               }
        }
        return len(p), err
 }
index 9b07d32543a95213bb76db71a0a2da4e24c1899e..bce324d478571aefe0dddf0a0647199a3f0fc1e4 100644 (file)
@@ -50,6 +50,7 @@ func (s *LoggingTestSuite) TestWriteLogsLarge(c *C) {
        kc := &KeepTestClient{}
        cr := NewContainerRunner(api, kc, nil, "zzzzz-zzzzzzzzzzzzzzz")
        cr.CrunchLog.Timestamper = (&TestTimestamper{}).Timestamp
+       cr.CrunchLog.Immediate = nil
 
        for i := 0; i < 2000000; i += 1 {
                cr.CrunchLog.Printf("Hello %d", i)
index d66d9de36398ba90d0b670d33d4b7621b859da06..b4b1efd1079ce60b827c4c23797b4804872c05eb 100644 (file)
@@ -58,9 +58,16 @@ func (s *TestSuite) TestSimpleUploadSubdir(c *C) {
        str, err := cw.WriteTree(tmpdir, log.New(os.Stdout, "", 0))
 
        c.Check(err, IsNil)
-       c.Check(str, Equals, `. acbd18db4cc2f85cedef654fccc4a4d8+3 0:3:file1.txt
+
+       // streams can get added in either order because of scheduling
+       // of goroutines.
+       if str != `. acbd18db4cc2f85cedef654fccc4a4d8+3 0:3:file1.txt
 ./subdir 37b51d194a7513e45b56f6524f2d51f2+3 0:3:file2.txt
-`)
+` && str != `./subdir 37b51d194a7513e45b56f6524f2d51f2+3 0:3:file2.txt
+. acbd18db4cc2f85cedef654fccc4a4d8+3 0:3:file1.txt
+` {
+               c.Error("Did not get expected manifest text")
+       }
 }
 
 func (s *TestSuite) TestSimpleUploadLarge(c *C) {