From 2844d2d7a204dd3e16f91faa7a8029e2b6aa96df Mon Sep 17 00:00:00 2001 From: Ingo Oppermann Date: Fri, 21 Jul 2023 15:38:43 +0200 Subject: [PATCH] Split Lock type into its own file --- cluster/kvs/kvs.go | 40 ---------------------------------------- cluster/kvs/lock.go | 45 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+), 40 deletions(-) create mode 100644 cluster/kvs/lock.go diff --git a/cluster/kvs/kvs.go b/cluster/kvs/kvs.go index d068c920..1d103975 100644 --- a/cluster/kvs/kvs.go +++ b/cluster/kvs/kvs.go @@ -1,8 +1,6 @@ package kvs import ( - "context" - "sync" "time" "github.com/datarhei/core/v16/cluster/store" @@ -18,41 +16,3 @@ type KVS interface { GetKV(key string) (string, time.Time, error) ListKV(prefix string) map[string]store.Value } - -type Lock struct { - ValidUntil time.Time - ctx context.Context - cancel context.CancelFunc - lock sync.Mutex -} - -func (l *Lock) Expired() <-chan struct{} { - l.lock.Lock() - defer l.lock.Unlock() - - if l.ctx == nil { - l.ctx, l.cancel = context.WithDeadline(context.Background(), l.ValidUntil) - - go func(l *Lock) { - <-l.ctx.Done() - - l.lock.Lock() - defer l.lock.Unlock() - if l.cancel != nil { - l.cancel() - } - }(l) - } - - return l.ctx.Done() -} - -func (l *Lock) Unlock() { - l.lock.Lock() - defer l.lock.Unlock() - - if l.cancel != nil { - l.ValidUntil = time.Now() - l.cancel() - } -} diff --git a/cluster/kvs/lock.go b/cluster/kvs/lock.go new file mode 100644 index 00000000..8e956617 --- /dev/null +++ b/cluster/kvs/lock.go @@ -0,0 +1,45 @@ +package kvs + +import ( + "context" + "sync" + "time" +) + +type Lock struct { + ValidUntil time.Time + ctx context.Context + cancel context.CancelFunc + lock sync.Mutex +} + +func (l *Lock) Expired() <-chan struct{} { + l.lock.Lock() + defer l.lock.Unlock() + + if l.ctx == nil { + l.ctx, l.cancel = context.WithDeadline(context.Background(), l.ValidUntil) + + go func(l *Lock) { + <-l.ctx.Done() + + l.lock.Lock() + defer l.lock.Unlock() + if l.cancel != nil { + l.cancel() + } + }(l) + } + + return l.ctx.Done() +} + +func (l *Lock) Unlock() { + l.lock.Lock() + defer l.lock.Unlock() + + if l.cancel != nil { + l.ValidUntil = time.Now() + l.cancel() + } +}