18790: Don't retry unless we know the container exists.
authorTom Clegg <tom@curii.com>
Wed, 5 Apr 2023 18:05:15 +0000 (14:05 -0400)
committerTom Clegg <tom@curii.com>
Wed, 5 Apr 2023 18:05:15 +0000 (14:05 -0400)
Arvados-DCO-1.1-Signed-off-by: Tom Clegg <tom@curii.com>

cmd/arvados-client/container_gateway.go

index f23252169f6397ccd58b66dab1fd96bdfee6c776..f4d0e1e4b59d7a1ba08bed404f1b788528e3c1c3 100644 (file)
@@ -80,6 +80,8 @@ func (lc *logsCommand) tailf(target string, stdout, stderr io.Writer, pollInterv
                size = map[string]int64{}
                // exit after fetching next log chunk
                containerFinished = false
+               // has anything worked? (if so, retry after errors)
+               anySuccess = false
        )
 
 poll:
@@ -91,6 +93,9 @@ poll:
                for _, fnm := range watching {
                        currentsize, _, err := lc.copyRange(ctx, ctrUUID, fnm, "0-0", nil)
                        if err != nil {
+                               if !anySuccess {
+                                       return err
+                               }
                                fmt.Fprintln(stderr, err)
                                delay = pollInterval
                                continue poll
@@ -119,7 +124,10 @@ poll:
                                if err != nil {
                                        fmt.Fprintln(stderr, err)
                                }
-                               mark[fnm] += n
+                               if n > 0 {
+                                       mark[fnm] += n
+                                       anySuccess = true
+                               }
                        }
                }
                checkState := lc.display(stdout, stderr, watching, newData)
@@ -156,6 +164,9 @@ poll:
                        }
                        ctr, err := rpcconn.ContainerGet(ctx, arvados.GetOptions{UUID: ctrUUID, Select: []string{"state"}})
                        if err != nil {
+                               if !anySuccess {
+                                       return err
+                               }
                                fmt.Fprintln(stderr, err)
                                delay = pollInterval
                                continue