forked from TrueCloudLab/frostfs-node
[#932] adm: Move dump/set-config
to package config
Signed-off-by: Anton Nikiforov <an.nikiforov@yadro.com>
This commit is contained in:
parent
f7a8f51c66
commit
be15eab82a
8 changed files with 142 additions and 124 deletions
|
@ -1,4 +1,4 @@
|
||||||
package morph
|
package config
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
|
@ -51,7 +51,7 @@ func dumpNetworkConfig(cmd *cobra.Command, _ []string) error {
|
||||||
buf := bytes.NewBuffer(nil)
|
buf := bytes.NewBuffer(nil)
|
||||||
tw := tabwriter.NewWriter(buf, 0, 2, 2, ' ', 0)
|
tw := tabwriter.NewWriter(buf, 0, 2, 2, ' ', 0)
|
||||||
|
|
||||||
m, err := parseConfigFromNetmapContract(arr)
|
m, err := util.ParseConfigFromNetmapContract(arr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -66,7 +66,7 @@ func dumpNetworkConfig(cmd *cobra.Command, _ []string) error {
|
||||||
_, _ = tw.Write([]byte(fmt.Sprintf("%s:\t%d (int)\n", k, n)))
|
_, _ = tw.Write([]byte(fmt.Sprintf("%s:\t%d (int)\n", k, n)))
|
||||||
case netmap.HomomorphicHashingDisabledKey, netmap.MaintenanceModeAllowedConfig:
|
case netmap.HomomorphicHashingDisabledKey, netmap.MaintenanceModeAllowedConfig:
|
||||||
if len(v) == 0 || len(v) > 1 {
|
if len(v) == 0 || len(v) > 1 {
|
||||||
return invalidConfigValueErr(k)
|
return util.InvalidConfigValueErr(k)
|
||||||
}
|
}
|
||||||
_, _ = tw.Write([]byte(fmt.Sprintf("%s:\t%t (bool)\n", k, v[0] == 1)))
|
_, _ = tw.Write([]byte(fmt.Sprintf("%s:\t%t (bool)\n", k, v[0] == 1)))
|
||||||
default:
|
default:
|
||||||
|
@ -80,7 +80,7 @@ func dumpNetworkConfig(cmd *cobra.Command, _ []string) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func setConfigCmd(cmd *cobra.Command, args []string) error {
|
func SetConfigCmd(cmd *cobra.Command, args []string) error {
|
||||||
if len(args) == 0 {
|
if len(args) == 0 {
|
||||||
return errors.New("empty config pairs")
|
return errors.New("empty config pairs")
|
||||||
}
|
}
|
||||||
|
@ -162,7 +162,3 @@ func parseConfigPair(kvStr string, force bool) (key string, val any, err error)
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func invalidConfigValueErr(key string) error {
|
|
||||||
return fmt.Errorf("invalid %s config value from netmap contract", key)
|
|
||||||
}
|
|
46
cmd/frostfs-adm/internal/modules/morph/config/root.go
Normal file
46
cmd/frostfs-adm/internal/modules/morph/config/root.go
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
package config
|
||||||
|
|
||||||
|
import (
|
||||||
|
"git.frostfs.info/TrueCloudLab/frostfs-node/cmd/frostfs-adm/internal/modules/morph/util"
|
||||||
|
"github.com/spf13/cobra"
|
||||||
|
"github.com/spf13/viper"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
SetCmd = &cobra.Command{
|
||||||
|
Use: "set-config key1=val1 [key2=val2 ...]",
|
||||||
|
DisableFlagsInUseLine: true,
|
||||||
|
Short: "Add/update global config value in the FrostFS network",
|
||||||
|
PreRun: func(cmd *cobra.Command, _ []string) {
|
||||||
|
_ = viper.BindPFlag(util.AlphabetWalletsFlag, cmd.Flags().Lookup(util.AlphabetWalletsFlag))
|
||||||
|
_ = viper.BindPFlag(util.EndpointFlag, cmd.Flags().Lookup(util.EndpointFlag))
|
||||||
|
},
|
||||||
|
Args: cobra.MinimumNArgs(1),
|
||||||
|
RunE: SetConfigCmd,
|
||||||
|
}
|
||||||
|
|
||||||
|
DumpCmd = &cobra.Command{
|
||||||
|
Use: "dump-config",
|
||||||
|
Short: "Dump FrostFS network config",
|
||||||
|
PreRun: func(cmd *cobra.Command, _ []string) {
|
||||||
|
_ = viper.BindPFlag(util.EndpointFlag, cmd.Flags().Lookup(util.EndpointFlag))
|
||||||
|
},
|
||||||
|
RunE: dumpNetworkConfig,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
func initSetConfigCmd() {
|
||||||
|
SetCmd.Flags().String(util.AlphabetWalletsFlag, "", util.AlphabetWalletsFlagDesc)
|
||||||
|
SetCmd.Flags().StringP(util.EndpointFlag, util.EndpointFlagShort, "", util.EndpointFlagDesc)
|
||||||
|
SetCmd.Flags().Bool(forceConfigSet, false, "Force setting not well-known configuration key")
|
||||||
|
SetCmd.Flags().String(util.LocalDumpFlag, "", "Path to the blocks dump file")
|
||||||
|
}
|
||||||
|
|
||||||
|
func initDumpNetworkConfigCmd() {
|
||||||
|
DumpCmd.Flags().StringP(util.EndpointFlag, util.EndpointFlagShort, "", util.EndpointFlagDesc)
|
||||||
|
}
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
initSetConfigCmd()
|
||||||
|
initDumpNetworkConfigCmd()
|
||||||
|
}
|
|
@ -372,7 +372,7 @@ func getContractDeployData(c *morphUtil.InitializeContext, ctrName string, keysP
|
||||||
items = append(items, c.Contracts[morphUtil.ProxyContract].Hash)
|
items = append(items, c.Contracts[morphUtil.ProxyContract].Hash)
|
||||||
}
|
}
|
||||||
case morphUtil.NetmapContract:
|
case morphUtil.NetmapContract:
|
||||||
md := getDefaultNetmapContractConfigMap()
|
md := morphUtil.GetDefaultNetmapContractConfigMap()
|
||||||
if method == updateMethodName {
|
if method == updateMethodName {
|
||||||
if err := mergeNetmapConfig(c.ReadOnlyInvoker, md); err != nil {
|
if err := mergeNetmapConfig(c.ReadOnlyInvoker, md); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -450,7 +450,7 @@ func mergeNetmapConfig(roInvoker *invoker.Invoker, md map[string]any) error {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
m, err := parseConfigFromNetmapContract(arr)
|
m, err := morphUtil.ParseConfigFromNetmapContract(arr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,6 +9,7 @@ import (
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
cmdConfig "git.frostfs.info/TrueCloudLab/frostfs-node/cmd/frostfs-adm/internal/modules/morph/config"
|
||||||
"git.frostfs.info/TrueCloudLab/frostfs-node/cmd/frostfs-adm/internal/modules/morph/policy"
|
"git.frostfs.info/TrueCloudLab/frostfs-node/cmd/frostfs-adm/internal/modules/morph/policy"
|
||||||
"git.frostfs.info/TrueCloudLab/frostfs-node/cmd/frostfs-adm/internal/modules/morph/util"
|
"git.frostfs.info/TrueCloudLab/frostfs-node/cmd/frostfs-adm/internal/modules/morph/util"
|
||||||
"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/innerring"
|
"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/innerring"
|
||||||
|
@ -75,8 +76,8 @@ func testInitialize(t *testing.T, committeeSize int) {
|
||||||
require.NoError(t, forceNewEpochCmd(forceNewEpoch, nil))
|
require.NoError(t, forceNewEpochCmd(forceNewEpoch, nil))
|
||||||
})
|
})
|
||||||
t.Run("set-config", func(t *testing.T) {
|
t.Run("set-config", func(t *testing.T) {
|
||||||
require.NoError(t, setConfig.Flags().Set(util.LocalDumpFlag, dumpPath))
|
require.NoError(t, cmdConfig.SetCmd.Flags().Set(util.LocalDumpFlag, dumpPath))
|
||||||
require.NoError(t, setConfigCmd(setConfig, []string{"MaintenanceModeAllowed=true"}))
|
require.NoError(t, cmdConfig.SetConfigCmd(cmdConfig.SetCmd, []string{"MaintenanceModeAllowed=true"}))
|
||||||
})
|
})
|
||||||
t.Run("set-policy", func(t *testing.T) {
|
t.Run("set-policy", func(t *testing.T) {
|
||||||
require.NoError(t, policy.Set.Flags().Set(util.LocalDumpFlag, dumpPath))
|
require.NoError(t, policy.Set.Flags().Set(util.LocalDumpFlag, dumpPath))
|
||||||
|
|
|
@ -1,45 +0,0 @@
|
||||||
package morph
|
|
||||||
|
|
||||||
import (
|
|
||||||
"errors"
|
|
||||||
|
|
||||||
"git.frostfs.info/TrueCloudLab/frostfs-node/cmd/frostfs-adm/internal/modules/morph/util"
|
|
||||||
"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/morph/client/netmap"
|
|
||||||
"github.com/nspcc-dev/neo-go/pkg/vm/stackitem"
|
|
||||||
"github.com/spf13/viper"
|
|
||||||
)
|
|
||||||
|
|
||||||
func getDefaultNetmapContractConfigMap() map[string]any {
|
|
||||||
m := make(map[string]any)
|
|
||||||
m[netmap.EpochDurationConfig] = viper.GetInt64(util.EpochDurationInitFlag)
|
|
||||||
m[netmap.MaxObjectSizeConfig] = viper.GetInt64(util.MaxObjectSizeInitFlag)
|
|
||||||
m[netmap.ContainerFeeConfig] = viper.GetInt64(containerFeeInitFlag)
|
|
||||||
m[netmap.ContainerAliasFeeConfig] = viper.GetInt64(containerAliasFeeInitFlag)
|
|
||||||
m[netmap.IrCandidateFeeConfig] = viper.GetInt64(candidateFeeInitFlag)
|
|
||||||
m[netmap.WithdrawFeeConfig] = viper.GetInt64(withdrawFeeInitFlag)
|
|
||||||
m[netmap.HomomorphicHashingDisabledKey] = viper.GetBool(homomorphicHashDisabledInitFlag)
|
|
||||||
m[netmap.MaintenanceModeAllowedConfig] = viper.GetBool(maintenanceModeAllowedInitFlag)
|
|
||||||
return m
|
|
||||||
}
|
|
||||||
|
|
||||||
func parseConfigFromNetmapContract(arr []stackitem.Item) (map[string][]byte, error) {
|
|
||||||
m := make(map[string][]byte, len(arr))
|
|
||||||
for _, param := range arr {
|
|
||||||
tuple, ok := param.Value().([]stackitem.Item)
|
|
||||||
if !ok || len(tuple) != 2 {
|
|
||||||
return nil, errors.New("invalid ListConfig response from netmap contract")
|
|
||||||
}
|
|
||||||
|
|
||||||
k, err := tuple[0].TryBytes()
|
|
||||||
if err != nil {
|
|
||||||
return nil, errors.New("invalid config key from netmap contract")
|
|
||||||
}
|
|
||||||
|
|
||||||
v, err := tuple[1].TryBytes()
|
|
||||||
if err != nil {
|
|
||||||
return nil, invalidConfigValueErr(string(k))
|
|
||||||
}
|
|
||||||
m[string(k)] = v
|
|
||||||
}
|
|
||||||
return m, nil
|
|
||||||
}
|
|
|
@ -3,6 +3,7 @@ package morph
|
||||||
import (
|
import (
|
||||||
"git.frostfs.info/TrueCloudLab/frostfs-node/cmd/frostfs-adm/internal/modules/morph/ape"
|
"git.frostfs.info/TrueCloudLab/frostfs-node/cmd/frostfs-adm/internal/modules/morph/ape"
|
||||||
"git.frostfs.info/TrueCloudLab/frostfs-node/cmd/frostfs-adm/internal/modules/morph/balance"
|
"git.frostfs.info/TrueCloudLab/frostfs-node/cmd/frostfs-adm/internal/modules/morph/balance"
|
||||||
|
"git.frostfs.info/TrueCloudLab/frostfs-node/cmd/frostfs-adm/internal/modules/morph/config"
|
||||||
"git.frostfs.info/TrueCloudLab/frostfs-node/cmd/frostfs-adm/internal/modules/morph/frostfsid"
|
"git.frostfs.info/TrueCloudLab/frostfs-node/cmd/frostfs-adm/internal/modules/morph/frostfsid"
|
||||||
"git.frostfs.info/TrueCloudLab/frostfs-node/cmd/frostfs-adm/internal/modules/morph/notary"
|
"git.frostfs.info/TrueCloudLab/frostfs-node/cmd/frostfs-adm/internal/modules/morph/notary"
|
||||||
"git.frostfs.info/TrueCloudLab/frostfs-node/cmd/frostfs-adm/internal/modules/morph/policy"
|
"git.frostfs.info/TrueCloudLab/frostfs-node/cmd/frostfs-adm/internal/modules/morph/policy"
|
||||||
|
@ -21,21 +22,19 @@ const (
|
||||||
|
|
||||||
maxObjectSizeCLIFlag = "max-object-size"
|
maxObjectSizeCLIFlag = "max-object-size"
|
||||||
|
|
||||||
epochDurationCLIFlag = "epoch-duration"
|
epochDurationCLIFlag = "epoch-duration"
|
||||||
containerFeeInitFlag = "network.fee.container"
|
|
||||||
containerAliasFeeInitFlag = "network.fee.container_alias"
|
containerFeeCLIFlag = "container-fee"
|
||||||
containerFeeCLIFlag = "container-fee"
|
containerAliasFeeCLIFlag = "container-alias-fee"
|
||||||
containerAliasFeeCLIFlag = "container-alias-fee"
|
|
||||||
candidateFeeInitFlag = "network.fee.candidate"
|
candidateFeeCLIFlag = "candidate-fee"
|
||||||
candidateFeeCLIFlag = "candidate-fee"
|
|
||||||
homomorphicHashDisabledInitFlag = "network.homomorphic_hash_disabled"
|
homomorphicHashDisabledCLIFlag = "homomorphic-disabled"
|
||||||
maintenanceModeAllowedInitFlag = "network.maintenance_mode_allowed"
|
|
||||||
homomorphicHashDisabledCLIFlag = "homomorphic-disabled"
|
withdrawFeeCLIFlag = "withdraw-fee"
|
||||||
withdrawFeeInitFlag = "network.fee.withdraw"
|
containerDumpFlag = "dump"
|
||||||
withdrawFeeCLIFlag = "withdraw-fee"
|
containerContractFlag = "container-contract"
|
||||||
containerDumpFlag = "dump"
|
containerIDsFlag = "cid"
|
||||||
containerContractFlag = "container-contract"
|
|
||||||
containerIDsFlag = "cid"
|
|
||||||
|
|
||||||
walletAddressFlag = "wallet-address"
|
walletAddressFlag = "wallet-address"
|
||||||
)
|
)
|
||||||
|
@ -65,11 +64,11 @@ var (
|
||||||
_ = viper.BindPFlag(util.EndpointFlag, cmd.Flags().Lookup(util.EndpointFlag))
|
_ = viper.BindPFlag(util.EndpointFlag, cmd.Flags().Lookup(util.EndpointFlag))
|
||||||
_ = viper.BindPFlag(util.EpochDurationInitFlag, cmd.Flags().Lookup(epochDurationCLIFlag))
|
_ = viper.BindPFlag(util.EpochDurationInitFlag, cmd.Flags().Lookup(epochDurationCLIFlag))
|
||||||
_ = viper.BindPFlag(util.MaxObjectSizeInitFlag, cmd.Flags().Lookup(maxObjectSizeCLIFlag))
|
_ = viper.BindPFlag(util.MaxObjectSizeInitFlag, cmd.Flags().Lookup(maxObjectSizeCLIFlag))
|
||||||
_ = viper.BindPFlag(homomorphicHashDisabledInitFlag, cmd.Flags().Lookup(homomorphicHashDisabledCLIFlag))
|
_ = viper.BindPFlag(util.HomomorphicHashDisabledInitFlag, cmd.Flags().Lookup(homomorphicHashDisabledCLIFlag))
|
||||||
_ = viper.BindPFlag(candidateFeeInitFlag, cmd.Flags().Lookup(candidateFeeCLIFlag))
|
_ = viper.BindPFlag(util.CandidateFeeInitFlag, cmd.Flags().Lookup(candidateFeeCLIFlag))
|
||||||
_ = viper.BindPFlag(containerFeeInitFlag, cmd.Flags().Lookup(containerFeeCLIFlag))
|
_ = viper.BindPFlag(util.ContainerFeeInitFlag, cmd.Flags().Lookup(containerFeeCLIFlag))
|
||||||
_ = viper.BindPFlag(containerAliasFeeInitFlag, cmd.Flags().Lookup(containerAliasFeeCLIFlag))
|
_ = viper.BindPFlag(util.ContainerAliasFeeInitFlag, cmd.Flags().Lookup(containerAliasFeeCLIFlag))
|
||||||
_ = viper.BindPFlag(withdrawFeeInitFlag, cmd.Flags().Lookup(withdrawFeeCLIFlag))
|
_ = viper.BindPFlag(util.WithdrawFeeInitFlag, cmd.Flags().Lookup(withdrawFeeCLIFlag))
|
||||||
_ = viper.BindPFlag(util.ProtoConfigPath, cmd.Flags().Lookup(util.ProtoConfigPath))
|
_ = viper.BindPFlag(util.ProtoConfigPath, cmd.Flags().Lookup(util.ProtoConfigPath))
|
||||||
},
|
},
|
||||||
RunE: initializeSideChainCmd,
|
RunE: initializeSideChainCmd,
|
||||||
|
@ -120,18 +119,6 @@ var (
|
||||||
RunE: removeNodesCmd,
|
RunE: removeNodesCmd,
|
||||||
}
|
}
|
||||||
|
|
||||||
setConfig = &cobra.Command{
|
|
||||||
Use: "set-config key1=val1 [key2=val2 ...]",
|
|
||||||
DisableFlagsInUseLine: true,
|
|
||||||
Short: "Add/update global config value in the FrostFS network",
|
|
||||||
PreRun: func(cmd *cobra.Command, _ []string) {
|
|
||||||
_ = viper.BindPFlag(util.AlphabetWalletsFlag, cmd.Flags().Lookup(util.AlphabetWalletsFlag))
|
|
||||||
_ = viper.BindPFlag(util.EndpointFlag, cmd.Flags().Lookup(util.EndpointFlag))
|
|
||||||
},
|
|
||||||
Args: cobra.MinimumNArgs(1),
|
|
||||||
RunE: setConfigCmd,
|
|
||||||
}
|
|
||||||
|
|
||||||
dumpContractHashesCmd = &cobra.Command{
|
dumpContractHashesCmd = &cobra.Command{
|
||||||
Use: "dump-hashes",
|
Use: "dump-hashes",
|
||||||
Short: "Dump deployed contract hashes",
|
Short: "Dump deployed contract hashes",
|
||||||
|
@ -141,15 +128,6 @@ var (
|
||||||
RunE: dumpContractHashes,
|
RunE: dumpContractHashes,
|
||||||
}
|
}
|
||||||
|
|
||||||
dumpNetworkConfigCmd = &cobra.Command{
|
|
||||||
Use: "dump-config",
|
|
||||||
Short: "Dump FrostFS network config",
|
|
||||||
PreRun: func(cmd *cobra.Command, _ []string) {
|
|
||||||
_ = viper.BindPFlag(util.EndpointFlag, cmd.Flags().Lookup(util.EndpointFlag))
|
|
||||||
},
|
|
||||||
RunE: dumpNetworkConfig,
|
|
||||||
}
|
|
||||||
|
|
||||||
updateContractsCmd = &cobra.Command{
|
updateContractsCmd = &cobra.Command{
|
||||||
Use: "update-contracts",
|
Use: "update-contracts",
|
||||||
Short: "Update FrostFS contracts",
|
Short: "Update FrostFS contracts",
|
||||||
|
@ -209,8 +187,8 @@ func init() {
|
||||||
RootCmd.AddCommand(policy.Set)
|
RootCmd.AddCommand(policy.Set)
|
||||||
RootCmd.AddCommand(policy.Dump)
|
RootCmd.AddCommand(policy.Dump)
|
||||||
initDumpContractHashesCmd()
|
initDumpContractHashesCmd()
|
||||||
initDumpNetworkConfigCmd()
|
RootCmd.AddCommand(config.SetCmd)
|
||||||
initSetConfigCmd()
|
RootCmd.AddCommand(config.DumpCmd)
|
||||||
RootCmd.AddCommand(balance.DumpCmd)
|
RootCmd.AddCommand(balance.DumpCmd)
|
||||||
initUpdateContractsCmd()
|
initUpdateContractsCmd()
|
||||||
initDumpContainersCmd()
|
initDumpContainersCmd()
|
||||||
|
@ -273,19 +251,6 @@ func initUpdateContractsCmd() {
|
||||||
updateContractsCmd.MarkFlagsMutuallyExclusive(util.ContractsInitFlag, util.ContractsURLFlag)
|
updateContractsCmd.MarkFlagsMutuallyExclusive(util.ContractsInitFlag, util.ContractsURLFlag)
|
||||||
}
|
}
|
||||||
|
|
||||||
func initSetConfigCmd() {
|
|
||||||
RootCmd.AddCommand(setConfig)
|
|
||||||
setConfig.Flags().String(util.AlphabetWalletsFlag, "", util.AlphabetWalletsFlagDesc)
|
|
||||||
setConfig.Flags().StringP(util.EndpointFlag, util.EndpointFlagShort, "", util.EndpointFlagDesc)
|
|
||||||
setConfig.Flags().Bool(forceConfigSet, false, "Force setting not well-known configuration key")
|
|
||||||
setConfig.Flags().String(util.LocalDumpFlag, "", "Path to the blocks dump file")
|
|
||||||
}
|
|
||||||
|
|
||||||
func initDumpNetworkConfigCmd() {
|
|
||||||
RootCmd.AddCommand(dumpNetworkConfigCmd)
|
|
||||||
dumpNetworkConfigCmd.Flags().StringP(util.EndpointFlag, util.EndpointFlagShort, "", util.EndpointFlagDesc)
|
|
||||||
}
|
|
||||||
|
|
||||||
func initDumpContractHashesCmd() {
|
func initDumpContractHashesCmd() {
|
||||||
RootCmd.AddCommand(dumpContractHashesCmd)
|
RootCmd.AddCommand(dumpContractHashesCmd)
|
||||||
dumpContractHashesCmd.Flags().StringP(util.EndpointFlag, util.EndpointFlagShort, "", util.EndpointFlagDesc)
|
dumpContractHashesCmd.Flags().StringP(util.EndpointFlag, util.EndpointFlagShort, "", util.EndpointFlagDesc)
|
||||||
|
|
|
@ -11,20 +11,26 @@ const (
|
||||||
// See: https://github.com/nspcc-dev/neo-go/blob/740488f7f35e367eaa99a71c0a609c315fe2b0fc/pkg/core/transaction/witness.go#L10
|
// See: https://github.com/nspcc-dev/neo-go/blob/740488f7f35e367eaa99a71c0a609c315fe2b0fc/pkg/core/transaction/witness.go#L10
|
||||||
MaxAlphabetNodes = 22
|
MaxAlphabetNodes = 22
|
||||||
|
|
||||||
EndpointFlag = "rpc-endpoint"
|
EndpointFlag = "rpc-endpoint"
|
||||||
EndpointFlagDesc = "N3 RPC node endpoint"
|
EndpointFlagDesc = "N3 RPC node endpoint"
|
||||||
EndpointFlagShort = "r"
|
EndpointFlagShort = "r"
|
||||||
AlphabetWalletsFlag = "alphabet-wallets"
|
AlphabetWalletsFlag = "alphabet-wallets"
|
||||||
AlphabetWalletsFlagDesc = "Path to alphabet wallets dir"
|
AlphabetWalletsFlagDesc = "Path to alphabet wallets dir"
|
||||||
LocalDumpFlag = "local-dump"
|
LocalDumpFlag = "local-dump"
|
||||||
ContractsInitFlag = "contracts"
|
ContractsInitFlag = "contracts"
|
||||||
ContractsInitFlagDesc = "Path to archive with compiled FrostFS contracts (the default is to fetch the latest release from the official repository)"
|
ContractsInitFlagDesc = "Path to archive with compiled FrostFS contracts (the default is to fetch the latest release from the official repository)"
|
||||||
ContractsURLFlag = "contracts-url"
|
ContractsURLFlag = "contracts-url"
|
||||||
ContractsURLFlagDesc = "URL to archive with compiled FrostFS contracts"
|
ContractsURLFlagDesc = "URL to archive with compiled FrostFS contracts"
|
||||||
EpochDurationInitFlag = "network.epoch_duration"
|
EpochDurationInitFlag = "network.epoch_duration"
|
||||||
MaxObjectSizeInitFlag = "network.max_object_size"
|
MaxObjectSizeInitFlag = "network.max_object_size"
|
||||||
RefillGasAmountFlag = "gas"
|
RefillGasAmountFlag = "gas"
|
||||||
StorageWalletFlag = "storage-wallet"
|
StorageWalletFlag = "storage-wallet"
|
||||||
|
ContainerFeeInitFlag = "network.fee.container"
|
||||||
|
ContainerAliasFeeInitFlag = "network.fee.container_alias"
|
||||||
|
CandidateFeeInitFlag = "network.fee.candidate"
|
||||||
|
WithdrawFeeInitFlag = "network.fee.withdraw"
|
||||||
|
MaintenanceModeAllowedInitFlag = "network.maintenance_mode_allowed"
|
||||||
|
HomomorphicHashDisabledInitFlag = "network.homomorphic_hash_disabled"
|
||||||
|
|
||||||
SingleAccountName = "single"
|
SingleAccountName = "single"
|
||||||
CommitteeAccountName = "committee"
|
CommitteeAccountName = "committee"
|
||||||
|
|
49
cmd/frostfs-adm/internal/modules/morph/util/netmap.go
Normal file
49
cmd/frostfs-adm/internal/modules/morph/util/netmap.go
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
package util
|
||||||
|
|
||||||
|
import (
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/morph/client/netmap"
|
||||||
|
"github.com/nspcc-dev/neo-go/pkg/vm/stackitem"
|
||||||
|
"github.com/spf13/viper"
|
||||||
|
)
|
||||||
|
|
||||||
|
func GetDefaultNetmapContractConfigMap() map[string]any {
|
||||||
|
m := make(map[string]any)
|
||||||
|
m[netmap.EpochDurationConfig] = viper.GetInt64(EpochDurationInitFlag)
|
||||||
|
m[netmap.MaxObjectSizeConfig] = viper.GetInt64(MaxObjectSizeInitFlag)
|
||||||
|
m[netmap.ContainerFeeConfig] = viper.GetInt64(ContainerFeeInitFlag)
|
||||||
|
m[netmap.ContainerAliasFeeConfig] = viper.GetInt64(ContainerAliasFeeInitFlag)
|
||||||
|
m[netmap.IrCandidateFeeConfig] = viper.GetInt64(CandidateFeeInitFlag)
|
||||||
|
m[netmap.WithdrawFeeConfig] = viper.GetInt64(WithdrawFeeInitFlag)
|
||||||
|
m[netmap.HomomorphicHashingDisabledKey] = viper.GetBool(HomomorphicHashDisabledInitFlag)
|
||||||
|
m[netmap.MaintenanceModeAllowedConfig] = viper.GetBool(MaintenanceModeAllowedInitFlag)
|
||||||
|
return m
|
||||||
|
}
|
||||||
|
|
||||||
|
func ParseConfigFromNetmapContract(arr []stackitem.Item) (map[string][]byte, error) {
|
||||||
|
m := make(map[string][]byte, len(arr))
|
||||||
|
for _, param := range arr {
|
||||||
|
tuple, ok := param.Value().([]stackitem.Item)
|
||||||
|
if !ok || len(tuple) != 2 {
|
||||||
|
return nil, errors.New("invalid ListConfig response from netmap contract")
|
||||||
|
}
|
||||||
|
|
||||||
|
k, err := tuple[0].TryBytes()
|
||||||
|
if err != nil {
|
||||||
|
return nil, errors.New("invalid config key from netmap contract")
|
||||||
|
}
|
||||||
|
|
||||||
|
v, err := tuple[1].TryBytes()
|
||||||
|
if err != nil {
|
||||||
|
return nil, InvalidConfigValueErr(string(k))
|
||||||
|
}
|
||||||
|
m[string(k)] = v
|
||||||
|
}
|
||||||
|
return m, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func InvalidConfigValueErr(key string) error {
|
||||||
|
return fmt.Errorf("invalid %s config value from netmap contract", key)
|
||||||
|
}
|
Loading…
Reference in a new issue