diff --git a/consul/tombstone_gc.go b/consul/tombstone_gc.go index e8e003255c..0d0da74ada 100644 --- a/consul/tombstone_gc.go +++ b/consul/tombstone_gc.go @@ -102,6 +102,13 @@ func (t *TombstoneGC) Hint(index uint64) { } } +// PendingExpiration is used to check if any expirations are pending +func (t *TombstoneGC) PendingExpiration() bool { + t.expiresLock.Lock() + defer t.expiresLock.Unlock() + return len(t.expires) > 0 +} + // nextExpires is used to calculate the next experation time func (t *TombstoneGC) nextExpires() time.Time { expires := time.Now().Add(t.ttl) diff --git a/consul/tombstone_gc_test.go b/consul/tombstone_gc_test.go index 6f87467343..6a425a5965 100644 --- a/consul/tombstone_gc_test.go +++ b/consul/tombstone_gc_test.go @@ -30,6 +30,10 @@ func TestTombstoneGC(t *testing.T) { t.Fatalf("should fail") } + if gc.PendingExpiration() { + t.Fatalf("should not be pending") + } + start := time.Now() gc.Hint(100) @@ -38,6 +42,10 @@ func TestTombstoneGC(t *testing.T) { gc.Hint(120) gc.Hint(125) + if !gc.PendingExpiration() { + t.Fatalf("should be pending") + } + select { case index := <-gc.ExpireCh(): end := time.Now() @@ -75,9 +83,17 @@ func TestTombstoneGC_Expire(t *testing.T) { t.Fatalf("should fail") } + if gc.PendingExpiration() { + t.Fatalf("should not be pending") + } + gc.Hint(100) gc.Reset() + if gc.PendingExpiration() { + t.Fatalf("should not be pending") + } + select { case <-gc.ExpireCh(): t.Fatalf("shoudl be reset")