Browse Source
Merge branch 'master' of https://github.com/seaweedfs/seaweedfs
feature/iceberg-data-compaction
Merge branch 'master' of https://github.com/seaweedfs/seaweedfs
feature/iceberg-data-compaction
7 changed files with 92 additions and 1 deletions
-
1docker/compose/master-cloud.toml
-
3weed/admin/dash/admin_lock_manager.go
-
61weed/admin/dash/admin_presence_lock.go
-
9weed/admin/dash/admin_server.go
-
6weed/cluster/admin_locks.go
-
1weed/command/scaffold/master.toml
-
12weed/server/master_server.go
@ -0,0 +1,61 @@ |
|||
package dash |
|||
|
|||
import ( |
|||
"time" |
|||
|
|||
"github.com/seaweedfs/seaweedfs/weed/cluster" |
|||
"github.com/seaweedfs/seaweedfs/weed/wdclient" |
|||
"github.com/seaweedfs/seaweedfs/weed/wdclient/exclusive_locks" |
|||
) |
|||
|
|||
const adminPresenceClientName = "admin-server" |
|||
|
|||
type adminPresenceLock struct { |
|||
locker *exclusive_locks.ExclusiveLocker |
|||
stopCh chan struct{} |
|||
} |
|||
|
|||
func newAdminPresenceLock(masterClient *wdclient.MasterClient) *adminPresenceLock { |
|||
if masterClient == nil { |
|||
return nil |
|||
} |
|||
return &adminPresenceLock{ |
|||
locker: exclusive_locks.NewExclusiveLocker(masterClient, cluster.AdminServerPresenceLockName), |
|||
stopCh: make(chan struct{}), |
|||
} |
|||
} |
|||
|
|||
func (l *adminPresenceLock) Start() { |
|||
if l == nil || l.locker == nil { |
|||
return |
|||
} |
|||
l.locker.SetMessage("admin server connected") |
|||
go func() { |
|||
ticker := time.NewTicker(5 * time.Second) |
|||
defer ticker.Stop() |
|||
for { |
|||
if !l.locker.IsLocked() { |
|||
l.locker.RequestLock(adminPresenceClientName) |
|||
} |
|||
select { |
|||
case <-l.stopCh: |
|||
return |
|||
case <-ticker.C: |
|||
} |
|||
} |
|||
}() |
|||
} |
|||
|
|||
func (l *adminPresenceLock) Stop() { |
|||
if l == nil { |
|||
return |
|||
} |
|||
select { |
|||
case <-l.stopCh: |
|||
default: |
|||
close(l.stopCh) |
|||
} |
|||
if l.locker != nil { |
|||
l.locker.ReleaseLock() |
|||
} |
|||
} |
|||
@ -0,0 +1,6 @@ |
|||
package cluster |
|||
|
|||
const ( |
|||
AdminShellLockName = "shell" |
|||
AdminServerPresenceLockName = "admin-server" |
|||
) |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue