From 77a75cdb34c5cb972605c76d9aeb151b243a051d Mon Sep 17 00:00:00 2001 From: YZ775 Date: Tue, 26 Mar 2024 02:28:23 +0000 Subject: [PATCH] change priorty of reboot queue cancel --- op/reboot_decide.go | 17 ++++++++++++++++- server/control.go | 2 ++ server/strategy.go | 6 ++++++ server/strategy_test.go | 9 +++++++-- 4 files changed, 31 insertions(+), 3 deletions(-) diff --git a/op/reboot_decide.go b/op/reboot_decide.go index 14e0bb7a..f1d7706b 100644 --- a/op/reboot_decide.go +++ b/op/reboot_decide.go @@ -245,7 +245,6 @@ func CheckRebootDequeue(ctx context.Context, c *cke.Cluster, rqEntries []*cke.Re for _, entry := range rqEntries { switch { case !entry.ClusterMember(c): - case entry.Status == cke.RebootStatusCancelled: case entry.Status == cke.RebootStatusRebooting && rebootCompleted(ctx, c, entry): default: continue @@ -257,6 +256,22 @@ func CheckRebootDequeue(ctx context.Context, c *cke.Cluster, rqEntries []*cke.Re return dequeued } +func CheckRebootCanceled(ctx context.Context, c *cke.Cluster, rqEntries []*cke.RebootQueueEntry) []*cke.RebootQueueEntry { + dequeued := []*cke.RebootQueueEntry{} + + for _, entry := range rqEntries { + switch { + case entry.Status == cke.RebootStatusCancelled: + default: + continue + } + + dequeued = append(dequeued, entry) + } + + return dequeued +} + func rebootCompleted(ctx context.Context, c *cke.Cluster, entry *cke.RebootQueueEntry) bool { if c.Reboot.CommandTimeoutSeconds != nil && *c.Reboot.CommandTimeoutSeconds != 0 { var cancel context.CancelFunc diff --git a/server/control.go b/server/control.go index 0125ca1e..e1ac24d9 100644 --- a/server/control.go +++ b/server/control.go @@ -346,6 +346,7 @@ func (c Controller) runOnce(ctx context.Context, leaderKey string, tick <-chan t newlyDrained := op.ChooseDrainedNodes(cluster, apiServers, rqEntries) drainCompleted, drainTimedout, _ := op.CheckDrainCompletion(ctx, inf, nf.HealthyAPIServer(), cluster, rqEntries) rebootDequeued := op.CheckRebootDequeue(ctx, cluster, rqEntries) + RebootCanceled := op.CheckRebootCanceled(ctx, cluster, rqEntries) ops, phase := DecideOps(cluster, status, constraints, rcs, DecideOpsRebootArgs{ RQEntries: rqEntries, @@ -353,6 +354,7 @@ func (c Controller) runOnce(ctx context.Context, leaderKey string, tick <-chan t DrainCompleted: drainCompleted, DrainTimedout: drainTimedout, RebootDequeued: rebootDequeued, + RebootCanceled: RebootCanceled, }, c.config) st := &cke.ServerStatus{ diff --git a/server/strategy.go b/server/strategy.go index 9bd38970..f5bef21e 100644 --- a/server/strategy.go +++ b/server/strategy.go @@ -22,6 +22,7 @@ type DecideOpsRebootArgs struct { DrainCompleted []*cke.RebootQueueEntry DrainTimedout []*cke.RebootQueueEntry RebootDequeued []*cke.RebootQueueEntry + RebootCanceled []*cke.RebootQueueEntry } // DecideOps returns the next operations to do and the operation phase. @@ -883,6 +884,11 @@ func rebootOps(c *cke.Cluster, constraints *cke.Constraints, rebootArgs DecideOp return nil, false } + if len(rebootArgs.RebootCanceled) > 0 { + phaseReboot = true + ops = append(ops, op.RebootDequeueOp(rebootArgs.RebootCanceled)) + return ops, phaseReboot + } if len(rebootArgs.NewlyDrained) > 0 { phaseReboot = true sshCheckNodes := make([]*cke.Node, 0, len(nf.cluster.Nodes)) diff --git a/server/strategy_test.go b/server/strategy_test.go index 77615847..52ac7f51 100644 --- a/server/strategy_test.go +++ b/server/strategy_test.go @@ -658,6 +658,11 @@ func (d testData) withRebootDequeued(entries []*cke.RebootQueueEntry) testData { return d } +func (d testData) withRebootCanceled(entries []*cke.RebootQueueEntry) testData { + d.RebootArgs.RebootCanceled = entries + return d +} + func (d testData) withDisableProxy() testData { d.Cluster.Options.Proxy.Disable = true return d @@ -1274,7 +1279,7 @@ func TestDecideOps(t *testing.T) { Node: nodeNames[2], Status: cke.RebootStatusCancelled, }, - }).withRebootDequeued([]*cke.RebootQueueEntry{ + }).withRebootCanceled([]*cke.RebootQueueEntry{ { Index: 1, Node: nodeNames[2], @@ -2700,7 +2705,7 @@ func TestDecideOps(t *testing.T) { Node: nodeNames[4], Status: cke.RebootStatusCancelled, }, - }).withRebootDequeued([]*cke.RebootQueueEntry{ + }).withRebootCanceled([]*cke.RebootQueueEntry{ { Index: 1, Node: nodeNames[4],