diff --git a/nomad/state/notify.go b/nomad/state/notify.go deleted file mode 100644 index 7a8a8d792..000000000 --- a/nomad/state/notify.go +++ /dev/null @@ -1,62 +0,0 @@ -package state - -import ( - "sync" -) - -// NotifyGroup is used to allow a simple notification mechanism. -// Channels can be marked as waiting, and when notify is invoked, -// all the waiting channels get a message and are cleared from the -// notify list. -type NotifyGroup struct { - l sync.Mutex - notify map[chan struct{}]struct{} -} - -// Notify will do a non-blocking send to all waiting channels, and -// clear the notify list -func (n *NotifyGroup) Notify() { - n.l.Lock() - defer n.l.Unlock() - for ch := range n.notify { - select { - case ch <- struct{}{}: - default: - } - } - n.notify = nil -} - -// Wait adds a channel to the notify group -func (n *NotifyGroup) Wait(ch chan struct{}) { - n.l.Lock() - defer n.l.Unlock() - if n.notify == nil { - n.notify = make(map[chan struct{}]struct{}) - } - n.notify[ch] = struct{}{} -} - -// Clear removes a channel from the notify group -func (n *NotifyGroup) Clear(ch chan struct{}) { - n.l.Lock() - defer n.l.Unlock() - if n.notify == nil { - return - } - delete(n.notify, ch) -} - -// WaitCh allocates a channel that is subscribed to notifications -func (n *NotifyGroup) WaitCh() chan struct{} { - ch := make(chan struct{}, 1) - n.Wait(ch) - return ch -} - -// Empty checks if there are no channels to notify -func (n *NotifyGroup) Empty() bool { - n.l.Lock() - defer n.l.Unlock() - return len(n.notify) == 0 -} diff --git a/nomad/state/notify_test.go b/nomad/state/notify_test.go deleted file mode 100644 index 34c14f46d..000000000 --- a/nomad/state/notify_test.go +++ /dev/null @@ -1,72 +0,0 @@ -package state - -import ( - "testing" -) - -func TestNotifyGroup(t *testing.T) { - grp := &NotifyGroup{} - - ch1 := grp.WaitCh() - ch2 := grp.WaitCh() - - select { - case <-ch1: - t.Fatalf("should block") - default: - } - select { - case <-ch2: - t.Fatalf("should block") - default: - } - - grp.Notify() - - select { - case <-ch1: - default: - t.Fatalf("should not block") - } - select { - case <-ch2: - default: - t.Fatalf("should not block") - } - - // Should be unregistered - ch3 := grp.WaitCh() - grp.Notify() - - select { - case <-ch1: - t.Fatalf("should block") - default: - } - select { - case <-ch2: - t.Fatalf("should block") - default: - } - select { - case <-ch3: - default: - t.Fatalf("should not block") - } -} - -func TestNotifyGroup_Clear(t *testing.T) { - grp := &NotifyGroup{} - - ch1 := grp.WaitCh() - grp.Clear(ch1) - - grp.Notify() - - // Should not get anything - select { - case <-ch1: - t.Fatalf("should not get message") - default: - } -}