From fdaca8b1c797b47ae7e08f0a9624dc84a3be3c44 Mon Sep 17 00:00:00 2001 From: Tom Clegg Date: Tue, 27 Jul 2021 11:23:48 -0400 Subject: [PATCH] 17574: Add -update-confirmed-fields=false option. Arvados-DCO-1.1-Signed-off-by: Tom Clegg --- services/keep-balance/balance.go | 7 ++++++- services/keep-balance/balance_run_test.go | 5 +++++ services/keep-balance/integration_test.go | 7 ++++--- services/keep-balance/main.go | 11 +++++++---- services/keep-balance/server.go | 11 ++++++----- 5 files changed, 28 insertions(+), 13 deletions(-) diff --git a/services/keep-balance/balance.go b/services/keep-balance/balance.go index 6a71cf99f7..67021bef36 100644 --- a/services/keep-balance/balance.go +++ b/services/keep-balance/balance.go @@ -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 } diff --git a/services/keep-balance/balance_run_test.go b/services/keep-balance/balance_run_test.go index cbdde595e8..5e1c0e45c1 100644 --- a/services/keep-balance/balance_run_test.go +++ b/services/keep-balance/balance_run_test.go @@ -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:/") diff --git a/services/keep-balance/integration_test.go b/services/keep-balance/integration_test.go index 564e36a43e..1458fe4522 100644 --- a/services/keep-balance/integration_test.go +++ b/services/keep-balance/integration_test.go @@ -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{ diff --git a/services/keep-balance/main.go b/services/keep-balance/main.go index 80b1ed301f..93457fb827 100644 --- a/services/keep-balance/main.go +++ b/services/keep-balance/main.go @@ -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] { diff --git a/services/keep-balance/server.go b/services/keep-balance/server.go index b42fa23a3d..5299b96c1c 100644 --- a/services/keep-balance/server.go +++ b/services/keep-balance/server.go @@ -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, -- 2.30.2