15112: Refuse to run if modified_at column has any nulls.
authorTom Clegg <tclegg@veritasgenetics.com>
Mon, 22 Apr 2019 07:06:18 +0000 (03:06 -0400)
committerTom Clegg <tclegg@veritasgenetics.com>
Mon, 22 Apr 2019 14:54:02 +0000 (10:54 -0400)
Arvados-DCO-1.1-Signed-off-by: Tom Clegg <tclegg@veritasgenetics.com>

services/keep-balance/balance.go
services/keep-balance/balance_run_test.go

index eff99b733035f3ae45d431a3c7d4b3eb6263290d..fd39ee693e2e64b6857e860b9bc63a8328ddf560 100644 (file)
@@ -206,6 +206,24 @@ func (bal *Balancer) CheckSanityEarly(c *arvados.Client) error {
                        return fmt.Errorf("config error: %s: proxy servers cannot be balanced", srv)
                }
        }
+
+       var checkPage arvados.CollectionList
+       if err = c.RequestAndDecode(&checkPage, "GET", "arvados/v1/collections", nil, arvados.ResourceListParams{
+               Limit:              new(int),
+               Count:              "exact",
+               IncludeTrash:       true,
+               IncludeOldVersions: true,
+               Filters: []arvados.Filter{{
+                       Attr:     "modified_at",
+                       Operator: "=",
+                       Operand:  nil,
+               }},
+       }); err != nil {
+               return err
+       } else if n := checkPage.ItemsAvailable; n > 0 {
+               return fmt.Errorf("%d collections exist with null modified_at; cannot fetch reliably", n)
+       }
+
        return nil
 }
 
index 7e2adcfedd4dc33b67ccae5301813cb531f6af9d..3b7e2db9afd313a69e699b1d46fcf9ef5b90ea49 100644 (file)
@@ -203,6 +203,8 @@ func (s *stubServer) serveCollectionsButSkipOne() *reqTracker {
                        io.WriteString(w, `{"items_available":0,"items":[]}`)
                } else if strings.Contains(r.Form.Get("filters"), `"modified_at","="`) && strings.Contains(r.Form.Get("filters"), `"uuid","\u003e"`) {
                        io.WriteString(w, `{"items_available":0,"items":[]}`)
+               } else if strings.Contains(r.Form.Get("filters"), `"modified_at","=",null`) {
+                       io.WriteString(w, `{"items_available":0,"items":[]}`)
                } else {
                        io.WriteString(w, `{"items_available":2,"items":[
                                {"uuid":"zzzzz-4zz18-ehbhgtheo8909or","portable_data_hash":"fa7aeb5140e2848d39b416daeef4ffc5+45","manifest_text":". 37b51d194a7513e45b56f6524f2d51f2+3 0:3:bar\n","modified_at":"2014-02-03T17:22:54Z"},