diff --git a/zk/lock.go b/zk/lock.go index 3c35a427..c626a6d7 100644 --- a/zk/lock.go +++ b/zk/lock.go @@ -148,3 +148,10 @@ func (l *Lock) Unlock() error { l.seq = 0 return nil } + +// SequenceNumber returns the sequence number generated by zookeeper which is +// unique to the current lock acquisition. This function should only be called +// once a lock has been acquired and not after it has been released +func (l *Lock) SequenceNumber() int { + return l.seq +} diff --git a/zk/lock_test.go b/zk/lock_test.go index 8a3478a3..a7bc96d4 100644 --- a/zk/lock_test.go +++ b/zk/lock_test.go @@ -23,6 +23,13 @@ func TestLock(t *testing.T) { if err := l.Lock(); err != nil { t.Fatal(err) } + + lockSequenceNumber := l.SequenceNumber() + if 0 == lockSequenceNumber { + t.Fatal("expected non-zero lock sequence number once " + + "initially acquired") + } + if err := l.Unlock(); err != nil { t.Fatal(err) }