From 5d3ec22975637b0620acf26702efe45888c74e77 Mon Sep 17 00:00:00 2001 From: Chris Lu Date: Tue, 26 May 2020 00:03:31 -0700 Subject: [PATCH] refactoring --- weed/shell/commands.go | 7 ++++--- .../exclusive_locks}/exclusive_locker.go | 9 ++++++++- 2 files changed, 12 insertions(+), 4 deletions(-) rename weed/{shell => wdclient/exclusive_locks}/exclusive_locker.go (95%) diff --git a/weed/shell/commands.go b/weed/shell/commands.go index b7ca5d268..f61ed9f82 100644 --- a/weed/shell/commands.go +++ b/weed/shell/commands.go @@ -13,6 +13,7 @@ import ( "github.com/chrislusf/seaweedfs/weed/pb/filer_pb" "github.com/chrislusf/seaweedfs/weed/util" "github.com/chrislusf/seaweedfs/weed/wdclient" + "github.com/chrislusf/seaweedfs/weed/wdclient/exclusive_locks" ) type ShellOptions struct { @@ -28,7 +29,7 @@ type CommandEnv struct { env map[string]string MasterClient *wdclient.MasterClient option ShellOptions - locker *ExclusiveLocker + locker *exclusive_locks.ExclusiveLocker } type command interface { @@ -47,7 +48,7 @@ func NewCommandEnv(options ShellOptions) *CommandEnv { MasterClient: wdclient.NewMasterClient(options.GrpcDialOption, pb.AdminShellClient, "", 0, strings.Split(*options.Masters, ",")), option: options, } - ce.locker = NewExclusiveLocker(ce.MasterClient) + ce.locker = exclusive_locks.NewExclusiveLocker(ce.MasterClient) return ce } @@ -70,7 +71,7 @@ func (ce *CommandEnv) isDirectory(path string) bool { func (ce *CommandEnv) confirmIsLocked() error { - if ce.locker.isLocking { + if ce.locker.IsLocking() { return nil } diff --git a/weed/shell/exclusive_locker.go b/weed/wdclient/exclusive_locks/exclusive_locker.go similarity index 95% rename from weed/shell/exclusive_locker.go rename to weed/wdclient/exclusive_locks/exclusive_locker.go index fa1f9ab5d..67823e7f4 100644 --- a/weed/shell/exclusive_locker.go +++ b/weed/wdclient/exclusive_locks/exclusive_locker.go @@ -1,4 +1,4 @@ -package shell +package exclusive_locks import ( "context" @@ -29,6 +29,9 @@ func NewExclusiveLocker(masterClient *wdclient.MasterClient) *ExclusiveLocker { masterClient: masterClient, } } +func (l *ExclusiveLocker) IsLocking() bool { + return l.isLocking +} func (l *ExclusiveLocker) GetToken() (token int64, lockTsNs int64) { for time.Unix(0, atomic.LoadInt64(&l.lockTsNs)).Add(SafeRenewInteval).Before(time.Now()) { @@ -39,6 +42,10 @@ func (l *ExclusiveLocker) GetToken() (token int64, lockTsNs int64) { } func (l *ExclusiveLocker) RequestLock() { + if l.isLocking { + return + } + // retry to get the lease for { if err := l.masterClient.WithClient(func(client master_pb.SeaweedClient) error {