diff options
| author | chrislu <chris.lu@gmail.com> | 2023-09-15 22:20:05 -0700 |
|---|---|---|
| committer | chrislu <chris.lu@gmail.com> | 2023-09-15 22:20:05 -0700 |
| commit | 7f685ce7ba8853775e7c02c5b5c242d7920d62d3 (patch) | |
| tree | 42693a12bfc42748be0bf7124fff7d1ff2db6e01 | |
| parent | 436d99443b399082f75f4ceb7595e8b5ac0a8ba3 (diff) | |
| download | seaweedfs-7f685ce7ba8853775e7c02c5b5c242d7920d62d3.tar.xz seaweedfs-7f685ce7ba8853775e7c02c5b5c242d7920d62d3.zip | |
adjust APIs
| -rw-r--r-- | other/java/client/src/main/proto/filer.proto | 1 | ||||
| -rw-r--r-- | weed/cluster/lock_manager/distributed_lock_manager.go | 19 |
2 files changed, 14 insertions, 6 deletions
diff --git a/other/java/client/src/main/proto/filer.proto b/other/java/client/src/main/proto/filer.proto index 2058322cc..50aee1b0e 100644 --- a/other/java/client/src/main/proto/filer.proto +++ b/other/java/client/src/main/proto/filer.proto @@ -73,6 +73,7 @@ service SeaweedFiler { } rpc Unlock(UnlockRequest) returns (UnlockResponse) { } + // distributed lock management internal use only rpc TransferLocks(TransferLocksRequest) returns (TransferLocksResponse) { } } diff --git a/weed/cluster/lock_manager/distributed_lock_manager.go b/weed/cluster/lock_manager/distributed_lock_manager.go index 7061dfd1a..0378d02b2 100644 --- a/weed/cluster/lock_manager/distributed_lock_manager.go +++ b/weed/cluster/lock_manager/distributed_lock_manager.go @@ -29,18 +29,25 @@ func (dlm *DistributedLockManager) Lock(key string, token string) (renewToken st } func (dlm *DistributedLockManager) LockWithTimeout(key string, expiredAtNs int64, token string) (renewToken string, movedTo pb.ServerAddress, err error) { + movedTo, err = dlm.FindLockOwner(key) + if err != nil { + return + } + if movedTo != dlm.Host { + return + } + renewToken, err = dlm.lockManager.Lock(key, expiredAtNs, token) + return +} + +func (dlm *DistributedLockManager) FindLockOwner(key string) (movedTo pb.ServerAddress, err error) { servers := dlm.LockRing.GetSnapshot() if servers == nil { err = NoLockServerError return } - server := hashKeyToServer(key, servers) - if server != dlm.Host { - movedTo = server - return - } - renewToken, err = dlm.lockManager.Lock(key, expiredAtNs, token) + movedTo = hashKeyToServer(key, servers) return } |
