17574: Confirm storage classes as [] when replication is 0.
authorTom Clegg <tom@tomclegg.ca>
Tue, 3 Aug 2021 20:42:04 +0000 (16:42 -0400)
committerTom Clegg <tom@tomclegg.ca>
Tue, 3 Aug 2021 20:42:04 +0000 (16:42 -0400)
Arvados-DCO-1.1-Signed-off-by: Tom Clegg <tom@curii.com>

services/keep-balance/collection.go
services/keep-balance/integration_test.go

index 1da3ec4415946bea6e3176f6746a2229a5017443..1e1e51abe7ebcd55e5d0ed7ca55eae02a8b56504 100644 (file)
@@ -199,10 +199,13 @@ func (bal *Balancer) updateCollections(ctx context.Context, c *arvados.Client, c
                                        // temporarily.
                                        repl = desired
                                }
-                               classes, err := json.Marshal(coll.StorageClassesDesired)
-                               if err != nil {
-                                       bal.logf("BUG? json.Marshal(%v) failed: %s", classes, err)
-                                       continue
+                               classes := emptyJSONArray
+                               if repl > 0 {
+                                       classes, err = json.Marshal(coll.StorageClassesDesired)
+                                       if err != nil {
+                                               bal.logf("BUG? json.Marshal(%v) failed: %s", classes, err)
+                                               continue
+                                       }
                                }
                                needUpdate := coll.ReplicationConfirmed == nil || *coll.ReplicationConfirmed != repl || len(coll.StorageClassesConfirmed) != len(coll.StorageClassesDesired)
                                for i := range coll.StorageClassesDesired {
@@ -259,3 +262,5 @@ func goSendErr(errs chan<- error, f func() error) {
                }
        }()
 }
+
+var emptyJSONArray = []byte("[]")
index 3ddcb159d8ac84737354b7c1c400a853accc7e1b..52e6149158253bdff24705dcb8b6fb7a00f8cb02 100644 (file)
@@ -118,10 +118,10 @@ func (s *integrationSuite) TestBalanceAPIFixtures(c *check.C) {
                repl    int
                classes []string
        }{
-               {arvadostest.EmptyCollectionUUID, 0, []string{"default"}},
+               {arvadostest.EmptyCollectionUUID, 0, []string{}},
                {arvadostest.FooCollection, 2, []string{"default"}},                                // "foo" blk
                {arvadostest.StorageClassesDesiredDefaultConfirmedDefault, 2, []string{"default"}}, // "bar" blk
-               {arvadostest.StorageClassesDesiredArchiveConfirmedDefault, 0, []string{"archive"}}, // "bar" blk
+               {arvadostest.StorageClassesDesiredArchiveConfirmedDefault, 0, []string{}},          // "bar" blk
        } {
                c.Logf("%#v", trial)
                var coll arvados.Collection