From d1aff26b4f7fd8f4516f90ba29595b5bc511cec9 Mon Sep 17 00:00:00 2001 From: Alex Dadgar Date: Sat, 20 Feb 2016 16:11:29 -0800 Subject: [PATCH] Add force node gc --- nomad/core_sched.go | 20 ++++++++++++++------ nomad/core_sched_test.go | 2 -- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/nomad/core_sched.go b/nomad/core_sched.go index 9c4cc4fa9..4fbe54e02 100644 --- a/nomad/core_sched.go +++ b/nomad/core_sched.go @@ -240,12 +240,20 @@ func (c *CoreScheduler) nodeGC(eval *structs.Evaluation) error { return err } - // Compute the old threshold limit for GC using the FSM - // time table. This is a rough mapping of a time to the - // Raft index it belongs to. - tt := c.srv.fsm.TimeTable() - cutoff := time.Now().UTC().Add(-1 * c.srv.config.NodeGCThreshold) - oldThreshold := tt.NearestIndex(cutoff) + var oldThreshold uint64 + if eval.TriggeredBy == structs.EvalTriggerForceGC { + // The GC was forced, so set the threshold to its maximum so everything + // will GC. + oldThreshold = math.MaxUint64 + c.srv.logger.Println("[DEBUG] sched.core: forced node GC") + } else { + // Compute the old threshold limit for GC using the FSM + // time table. This is a rough mapping of a time to the + // Raft index it belongs to. + tt := c.srv.fsm.TimeTable() + cutoff := time.Now().UTC().Add(-1 * c.srv.config.NodeGCThreshold) + oldThreshold = tt.NearestIndex(cutoff) + } c.srv.logger.Printf("[DEBUG] sched.core: node GC: scanning before index %d (%v)", oldThreshold, c.srv.config.NodeGCThreshold) diff --git a/nomad/core_sched_test.go b/nomad/core_sched_test.go index f5eefafd3..7ef97a510 100644 --- a/nomad/core_sched_test.go +++ b/nomad/core_sched_test.go @@ -190,7 +190,6 @@ func TestCoreScheduler_NodeGC_Force(t *testing.T) { // Attempt the GC gc := s1.forceCoreJobEval(structs.CoreJobNodeGC) - gc.ModifyIndex = 2000 err = core.Process(gc) if err != nil { t.Fatalf("err: %v", err) @@ -377,7 +376,6 @@ func TestCoreScheduler_JobGC_Force(t *testing.T) { // Attempt the GC gc := s1.forceCoreJobEval(structs.CoreJobJobGC) - gc.ModifyIndex = 2000 err = core.Process(gc) if err != nil { t.Fatalf("test(%s) err: %v", test.test, err)