X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/284a9a5515af712aff787ecc141d45c888fcef66..91ebfb6d3812313dfa13caa75a6e5fb426c0d519:/services/keep-balance/collection.go diff --git a/services/keep-balance/collection.go b/services/keep-balance/collection.go index 1da3ec4415..d7a3fd981d 100644 --- a/services/keep-balance/collection.go +++ b/services/keep-balance/collection.go @@ -2,7 +2,7 @@ // // SPDX-License-Identifier: AGPL-3.0 -package main +package keepbalance import ( "context" @@ -152,7 +152,7 @@ func (bal *Balancer) updateCollections(ctx context.Context, c *arvados.Client, c // Use about 1 goroutine per 2 CPUs. Based on experiments with // a 2-core host, using more concurrent database // calls/transactions makes this process slower, not faster. - for i := 0; i < runtime.NumCPU()+1/2; i++ { + for i := 0; i < (runtime.NumCPU()+1)/2; i++ { wg.Add(1) goSendErr(errs, func() error { defer wg.Done() @@ -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("[]")