From a723c591d1ca628180fe52ac7feb226582729363 Mon Sep 17 00:00:00 2001 From: Armon Dadgar Date: Thu, 23 Jul 2015 21:58:13 -0700 Subject: [PATCH] nomad: method to test if outstanding evaluation --- nomad/eval_broker.go | 8 ++++++++ nomad/eval_broker_test.go | 16 ++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/nomad/eval_broker.go b/nomad/eval_broker.go index 8507b1a0e..91b1163a0 100644 --- a/nomad/eval_broker.go +++ b/nomad/eval_broker.go @@ -281,6 +281,14 @@ func (b *EvalBroker) waitForSchedulers(schedulers []string, timeoutCh <-chan tim } } +// Outstanding checks if an EvalID has been delivered but not acknowledged +func (b *EvalBroker) Outstanding(evalID string) bool { + b.l.RLock() + defer b.l.RUnlock() + _, ok := b.unack[evalID] + return ok +} + // Ack is used to positively acknowledge handling an evaluation func (b *EvalBroker) Ack(evalID string) error { b.l.Lock() diff --git a/nomad/eval_broker_test.go b/nomad/eval_broker_test.go index 83f8cddfc..720cbf7dd 100644 --- a/nomad/eval_broker_test.go +++ b/nomad/eval_broker_test.go @@ -66,6 +66,10 @@ func TestEvalBroker_Enqueue_Dequeue_Nack_Ack(t *testing.T) { t.Fatalf("bad : %#v", out) } + if !b.Outstanding(out.ID) { + t.Fatalf("should be outstanding") + } + // Check the stats stats = b.Stats() if stats.TotalReady != 0 { @@ -87,6 +91,10 @@ func TestEvalBroker_Enqueue_Dequeue_Nack_Ack(t *testing.T) { t.Fatalf("err: %v", err) } + if b.Outstanding(out.ID) { + t.Fatalf("should not be outstanding") + } + // Check the stats stats = b.Stats() if stats.TotalReady != 1 { @@ -111,12 +119,20 @@ func TestEvalBroker_Enqueue_Dequeue_Nack_Ack(t *testing.T) { t.Fatalf("bad : %#v", out2) } + if !b.Outstanding(out.ID) { + t.Fatalf("should be outstanding") + } + // Ack finally err = b.Ack(eval.ID) if err != nil { t.Fatalf("err: %v", err) } + if b.Outstanding(out.ID) { + t.Fatalf("should not be outstanding") + } + // Check the stats stats = b.Stats() if stats.TotalReady != 0 {