aboutsummaryrefslogtreecommitdiff
path: root/weed/cluster/lock_manager/lock_manager.go
diff options
context:
space:
mode:
authorchrislu <chris.lu@gmail.com>2023-06-25 15:28:01 -0700
committerchrislu <chris.lu@gmail.com>2023-06-25 15:28:01 -0700
commit5149b3d07b7e3089f914d055c90129139ea0756b (patch)
tree26a81dac34d40a9a29da4a7fa90de324d3be3cce /weed/cluster/lock_manager/lock_manager.go
parent868f7875d7ccb211f52d189d8bd0669c85e24fe1 (diff)
downloadseaweedfs-5149b3d07b7e3089f914d055c90129139ea0756b.tar.xz
seaweedfs-5149b3d07b7e3089f914d055c90129139ea0756b.zip
filer can proxy to peer filer holding the lock
Diffstat (limited to 'weed/cluster/lock_manager/lock_manager.go')
-rw-r--r--weed/cluster/lock_manager/lock_manager.go6
1 files changed, 5 insertions, 1 deletions
diff --git a/weed/cluster/lock_manager/lock_manager.go b/weed/cluster/lock_manager/lock_manager.go
index 642c77772..57fb34819 100644
--- a/weed/cluster/lock_manager/lock_manager.go
+++ b/weed/cluster/lock_manager/lock_manager.go
@@ -42,7 +42,8 @@ func (lm *LockManager) Lock(path string, expiredAtNs int64, token string) (renew
// not expired
if oldValue.Token == token {
// token matches, renew the lock
- return &Lock{Token: token, ExpiredAtNs: expiredAtNs}, false
+ renewToken = uuid.New().String()
+ return &Lock{Token: renewToken, ExpiredAtNs: expiredAtNs}, false
} else {
err = fmt.Errorf("lock: token mismatch")
return oldValue, false
@@ -94,6 +95,9 @@ func (lm *LockManager) CleanUp() {
time.Sleep(1 * time.Minute)
now := time.Now().UnixNano()
lm.locks.Range(func(key string, value *Lock) bool {
+ if value == nil {
+ return true
+ }
if now > value.ExpiredAtNs {
lm.locks.Delete(key)
return true