forked from TrueCloudLab/frostfs-node
[#1883] cli/shards: Make supporting new modes easier
Add new shard modes as a map entry to automatically parse them in `set-mode` command. The change also automatically adds new modes to help message. Signed-off-by: Leonard Lyubich <ctulhurider@gmail.com>
This commit is contained in:
parent
3b939d190c
commit
c4a2a283ae
2 changed files with 27 additions and 33 deletions
|
@ -108,16 +108,11 @@ func prettyPrintShards(cmd *cobra.Command, ii []*control.ShardInfo) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func shardModeToString(m control.ShardMode) string {
|
func shardModeToString(m control.ShardMode) string {
|
||||||
switch m {
|
for strMode, mode := range mShardModes {
|
||||||
case control.ShardMode_READ_WRITE:
|
if mode == m {
|
||||||
return "read-write"
|
return strMode
|
||||||
case control.ShardMode_READ_ONLY:
|
}
|
||||||
return "read-only"
|
}
|
||||||
case control.ShardMode_DEGRADED:
|
|
||||||
return "degraded-read-write"
|
|
||||||
case control.ShardMode_DEGRADED_READ_ONLY:
|
|
||||||
return "degraded-read-only"
|
|
||||||
default:
|
|
||||||
return "unknown"
|
return "unknown"
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
|
@ -2,6 +2,7 @@ package control
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"strings"
|
||||||
|
|
||||||
"github.com/mr-tron/base58"
|
"github.com/mr-tron/base58"
|
||||||
rawclient "github.com/nspcc-dev/neofs-api-go/v2/rpc/client"
|
rawclient "github.com/nspcc-dev/neofs-api-go/v2/rpc/client"
|
||||||
|
@ -16,13 +17,17 @@ const (
|
||||||
shardIDFlag = "id"
|
shardIDFlag = "id"
|
||||||
shardAllFlag = "all"
|
shardAllFlag = "all"
|
||||||
shardClearErrorsFlag = "clear-errors"
|
shardClearErrorsFlag = "clear-errors"
|
||||||
|
|
||||||
shardModeReadOnly = "read-only"
|
|
||||||
shardModeReadWrite = "read-write"
|
|
||||||
shardModeDegraded = "degraded-read-write"
|
|
||||||
shardModeDegradedReadOnly = "degraded-read-only"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// maps string command input to control.ShardMode. To support new mode, it's
|
||||||
|
// enough to add the map entry.
|
||||||
|
var mShardModes = map[string]control.ShardMode{
|
||||||
|
"read-only": control.ShardMode_READ_ONLY,
|
||||||
|
"read-write": control.ShardMode_READ_WRITE,
|
||||||
|
"degraded-read-write": control.ShardMode_DEGRADED,
|
||||||
|
"degraded-read-only": control.ShardMode_DEGRADED_READ_ONLY,
|
||||||
|
}
|
||||||
|
|
||||||
var setShardModeCmd = &cobra.Command{
|
var setShardModeCmd = &cobra.Command{
|
||||||
Use: "set-mode",
|
Use: "set-mode",
|
||||||
Short: "Set work mode of the shard",
|
Short: "Set work mode of the shard",
|
||||||
|
@ -36,12 +41,14 @@ func initControlSetShardModeCmd() {
|
||||||
flags := setShardModeCmd.Flags()
|
flags := setShardModeCmd.Flags()
|
||||||
flags.StringSlice(shardIDFlag, nil, "List of shard IDs in base58 encoding")
|
flags.StringSlice(shardIDFlag, nil, "List of shard IDs in base58 encoding")
|
||||||
flags.Bool(shardAllFlag, false, "Process all shards")
|
flags.Bool(shardAllFlag, false, "Process all shards")
|
||||||
|
|
||||||
|
modes := make([]string, 0, len(mShardModes))
|
||||||
|
for strMode := range mShardModes {
|
||||||
|
modes = append(modes, "'"+strMode+"'")
|
||||||
|
}
|
||||||
|
|
||||||
flags.String(shardModeFlag, "",
|
flags.String(shardModeFlag, "",
|
||||||
fmt.Sprintf("New shard mode keyword ('%s', '%s', '%s')",
|
fmt.Sprintf("New shard mode keyword (%s)", strings.Join(modes, ",")),
|
||||||
shardModeReadWrite,
|
|
||||||
shardModeReadOnly,
|
|
||||||
shardModeDegraded,
|
|
||||||
),
|
|
||||||
)
|
)
|
||||||
flags.Bool(shardClearErrorsFlag, false, "Set shard error count to 0")
|
flags.Bool(shardClearErrorsFlag, false, "Set shard error count to 0")
|
||||||
|
|
||||||
|
@ -51,19 +58,11 @@ func initControlSetShardModeCmd() {
|
||||||
func setShardMode(cmd *cobra.Command, _ []string) {
|
func setShardMode(cmd *cobra.Command, _ []string) {
|
||||||
pk := key.Get(cmd)
|
pk := key.Get(cmd)
|
||||||
|
|
||||||
var mode control.ShardMode
|
strMode, _ := cmd.Flags().GetString(shardModeFlag)
|
||||||
|
|
||||||
switch shardMode, _ := cmd.Flags().GetString(shardModeFlag); shardMode {
|
mode, ok := mShardModes[strMode]
|
||||||
default:
|
if !ok {
|
||||||
common.ExitOnErr(cmd, "", fmt.Errorf("unsupported mode %s", shardMode))
|
common.ExitOnErr(cmd, "", fmt.Errorf("unsupported mode %s", strMode))
|
||||||
case shardModeReadWrite:
|
|
||||||
mode = control.ShardMode_READ_WRITE
|
|
||||||
case shardModeReadOnly:
|
|
||||||
mode = control.ShardMode_READ_ONLY
|
|
||||||
case shardModeDegraded:
|
|
||||||
mode = control.ShardMode_DEGRADED
|
|
||||||
case shardModeDegradedReadOnly:
|
|
||||||
mode = control.ShardMode_DEGRADED_READ_ONLY
|
|
||||||
}
|
}
|
||||||
|
|
||||||
req := new(control.SetShardModeRequest)
|
req := new(control.SetShardModeRequest)
|
||||||
|
|
Loading…
Reference in a new issue