forked from TrueCloudLab/frostfs-node
[#947] cli: Allow to specify evacuation scope
It may be required to evacuate only objects or only tree or all, so now it spossible to specify. Signed-off-by: Dmitrii Stepanov <d.stepanov@yadro.com>
This commit is contained in:
parent
a6eb66bf9c
commit
b3f3505ada
7 changed files with 706 additions and 574 deletions
|
@ -19,6 +19,11 @@ import (
|
|||
const (
|
||||
awaitFlag = "await"
|
||||
noProgressFlag = "no-progress"
|
||||
scopeFlag = "scope"
|
||||
|
||||
scopeAll = "all"
|
||||
scopeObjects = "objects"
|
||||
scopeTrees = "trees"
|
||||
)
|
||||
|
||||
var evacuationShardCmd = &cobra.Command{
|
||||
|
@ -57,6 +62,7 @@ func startEvacuateShard(cmd *cobra.Command, _ []string) {
|
|||
Body: &control.StartShardEvacuationRequest_Body{
|
||||
Shard_ID: getShardIDList(cmd),
|
||||
IgnoreErrors: ignoreErrors,
|
||||
Scope: getEvacuationScope(cmd),
|
||||
},
|
||||
}
|
||||
|
||||
|
@ -82,6 +88,22 @@ func startEvacuateShard(cmd *cobra.Command, _ []string) {
|
|||
}
|
||||
}
|
||||
|
||||
func getEvacuationScope(cmd *cobra.Command) uint32 {
|
||||
rawScope, err := cmd.Flags().GetString(scopeFlag)
|
||||
commonCmd.ExitOnErr(cmd, "Invalid scope value: %w", err)
|
||||
switch rawScope {
|
||||
case scopeAll:
|
||||
return uint32(control.StartShardEvacuationRequest_Body_OBJECTS) | uint32(control.StartShardEvacuationRequest_Body_TREES)
|
||||
case scopeObjects:
|
||||
return uint32(control.StartShardEvacuationRequest_Body_OBJECTS)
|
||||
case scopeTrees:
|
||||
return uint32(control.StartShardEvacuationRequest_Body_TREES)
|
||||
default:
|
||||
commonCmd.ExitOnErr(cmd, "Invalid scope value: %w", fmt.Errorf("unknown scope %s", rawScope))
|
||||
}
|
||||
return uint32(control.StartShardEvacuationRequest_Body_NONE)
|
||||
}
|
||||
|
||||
func getEvacuateShardStatus(cmd *cobra.Command, _ []string) {
|
||||
pk := key.Get(cmd)
|
||||
req := &control.GetShardEvacuationStatusRequest{
|
||||
|
@ -309,6 +331,7 @@ func initControlStartEvacuationShardCmd() {
|
|||
flags.StringSlice(shardIDFlag, nil, "List of shard IDs in base58 encoding")
|
||||
flags.Bool(shardAllFlag, false, "Process all shards")
|
||||
flags.Bool(ignoreErrorsFlag, true, "Skip invalid/unreadable objects")
|
||||
flags.String(scopeFlag, scopeAll, fmt.Sprintf("Evacuation scope; possible values: %s, %s, %s", scopeTrees, scopeObjects, scopeAll))
|
||||
flags.Bool(awaitFlag, false, "Block execution until evacuation is completed")
|
||||
flags.Bool(noProgressFlag, false, fmt.Sprintf("Print progress if %s provided", awaitFlag))
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue