Browse Source
[shell] add admin noLock for balance (#6209)
add admin noLock for balance
pull/6214/head
Konstantin Lebedev
2 months ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with
12 additions and
2 deletions
-
weed/shell/command_volume_balance.go
-
weed/shell/commands.go
|
|
@ -76,15 +76,20 @@ func (c *commandVolumeBalance) Do(args []string, commandEnv *CommandEnv, writer |
|
|
|
dc := balanceCommand.String("dataCenter", "", "only apply the balancing for this dataCenter") |
|
|
|
racks := balanceCommand.String("racks", "", "only apply the balancing for this racks") |
|
|
|
nodes := balanceCommand.String("nodes", "", "only apply the balancing for this nodes") |
|
|
|
noLock := balanceCommand.Bool("noLock", false, "do not lock the admin shell at one's own risk") |
|
|
|
applyBalancing := balanceCommand.Bool("force", false, "apply the balancing plan.") |
|
|
|
if err = balanceCommand.Parse(args); err != nil { |
|
|
|
return nil |
|
|
|
} |
|
|
|
infoAboutSimulationMode(writer, *applyBalancing, "-force") |
|
|
|
|
|
|
|
if *noLock { |
|
|
|
commandEnv.noLock = true |
|
|
|
} else { |
|
|
|
if err = commandEnv.confirmIsLocked(args); err != nil { |
|
|
|
return |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// collect topology information
|
|
|
|
topologyInfo, _, err := collectTopologyInfo(commandEnv, 5*time.Second) |
|
|
|
|
|
@ -35,6 +35,7 @@ type CommandEnv struct { |
|
|
|
MasterClient *wdclient.MasterClient |
|
|
|
option *ShellOptions |
|
|
|
locker *exclusive_locks.ExclusiveLocker |
|
|
|
noLock bool |
|
|
|
} |
|
|
|
|
|
|
|
func NewCommandEnv(options *ShellOptions) *CommandEnv { |
|
|
@ -42,6 +43,7 @@ func NewCommandEnv(options *ShellOptions) *CommandEnv { |
|
|
|
env: make(map[string]string), |
|
|
|
MasterClient: wdclient.NewMasterClient(options.GrpcDialOption, *options.FilerGroup, pb.AdminShellClient, "", "", "", *pb.ServerAddresses(*options.Masters).ToServiceDiscovery()), |
|
|
|
option: options, |
|
|
|
noLock: false, |
|
|
|
} |
|
|
|
ce.locker = exclusive_locks.NewExclusiveLocker(ce.MasterClient, "shell") |
|
|
|
return ce |
|
|
@ -79,6 +81,9 @@ func (ce *CommandEnv) isLocked() bool { |
|
|
|
if ce == nil { |
|
|
|
return true |
|
|
|
} |
|
|
|
if ce.noLock { |
|
|
|
return false |
|
|
|
} |
|
|
|
return ce.locker.IsLocked() |
|
|
|
} |
|
|
|
|
|
|
|