From 4c9e497174af811962b8ac96cf703d6214a792a5 Mon Sep 17 00:00:00 2001 From: secwall Date: Mon, 20 Apr 2026 09:15:14 +0200 Subject: [PATCH] Simplify active nodes update --- internal/app/active_nodes.go | 24 +++++++++++++----------- internal/app/repair.go | 2 +- 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/internal/app/active_nodes.go b/internal/app/active_nodes.go index 7dec164..34b52e8 100644 --- a/internal/app/active_nodes.go +++ b/internal/app/active_nodes.go @@ -64,17 +64,17 @@ func (app *App) actualizeQuorumReplicas(master string, activeNodes []string) err func (app *App) updateActiveNodes(state, stateDcs map[string]*HostState, oldActiveNodes []string, master string) error { activeNodes := app.calcActiveNodes(state, stateDcs, oldActiveNodes, master) - var addNodes []string + removingNodes := false - for _, node := range activeNodes { - if !slices.Contains(oldActiveNodes, node) { - addNodes = append(addNodes, node) + for _, node := range oldActiveNodes { + if !slices.Contains(activeNodes, node) { + removingNodes = true + break } } - if len(addNodes) > 0 { - addNodes = append(addNodes, oldActiveNodes...) - err := app.dcs.Set(pathActiveNodes, addNodes) + if removingNodes { + err := app.dcs.Set(pathActiveNodes, activeNodes) if err != nil { app.logger.Error("Update active nodes: failed to update active nodes in dcs", slog.Any("error", err)) return err @@ -87,10 +87,12 @@ func (app *App) updateActiveNodes(state, stateDcs map[string]*HostState, oldActi return err } - err = app.dcs.Set(pathActiveNodes, activeNodes) - if err != nil { - app.logger.Error("Update active nodes: failed to update active nodes in dcs", slog.Any("error", err)) - return err + if !removingNodes { + err := app.dcs.Set(pathActiveNodes, activeNodes) + if err != nil { + app.logger.Error("Update active nodes: failed to update active nodes in dcs", slog.Any("error", err)) + return err + } } return nil } diff --git a/internal/app/repair.go b/internal/app/repair.go index 603b5a5..00228b5 100644 --- a/internal/app/repair.go +++ b/internal/app/repair.go @@ -70,7 +70,7 @@ func (app *App) repairMaster(node *valkey.Node, activeNodes []string, state *Hos app.logger.Error("Unable to get actual num quorum replicas on master", slog.String("fqdn", node.FQDN()), slog.Any("error", err)) return } - if actualNumReplicas != expectedNumReplicas { + if expectedNumReplicas > actualNumReplicas { app.logger.Info(fmt.Sprintf("Changing num quorum replicas from %d to %d on master", actualNumReplicas, expectedNumReplicas), slog.String("fqdn", node.FQDN())) err, rewriteErr := node.SetNumQuorumReplicas(app.ctx, expectedNumReplicas) if err != nil {