17574: Add -update-confirmed-fields=false option.
authorTom Clegg <tom@curii.com>
Tue, 27 Jul 2021 15:23:48 +0000 (11:23 -0400)
committerTom Clegg <tom@curii.com>
Tue, 27 Jul 2021 15:23:48 +0000 (11:23 -0400)
Arvados-DCO-1.1-Signed-off-by: Tom Clegg <tom@curii.com>

services/keep-balance/balance.go
services/keep-balance/balance_run_test.go
services/keep-balance/integration_test.go
services/keep-balance/main.go
services/keep-balance/server.go

index 6a71cf99f71e6431e9803e9d82e270da511949a7..67021bef36b0da7247a4ca32ea74e79234bc0311 100644 (file)
@@ -173,7 +173,12 @@ func (bal *Balancer) Run(client *arvados.Client, cluster *arvados.Cluster, runOp
                        return
                }
        }
-       err = bal.updateCollections(ctx, client, cluster)
+       if runOptions.CommitConfirmedFields {
+               err = bal.updateCollections(ctx, client, cluster)
+               if err != nil {
+                       return
+               }
+       }
        return
 }
 
index cbdde595e8b4b797c70422ae71a5dc7affb33dcf..5e1c0e45c17fc6ec13fa47f69c8c48bf4f3041ef 100644 (file)
@@ -21,6 +21,7 @@ import (
        "git.arvados.org/arvados.git/sdk/go/arvados"
        "git.arvados.org/arvados.git/sdk/go/arvadostest"
        "git.arvados.org/arvados.git/sdk/go/ctxlog"
+       "github.com/jmoiron/sqlx"
        "github.com/prometheus/client_golang/prometheus"
        "github.com/prometheus/common/expfmt"
        check "gopkg.in/check.v1"
@@ -309,6 +310,7 @@ func (s *stubServer) serveKeepstorePull() *reqTracker {
 type runSuite struct {
        stub   stubServer
        config *arvados.Cluster
+       db     *sqlx.DB
        client *arvados.Client
 }
 
@@ -320,6 +322,7 @@ func (s *runSuite) newServer(options *RunOptions) *Server {
                Metrics:    newMetrics(prometheus.NewRegistry()),
                Logger:     options.Logger,
                Dumper:     options.Dumper,
+               DB:         s.db,
        }
        return srv
 }
@@ -329,6 +332,8 @@ func (s *runSuite) SetUpTest(c *check.C) {
        c.Assert(err, check.Equals, nil)
        s.config, err = cfg.GetCluster("")
        c.Assert(err, check.Equals, nil)
+       s.db, err = sqlx.Open("postgres", s.config.PostgreSQL.Connection.String())
+       c.Assert(err, check.IsNil)
 
        s.config.Collections.BalancePeriod = arvados.Duration(time.Second)
        arvadostest.SetServiceURL(&s.config.Services.Keepbalance, "http://localhost:/")
index 564e36a43e0c5a160f8a20b8ef687f77885f528f..1458fe452285db61db856dbaaf46a38f944869f2 100644 (file)
@@ -88,9 +88,10 @@ func (s *integrationSuite) TestBalanceAPIFixtures(c *check.C) {
                logger := logrus.New()
                logger.Out = io.MultiWriter(&logBuf, os.Stderr)
                opts := RunOptions{
-                       CommitPulls: true,
-                       CommitTrash: true,
-                       Logger:      logger,
+                       CommitPulls:           true,
+                       CommitTrash:           true,
+                       CommitConfirmedFields: true,
+                       Logger:                logger,
                }
 
                bal := &Balancer{
index 80b1ed301f7c7b632734d34de57fc0daeea9b0e8..93457fb827483143ac67184dcc31946571775768 100644 (file)
@@ -36,6 +36,8 @@ func runCommand(prog string, args []string, stdin io.Reader, stdout, stderr io.W
                "send pull requests (make more replicas of blocks that are underreplicated or are not in optimal rendezvous probe order)")
        flags.BoolVar(&options.CommitTrash, "commit-trash", false,
                "send trash requests (delete unreferenced old blocks, and excess replicas of overreplicated blocks)")
+       flags.BoolVar(&options.CommitConfirmedFields, "commit-confirmed-fields", true,
+               "update collection fields (replicas_confirmed, storage_classes_confirmed, etc.)")
        flags.Bool("version", false, "Write version information to stdout and exit 0")
        dumpFlag := flags.Bool("dump", false, "dump details for each block to stdout")
 
@@ -56,10 +58,11 @@ func runCommand(prog string, args []string, stdin io.Reader, stdout, stderr io.W
        // service.Command
        args = nil
        dropFlag := map[string]bool{
-               "once":         true,
-               "commit-pulls": true,
-               "commit-trash": true,
-               "dump":         true,
+               "once":                    true,
+               "commit-pulls":            true,
+               "commit-trash":            true,
+               "commit-confirmed-fields": true,
+               "dump":                    true,
        }
        flags.Visit(func(f *flag.Flag) {
                if !dropFlag[f.Name] {
index b42fa23a3d8980e3d277621e15901e444a2c02ca..5299b96c1caf2ac3aaa28c639e71d501ddbbd637 100644 (file)
@@ -24,11 +24,12 @@ import (
 //
 // RunOptions fields are controlled by command line flags.
 type RunOptions struct {
-       Once        bool
-       CommitPulls bool
-       CommitTrash bool
-       Logger      logrus.FieldLogger
-       Dumper      logrus.FieldLogger
+       Once                  bool
+       CommitPulls           bool
+       CommitTrash           bool
+       CommitConfirmedFields bool
+       Logger                logrus.FieldLogger
+       Dumper                logrus.FieldLogger
 
        // SafeRendezvousState from the most recent balance operation,
        // or "" if unknown. If this changes from one run to the next,