From 5a084533fecb3c8b6e2c5ef4b98ff70825473ac7 Mon Sep 17 00:00:00 2001 From: Anton Nikiforov Date: Mon, 16 Jan 2023 12:20:16 +0300 Subject: [PATCH 1/3] [#1889] Move netmap.go and exit.go from `cli` to `cmd/internal/common` Signed-off-by: Anton Nikiforov --- Makefile | 2 +- cmd/frostfs-cli/internal/client/sdk.go | 3 +- cmd/frostfs-cli/internal/common/eacl.go | 7 ++-- cmd/frostfs-cli/internal/common/token.go | 5 ++- cmd/frostfs-cli/internal/key/raw.go | 6 +-- cmd/frostfs-cli/modules/accounting/balance.go | 6 +-- cmd/frostfs-cli/modules/acl/basic/print.go | 4 +- .../modules/acl/extended/create.go | 4 +- cmd/frostfs-cli/modules/acl/extended/print.go | 8 ++-- cmd/frostfs-cli/modules/bearer/create.go | 21 ++++++----- cmd/frostfs-cli/modules/container/create.go | 21 ++++++----- cmd/frostfs-cli/modules/container/delete.go | 15 ++++---- cmd/frostfs-cli/modules/container/get.go | 13 ++++--- cmd/frostfs-cli/modules/container/get_eacl.go | 9 +++-- cmd/frostfs-cli/modules/container/list.go | 6 +-- .../modules/container/list_objects.go | 4 +- cmd/frostfs-cli/modules/container/nodes.go | 8 ++-- cmd/frostfs-cli/modules/container/set_eacl.go | 11 +++--- cmd/frostfs-cli/modules/container/util.go | 7 ++-- .../modules/control/drop_objects.go | 4 +- .../modules/control/evacuate_shard.go | 4 +- .../modules/control/flush_cache.go | 4 +- .../modules/control/healthcheck.go | 8 ++-- .../modules/control/set_netmap_status.go | 5 ++- .../modules/control/shards_dump.go | 4 +- .../modules/control/shards_list.go | 6 +-- .../modules/control/shards_restore.go | 4 +- .../modules/control/shards_set_mode.go | 14 +++---- .../modules/control/synchronize_tree.go | 10 ++--- cmd/frostfs-cli/modules/control/util.go | 10 ++--- cmd/frostfs-cli/modules/netmap/get_epoch.go | 4 +- cmd/frostfs-cli/modules/netmap/netinfo.go | 4 +- cmd/frostfs-cli/modules/netmap/nodeinfo.go | 3 +- cmd/frostfs-cli/modules/netmap/snapshot.go | 6 +-- cmd/frostfs-cli/modules/object/delete.go | 10 ++--- cmd/frostfs-cli/modules/object/get.go | 12 +++--- cmd/frostfs-cli/modules/object/hash.go | 12 +++--- cmd/frostfs-cli/modules/object/head.go | 5 ++- cmd/frostfs-cli/modules/object/lock.go | 11 +++--- cmd/frostfs-cli/modules/object/put.go | 16 ++++---- cmd/frostfs-cli/modules/object/range.go | 12 +++--- cmd/frostfs-cli/modules/object/search.go | 6 +-- cmd/frostfs-cli/modules/object/util.go | 37 ++++++++++--------- cmd/frostfs-cli/modules/root.go | 5 ++- cmd/frostfs-cli/modules/session/create.go | 12 +++--- .../modules/storagegroup/delete.go | 4 +- cmd/frostfs-cli/modules/storagegroup/get.go | 5 ++- cmd/frostfs-cli/modules/storagegroup/list.go | 4 +- cmd/frostfs-cli/modules/storagegroup/put.go | 14 +++---- cmd/frostfs-cli/modules/storagegroup/util.go | 10 ++--- cmd/frostfs-cli/modules/tree/add.go | 12 +++--- cmd/frostfs-cli/modules/tree/add_by_path.go | 11 +++--- cmd/frostfs-cli/modules/tree/get_by_path.go | 9 +++-- cmd/frostfs-cli/modules/tree/list.go | 10 ++--- cmd/frostfs-cli/modules/util/convert_eacl.go | 7 ++-- cmd/frostfs-cli/modules/util/keyer.go | 6 +-- .../modules/util/locode_generate.go | 6 +-- cmd/frostfs-cli/modules/util/locode_info.go | 6 +-- cmd/frostfs-cli/modules/util/sign_bearer.go | 7 ++-- cmd/frostfs-cli/modules/util/sign_session.go | 13 ++++--- cmd/{frostfs-cli => }/internal/common/exit.go | 0 .../internal/common/netmap.go | 4 +- 62 files changed, 269 insertions(+), 247 deletions(-) rename cmd/{frostfs-cli => }/internal/common/exit.go (100%) rename cmd/{frostfs-cli => }/internal/common/netmap.go (89%) diff --git a/Makefile b/Makefile index fde03ed88..332edcab5 100644 --- a/Makefile +++ b/Makefile @@ -16,7 +16,7 @@ RELEASE = release DIRS = $(BIN) $(RELEASE) # List of binaries to build. -CMDS = $(notdir $(basename $(wildcard cmd/*))) +CMDS = $(notdir $(basename $(wildcard cmd/frostfs-*))) BINS = $(addprefix $(BIN)/, $(CMDS)) # .deb package versioning diff --git a/cmd/frostfs-cli/internal/client/sdk.go b/cmd/frostfs-cli/internal/client/sdk.go index b81a0837b..27ca356d1 100644 --- a/cmd/frostfs-cli/internal/client/sdk.go +++ b/cmd/frostfs-cli/internal/client/sdk.go @@ -10,6 +10,7 @@ import ( "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/common" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/commonflags" + commonCmd "github.com/TrueCloudLab/frostfs-node/cmd/internal/common" "github.com/TrueCloudLab/frostfs-node/pkg/network" "github.com/TrueCloudLab/frostfs-sdk-go/client" "github.com/spf13/cobra" @@ -23,7 +24,7 @@ var errInvalidEndpoint = errors.New("provided RPC endpoint is incorrect") func GetSDKClientByFlag(cmd *cobra.Command, key *ecdsa.PrivateKey, endpointFlag string) *client.Client { cli, err := getSDKClientByFlag(cmd, key, endpointFlag) if err != nil { - common.ExitOnErr(cmd, "can't create API client: %w", err) + commonCmd.ExitOnErr(cmd, "can't create API client: %w", err) } return cli } diff --git a/cmd/frostfs-cli/internal/common/eacl.go b/cmd/frostfs-cli/internal/common/eacl.go index 77f296374..7efb3ff86 100644 --- a/cmd/frostfs-cli/internal/common/eacl.go +++ b/cmd/frostfs-cli/internal/common/eacl.go @@ -4,6 +4,7 @@ import ( "errors" "os" + commonCmd "github.com/TrueCloudLab/frostfs-node/cmd/internal/common" "github.com/TrueCloudLab/frostfs-node/pkg/core/version" "github.com/TrueCloudLab/frostfs-sdk-go/eacl" versionSDK "github.com/TrueCloudLab/frostfs-sdk-go/version" @@ -16,13 +17,13 @@ var errUnsupportedEACLFormat = errors.New("unsupported eACL format") func ReadEACL(cmd *cobra.Command, eaclPath string) *eacl.Table { _, err := os.Stat(eaclPath) // check if `eaclPath` is an existing file if err != nil { - ExitOnErr(cmd, "", errors.New("incorrect path to file with EACL")) + commonCmd.ExitOnErr(cmd, "", errors.New("incorrect path to file with EACL")) } PrintVerbose(cmd, "Reading EACL from file: %s", eaclPath) data, err := os.ReadFile(eaclPath) - ExitOnErr(cmd, "can't read file with EACL: %w", err) + commonCmd.ExitOnErr(cmd, "can't read file with EACL: %w", err) table := eacl.NewTable() @@ -38,7 +39,7 @@ func ReadEACL(cmd *cobra.Command, eaclPath string) *eacl.Table { return table } - ExitOnErr(cmd, "", errUnsupportedEACLFormat) + commonCmd.ExitOnErr(cmd, "", errUnsupportedEACLFormat) return nil } diff --git a/cmd/frostfs-cli/internal/common/token.go b/cmd/frostfs-cli/internal/common/token.go index 5401e512b..53d2b55ac 100644 --- a/cmd/frostfs-cli/internal/common/token.go +++ b/cmd/frostfs-cli/internal/common/token.go @@ -6,6 +6,7 @@ import ( "fmt" "os" + commonCmd "github.com/TrueCloudLab/frostfs-node/cmd/internal/common" "github.com/TrueCloudLab/frostfs-sdk-go/bearer" "github.com/spf13/cobra" ) @@ -13,7 +14,7 @@ import ( // ReadBearerToken reads bearer token from the path provided in a specified flag. func ReadBearerToken(cmd *cobra.Command, flagname string) *bearer.Token { path, err := cmd.Flags().GetString(flagname) - ExitOnErr(cmd, "", err) + commonCmd.ExitOnErr(cmd, "", err) if len(path) == 0 { return nil @@ -24,7 +25,7 @@ func ReadBearerToken(cmd *cobra.Command, flagname string) *bearer.Token { var tok bearer.Token err = ReadBinaryOrJSON(cmd, &tok, path) - ExitOnErr(cmd, "invalid bearer token: %v", err) + commonCmd.ExitOnErr(cmd, "invalid bearer token: %v", err) return &tok } diff --git a/cmd/frostfs-cli/internal/key/raw.go b/cmd/frostfs-cli/internal/key/raw.go index f467ca95f..ceea935fa 100644 --- a/cmd/frostfs-cli/internal/key/raw.go +++ b/cmd/frostfs-cli/internal/key/raw.go @@ -6,8 +6,8 @@ import ( "fmt" "os" - "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/common" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/commonflags" + commonCmd "github.com/TrueCloudLab/frostfs-node/cmd/internal/common" "github.com/nspcc-dev/neo-go/pkg/crypto/keys" "github.com/nspcc-dev/neo-go/pkg/wallet" "github.com/spf13/cobra" @@ -21,7 +21,7 @@ var errCantGenerateKey = errors.New("can't generate new private key") // This function assumes that all flags were bind to viper in a `PersistentPreRun`. func Get(cmd *cobra.Command) *ecdsa.PrivateKey { pk, err := get(cmd) - common.ExitOnErr(cmd, "can't fetch private key: %w", err) + commonCmd.ExitOnErr(cmd, "can't fetch private key: %w", err) return pk } @@ -46,7 +46,7 @@ func get(cmd *cobra.Command) (*ecdsa.PrivateKey, error) { // GetOrGenerate is similar to get but generates a new key if commonflags.GenerateKey is set. func GetOrGenerate(cmd *cobra.Command) *ecdsa.PrivateKey { pk, err := getOrGenerate(cmd) - common.ExitOnErr(cmd, "can't fetch private key: %w", err) + commonCmd.ExitOnErr(cmd, "can't fetch private key: %w", err) return pk } diff --git a/cmd/frostfs-cli/modules/accounting/balance.go b/cmd/frostfs-cli/modules/accounting/balance.go index b4efdfb17..bb80a2b3c 100644 --- a/cmd/frostfs-cli/modules/accounting/balance.go +++ b/cmd/frostfs-cli/modules/accounting/balance.go @@ -4,9 +4,9 @@ import ( "math/big" internalclient "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/client" - "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/common" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/commonflags" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/key" + commonCmd "github.com/TrueCloudLab/frostfs-node/cmd/internal/common" "github.com/TrueCloudLab/frostfs-node/pkg/util/precision" "github.com/TrueCloudLab/frostfs-sdk-go/accounting" "github.com/TrueCloudLab/frostfs-sdk-go/user" @@ -32,7 +32,7 @@ var accountingBalanceCmd = &cobra.Command{ if balanceOwner == "" { user.IDFromKey(&idUser, pk.PublicKey) } else { - common.ExitOnErr(cmd, "can't decode owner ID wallet address: %w", idUser.DecodeString(balanceOwner)) + commonCmd.ExitOnErr(cmd, "can't decode owner ID wallet address: %w", idUser.DecodeString(balanceOwner)) } cli := internalclient.GetSDKClientByFlag(cmd, pk, commonflags.RPC) @@ -42,7 +42,7 @@ var accountingBalanceCmd = &cobra.Command{ prm.SetAccount(idUser) res, err := internalclient.BalanceOf(prm) - common.ExitOnErr(cmd, "rpc error: %w", err) + commonCmd.ExitOnErr(cmd, "rpc error: %w", err) // print to stdout prettyPrintDecimal(cmd, res.Balance()) diff --git a/cmd/frostfs-cli/modules/acl/basic/print.go b/cmd/frostfs-cli/modules/acl/basic/print.go index 2f0b32512..7d76251a3 100644 --- a/cmd/frostfs-cli/modules/acl/basic/print.go +++ b/cmd/frostfs-cli/modules/acl/basic/print.go @@ -1,8 +1,8 @@ package basic import ( - "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/common" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/modules/util" + commonCmd "github.com/TrueCloudLab/frostfs-node/cmd/internal/common" "github.com/TrueCloudLab/frostfs-sdk-go/container/acl" "github.com/spf13/cobra" ) @@ -23,6 +23,6 @@ InnerRing members are allowed to data audit ops only: func printACL(cmd *cobra.Command, args []string) { var bacl acl.Basic - common.ExitOnErr(cmd, "unable to parse basic acl: %w", bacl.DecodeString(args[0])) + commonCmd.ExitOnErr(cmd, "unable to parse basic acl: %w", bacl.DecodeString(args[0])) util.PrettyPrintTableBACL(cmd, &bacl) } diff --git a/cmd/frostfs-cli/modules/acl/extended/create.go b/cmd/frostfs-cli/modules/acl/extended/create.go index c363cd266..dc38f9faf 100644 --- a/cmd/frostfs-cli/modules/acl/extended/create.go +++ b/cmd/frostfs-cli/modules/acl/extended/create.go @@ -6,9 +6,9 @@ import ( "os" "strings" - "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/common" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/commonflags" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/modules/util" + commonCmd "github.com/TrueCloudLab/frostfs-node/cmd/internal/common" cid "github.com/TrueCloudLab/frostfs-sdk-go/container/id" "github.com/TrueCloudLab/frostfs-sdk-go/eacl" "github.com/spf13/cobra" @@ -84,7 +84,7 @@ func createEACL(cmd *cobra.Command, _ []string) { } tb := eacl.NewTable() - common.ExitOnErr(cmd, "unable to parse provided rules: %w", util.ParseEACLRules(tb, rules)) + commonCmd.ExitOnErr(cmd, "unable to parse provided rules: %w", util.ParseEACLRules(tb, rules)) tb.SetCID(containerID) diff --git a/cmd/frostfs-cli/modules/acl/extended/print.go b/cmd/frostfs-cli/modules/acl/extended/print.go index 1072791cd..0008a1233 100644 --- a/cmd/frostfs-cli/modules/acl/extended/print.go +++ b/cmd/frostfs-cli/modules/acl/extended/print.go @@ -4,8 +4,8 @@ import ( "os" "strings" - "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/common" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/modules/util" + commonCmd "github.com/TrueCloudLab/frostfs-node/cmd/internal/common" "github.com/TrueCloudLab/frostfs-sdk-go/eacl" "github.com/spf13/cobra" ) @@ -27,12 +27,12 @@ func printEACL(cmd *cobra.Command, _ []string) { file, _ := cmd.Flags().GetString("file") eaclTable := new(eacl.Table) data, err := os.ReadFile(file) - common.ExitOnErr(cmd, "can't read file with EACL: %w", err) + commonCmd.ExitOnErr(cmd, "can't read file with EACL: %w", err) if strings.HasSuffix(file, ".json") { - common.ExitOnErr(cmd, "unable to parse json: %w", eaclTable.UnmarshalJSON(data)) + commonCmd.ExitOnErr(cmd, "unable to parse json: %w", eaclTable.UnmarshalJSON(data)) } else { rules := strings.Split(strings.TrimSpace(string(data)), "\n") - common.ExitOnErr(cmd, "can't parse file with EACL: %w", util.ParseEACLRules(eaclTable, rules)) + commonCmd.ExitOnErr(cmd, "can't parse file with EACL: %w", util.ParseEACLRules(eaclTable, rules)) } util.PrettyPrintTableEACL(cmd, eaclTable) } diff --git a/cmd/frostfs-cli/modules/bearer/create.go b/cmd/frostfs-cli/modules/bearer/create.go index 0fd83e36a..d6b331695 100644 --- a/cmd/frostfs-cli/modules/bearer/create.go +++ b/cmd/frostfs-cli/modules/bearer/create.go @@ -10,6 +10,7 @@ import ( internalclient "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/client" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/common" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/commonflags" + commonCmd "github.com/TrueCloudLab/frostfs-node/cmd/internal/common" "github.com/TrueCloudLab/frostfs-sdk-go/bearer" eaclSDK "github.com/TrueCloudLab/frostfs-sdk-go/eacl" "github.com/TrueCloudLab/frostfs-sdk-go/user" @@ -58,13 +59,13 @@ func init() { func createToken(cmd *cobra.Command, _ []string) { iat, iatRelative, err := common.ParseEpoch(cmd, issuedAtFlag) - common.ExitOnErr(cmd, "can't parse --"+issuedAtFlag+" flag: %w", err) + commonCmd.ExitOnErr(cmd, "can't parse --"+issuedAtFlag+" flag: %w", err) exp, expRelative, err := common.ParseEpoch(cmd, commonflags.ExpireAt) - common.ExitOnErr(cmd, "can't parse --"+commonflags.ExpireAt+" flag: %w", err) + commonCmd.ExitOnErr(cmd, "can't parse --"+commonflags.ExpireAt+" flag: %w", err) nvb, nvbRelative, err := common.ParseEpoch(cmd, notValidBeforeFlag) - common.ExitOnErr(cmd, "can't parse --"+notValidBeforeFlag+" flag: %w", err) + commonCmd.ExitOnErr(cmd, "can't parse --"+notValidBeforeFlag+" flag: %w", err) if iatRelative || expRelative || nvbRelative { ctx, cancel := context.WithTimeout(context.Background(), time.Second*30) @@ -72,7 +73,7 @@ func createToken(cmd *cobra.Command, _ []string) { endpoint, _ := cmd.Flags().GetString(commonflags.RPC) currEpoch, err := internalclient.GetCurrentEpoch(ctx, cmd, endpoint) - common.ExitOnErr(cmd, "can't fetch current epoch: %w", err) + commonCmd.ExitOnErr(cmd, "can't fetch current epoch: %w", err) if iatRelative { iat += currEpoch @@ -85,14 +86,14 @@ func createToken(cmd *cobra.Command, _ []string) { } } if exp < nvb { - common.ExitOnErr(cmd, "", + commonCmd.ExitOnErr(cmd, "", fmt.Errorf("expiration epoch is less than not-valid-before epoch: %d < %d", exp, nvb)) } ownerStr, _ := cmd.Flags().GetString(ownerFlag) var ownerID user.ID - common.ExitOnErr(cmd, "can't parse recipient: %w", ownerID.DecodeString(ownerStr)) + commonCmd.ExitOnErr(cmd, "can't parse recipient: %w", ownerID.DecodeString(ownerStr)) var b bearer.Token b.SetExp(exp) @@ -104,8 +105,8 @@ func createToken(cmd *cobra.Command, _ []string) { if eaclPath != "" { table := eaclSDK.NewTable() raw, err := os.ReadFile(eaclPath) - common.ExitOnErr(cmd, "can't read extended ACL file: %w", err) - common.ExitOnErr(cmd, "can't parse extended ACL: %w", json.Unmarshal(raw, table)) + commonCmd.ExitOnErr(cmd, "can't read extended ACL file: %w", err) + commonCmd.ExitOnErr(cmd, "can't parse extended ACL: %w", json.Unmarshal(raw, table)) b.SetEACLTable(*table) } @@ -114,12 +115,12 @@ func createToken(cmd *cobra.Command, _ []string) { toJSON, _ := cmd.Flags().GetBool(jsonFlag) if toJSON { data, err = json.Marshal(b) - common.ExitOnErr(cmd, "can't mashal token to JSON: %w", err) + commonCmd.ExitOnErr(cmd, "can't mashal token to JSON: %w", err) } else { data = b.Marshal() } out, _ := cmd.Flags().GetString(outFlag) err = os.WriteFile(out, data, 0644) - common.ExitOnErr(cmd, "can't write token to file: %w", err) + commonCmd.ExitOnErr(cmd, "can't write token to file: %w", err) } diff --git a/cmd/frostfs-cli/modules/container/create.go b/cmd/frostfs-cli/modules/container/create.go index b4b842912..9a77e8727 100644 --- a/cmd/frostfs-cli/modules/container/create.go +++ b/cmd/frostfs-cli/modules/container/create.go @@ -11,6 +11,7 @@ import ( "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/common" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/commonflags" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/key" + commonCmd "github.com/TrueCloudLab/frostfs-node/cmd/internal/common" "github.com/TrueCloudLab/frostfs-sdk-go/container" "github.com/TrueCloudLab/frostfs-sdk-go/container/acl" "github.com/TrueCloudLab/frostfs-sdk-go/netmap" @@ -37,7 +38,7 @@ var createContainerCmd = &cobra.Command{ It will be stored in sidechain when inner ring will accepts it.`, Run: func(cmd *cobra.Command, args []string) { placementPolicy, err := parseContainerPolicy(cmd, containerPolicy) - common.ExitOnErr(cmd, "", err) + commonCmd.ExitOnErr(cmd, "", err) key := key.Get(cmd) cli := internalclient.GetSDKClientByFlag(cmd, key, commonflags.RPC) @@ -47,16 +48,16 @@ It will be stored in sidechain when inner ring will accepts it.`, prm.SetClient(cli) resmap, err := internalclient.NetMapSnapshot(prm) - common.ExitOnErr(cmd, "unable to get netmap snapshot to validate container placement, "+ + commonCmd.ExitOnErr(cmd, "unable to get netmap snapshot to validate container placement, "+ "use --force option to skip this check: %w", err) nodesByRep, err := resmap.NetMap().ContainerNodes(*placementPolicy, nil) - common.ExitOnErr(cmd, "could not build container nodes based on given placement policy, "+ + commonCmd.ExitOnErr(cmd, "could not build container nodes based on given placement policy, "+ "use --force option to skip this check: %w", err) for i, nodes := range nodesByRep { if placementPolicy.ReplicaNumberByIndex(i) > uint32(len(nodes)) { - common.ExitOnErr(cmd, "", fmt.Errorf( + commonCmd.ExitOnErr(cmd, "", fmt.Errorf( "the number of nodes '%d' in selector is not enough for the number of replicas '%d', "+ "use --force option to skip this check", len(nodes), @@ -70,7 +71,7 @@ It will be stored in sidechain when inner ring will accepts it.`, var subnetID subnetid.ID err = subnetID.DecodeString(containerSubnet) - common.ExitOnErr(cmd, "could not parse subnetID: %w", err) + commonCmd.ExitOnErr(cmd, "could not parse subnetID: %w", err) placementPolicy.RestrictSubnet(subnetID) } @@ -79,10 +80,10 @@ It will be stored in sidechain when inner ring will accepts it.`, cnr.Init() err = parseAttributes(&cnr, containerAttributes) - common.ExitOnErr(cmd, "", err) + commonCmd.ExitOnErr(cmd, "", err) var basicACL acl.Basic - common.ExitOnErr(cmd, "decode basic ACL string: %w", basicACL.DecodeString(containerACL)) + commonCmd.ExitOnErr(cmd, "decode basic ACL string: %w", basicACL.DecodeString(containerACL)) tok := getSession(cmd) @@ -104,7 +105,7 @@ It will be stored in sidechain when inner ring will accepts it.`, syncContainerPrm.SetContainer(&cnr) _, err = internalclient.SyncContainerSettings(syncContainerPrm) - common.ExitOnErr(cmd, "syncing container's settings rpc error: %w", err) + commonCmd.ExitOnErr(cmd, "syncing container's settings rpc error: %w", err) var putPrm internalclient.PutContainerPrm putPrm.SetClient(cli) @@ -115,7 +116,7 @@ It will be stored in sidechain when inner ring will accepts it.`, } res, err := internalclient.PutContainer(putPrm) - common.ExitOnErr(cmd, "put container rpc error: %w", err) + commonCmd.ExitOnErr(cmd, "put container rpc error: %w", err) id := res.ID() @@ -138,7 +139,7 @@ It will be stored in sidechain when inner ring will accepts it.`, } } - common.ExitOnErr(cmd, "", errCreateTimeout) + commonCmd.ExitOnErr(cmd, "", errCreateTimeout) } }, } diff --git a/cmd/frostfs-cli/modules/container/delete.go b/cmd/frostfs-cli/modules/container/delete.go index 4769a4d7d..617da2a45 100644 --- a/cmd/frostfs-cli/modules/container/delete.go +++ b/cmd/frostfs-cli/modules/container/delete.go @@ -8,6 +8,7 @@ import ( "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/common" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/commonflags" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/key" + commonCmd "github.com/TrueCloudLab/frostfs-node/cmd/internal/common" objectSDK "github.com/TrueCloudLab/frostfs-sdk-go/object" "github.com/TrueCloudLab/frostfs-sdk-go/user" "github.com/spf13/cobra" @@ -34,7 +35,7 @@ Only owner of the container has a permission to remove container.`, getPrm.SetContainer(id) resGet, err := internalclient.GetContainer(getPrm) - common.ExitOnErr(cmd, "can't get the container: %w", err) + commonCmd.ExitOnErr(cmd, "can't get the container: %w", err) owner := resGet.Container().Owner() @@ -42,7 +43,7 @@ Only owner of the container has a permission to remove container.`, common.PrintVerbose(cmd, "Checking session issuer...") if !tok.Issuer().Equals(owner) { - common.ExitOnErr(cmd, "", fmt.Errorf("session issuer differs with the container owner: expected %s, has %s", owner, tok.Issuer())) + commonCmd.ExitOnErr(cmd, "", fmt.Errorf("session issuer differs with the container owner: expected %s, has %s", owner, tok.Issuer())) } } else { common.PrintVerbose(cmd, "Checking provided account...") @@ -51,7 +52,7 @@ Only owner of the container has a permission to remove container.`, user.IDFromKey(&acc, pk.PublicKey) if !acc.Equals(owner) { - common.ExitOnErr(cmd, "", fmt.Errorf("provided account differs with the container owner: expected %s, has %s", owner, acc)) + commonCmd.ExitOnErr(cmd, "", fmt.Errorf("provided account differs with the container owner: expected %s, has %s", owner, acc)) } } @@ -72,10 +73,10 @@ Only owner of the container has a permission to remove container.`, common.PrintVerbose(cmd, "Searching for LOCK objects...") res, err := internalclient.SearchObjects(searchPrm) - common.ExitOnErr(cmd, "can't search for LOCK objects: %w", err) + commonCmd.ExitOnErr(cmd, "can't search for LOCK objects: %w", err) if len(res.IDList()) != 0 { - common.ExitOnErr(cmd, "", + commonCmd.ExitOnErr(cmd, "", fmt.Errorf("Container wasn't removed because LOCK objects were found.\n"+ "Use --%s flag to remove anyway.", commonflags.ForceFlag)) } @@ -91,7 +92,7 @@ Only owner of the container has a permission to remove container.`, } _, err := internalclient.DeleteContainer(delPrm) - common.ExitOnErr(cmd, "rpc error: %w", err) + commonCmd.ExitOnErr(cmd, "rpc error: %w", err) cmd.Println("container delete method invoked") @@ -112,7 +113,7 @@ Only owner of the container has a permission to remove container.`, } } - common.ExitOnErr(cmd, "", errDeleteTimeout) + commonCmd.ExitOnErr(cmd, "", errDeleteTimeout) } }, } diff --git a/cmd/frostfs-cli/modules/container/get.go b/cmd/frostfs-cli/modules/container/get.go index e14e5e769..9a72c5ad0 100644 --- a/cmd/frostfs-cli/modules/container/get.go +++ b/cmd/frostfs-cli/modules/container/get.go @@ -9,6 +9,7 @@ import ( "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/commonflags" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/key" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/modules/util" + commonCmd "github.com/TrueCloudLab/frostfs-node/cmd/internal/common" "github.com/TrueCloudLab/frostfs-sdk-go/container" "github.com/TrueCloudLab/frostfs-sdk-go/container/acl" cid "github.com/TrueCloudLab/frostfs-sdk-go/container/id" @@ -44,13 +45,13 @@ var getContainerInfoCmd = &cobra.Command{ if containerJSON { data, err = cnr.MarshalJSON() - common.ExitOnErr(cmd, "can't JSON encode container: %w", err) + commonCmd.ExitOnErr(cmd, "can't JSON encode container: %w", err) } else { data = cnr.Marshal() } err = os.WriteFile(containerPathTo, data, 0644) - common.ExitOnErr(cmd, "can't write container to file: %w", err) + commonCmd.ExitOnErr(cmd, "can't write container to file: %w", err) } }, } @@ -96,7 +97,7 @@ func prettyPrintContainer(cmd *cobra.Command, cnr container.Container, jsonEncod }) cmd.Println("placement policy:") - common.ExitOnErr(cmd, "write policy: %w", cnr.PlacementPolicy().WriteStringTo((*stringWriter)(cmd))) + commonCmd.ExitOnErr(cmd, "write policy: %w", cnr.PlacementPolicy().WriteStringTo((*stringWriter)(cmd))) cmd.Println() } @@ -137,10 +138,10 @@ func getContainer(cmd *cobra.Command) (container.Container, *ecdsa.PrivateKey) { var pk *ecdsa.PrivateKey if containerPathFrom != "" { data, err := os.ReadFile(containerPathFrom) - common.ExitOnErr(cmd, "can't read file: %w", err) + commonCmd.ExitOnErr(cmd, "can't read file: %w", err) err = cnr.Unmarshal(data) - common.ExitOnErr(cmd, "can't unmarshal container: %w", err) + commonCmd.ExitOnErr(cmd, "can't unmarshal container: %w", err) } else { id := parseContainerID(cmd) pk = key.GetOrGenerate(cmd) @@ -151,7 +152,7 @@ func getContainer(cmd *cobra.Command) (container.Container, *ecdsa.PrivateKey) { prm.SetContainer(id) res, err := internalclient.GetContainer(prm) - common.ExitOnErr(cmd, "rpc error: %w", err) + commonCmd.ExitOnErr(cmd, "rpc error: %w", err) cnr = res.Container() } diff --git a/cmd/frostfs-cli/modules/container/get_eacl.go b/cmd/frostfs-cli/modules/container/get_eacl.go index e8cbf1f19..94c9d5a1f 100644 --- a/cmd/frostfs-cli/modules/container/get_eacl.go +++ b/cmd/frostfs-cli/modules/container/get_eacl.go @@ -7,6 +7,7 @@ import ( "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/common" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/commonflags" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/key" + commonCmd "github.com/TrueCloudLab/frostfs-node/cmd/internal/common" "github.com/spf13/cobra" ) @@ -24,7 +25,7 @@ var getExtendedACLCmd = &cobra.Command{ eaclPrm.SetContainer(id) res, err := internalclient.EACL(eaclPrm) - common.ExitOnErr(cmd, "rpc error: %w", err) + commonCmd.ExitOnErr(cmd, "rpc error: %w", err) eaclTable := res.EACL() @@ -39,16 +40,16 @@ var getExtendedACLCmd = &cobra.Command{ if containerJSON { data, err = eaclTable.MarshalJSON() - common.ExitOnErr(cmd, "can't encode to JSON: %w", err) + commonCmd.ExitOnErr(cmd, "can't encode to JSON: %w", err) } else { data, err = eaclTable.Marshal() - common.ExitOnErr(cmd, "can't encode to binary: %w", err) + commonCmd.ExitOnErr(cmd, "can't encode to binary: %w", err) } cmd.Println("dumping data to file:", containerPathTo) err = os.WriteFile(containerPathTo, data, 0644) - common.ExitOnErr(cmd, "could not write eACL to file: %w", err) + commonCmd.ExitOnErr(cmd, "could not write eACL to file: %w", err) }, } diff --git a/cmd/frostfs-cli/modules/container/list.go b/cmd/frostfs-cli/modules/container/list.go index c0f1283e9..e0c45e90b 100644 --- a/cmd/frostfs-cli/modules/container/list.go +++ b/cmd/frostfs-cli/modules/container/list.go @@ -5,9 +5,9 @@ import ( "github.com/TrueCloudLab/frostfs-api-go/v2/container" internalclient "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/client" - "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/common" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/commonflags" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/key" + commonCmd "github.com/TrueCloudLab/frostfs-node/cmd/internal/common" "github.com/TrueCloudLab/frostfs-sdk-go/user" "github.com/spf13/cobra" ) @@ -37,7 +37,7 @@ var listContainersCmd = &cobra.Command{ user.IDFromKey(&idUser, key.PublicKey) } else { err := idUser.DecodeString(flagVarListContainerOwner) - common.ExitOnErr(cmd, "invalid user ID: %w", err) + commonCmd.ExitOnErr(cmd, "invalid user ID: %w", err) } cli := internalclient.GetSDKClientByFlag(cmd, key, commonflags.RPC) @@ -47,7 +47,7 @@ var listContainersCmd = &cobra.Command{ prm.SetAccount(idUser) res, err := internalclient.ListContainers(prm) - common.ExitOnErr(cmd, "rpc error: %w", err) + commonCmd.ExitOnErr(cmd, "rpc error: %w", err) var prmGet internalclient.GetContainerPrm prmGet.SetClient(cli) diff --git a/cmd/frostfs-cli/modules/container/list_objects.go b/cmd/frostfs-cli/modules/container/list_objects.go index 0cbe807d0..063595505 100644 --- a/cmd/frostfs-cli/modules/container/list_objects.go +++ b/cmd/frostfs-cli/modules/container/list_objects.go @@ -5,10 +5,10 @@ import ( v2object "github.com/TrueCloudLab/frostfs-api-go/v2/object" internalclient "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/client" - "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/common" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/commonflags" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/key" objectCli "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/modules/object" + commonCmd "github.com/TrueCloudLab/frostfs-node/cmd/internal/common" "github.com/TrueCloudLab/frostfs-sdk-go/object" oid "github.com/TrueCloudLab/frostfs-sdk-go/object/id" "github.com/spf13/cobra" @@ -52,7 +52,7 @@ var listContainerObjectsCmd = &cobra.Command{ prmSearch.SetFilters(*filters) res, err := internalclient.SearchObjects(prmSearch) - common.ExitOnErr(cmd, "rpc error: %w", err) + commonCmd.ExitOnErr(cmd, "rpc error: %w", err) objectIDs := res.IDList() diff --git a/cmd/frostfs-cli/modules/container/nodes.go b/cmd/frostfs-cli/modules/container/nodes.go index 351f0c611..c273f3cba 100644 --- a/cmd/frostfs-cli/modules/container/nodes.go +++ b/cmd/frostfs-cli/modules/container/nodes.go @@ -4,9 +4,9 @@ import ( "crypto/sha256" internalclient "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/client" - "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/common" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/commonflags" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/key" + commonCmd "github.com/TrueCloudLab/frostfs-node/cmd/internal/common" containerAPI "github.com/TrueCloudLab/frostfs-sdk-go/container" cid "github.com/TrueCloudLab/frostfs-sdk-go/container/id" "github.com/TrueCloudLab/frostfs-sdk-go/netmap" @@ -32,7 +32,7 @@ var containerNodesCmd = &cobra.Command{ prm.SetClient(cli) resmap, err := internalclient.NetMapSnapshot(prm) - common.ExitOnErr(cmd, "unable to get netmap snapshot", err) + commonCmd.ExitOnErr(cmd, "unable to get netmap snapshot", err) var id cid.ID containerAPI.CalculateID(&id, cnr) @@ -43,12 +43,12 @@ var containerNodesCmd = &cobra.Command{ var cnrNodes [][]netmap.NodeInfo cnrNodes, err = resmap.NetMap().ContainerNodes(policy, binCnr) - common.ExitOnErr(cmd, "could not build container nodes for given container: %w", err) + commonCmd.ExitOnErr(cmd, "could not build container nodes for given container: %w", err) for i := range cnrNodes { cmd.Printf("Descriptor #%d, REP %d:\n", i+1, policy.ReplicaNumberByIndex(i)) for j := range cnrNodes[i] { - common.PrettyPrintNodeInfo(cmd, cnrNodes[i][j], j, "\t", short) + commonCmd.PrettyPrintNodeInfo(cmd, cnrNodes[i][j], j, "\t", short) } } }, diff --git a/cmd/frostfs-cli/modules/container/set_eacl.go b/cmd/frostfs-cli/modules/container/set_eacl.go index a5791d5dd..3d3f14570 100644 --- a/cmd/frostfs-cli/modules/container/set_eacl.go +++ b/cmd/frostfs-cli/modules/container/set_eacl.go @@ -9,6 +9,7 @@ import ( "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/common" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/commonflags" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/key" + commonCmd "github.com/TrueCloudLab/frostfs-node/cmd/internal/common" "github.com/spf13/cobra" ) @@ -38,10 +39,10 @@ Container ID in EACL table will be substituted with ID from the CLI.`, cmd.Println("Checking the ability to modify access rights in the container...") extendable, err := internalclient.IsACLExtendable(cli, id) - common.ExitOnErr(cmd, "Extensibility check failure: %w", err) + commonCmd.ExitOnErr(cmd, "Extensibility check failure: %w", err) if !extendable { - common.ExitOnErr(cmd, "", errors.New("container ACL is immutable")) + commonCmd.ExitOnErr(cmd, "", errors.New("container ACL is immutable")) } cmd.Println("ACL extension is enabled in the container, continue processing.") @@ -56,11 +57,11 @@ Container ID in EACL table will be substituted with ID from the CLI.`, } _, err := internalclient.SetEACL(setEACLPrm) - common.ExitOnErr(cmd, "rpc error: %w", err) + commonCmd.ExitOnErr(cmd, "rpc error: %w", err) if containerAwait { exp, err := eaclTable.Marshal() - common.ExitOnErr(cmd, "broken EACL table: %w", err) + commonCmd.ExitOnErr(cmd, "broken EACL table: %w", err) cmd.Println("awaiting...") @@ -87,7 +88,7 @@ Container ID in EACL table will be substituted with ID from the CLI.`, } } - common.ExitOnErr(cmd, "", errSetEACLTimeout) + commonCmd.ExitOnErr(cmd, "", errSetEACLTimeout) } }, } diff --git a/cmd/frostfs-cli/modules/container/util.go b/cmd/frostfs-cli/modules/container/util.go index 5c3927b26..6ea35acee 100644 --- a/cmd/frostfs-cli/modules/container/util.go +++ b/cmd/frostfs-cli/modules/container/util.go @@ -5,6 +5,7 @@ import ( "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/common" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/commonflags" + commonCmd "github.com/TrueCloudLab/frostfs-node/cmd/internal/common" cid "github.com/TrueCloudLab/frostfs-sdk-go/container/id" "github.com/TrueCloudLab/frostfs-sdk-go/session" "github.com/spf13/cobra" @@ -24,12 +25,12 @@ var ( func parseContainerID(cmd *cobra.Command) cid.ID { if containerID == "" { - common.ExitOnErr(cmd, "", errors.New("container ID is not set")) + commonCmd.ExitOnErr(cmd, "", errors.New("container ID is not set")) } var id cid.ID err := id.DecodeString(containerID) - common.ExitOnErr(cmd, "can't decode container ID value: %w", err) + commonCmd.ExitOnErr(cmd, "can't decode container ID value: %w", err) return id } @@ -49,7 +50,7 @@ func getSession(cmd *cobra.Command) *session.Container { var res session.Container err := common.ReadBinaryOrJSON(cmd, &res, path) - common.ExitOnErr(cmd, "read container session: %v", err) + commonCmd.ExitOnErr(cmd, "read container session: %v", err) common.PrintVerbose(cmd, "Session successfully read.") diff --git a/cmd/frostfs-cli/modules/control/drop_objects.go b/cmd/frostfs-cli/modules/control/drop_objects.go index f2c0a0461..fc8afd0fb 100644 --- a/cmd/frostfs-cli/modules/control/drop_objects.go +++ b/cmd/frostfs-cli/modules/control/drop_objects.go @@ -2,8 +2,8 @@ package control import ( rawclient "github.com/TrueCloudLab/frostfs-api-go/v2/rpc/client" - "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/common" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/key" + commonCmd "github.com/TrueCloudLab/frostfs-node/cmd/internal/common" "github.com/TrueCloudLab/frostfs-node/pkg/services/control" "github.com/spf13/cobra" ) @@ -40,7 +40,7 @@ var dropObjectsCmd = &cobra.Command{ resp, err = control.DropObjects(client, req) return err }) - common.ExitOnErr(cmd, "", err) + commonCmd.ExitOnErr(cmd, "", err) verifyResponse(cmd, resp.GetSignature(), resp.GetBody()) diff --git a/cmd/frostfs-cli/modules/control/evacuate_shard.go b/cmd/frostfs-cli/modules/control/evacuate_shard.go index 89366f418..d7dad460a 100644 --- a/cmd/frostfs-cli/modules/control/evacuate_shard.go +++ b/cmd/frostfs-cli/modules/control/evacuate_shard.go @@ -2,8 +2,8 @@ package control import ( "github.com/TrueCloudLab/frostfs-api-go/v2/rpc/client" - "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/common" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/key" + commonCmd "github.com/TrueCloudLab/frostfs-node/cmd/internal/common" "github.com/TrueCloudLab/frostfs-node/pkg/services/control" "github.com/spf13/cobra" ) @@ -32,7 +32,7 @@ func evacuateShard(cmd *cobra.Command, _ []string) { resp, err = control.EvacuateShard(client, req) return err }) - common.ExitOnErr(cmd, "rpc error: %w", err) + commonCmd.ExitOnErr(cmd, "rpc error: %w", err) cmd.Printf("Objects moved: %d\n", resp.GetBody().GetCount()) diff --git a/cmd/frostfs-cli/modules/control/flush_cache.go b/cmd/frostfs-cli/modules/control/flush_cache.go index fdf33244e..d86c91cb8 100644 --- a/cmd/frostfs-cli/modules/control/flush_cache.go +++ b/cmd/frostfs-cli/modules/control/flush_cache.go @@ -2,8 +2,8 @@ package control import ( "github.com/TrueCloudLab/frostfs-api-go/v2/rpc/client" - "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/common" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/key" + commonCmd "github.com/TrueCloudLab/frostfs-node/cmd/internal/common" "github.com/TrueCloudLab/frostfs-node/pkg/services/control" "github.com/spf13/cobra" ) @@ -31,7 +31,7 @@ func flushCache(cmd *cobra.Command, _ []string) { resp, err = control.FlushCache(client, req) return err }) - common.ExitOnErr(cmd, "rpc error: %w", err) + commonCmd.ExitOnErr(cmd, "rpc error: %w", err) verifyResponse(cmd, resp.GetSignature(), resp.GetBody()) diff --git a/cmd/frostfs-cli/modules/control/healthcheck.go b/cmd/frostfs-cli/modules/control/healthcheck.go index 92fc9b066..deb54454f 100644 --- a/cmd/frostfs-cli/modules/control/healthcheck.go +++ b/cmd/frostfs-cli/modules/control/healthcheck.go @@ -4,8 +4,8 @@ import ( "crypto/ecdsa" rawclient "github.com/TrueCloudLab/frostfs-api-go/v2/rpc/client" - "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/common" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/key" + commonCmd "github.com/TrueCloudLab/frostfs-node/cmd/internal/common" "github.com/TrueCloudLab/frostfs-node/pkg/services/control" ircontrol "github.com/TrueCloudLab/frostfs-node/pkg/services/control/ir" ircontrolsrv "github.com/TrueCloudLab/frostfs-node/pkg/services/control/ir/server" @@ -52,7 +52,7 @@ func healthCheck(cmd *cobra.Command, _ []string) { resp, err = control.HealthCheck(client, req) return err }) - common.ExitOnErr(cmd, "rpc error: %w", err) + commonCmd.ExitOnErr(cmd, "rpc error: %w", err) verifyResponse(cmd, resp.GetSignature(), resp.GetBody()) @@ -66,14 +66,14 @@ func healthCheckIR(cmd *cobra.Command, key *ecdsa.PrivateKey, c *client.Client) req.SetBody(new(ircontrol.HealthCheckRequest_Body)) err := ircontrolsrv.SignMessage(key, req) - common.ExitOnErr(cmd, "could not sign request: %w", err) + commonCmd.ExitOnErr(cmd, "could not sign request: %w", err) var resp *ircontrol.HealthCheckResponse err = c.ExecRaw(func(client *rawclient.Client) error { resp, err = ircontrol.HealthCheck(client, req) return err }) - common.ExitOnErr(cmd, "rpc error: %w", err) + commonCmd.ExitOnErr(cmd, "rpc error: %w", err) verifyResponse(cmd, resp.GetSignature(), resp.GetBody()) diff --git a/cmd/frostfs-cli/modules/control/set_netmap_status.go b/cmd/frostfs-cli/modules/control/set_netmap_status.go index cb70ddfe6..8c1d2b28f 100644 --- a/cmd/frostfs-cli/modules/control/set_netmap_status.go +++ b/cmd/frostfs-cli/modules/control/set_netmap_status.go @@ -7,6 +7,7 @@ import ( "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/common" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/commonflags" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/key" + commonCmd "github.com/TrueCloudLab/frostfs-node/cmd/internal/common" "github.com/TrueCloudLab/frostfs-node/pkg/services/control" "github.com/spf13/cobra" ) @@ -57,7 +58,7 @@ func setNetmapStatus(cmd *cobra.Command, _ []string) { switch st, _ := cmd.Flags().GetString(netmapStatusFlag); st { default: - common.ExitOnErr(cmd, "", fmt.Errorf("unsupported status %s", st)) + commonCmd.ExitOnErr(cmd, "", fmt.Errorf("unsupported status %s", st)) case netmapStatusOnline: body.SetStatus(control.NetmapStatus_ONLINE) printIgnoreForce(control.NetmapStatus_ONLINE) @@ -86,7 +87,7 @@ func setNetmapStatus(cmd *cobra.Command, _ []string) { resp, err = control.SetNetmapStatus(client, req) return err }) - common.ExitOnErr(cmd, "rpc error: %w", err) + commonCmd.ExitOnErr(cmd, "rpc error: %w", err) verifyResponse(cmd, resp.GetSignature(), resp.GetBody()) diff --git a/cmd/frostfs-cli/modules/control/shards_dump.go b/cmd/frostfs-cli/modules/control/shards_dump.go index 00339a61e..ff5afb980 100644 --- a/cmd/frostfs-cli/modules/control/shards_dump.go +++ b/cmd/frostfs-cli/modules/control/shards_dump.go @@ -2,8 +2,8 @@ package control import ( "github.com/TrueCloudLab/frostfs-api-go/v2/rpc/client" - "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/common" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/key" + commonCmd "github.com/TrueCloudLab/frostfs-node/cmd/internal/common" "github.com/TrueCloudLab/frostfs-node/pkg/services/control" "github.com/spf13/cobra" ) @@ -45,7 +45,7 @@ func dumpShard(cmd *cobra.Command, _ []string) { resp, err = control.DumpShard(client, req) return err }) - common.ExitOnErr(cmd, "rpc error: %w", err) + commonCmd.ExitOnErr(cmd, "rpc error: %w", err) verifyResponse(cmd, resp.GetSignature(), resp.GetBody()) diff --git a/cmd/frostfs-cli/modules/control/shards_list.go b/cmd/frostfs-cli/modules/control/shards_list.go index 8fb8cd239..e9517f6a3 100644 --- a/cmd/frostfs-cli/modules/control/shards_list.go +++ b/cmd/frostfs-cli/modules/control/shards_list.go @@ -7,9 +7,9 @@ import ( "strings" rawclient "github.com/TrueCloudLab/frostfs-api-go/v2/rpc/client" - "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/common" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/commonflags" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/key" + commonCmd "github.com/TrueCloudLab/frostfs-node/cmd/internal/common" "github.com/TrueCloudLab/frostfs-node/pkg/services/control" "github.com/mr-tron/base58" "github.com/spf13/cobra" @@ -45,7 +45,7 @@ func listShards(cmd *cobra.Command, _ []string) { resp, err = control.ListShards(client, req) return err }) - common.ExitOnErr(cmd, "rpc error: %w", err) + commonCmd.ExitOnErr(cmd, "rpc error: %w", err) verifyResponse(cmd, resp.GetSignature(), resp.GetBody()) @@ -73,7 +73,7 @@ func prettyPrintShardsJSON(cmd *cobra.Command, ii []*control.ShardInfo) { buf := bytes.NewBuffer(nil) enc := json.NewEncoder(buf) enc.SetIndent("", " ") - common.ExitOnErr(cmd, "cannot shard info to JSON: %w", enc.Encode(out)) + commonCmd.ExitOnErr(cmd, "cannot shard info to JSON: %w", enc.Encode(out)) cmd.Print(buf.String()) // pretty printer emits newline, to no need for Println } diff --git a/cmd/frostfs-cli/modules/control/shards_restore.go b/cmd/frostfs-cli/modules/control/shards_restore.go index 66370dbfc..8ea069ef2 100644 --- a/cmd/frostfs-cli/modules/control/shards_restore.go +++ b/cmd/frostfs-cli/modules/control/shards_restore.go @@ -2,8 +2,8 @@ package control import ( "github.com/TrueCloudLab/frostfs-api-go/v2/rpc/client" - "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/common" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/key" + commonCmd "github.com/TrueCloudLab/frostfs-node/cmd/internal/common" "github.com/TrueCloudLab/frostfs-node/pkg/services/control" "github.com/spf13/cobra" ) @@ -45,7 +45,7 @@ func restoreShard(cmd *cobra.Command, _ []string) { resp, err = control.RestoreShard(client, req) return err }) - common.ExitOnErr(cmd, "rpc error: %w", err) + commonCmd.ExitOnErr(cmd, "rpc error: %w", err) verifyResponse(cmd, resp.GetSignature(), resp.GetBody()) diff --git a/cmd/frostfs-cli/modules/control/shards_set_mode.go b/cmd/frostfs-cli/modules/control/shards_set_mode.go index 2e3aecdd6..a57325112 100644 --- a/cmd/frostfs-cli/modules/control/shards_set_mode.go +++ b/cmd/frostfs-cli/modules/control/shards_set_mode.go @@ -5,8 +5,8 @@ import ( "strings" rawclient "github.com/TrueCloudLab/frostfs-api-go/v2/rpc/client" - "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/common" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/key" + commonCmd "github.com/TrueCloudLab/frostfs-node/cmd/internal/common" "github.com/TrueCloudLab/frostfs-node/pkg/services/control" "github.com/mr-tron/base58" "github.com/spf13/cobra" @@ -105,7 +105,7 @@ func setShardMode(cmd *cobra.Command, _ []string) { mode, ok := lookUpShardModeFromString(strMode) if !ok { - common.ExitOnErr(cmd, "", fmt.Errorf("unsupported mode %s", strMode)) + commonCmd.ExitOnErr(cmd, "", fmt.Errorf("unsupported mode %s", strMode)) } req := new(control.SetShardModeRequest) @@ -129,7 +129,7 @@ func setShardMode(cmd *cobra.Command, _ []string) { resp, err = control.SetShardMode(client, req) return err }) - common.ExitOnErr(cmd, "rpc error: %w", err) + commonCmd.ExitOnErr(cmd, "rpc error: %w", err) verifyResponse(cmd, resp.GetSignature(), resp.GetBody()) @@ -139,7 +139,7 @@ func setShardMode(cmd *cobra.Command, _ []string) { func getShardID(cmd *cobra.Command) []byte { sid, _ := cmd.Flags().GetString(shardIDFlag) raw, err := base58.Decode(sid) - common.ExitOnErr(cmd, "incorrect shard ID encoding: %w", err) + commonCmd.ExitOnErr(cmd, "incorrect shard ID encoding: %w", err) return raw } @@ -151,7 +151,7 @@ func getShardIDList(cmd *cobra.Command) [][]byte { sidList, _ := cmd.Flags().GetStringSlice(shardIDFlag) if len(sidList) == 0 { - common.ExitOnErr(cmd, "", fmt.Errorf("either --%s or --%s flag must be provided", shardIDFlag, shardAllFlag)) + commonCmd.ExitOnErr(cmd, "", fmt.Errorf("either --%s or --%s flag must be provided", shardIDFlag, shardAllFlag)) } // We can sort the ID list and perform this check without additional allocations, @@ -160,7 +160,7 @@ func getShardIDList(cmd *cobra.Command) [][]byte { seen := make(map[string]struct{}) for i := range sidList { if _, ok := seen[sidList[i]]; ok { - common.ExitOnErr(cmd, "", fmt.Errorf("duplicated shard IDs: %s", sidList[i])) + commonCmd.ExitOnErr(cmd, "", fmt.Errorf("duplicated shard IDs: %s", sidList[i])) } seen[sidList[i]] = struct{}{} } @@ -168,7 +168,7 @@ func getShardIDList(cmd *cobra.Command) [][]byte { res := make([][]byte, 0, len(sidList)) for i := range sidList { raw, err := base58.Decode(sidList[i]) - common.ExitOnErr(cmd, "incorrect shard ID encoding: %w", err) + commonCmd.ExitOnErr(cmd, "incorrect shard ID encoding: %w", err) res = append(res, raw) } diff --git a/cmd/frostfs-cli/modules/control/synchronize_tree.go b/cmd/frostfs-cli/modules/control/synchronize_tree.go index ca15e2be1..60f06b3bc 100644 --- a/cmd/frostfs-cli/modules/control/synchronize_tree.go +++ b/cmd/frostfs-cli/modules/control/synchronize_tree.go @@ -5,9 +5,9 @@ import ( "errors" rawclient "github.com/TrueCloudLab/frostfs-api-go/v2/rpc/client" - "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/common" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/commonflags" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/key" + commonCmd "github.com/TrueCloudLab/frostfs-node/cmd/internal/common" "github.com/TrueCloudLab/frostfs-node/pkg/services/control" controlSvc "github.com/TrueCloudLab/frostfs-node/pkg/services/control/server" cid "github.com/TrueCloudLab/frostfs-sdk-go/container/id" @@ -40,11 +40,11 @@ func synchronizeTree(cmd *cobra.Command, _ []string) { var cnr cid.ID cidStr, _ := cmd.Flags().GetString(commonflags.CIDFlag) - common.ExitOnErr(cmd, "can't decode container ID: %w", cnr.DecodeString(cidStr)) + commonCmd.ExitOnErr(cmd, "can't decode container ID: %w", cnr.DecodeString(cidStr)) treeID, _ := cmd.Flags().GetString("tree-id") if treeID == "" { - common.ExitOnErr(cmd, "", errors.New("tree ID must not be empty")) + commonCmd.ExitOnErr(cmd, "", errors.New("tree ID must not be empty")) } height, _ := cmd.Flags().GetUint64("height") @@ -61,7 +61,7 @@ func synchronizeTree(cmd *cobra.Command, _ []string) { } err := controlSvc.SignMessage(pk, req) - common.ExitOnErr(cmd, "could not sign request: %w", err) + commonCmd.ExitOnErr(cmd, "could not sign request: %w", err) cli := getClient(cmd, pk) @@ -70,7 +70,7 @@ func synchronizeTree(cmd *cobra.Command, _ []string) { resp, err = control.SynchronizeTree(client, req) return err }) - common.ExitOnErr(cmd, "rpc error: %w", err) + commonCmd.ExitOnErr(cmd, "rpc error: %w", err) verifyResponse(cmd, resp.GetSignature(), resp.GetBody()) diff --git a/cmd/frostfs-cli/modules/control/util.go b/cmd/frostfs-cli/modules/control/util.go index bc42c0912..8177d4a85 100644 --- a/cmd/frostfs-cli/modules/control/util.go +++ b/cmd/frostfs-cli/modules/control/util.go @@ -6,8 +6,8 @@ import ( "github.com/TrueCloudLab/frostfs-api-go/v2/refs" internalclient "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/client" - "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/common" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/commonflags" + commonCmd "github.com/TrueCloudLab/frostfs-node/cmd/internal/common" controlSvc "github.com/TrueCloudLab/frostfs-node/pkg/services/control/server" "github.com/TrueCloudLab/frostfs-sdk-go/client" frostfscrypto "github.com/TrueCloudLab/frostfs-sdk-go/crypto" @@ -24,7 +24,7 @@ func initControlFlags(cmd *cobra.Command) { func signRequest(cmd *cobra.Command, pk *ecdsa.PrivateKey, req controlSvc.SignedMessage) { err := controlSvc.SignMessage(pk, req) - common.ExitOnErr(cmd, "could not sign request: %w", err) + commonCmd.ExitOnErr(cmd, "could not sign request: %w", err) } func verifyResponse(cmd *cobra.Command, @@ -37,7 +37,7 @@ func verifyResponse(cmd *cobra.Command, }, ) { if sigControl == nil { - common.ExitOnErr(cmd, "", errors.New("missing response signature")) + commonCmd.ExitOnErr(cmd, "", errors.New("missing response signature")) } // TODO(@cthulhu-rider): #1387 use Signature message from NeoFS API to avoid conversion @@ -47,10 +47,10 @@ func verifyResponse(cmd *cobra.Command, sigV2.SetSign(sigControl.GetSign()) var sig frostfscrypto.Signature - common.ExitOnErr(cmd, "can't read signature: %w", sig.ReadFromV2(sigV2)) + commonCmd.ExitOnErr(cmd, "can't read signature: %w", sig.ReadFromV2(sigV2)) if !sig.Verify(body.StableMarshal(nil)) { - common.ExitOnErr(cmd, "", errors.New("invalid response signature")) + commonCmd.ExitOnErr(cmd, "", errors.New("invalid response signature")) } } diff --git a/cmd/frostfs-cli/modules/netmap/get_epoch.go b/cmd/frostfs-cli/modules/netmap/get_epoch.go index 327f9bac4..2f5f85df8 100644 --- a/cmd/frostfs-cli/modules/netmap/get_epoch.go +++ b/cmd/frostfs-cli/modules/netmap/get_epoch.go @@ -2,9 +2,9 @@ package netmap import ( internalclient "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/client" - "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/common" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/commonflags" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/key" + commonCmd "github.com/TrueCloudLab/frostfs-node/cmd/internal/common" "github.com/spf13/cobra" ) @@ -20,7 +20,7 @@ var getEpochCmd = &cobra.Command{ prm.SetClient(cli) res, err := internalclient.NetworkInfo(prm) - common.ExitOnErr(cmd, "rpc error: %w", err) + commonCmd.ExitOnErr(cmd, "rpc error: %w", err) netInfo := res.NetworkInfo() diff --git a/cmd/frostfs-cli/modules/netmap/netinfo.go b/cmd/frostfs-cli/modules/netmap/netinfo.go index f55ff3e06..bd50d7d7f 100644 --- a/cmd/frostfs-cli/modules/netmap/netinfo.go +++ b/cmd/frostfs-cli/modules/netmap/netinfo.go @@ -5,9 +5,9 @@ import ( "time" internalclient "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/client" - "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/common" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/commonflags" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/key" + commonCmd "github.com/TrueCloudLab/frostfs-node/cmd/internal/common" "github.com/nspcc-dev/neo-go/pkg/config/netmode" "github.com/spf13/cobra" ) @@ -24,7 +24,7 @@ var netInfoCmd = &cobra.Command{ prm.SetClient(cli) res, err := internalclient.NetworkInfo(prm) - common.ExitOnErr(cmd, "rpc error: %w", err) + commonCmd.ExitOnErr(cmd, "rpc error: %w", err) netInfo := res.NetworkInfo() diff --git a/cmd/frostfs-cli/modules/netmap/nodeinfo.go b/cmd/frostfs-cli/modules/netmap/nodeinfo.go index 36882f639..7bf9cb172 100644 --- a/cmd/frostfs-cli/modules/netmap/nodeinfo.go +++ b/cmd/frostfs-cli/modules/netmap/nodeinfo.go @@ -7,6 +7,7 @@ import ( "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/common" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/commonflags" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/key" + commonCmd "github.com/TrueCloudLab/frostfs-node/cmd/internal/common" "github.com/TrueCloudLab/frostfs-sdk-go/netmap" "github.com/spf13/cobra" ) @@ -25,7 +26,7 @@ var nodeInfoCmd = &cobra.Command{ prm.SetClient(cli) res, err := internalclient.NodeInfo(prm) - common.ExitOnErr(cmd, "rpc error: %w", err) + commonCmd.ExitOnErr(cmd, "rpc error: %w", err) prettyPrintNodeInfo(cmd, res.NodeInfo()) }, diff --git a/cmd/frostfs-cli/modules/netmap/snapshot.go b/cmd/frostfs-cli/modules/netmap/snapshot.go index 4f95bc54b..709e38e88 100644 --- a/cmd/frostfs-cli/modules/netmap/snapshot.go +++ b/cmd/frostfs-cli/modules/netmap/snapshot.go @@ -2,9 +2,9 @@ package netmap import ( internalclient "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/client" - "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/common" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/commonflags" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/key" + commonCmd "github.com/TrueCloudLab/frostfs-node/cmd/internal/common" "github.com/spf13/cobra" ) @@ -20,9 +20,9 @@ var snapshotCmd = &cobra.Command{ prm.SetClient(cli) res, err := internalclient.NetMapSnapshot(prm) - common.ExitOnErr(cmd, "rpc error: %w", err) + commonCmd.ExitOnErr(cmd, "rpc error: %w", err) - common.PrettyPrintNetMap(cmd, res.NetMap()) + commonCmd.PrettyPrintNetMap(cmd, res.NetMap(), false) }, } diff --git a/cmd/frostfs-cli/modules/object/delete.go b/cmd/frostfs-cli/modules/object/delete.go index af5cc84b7..4ac8d243f 100644 --- a/cmd/frostfs-cli/modules/object/delete.go +++ b/cmd/frostfs-cli/modules/object/delete.go @@ -4,9 +4,9 @@ import ( "fmt" internalclient "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/client" - "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/common" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/commonflags" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/key" + commonCmd "github.com/TrueCloudLab/frostfs-node/cmd/internal/common" cid "github.com/TrueCloudLab/frostfs-sdk-go/container/id" oid "github.com/TrueCloudLab/frostfs-sdk-go/object/id" "github.com/spf13/cobra" @@ -41,18 +41,18 @@ func deleteObject(cmd *cobra.Command, _ []string) { if binary { filename, _ := cmd.Flags().GetString(fileFlag) if filename == "" { - common.ExitOnErr(cmd, "", fmt.Errorf("required flag \"%s\" not set", fileFlag)) + commonCmd.ExitOnErr(cmd, "", fmt.Errorf("required flag \"%s\" not set", fileFlag)) } objAddr = readObjectAddressBin(cmd, &cnr, &obj, filename) } else { cidVal, _ := cmd.Flags().GetString(commonflags.CIDFlag) if cidVal == "" { - common.ExitOnErr(cmd, "", fmt.Errorf("required flag \"%s\" not set", commonflags.CIDFlag)) + commonCmd.ExitOnErr(cmd, "", fmt.Errorf("required flag \"%s\" not set", commonflags.CIDFlag)) } oidVal, _ := cmd.Flags().GetString(commonflags.OIDFlag) if oidVal == "" { - common.ExitOnErr(cmd, "", fmt.Errorf("required flag \"%s\" not set", commonflags.OIDFlag)) + commonCmd.ExitOnErr(cmd, "", fmt.Errorf("required flag \"%s\" not set", commonflags.OIDFlag)) } objAddr = readObjectAddress(cmd, &cnr, &obj) @@ -66,7 +66,7 @@ func deleteObject(cmd *cobra.Command, _ []string) { prm.SetAddress(objAddr) res, err := internalclient.DeleteObject(prm) - common.ExitOnErr(cmd, "rpc error: %w", err) + commonCmd.ExitOnErr(cmd, "rpc error: %w", err) tomb := res.Tombstone() diff --git a/cmd/frostfs-cli/modules/object/get.go b/cmd/frostfs-cli/modules/object/get.go index 0e5c715e0..fc3c4dea3 100644 --- a/cmd/frostfs-cli/modules/object/get.go +++ b/cmd/frostfs-cli/modules/object/get.go @@ -7,9 +7,9 @@ import ( "os" internalclient "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/client" - "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/common" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/commonflags" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/key" + commonCmd "github.com/TrueCloudLab/frostfs-node/cmd/internal/common" cid "github.com/TrueCloudLab/frostfs-sdk-go/container/id" "github.com/TrueCloudLab/frostfs-sdk-go/object" oid "github.com/TrueCloudLab/frostfs-sdk-go/object/id" @@ -55,7 +55,7 @@ func getObject(cmd *cobra.Command, _ []string) { } else { f, err := os.OpenFile(filename, os.O_CREATE|os.O_WRONLY|os.O_TRUNC, 0644) if err != nil { - common.ExitOnErr(cmd, "", fmt.Errorf("can't open file '%s': %w", filename, err)) + commonCmd.ExitOnErr(cmd, "", fmt.Errorf("can't open file '%s': %w", filename, err)) } defer f.Close() @@ -110,7 +110,7 @@ func getObject(cmd *cobra.Command, _ []string) { return } - common.ExitOnErr(cmd, "rpc error: %w", err) + commonCmd.ExitOnErr(cmd, "rpc error: %w", err) } if binary { @@ -118,9 +118,9 @@ func getObject(cmd *cobra.Command, _ []string) { // TODO(@acid-ant): #1932 Use streams to marshal/unmarshal payload objToStore.SetPayload(payloadBuffer.Bytes()) objBytes, err := objToStore.Marshal() - common.ExitOnErr(cmd, "", err) + commonCmd.ExitOnErr(cmd, "", err) _, err = out.Write(objBytes) - common.ExitOnErr(cmd, "unable to write binary object in out: %w ", err) + commonCmd.ExitOnErr(cmd, "unable to write binary object in out: %w ", err) } if filename != "" && !strictOutput(cmd) { @@ -130,7 +130,7 @@ func getObject(cmd *cobra.Command, _ []string) { // Print header only if file is not streamed to stdout. if filename != "" { err = printHeader(cmd, res.Header()) - common.ExitOnErr(cmd, "", err) + commonCmd.ExitOnErr(cmd, "", err) } } diff --git a/cmd/frostfs-cli/modules/object/hash.go b/cmd/frostfs-cli/modules/object/hash.go index 85c882585..0bc35443a 100644 --- a/cmd/frostfs-cli/modules/object/hash.go +++ b/cmd/frostfs-cli/modules/object/hash.go @@ -6,9 +6,9 @@ import ( "strings" internalclient "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/client" - "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/common" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/commonflags" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/key" + commonCmd "github.com/TrueCloudLab/frostfs-node/cmd/internal/common" "github.com/TrueCloudLab/frostfs-sdk-go/checksum" cid "github.com/TrueCloudLab/frostfs-sdk-go/container/id" oid "github.com/TrueCloudLab/frostfs-sdk-go/object/id" @@ -54,14 +54,14 @@ func getObjectHash(cmd *cobra.Command, _ []string) { objAddr := readObjectAddress(cmd, &cnr, &obj) ranges, err := getRangeList(cmd) - common.ExitOnErr(cmd, "", err) + commonCmd.ExitOnErr(cmd, "", err) typ, err := getHashType(cmd) - common.ExitOnErr(cmd, "", err) + commonCmd.ExitOnErr(cmd, "", err) strSalt := strings.TrimPrefix(cmd.Flag(getRangeHashSaltFlag).Value.String(), "0x") salt, err := hex.DecodeString(strSalt) - common.ExitOnErr(cmd, "could not decode salt: %w", err) + commonCmd.ExitOnErr(cmd, "could not decode salt: %w", err) pk := key.GetOrGenerate(cmd) cli := internalclient.GetSDKClientByFlag(cmd, pk, commonflags.RPC) @@ -76,7 +76,7 @@ func getObjectHash(cmd *cobra.Command, _ []string) { // get hash of full payload through HEAD (may be user can do it through dedicated command?) res, err := internalclient.HeadObject(headPrm) - common.ExitOnErr(cmd, "rpc error: %w", err) + commonCmd.ExitOnErr(cmd, "rpc error: %w", err) var cs checksum.Checksum var csSet bool @@ -109,7 +109,7 @@ func getObjectHash(cmd *cobra.Command, _ []string) { } res, err := internalclient.HashPayloadRanges(hashPrm) - common.ExitOnErr(cmd, "rpc error: %w", err) + commonCmd.ExitOnErr(cmd, "rpc error: %w", err) hs := res.HashList() diff --git a/cmd/frostfs-cli/modules/object/head.go b/cmd/frostfs-cli/modules/object/head.go index 447f7d821..795fe3558 100644 --- a/cmd/frostfs-cli/modules/object/head.go +++ b/cmd/frostfs-cli/modules/object/head.go @@ -11,6 +11,7 @@ import ( "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/common" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/commonflags" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/key" + commonCmd "github.com/TrueCloudLab/frostfs-node/cmd/internal/common" cid "github.com/TrueCloudLab/frostfs-sdk-go/container/id" "github.com/TrueCloudLab/frostfs-sdk-go/object" oid "github.com/TrueCloudLab/frostfs-sdk-go/object/id" @@ -70,11 +71,11 @@ func getObjectHeader(cmd *cobra.Command, _ []string) { return } - common.ExitOnErr(cmd, "rpc error: %w", err) + commonCmd.ExitOnErr(cmd, "rpc error: %w", err) } err = saveAndPrintHeader(cmd, res.Header(), cmd.Flag(fileFlag).Value.String()) - common.ExitOnErr(cmd, "", err) + commonCmd.ExitOnErr(cmd, "", err) } func saveAndPrintHeader(cmd *cobra.Command, obj *object.Object, filename string) error { diff --git a/cmd/frostfs-cli/modules/object/lock.go b/cmd/frostfs-cli/modules/object/lock.go index 589431676..bb5a8b17b 100644 --- a/cmd/frostfs-cli/modules/object/lock.go +++ b/cmd/frostfs-cli/modules/object/lock.go @@ -12,6 +12,7 @@ import ( "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/common" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/commonflags" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/key" + commonCmd "github.com/TrueCloudLab/frostfs-node/cmd/internal/common" cid "github.com/TrueCloudLab/frostfs-sdk-go/container/id" objectSDK "github.com/TrueCloudLab/frostfs-sdk-go/object" oid "github.com/TrueCloudLab/frostfs-sdk-go/object/id" @@ -29,7 +30,7 @@ var objectLockCmd = &cobra.Command{ var cnr cid.ID err := cnr.DecodeString(cidRaw) - common.ExitOnErr(cmd, "Incorrect container arg: %v", err) + commonCmd.ExitOnErr(cmd, "Incorrect container arg: %v", err) oidsRaw, _ := cmd.Flags().GetStringSlice(commonflags.OIDFlag) @@ -37,7 +38,7 @@ var objectLockCmd = &cobra.Command{ for i := range oidsRaw { err = lockList[i].DecodeString(oidsRaw[i]) - common.ExitOnErr(cmd, fmt.Sprintf("Incorrect object arg #%d: %%v", i+1), err) + commonCmd.ExitOnErr(cmd, fmt.Sprintf("Incorrect object arg #%d: %%v", i+1), err) } key := key.GetOrGenerate(cmd) @@ -51,7 +52,7 @@ var objectLockCmd = &cobra.Command{ exp, _ := cmd.Flags().GetUint64(commonflags.ExpireAt) lifetime, _ := cmd.Flags().GetUint64(commonflags.Lifetime) if exp == 0 && lifetime == 0 { // mutual exclusion is ensured by cobra - common.ExitOnErr(cmd, "", errors.New("either expiration epoch of a lifetime is required")) + commonCmd.ExitOnErr(cmd, "", errors.New("either expiration epoch of a lifetime is required")) } if lifetime != 0 { @@ -61,7 +62,7 @@ var objectLockCmd = &cobra.Command{ endpoint, _ := cmd.Flags().GetString(commonflags.RPC) currEpoch, err := internalclient.GetCurrentEpoch(ctx, cmd, endpoint) - common.ExitOnErr(cmd, "Request current epoch: %w", err) + commonCmd.ExitOnErr(cmd, "Request current epoch: %w", err) exp = currEpoch + lifetime } @@ -85,7 +86,7 @@ var objectLockCmd = &cobra.Command{ prm.SetHeader(obj) res, err := internalclient.PutObject(prm) - common.ExitOnErr(cmd, "Store lock object in NeoFS: %w", err) + commonCmd.ExitOnErr(cmd, "Store lock object in NeoFS: %w", err) cmd.Printf("Lock object ID: %s\n", res.ID()) cmd.Println("Objects successfully locked.") diff --git a/cmd/frostfs-cli/modules/object/put.go b/cmd/frostfs-cli/modules/object/put.go index 6ee2bf0da..c94c3844c 100644 --- a/cmd/frostfs-cli/modules/object/put.go +++ b/cmd/frostfs-cli/modules/object/put.go @@ -12,9 +12,9 @@ import ( objectV2 "github.com/TrueCloudLab/frostfs-api-go/v2/object" internalclient "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/client" - "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/common" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/commonflags" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/key" + commonCmd "github.com/TrueCloudLab/frostfs-node/cmd/internal/common" cid "github.com/TrueCloudLab/frostfs-sdk-go/container/id" "github.com/TrueCloudLab/frostfs-sdk-go/object" "github.com/TrueCloudLab/frostfs-sdk-go/user" @@ -63,7 +63,7 @@ func putObject(cmd *cobra.Command, _ []string) { cidVal, _ := cmd.Flags().GetString(commonflags.CIDFlag) if !binary && cidVal == "" { - common.ExitOnErr(cmd, "", fmt.Errorf("required flag \"%s\" not set", commonflags.CIDFlag)) + commonCmd.ExitOnErr(cmd, "", fmt.Errorf("required flag \"%s\" not set", commonflags.CIDFlag)) } pk := key.GetOrGenerate(cmd) @@ -73,17 +73,17 @@ func putObject(cmd *cobra.Command, _ []string) { filename, _ := cmd.Flags().GetString(fileFlag) f, err := os.OpenFile(filename, os.O_RDONLY, os.ModePerm) if err != nil { - common.ExitOnErr(cmd, "", fmt.Errorf("can't open file '%s': %w", filename, err)) + commonCmd.ExitOnErr(cmd, "", fmt.Errorf("can't open file '%s': %w", filename, err)) } var payloadReader io.Reader = f obj := object.New() if binary { buf, err := os.ReadFile(filename) - common.ExitOnErr(cmd, "unable to read given file: %w", err) + commonCmd.ExitOnErr(cmd, "unable to read given file: %w", err) objTemp := object.New() // TODO(@acid-ant): #1932 Use streams to marshal/unmarshal payload - common.ExitOnErr(cmd, "can't unmarshal object from given file: %w", objTemp.Unmarshal(buf)) + commonCmd.ExitOnErr(cmd, "can't unmarshal object from given file: %w", objTemp.Unmarshal(buf)) payloadReader = bytes.NewReader(objTemp.Payload()) cnr, _ = objTemp.ContainerID() ownerID = *objTemp.OwnerID() @@ -93,7 +93,7 @@ func putObject(cmd *cobra.Command, _ []string) { } attrs, err := parseObjectAttrs(cmd) - common.ExitOnErr(cmd, "can't parse object attributes: %w", err) + commonCmd.ExitOnErr(cmd, "can't parse object attributes: %w", err) expiresOn, _ := cmd.Flags().GetUint64(commonflags.ExpireAt) if expiresOn > 0 { @@ -121,7 +121,7 @@ func putObject(cmd *cobra.Command, _ []string) { obj.SetAttributes(attrs...) notificationInfo, err := parseObjectNotifications(cmd) - common.ExitOnErr(cmd, "can't parse object notification information: %w", err) + commonCmd.ExitOnErr(cmd, "can't parse object notification information: %w", err) if notificationInfo != nil { obj.SetNotification(*notificationInfo) @@ -163,7 +163,7 @@ func putObject(cmd *cobra.Command, _ []string) { if p != nil { p.Finish() } - common.ExitOnErr(cmd, "rpc error: %w", err) + commonCmd.ExitOnErr(cmd, "rpc error: %w", err) cmd.Printf("[%s] Object successfully stored\n", filename) cmd.Printf(" OID: %s\n CID: %s\n", res.ID(), cnr) diff --git a/cmd/frostfs-cli/modules/object/range.go b/cmd/frostfs-cli/modules/object/range.go index 0bace1d05..1c9832137 100644 --- a/cmd/frostfs-cli/modules/object/range.go +++ b/cmd/frostfs-cli/modules/object/range.go @@ -10,9 +10,9 @@ import ( "strings" internalclient "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/client" - "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/common" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/commonflags" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/key" + commonCmd "github.com/TrueCloudLab/frostfs-node/cmd/internal/common" cid "github.com/TrueCloudLab/frostfs-sdk-go/container/id" "github.com/TrueCloudLab/frostfs-sdk-go/object" oid "github.com/TrueCloudLab/frostfs-sdk-go/object/id" @@ -50,10 +50,10 @@ func getObjectRange(cmd *cobra.Command, _ []string) { objAddr := readObjectAddress(cmd, &cnr, &obj) ranges, err := getRangeList(cmd) - common.ExitOnErr(cmd, "", err) + commonCmd.ExitOnErr(cmd, "", err) if len(ranges) != 1 { - common.ExitOnErr(cmd, "", fmt.Errorf("exactly one range must be specified, got: %d", len(ranges))) + commonCmd.ExitOnErr(cmd, "", fmt.Errorf("exactly one range must be specified, got: %d", len(ranges))) } var out io.Writer @@ -64,7 +64,7 @@ func getObjectRange(cmd *cobra.Command, _ []string) { } else { f, err := os.OpenFile(filename, os.O_CREATE|os.O_WRONLY, os.ModePerm) if err != nil { - common.ExitOnErr(cmd, "", fmt.Errorf("can't open file '%s': %w", filename, err)) + commonCmd.ExitOnErr(cmd, "", fmt.Errorf("can't open file '%s': %w", filename, err)) } defer f.Close() @@ -93,7 +93,7 @@ func getObjectRange(cmd *cobra.Command, _ []string) { return } - common.ExitOnErr(cmd, "can't get object payload range: %w", err) + commonCmd.ExitOnErr(cmd, "can't get object payload range: %w", err) } if filename != "" { @@ -116,7 +116,7 @@ func printSplitInfoErr(cmd *cobra.Command, err error) bool { func printSplitInfo(cmd *cobra.Command, info *object.SplitInfo) { bs, err := marshalSplitInfo(cmd, info) - common.ExitOnErr(cmd, "can't marshal split info: %w", err) + commonCmd.ExitOnErr(cmd, "can't marshal split info: %w", err) cmd.Println(string(bs)) } diff --git a/cmd/frostfs-cli/modules/object/search.go b/cmd/frostfs-cli/modules/object/search.go index f6d8ef04e..d378abdb0 100644 --- a/cmd/frostfs-cli/modules/object/search.go +++ b/cmd/frostfs-cli/modules/object/search.go @@ -6,9 +6,9 @@ import ( "strings" internalclient "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/client" - "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/common" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/commonflags" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/key" + commonCmd "github.com/TrueCloudLab/frostfs-node/cmd/internal/common" cid "github.com/TrueCloudLab/frostfs-sdk-go/container/id" "github.com/TrueCloudLab/frostfs-sdk-go/object" oidSDK "github.com/TrueCloudLab/frostfs-sdk-go/object/id" @@ -48,7 +48,7 @@ func searchObject(cmd *cobra.Command, _ []string) { readCID(cmd, &cnr) sf, err := parseSearchFilters(cmd) - common.ExitOnErr(cmd, "", err) + commonCmd.ExitOnErr(cmd, "", err) pk := key.GetOrGenerate(cmd) @@ -62,7 +62,7 @@ func searchObject(cmd *cobra.Command, _ []string) { prm.SetFilters(sf) res, err := internalclient.SearchObjects(prm) - common.ExitOnErr(cmd, "rpc error: %w", err) + commonCmd.ExitOnErr(cmd, "rpc error: %w", err) ids := res.IDList() diff --git a/cmd/frostfs-cli/modules/object/util.go b/cmd/frostfs-cli/modules/object/util.go index 4b036923f..7e7cb4ea9 100644 --- a/cmd/frostfs-cli/modules/object/util.go +++ b/cmd/frostfs-cli/modules/object/util.go @@ -11,6 +11,7 @@ import ( "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/common" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/commonflags" sessionCli "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/modules/session" + commonCmd "github.com/TrueCloudLab/frostfs-node/cmd/internal/common" "github.com/TrueCloudLab/frostfs-sdk-go/bearer" "github.com/TrueCloudLab/frostfs-sdk-go/client" cid "github.com/TrueCloudLab/frostfs-sdk-go/container/id" @@ -85,9 +86,9 @@ func readObjectAddress(cmd *cobra.Command, cnr *cid.ID, obj *oid.ID) oid.Address func readObjectAddressBin(cmd *cobra.Command, cnr *cid.ID, obj *oid.ID, filename string) oid.Address { buf, err := os.ReadFile(filename) - common.ExitOnErr(cmd, "unable to read given file: %w", err) + commonCmd.ExitOnErr(cmd, "unable to read given file: %w", err) objTemp := object.New() - common.ExitOnErr(cmd, "can't unmarshal object from given file: %w", objTemp.Unmarshal(buf)) + commonCmd.ExitOnErr(cmd, "can't unmarshal object from given file: %w", objTemp.Unmarshal(buf)) var addr oid.Address *cnr, _ = objTemp.ContainerID() @@ -99,12 +100,12 @@ func readObjectAddressBin(cmd *cobra.Command, cnr *cid.ID, obj *oid.ID, filename func readCID(cmd *cobra.Command, id *cid.ID) { err := id.DecodeString(cmd.Flag(commonflags.CIDFlag).Value.String()) - common.ExitOnErr(cmd, "decode container ID string: %w", err) + commonCmd.ExitOnErr(cmd, "decode container ID string: %w", err) } func readOID(cmd *cobra.Command, id *oid.ID) { err := id.DecodeString(cmd.Flag(commonflags.OIDFlag).Value.String()) - common.ExitOnErr(cmd, "decode object ID string: %w", err) + commonCmd.ExitOnErr(cmd, "decode object ID string: %w", err) } // SessionPrm is a common interface of object operation's input which supports @@ -140,7 +141,7 @@ func getSession(cmd *cobra.Command) *session.Object { var tok session.Object err := common.ReadBinaryOrJSON(cmd, &tok, path) - common.ExitOnErr(cmd, "read session: %v", err) + commonCmd.ExitOnErr(cmd, "read session: %v", err) return &tok } @@ -189,15 +190,15 @@ func _readVerifiedSession(cmd *cobra.Command, dst SessionPrm, key *ecdsa.Private switch false { case tok.AssertContainer(cnr): - common.ExitOnErr(cmd, "", errors.New("unrelated container in the session")) + commonCmd.ExitOnErr(cmd, "", errors.New("unrelated container in the session")) case obj == nil || tok.AssertObject(*obj): - common.ExitOnErr(cmd, "", errors.New("unrelated object in the session")) + commonCmd.ExitOnErr(cmd, "", errors.New("unrelated object in the session")) case tok.AssertVerb(cmdVerb): - common.ExitOnErr(cmd, "", errors.New("wrong verb of the session")) + commonCmd.ExitOnErr(cmd, "", errors.New("wrong verb of the session")) case tok.AssertAuthKey((*frostfsecdsa.PublicKey)(&key.PublicKey)): - common.ExitOnErr(cmd, "", errors.New("unrelated key in the session")) + commonCmd.ExitOnErr(cmd, "", errors.New("unrelated key in the session")) case tok.VerifySignature(): - common.ExitOnErr(cmd, "", errors.New("invalid signature of the session data")) + commonCmd.ExitOnErr(cmd, "", errors.New("invalid signature of the session data")) } common.PrintVerbose(cmd, "Session is correct.") @@ -278,7 +279,7 @@ func OpenSessionViaClient(cmd *cobra.Command, dst SessionPrm, cli *client.Client common.PrintVerbose(cmd, "Opening remote session with the node...") err := sessionCli.CreateSession(&tok, cli, sessionLifetime) - common.ExitOnErr(cmd, "open remote session: %w", err) + commonCmd.ExitOnErr(cmd, "open remote session: %w", err) common.PrintVerbose(cmd, "Session successfully opened.") @@ -321,7 +322,7 @@ func finalizeSession(cmd *cobra.Command, dst SessionPrm, tok *session.Object, ke common.PrintVerbose(cmd, "Signing session...") err := tok.Sign(*key) - common.ExitOnErr(cmd, "sign session: %w", err) + commonCmd.ExitOnErr(cmd, "sign session: %w", err) common.PrintVerbose(cmd, "Session token successfully formed and attached to the request.") @@ -359,7 +360,7 @@ func collectObjectRelatives(cmd *cobra.Command, cli *client.Client, cnr cid.ID, switch { default: - common.ExitOnErr(cmd, "failed to get raw object header: %w", err) + commonCmd.ExitOnErr(cmd, "failed to get raw object header: %w", err) case err == nil: common.PrintVerbose(cmd, "Raw header received - object is singular.") return nil @@ -407,7 +408,7 @@ func collectObjectRelatives(cmd *cobra.Command, cli *client.Client, cnr cid.ID, prm.SetFilters(query) res, err := internal.SearchObjects(prm) - common.ExitOnErr(cmd, "failed to search objects by split ID: %w", err) + commonCmd.ExitOnErr(cmd, "failed to search objects by split ID: %w", err) members := res.IDList() @@ -418,7 +419,7 @@ func collectObjectRelatives(cmd *cobra.Command, cli *client.Client, cnr cid.ID, idMember, ok := splitInfo.LastPart() if !ok { - common.ExitOnErr(cmd, "", errors.New("missing any data in received object split information")) + commonCmd.ExitOnErr(cmd, "", errors.New("missing any data in received object split information")) } common.PrintVerbose(cmd, "Traverse the object split chain in reverse...", idMember) @@ -436,7 +437,7 @@ func collectObjectRelatives(cmd *cobra.Command, cli *client.Client, cnr cid.ID, addrObj.SetObject(idMember) res, err = internal.HeadObject(prmHead) - common.ExitOnErr(cmd, "failed to read split chain member's header: %w", err) + commonCmd.ExitOnErr(cmd, "failed to read split chain member's header: %w", err) idMember, ok = res.Header().PreviousID() if !ok { @@ -445,7 +446,7 @@ func collectObjectRelatives(cmd *cobra.Command, cli *client.Client, cnr cid.ID, } if _, ok = chainSet[idMember]; ok { - common.ExitOnErr(cmd, "", fmt.Errorf("duplicated member in the split chain %s", idMember)) + commonCmd.ExitOnErr(cmd, "", fmt.Errorf("duplicated member in the split chain %s", idMember)) } chain = append(chain, idMember) @@ -463,7 +464,7 @@ func collectObjectRelatives(cmd *cobra.Command, cli *client.Client, cnr cid.ID, prmSearch.SetFilters(query) resSearch, err := internal.SearchObjects(prmSearch) - common.ExitOnErr(cmd, "failed to find object children: %w", err) + commonCmd.ExitOnErr(cmd, "failed to find object children: %w", err) list := resSearch.IDList() diff --git a/cmd/frostfs-cli/modules/root.go b/cmd/frostfs-cli/modules/root.go index a7a116a75..400440e20 100644 --- a/cmd/frostfs-cli/modules/root.go +++ b/cmd/frostfs-cli/modules/root.go @@ -17,6 +17,7 @@ import ( sgCli "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/modules/storagegroup" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/modules/tree" utilCli "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/modules/util" + commonCmd "github.com/TrueCloudLab/frostfs-node/cmd/internal/common" "github.com/TrueCloudLab/frostfs-node/misc" "github.com/TrueCloudLab/frostfs-node/pkg/util/gendoc" "github.com/mitchellh/go-homedir" @@ -50,7 +51,7 @@ and much more!`, // This is called by main.main(). It only needs to happen once to the rootCmd. func Execute() { err := rootCmd.Execute() - common.ExitOnErr(rootCmd, "", err) + commonCmd.ExitOnErr(rootCmd, "", err) } func init() { @@ -105,7 +106,7 @@ func initConfig() { } else { // Find home directory. home, err := homedir.Dir() - common.ExitOnErr(rootCmd, "", err) + commonCmd.ExitOnErr(rootCmd, "", err) // Search config in `$HOME/.config/frostfs-cli/` with name "config.yaml" viper.AddConfigPath(filepath.Join(home, ".config", "frostfs-cli")) diff --git a/cmd/frostfs-cli/modules/session/create.go b/cmd/frostfs-cli/modules/session/create.go index 498eec548..4b9ce515b 100644 --- a/cmd/frostfs-cli/modules/session/create.go +++ b/cmd/frostfs-cli/modules/session/create.go @@ -5,9 +5,9 @@ import ( "os" internalclient "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/client" - "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/common" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/commonflags" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/key" + commonCmd "github.com/TrueCloudLab/frostfs-node/cmd/internal/common" "github.com/TrueCloudLab/frostfs-node/pkg/network" "github.com/TrueCloudLab/frostfs-sdk-go/client" frostfsecdsa "github.com/TrueCloudLab/frostfs-sdk-go/crypto/ecdsa" @@ -52,10 +52,10 @@ func createSession(cmd *cobra.Command, _ []string) { var netAddr network.Address addrStr, _ := cmd.Flags().GetString(commonflags.RPC) - common.ExitOnErr(cmd, "can't parse endpoint: %w", netAddr.FromString(addrStr)) + commonCmd.ExitOnErr(cmd, "can't parse endpoint: %w", netAddr.FromString(addrStr)) c, err := internalclient.GetSDKClient(cmd, privKey, netAddr) - common.ExitOnErr(cmd, "can't create client: %w", err) + commonCmd.ExitOnErr(cmd, "can't create client: %w", err) lifetime := uint64(defaultLifetime) if lfArg, _ := cmd.Flags().GetUint64(commonflags.Lifetime); lfArg != 0 { @@ -65,20 +65,20 @@ func createSession(cmd *cobra.Command, _ []string) { var tok session.Object err = CreateSession(&tok, c, lifetime) - common.ExitOnErr(cmd, "can't create session: %w", err) + commonCmd.ExitOnErr(cmd, "can't create session: %w", err) var data []byte if toJSON, _ := cmd.Flags().GetBool(jsonFlag); toJSON { data, err = tok.MarshalJSON() - common.ExitOnErr(cmd, "can't decode session token JSON: %w", err) + commonCmd.ExitOnErr(cmd, "can't decode session token JSON: %w", err) } else { data = tok.Marshal() } filename, _ := cmd.Flags().GetString(outFlag) err = os.WriteFile(filename, data, 0644) - common.ExitOnErr(cmd, "can't write token to file: %w", err) + commonCmd.ExitOnErr(cmd, "can't write token to file: %w", err) } // CreateSession opens a new communication with NeoFS storage node using client connection. diff --git a/cmd/frostfs-cli/modules/storagegroup/delete.go b/cmd/frostfs-cli/modules/storagegroup/delete.go index 450be6768..91945c96a 100644 --- a/cmd/frostfs-cli/modules/storagegroup/delete.go +++ b/cmd/frostfs-cli/modules/storagegroup/delete.go @@ -2,10 +2,10 @@ package storagegroup import ( internalclient "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/client" - "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/common" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/commonflags" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/key" objectCli "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/modules/object" + commonCmd "github.com/TrueCloudLab/frostfs-node/cmd/internal/common" cid "github.com/TrueCloudLab/frostfs-sdk-go/container/id" oid "github.com/TrueCloudLab/frostfs-sdk-go/object/id" "github.com/spf13/cobra" @@ -44,7 +44,7 @@ func delSG(cmd *cobra.Command, _ []string) { prm.SetAddress(addr) res, err := internalclient.DeleteObject(prm) - common.ExitOnErr(cmd, "rpc error: %w", err) + commonCmd.ExitOnErr(cmd, "rpc error: %w", err) tombstone := res.Tombstone() diff --git a/cmd/frostfs-cli/modules/storagegroup/get.go b/cmd/frostfs-cli/modules/storagegroup/get.go index f874950a9..dcebdb6d5 100644 --- a/cmd/frostfs-cli/modules/storagegroup/get.go +++ b/cmd/frostfs-cli/modules/storagegroup/get.go @@ -8,6 +8,7 @@ import ( "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/commonflags" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/key" objectCli "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/modules/object" + commonCmd "github.com/TrueCloudLab/frostfs-node/cmd/internal/common" cid "github.com/TrueCloudLab/frostfs-sdk-go/container/id" oid "github.com/TrueCloudLab/frostfs-sdk-go/object/id" storagegroupSDK "github.com/TrueCloudLab/frostfs-sdk-go/storagegroup" @@ -57,7 +58,7 @@ func getSG(cmd *cobra.Command, _ []string) { prm.SetPayloadWriter(buf) res, err := internalclient.GetObject(prm) - common.ExitOnErr(cmd, "rpc error: %w", err) + commonCmd.ExitOnErr(cmd, "rpc error: %w", err) rawObj := res.Header() rawObj.SetPayload(buf.Bytes()) @@ -65,7 +66,7 @@ func getSG(cmd *cobra.Command, _ []string) { var sg storagegroupSDK.StorageGroup err = storagegroupSDK.ReadFromObject(&sg, *rawObj) - common.ExitOnErr(cmd, "could not read storage group from the obj: %w", err) + commonCmd.ExitOnErr(cmd, "could not read storage group from the obj: %w", err) cmd.Printf("The last active epoch: %d\n", sg.ExpirationEpoch()) cmd.Printf("Group size: %d\n", sg.ValidationDataSize()) diff --git a/cmd/frostfs-cli/modules/storagegroup/list.go b/cmd/frostfs-cli/modules/storagegroup/list.go index 3171e5bd2..973822a91 100644 --- a/cmd/frostfs-cli/modules/storagegroup/list.go +++ b/cmd/frostfs-cli/modules/storagegroup/list.go @@ -2,10 +2,10 @@ package storagegroup import ( internalclient "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/client" - "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/common" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/commonflags" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/key" objectCli "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/modules/object" + commonCmd "github.com/TrueCloudLab/frostfs-node/cmd/internal/common" "github.com/TrueCloudLab/frostfs-node/pkg/services/object_manager/storagegroup" cid "github.com/TrueCloudLab/frostfs-sdk-go/container/id" "github.com/spf13/cobra" @@ -40,7 +40,7 @@ func listSG(cmd *cobra.Command, _ []string) { prm.SetFilters(storagegroup.SearchQuery()) res, err := internalclient.SearchObjects(prm) - common.ExitOnErr(cmd, "rpc error: %w", err) + commonCmd.ExitOnErr(cmd, "rpc error: %w", err) ids := res.IDList() diff --git a/cmd/frostfs-cli/modules/storagegroup/put.go b/cmd/frostfs-cli/modules/storagegroup/put.go index 194479aac..163f445f3 100644 --- a/cmd/frostfs-cli/modules/storagegroup/put.go +++ b/cmd/frostfs-cli/modules/storagegroup/put.go @@ -6,10 +6,10 @@ import ( "fmt" internalclient "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/client" - "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/common" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/commonflags" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/key" objectCli "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/modules/object" + commonCmd "github.com/TrueCloudLab/frostfs-node/cmd/internal/common" "github.com/TrueCloudLab/frostfs-node/pkg/services/object_manager/storagegroup" "github.com/TrueCloudLab/frostfs-sdk-go/container" cid "github.com/TrueCloudLab/frostfs-sdk-go/container/id" @@ -60,10 +60,10 @@ func putSG(cmd *cobra.Command, _ []string) { for i := range sgMembers { err := members[i].DecodeString(sgMembers[i]) - common.ExitOnErr(cmd, "could not parse object ID: %w", err) + commonCmd.ExitOnErr(cmd, "could not parse object ID: %w", err) if _, alreadyExists := uniqueFilter[members[i]]; alreadyExists { - common.ExitOnErr(cmd, "", fmt.Errorf("%s member in not unique", members[i])) + commonCmd.ExitOnErr(cmd, "", fmt.Errorf("%s member in not unique", members[i])) } uniqueFilter[members[i]] = struct{}{} @@ -80,7 +80,7 @@ func putSG(cmd *cobra.Command, _ []string) { getCnrPrm.SetContainer(cnr) resGetCnr, err := internalclient.GetContainer(getCnrPrm) - common.ExitOnErr(cmd, "get container RPC call: %w", err) + commonCmd.ExitOnErr(cmd, "get container RPC call: %w", err) objectCli.OpenSessionViaClient(cmd, &putPrm, cli, pk, cnr, nil) objectCli.Prepare(cmd, &headPrm, &putPrm) @@ -94,13 +94,13 @@ func putSG(cmd *cobra.Command, _ []string) { ownerID: &ownerID, prm: headPrm, }, cnr, members, !container.IsHomomorphicHashingDisabled(resGetCnr.Container())) - common.ExitOnErr(cmd, "could not collect storage group members: %w", err) + commonCmd.ExitOnErr(cmd, "could not collect storage group members: %w", err) var netInfoPrm internalclient.NetworkInfoPrm netInfoPrm.SetClient(cli) ni, err := internalclient.NetworkInfo(netInfoPrm) - common.ExitOnErr(cmd, "can't fetch network info: %w", err) + commonCmd.ExitOnErr(cmd, "can't fetch network info: %w", err) lifetime, _ := cmd.Flags().GetUint64(commonflags.Lifetime) sg.SetExpirationEpoch(ni.NetworkInfo().CurrentEpoch() + lifetime) @@ -114,7 +114,7 @@ func putSG(cmd *cobra.Command, _ []string) { putPrm.SetHeader(obj) res, err := internalclient.PutObject(putPrm) - common.ExitOnErr(cmd, "rpc error: %w", err) + commonCmd.ExitOnErr(cmd, "rpc error: %w", err) cmd.Println("Storage group successfully stored") cmd.Printf(" ID: %s\n CID: %s\n", res.ID(), cnr) diff --git a/cmd/frostfs-cli/modules/storagegroup/util.go b/cmd/frostfs-cli/modules/storagegroup/util.go index 375fc9329..70c41b775 100644 --- a/cmd/frostfs-cli/modules/storagegroup/util.go +++ b/cmd/frostfs-cli/modules/storagegroup/util.go @@ -3,8 +3,8 @@ package storagegroup import ( "fmt" - "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/common" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/commonflags" + commonCmd "github.com/TrueCloudLab/frostfs-node/cmd/internal/common" cid "github.com/TrueCloudLab/frostfs-sdk-go/container/id" oid "github.com/TrueCloudLab/frostfs-sdk-go/object/id" "github.com/spf13/cobra" @@ -23,12 +23,12 @@ func readObjectAddress(cmd *cobra.Command, cnr *cid.ID, obj *oid.ID) oid.Address func readCID(cmd *cobra.Command, id *cid.ID) { f := cmd.Flag(commonflags.CIDFlag) if f == nil { - common.ExitOnErr(cmd, "", fmt.Errorf("missing container flag (%s)", commonflags.CIDFlag)) + commonCmd.ExitOnErr(cmd, "", fmt.Errorf("missing container flag (%s)", commonflags.CIDFlag)) return } err := id.DecodeString(f.Value.String()) - common.ExitOnErr(cmd, "decode container ID string: %w", err) + commonCmd.ExitOnErr(cmd, "decode container ID string: %w", err) } func readSGID(cmd *cobra.Command, id *oid.ID) { @@ -36,10 +36,10 @@ func readSGID(cmd *cobra.Command, id *oid.ID) { f := cmd.Flag(flag) if f == nil { - common.ExitOnErr(cmd, "", fmt.Errorf("missing storage group flag (%s)", flag)) + commonCmd.ExitOnErr(cmd, "", fmt.Errorf("missing storage group flag (%s)", flag)) return } err := id.DecodeString(f.Value.String()) - common.ExitOnErr(cmd, "decode storage group ID string: %w", err) + commonCmd.ExitOnErr(cmd, "decode storage group ID string: %w", err) } diff --git a/cmd/frostfs-cli/modules/tree/add.go b/cmd/frostfs-cli/modules/tree/add.go index 270889e11..90815e1a7 100644 --- a/cmd/frostfs-cli/modules/tree/add.go +++ b/cmd/frostfs-cli/modules/tree/add.go @@ -5,9 +5,9 @@ import ( "fmt" "strings" - "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/common" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/commonflags" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/key" + commonCmd "github.com/TrueCloudLab/frostfs-node/cmd/internal/common" "github.com/TrueCloudLab/frostfs-node/pkg/services/tree" cid "github.com/TrueCloudLab/frostfs-sdk-go/container/id" "github.com/spf13/cobra" @@ -38,18 +38,18 @@ func add(cmd *cobra.Command, _ []string) { var cnr cid.ID err := cnr.DecodeString(cmd.Flag(commonflags.CIDFlag).Value.String()) - common.ExitOnErr(cmd, "decode container ID string: %w", err) + commonCmd.ExitOnErr(cmd, "decode container ID string: %w", err) tid, _ := cmd.Flags().GetString(treeIDFlagKey) pid, _ := cmd.Flags().GetUint64(parentIDFlagKey) meta, err := parseMeta(cmd) - common.ExitOnErr(cmd, "meta data parsing: %w", err) + commonCmd.ExitOnErr(cmd, "meta data parsing: %w", err) ctx := cmd.Context() cli, err := _client(ctx) - common.ExitOnErr(cmd, "client: %w", err) + commonCmd.ExitOnErr(cmd, "client: %w", err) rawCID := make([]byte, sha256.Size) cnr.Encode(rawCID) @@ -63,10 +63,10 @@ func add(cmd *cobra.Command, _ []string) { BearerToken: nil, // TODO: #1891 add token handling } - common.ExitOnErr(cmd, "message signing: %w", tree.SignMessage(req, pk)) + commonCmd.ExitOnErr(cmd, "message signing: %w", tree.SignMessage(req, pk)) resp, err := cli.Add(ctx, req) - common.ExitOnErr(cmd, "rpc call: %w", err) + commonCmd.ExitOnErr(cmd, "rpc call: %w", err) cmd.Println("Node ID: ", resp.Body.NodeId) } diff --git a/cmd/frostfs-cli/modules/tree/add_by_path.go b/cmd/frostfs-cli/modules/tree/add_by_path.go index 52c1cab70..33edc5847 100644 --- a/cmd/frostfs-cli/modules/tree/add_by_path.go +++ b/cmd/frostfs-cli/modules/tree/add_by_path.go @@ -7,6 +7,7 @@ import ( "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/common" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/commonflags" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/key" + commonCmd "github.com/TrueCloudLab/frostfs-node/cmd/internal/common" "github.com/TrueCloudLab/frostfs-node/pkg/services/tree" cid "github.com/TrueCloudLab/frostfs-sdk-go/container/id" "github.com/TrueCloudLab/frostfs-sdk-go/object" @@ -46,19 +47,19 @@ func addByPath(cmd *cobra.Command, _ []string) { var cnr cid.ID err := cnr.DecodeString(cidRaw) - common.ExitOnErr(cmd, "decode container ID string: %w", err) + commonCmd.ExitOnErr(cmd, "decode container ID string: %w", err) tid, _ := cmd.Flags().GetString(treeIDFlagKey) ctx := cmd.Context() cli, err := _client(ctx) - common.ExitOnErr(cmd, "client: %w", err) + commonCmd.ExitOnErr(cmd, "client: %w", err) rawCID := make([]byte, sha256.Size) cnr.Encode(rawCID) meta, err := parseMeta(cmd) - common.ExitOnErr(cmd, "meta data parsing: %w", err) + commonCmd.ExitOnErr(cmd, "meta data parsing: %w", err) path, _ := cmd.Flags().GetString(pathFlagKey) //pAttr, _ := cmd.Flags().GetString(pathAttributeFlagKey) @@ -74,10 +75,10 @@ func addByPath(cmd *cobra.Command, _ []string) { BearerToken: nil, // TODO: #1891 add token handling } - common.ExitOnErr(cmd, "message signing: %w", tree.SignMessage(req, pk)) + commonCmd.ExitOnErr(cmd, "message signing: %w", tree.SignMessage(req, pk)) resp, err := cli.AddByPath(ctx, req) - common.ExitOnErr(cmd, "rpc call: %w", err) + commonCmd.ExitOnErr(cmd, "rpc call: %w", err) cmd.Printf("Parent ID: %d\n", resp.GetBody().GetParentId()) diff --git a/cmd/frostfs-cli/modules/tree/get_by_path.go b/cmd/frostfs-cli/modules/tree/get_by_path.go index 2a3488f48..cc735bb8d 100644 --- a/cmd/frostfs-cli/modules/tree/get_by_path.go +++ b/cmd/frostfs-cli/modules/tree/get_by_path.go @@ -7,6 +7,7 @@ import ( "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/common" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/commonflags" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/key" + commonCmd "github.com/TrueCloudLab/frostfs-node/cmd/internal/common" "github.com/TrueCloudLab/frostfs-node/pkg/services/tree" cid "github.com/TrueCloudLab/frostfs-sdk-go/container/id" "github.com/TrueCloudLab/frostfs-sdk-go/object" @@ -46,13 +47,13 @@ func getByPath(cmd *cobra.Command, _ []string) { var cnr cid.ID err := cnr.DecodeString(cidRaw) - common.ExitOnErr(cmd, "decode container ID string: %w", err) + commonCmd.ExitOnErr(cmd, "decode container ID string: %w", err) tid, _ := cmd.Flags().GetString(treeIDFlagKey) ctx := cmd.Context() cli, err := _client(ctx) - common.ExitOnErr(cmd, "client: %w", err) + commonCmd.ExitOnErr(cmd, "client: %w", err) rawCID := make([]byte, sha256.Size) cnr.Encode(rawCID) @@ -73,10 +74,10 @@ func getByPath(cmd *cobra.Command, _ []string) { BearerToken: nil, // TODO: #1891 add token handling } - common.ExitOnErr(cmd, "message signing: %w", tree.SignMessage(req, pk)) + commonCmd.ExitOnErr(cmd, "message signing: %w", tree.SignMessage(req, pk)) resp, err := cli.GetNodeByPath(ctx, req) - common.ExitOnErr(cmd, "rpc call: %w", err) + commonCmd.ExitOnErr(cmd, "rpc call: %w", err) nn := resp.GetBody().GetNodes() if len(nn) == 0 { diff --git a/cmd/frostfs-cli/modules/tree/list.go b/cmd/frostfs-cli/modules/tree/list.go index ca138e004..ffc7d8b5d 100644 --- a/cmd/frostfs-cli/modules/tree/list.go +++ b/cmd/frostfs-cli/modules/tree/list.go @@ -3,9 +3,9 @@ package tree import ( "crypto/sha256" - "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/common" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/commonflags" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/key" + commonCmd "github.com/TrueCloudLab/frostfs-node/cmd/internal/common" "github.com/TrueCloudLab/frostfs-node/pkg/services/tree" cid "github.com/TrueCloudLab/frostfs-sdk-go/container/id" "github.com/spf13/cobra" @@ -36,12 +36,12 @@ func list(cmd *cobra.Command, _ []string) { var cnr cid.ID err := cnr.DecodeString(cidString) - common.ExitOnErr(cmd, "decode container ID string: %w", err) + commonCmd.ExitOnErr(cmd, "decode container ID string: %w", err) ctx := cmd.Context() cli, err := _client(ctx) - common.ExitOnErr(cmd, "client: %w", err) + commonCmd.ExitOnErr(cmd, "client: %w", err) rawCID := make([]byte, sha256.Size) cnr.Encode(rawCID) @@ -52,10 +52,10 @@ func list(cmd *cobra.Command, _ []string) { }, } - common.ExitOnErr(cmd, "message signing: %w", tree.SignMessage(req, pk)) + commonCmd.ExitOnErr(cmd, "message signing: %w", tree.SignMessage(req, pk)) resp, err := cli.TreeList(ctx, req) - common.ExitOnErr(cmd, "rpc call: %w", err) + commonCmd.ExitOnErr(cmd, "rpc call: %w", err) for _, treeID := range resp.GetBody().GetIds() { cmd.Println(treeID) diff --git a/cmd/frostfs-cli/modules/util/convert_eacl.go b/cmd/frostfs-cli/modules/util/convert_eacl.go index dc30fe9f9..e1635f51a 100644 --- a/cmd/frostfs-cli/modules/util/convert_eacl.go +++ b/cmd/frostfs-cli/modules/util/convert_eacl.go @@ -5,6 +5,7 @@ import ( "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/common" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/commonflags" + commonCmd "github.com/TrueCloudLab/frostfs-node/cmd/internal/common" "github.com/spf13/cobra" ) @@ -36,10 +37,10 @@ func convertEACLTable(cmd *cobra.Command, _ []string) { var err error if jsonFlag || len(to) == 0 { data, err = table.MarshalJSON() - common.ExitOnErr(cmd, "can't JSON encode extended ACL table: %w", err) + commonCmd.ExitOnErr(cmd, "can't JSON encode extended ACL table: %w", err) } else { data, err = table.Marshal() - common.ExitOnErr(cmd, "can't binary encode extended ACL table: %w", err) + commonCmd.ExitOnErr(cmd, "can't binary encode extended ACL table: %w", err) } if len(to) == 0 { @@ -48,7 +49,7 @@ func convertEACLTable(cmd *cobra.Command, _ []string) { } err = os.WriteFile(to, data, 0644) - common.ExitOnErr(cmd, "can't write exteded ACL table to file: %w", err) + commonCmd.ExitOnErr(cmd, "can't write exteded ACL table to file: %w", err) cmd.Printf("extended ACL table was successfully dumped to %s\n", to) } diff --git a/cmd/frostfs-cli/modules/util/keyer.go b/cmd/frostfs-cli/modules/util/keyer.go index 748d6b3e0..da71b2d6e 100644 --- a/cmd/frostfs-cli/modules/util/keyer.go +++ b/cmd/frostfs-cli/modules/util/keyer.go @@ -6,7 +6,7 @@ import ( "fmt" "os" - "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/common" + commonCmd "github.com/TrueCloudLab/frostfs-node/cmd/internal/common" "github.com/TrueCloudLab/frostfs-node/pkg/util/keyer" "github.com/spf13/cobra" ) @@ -41,7 +41,7 @@ func processKeyer(cmd *cobra.Command, args []string) { err = result.ParseMultiSig(args) } else { if len(args) > 1 { - common.ExitOnErr(cmd, "", errKeyerSingleArgument) + commonCmd.ExitOnErr(cmd, "", errKeyerSingleArgument) } var argument string @@ -59,7 +59,7 @@ func processKeyer(cmd *cobra.Command, args []string) { } } - common.ExitOnErr(cmd, "", err) + commonCmd.ExitOnErr(cmd, "", err) result.PrettyPrint(uncompressed, useHex) } diff --git a/cmd/frostfs-cli/modules/util/locode_generate.go b/cmd/frostfs-cli/modules/util/locode_generate.go index e59a87856..b2cd1d2c1 100644 --- a/cmd/frostfs-cli/modules/util/locode_generate.go +++ b/cmd/frostfs-cli/modules/util/locode_generate.go @@ -1,7 +1,7 @@ package util import ( - "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/common" + commonCmd "github.com/TrueCloudLab/frostfs-node/cmd/internal/common" locodedb "github.com/TrueCloudLab/frostfs-node/pkg/util/locode/db" airportsdb "github.com/TrueCloudLab/frostfs-node/pkg/util/locode/db/airports" locodebolt "github.com/TrueCloudLab/frostfs-node/pkg/util/locode/db/boltdb" @@ -58,7 +58,7 @@ var ( }) err := targetDB.Open() - common.ExitOnErr(cmd, "", err) + commonCmd.ExitOnErr(cmd, "", err) defer targetDB.Close() @@ -68,7 +68,7 @@ var ( } err = locodedb.FillDatabase(locodeDB, airportDB, continentsDB, names, targetDB) - common.ExitOnErr(cmd, "", err) + commonCmd.ExitOnErr(cmd, "", err) }, } ) diff --git a/cmd/frostfs-cli/modules/util/locode_info.go b/cmd/frostfs-cli/modules/util/locode_info.go index 23d250c2e..2209df97c 100644 --- a/cmd/frostfs-cli/modules/util/locode_info.go +++ b/cmd/frostfs-cli/modules/util/locode_info.go @@ -1,7 +1,7 @@ package util import ( - "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/common" + commonCmd "github.com/TrueCloudLab/frostfs-node/cmd/internal/common" locodedb "github.com/TrueCloudLab/frostfs-node/pkg/util/locode/db" locodebolt "github.com/TrueCloudLab/frostfs-node/pkg/util/locode/db/boltdb" "github.com/spf13/cobra" @@ -25,12 +25,12 @@ var ( }, locodebolt.ReadOnly()) err := targetDB.Open() - common.ExitOnErr(cmd, "", err) + commonCmd.ExitOnErr(cmd, "", err) defer targetDB.Close() record, err := locodedb.LocodeRecord(targetDB, locodeInfoCode) - common.ExitOnErr(cmd, "", err) + commonCmd.ExitOnErr(cmd, "", err) cmd.Printf("Country: %s\n", record.CountryName()) cmd.Printf("Location: %s\n", record.LocationName()) diff --git a/cmd/frostfs-cli/modules/util/sign_bearer.go b/cmd/frostfs-cli/modules/util/sign_bearer.go index cdd3fd0bc..0104a1796 100644 --- a/cmd/frostfs-cli/modules/util/sign_bearer.go +++ b/cmd/frostfs-cli/modules/util/sign_bearer.go @@ -6,6 +6,7 @@ import ( "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/common" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/commonflags" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/key" + commonCmd "github.com/TrueCloudLab/frostfs-node/cmd/internal/common" "github.com/spf13/cobra" ) @@ -37,7 +38,7 @@ func signBearerToken(cmd *cobra.Command, _ []string) { pk := key.GetOrGenerate(cmd) err := btok.Sign(*pk) - common.ExitOnErr(cmd, "", err) + commonCmd.ExitOnErr(cmd, "", err) to := cmd.Flag(signToFlag).Value.String() jsonFlag, _ := cmd.Flags().GetBool(signBearerJSONFlag) @@ -45,7 +46,7 @@ func signBearerToken(cmd *cobra.Command, _ []string) { var data []byte if jsonFlag || len(to) == 0 { data, err = btok.MarshalJSON() - common.ExitOnErr(cmd, "can't JSON encode bearer token: %w", err) + commonCmd.ExitOnErr(cmd, "can't JSON encode bearer token: %w", err) } else { data = btok.Marshal() } @@ -56,7 +57,7 @@ func signBearerToken(cmd *cobra.Command, _ []string) { } err = os.WriteFile(to, data, 0644) - common.ExitOnErr(cmd, "can't write signed bearer token to file: %w", err) + commonCmd.ExitOnErr(cmd, "can't write signed bearer token to file: %w", err) cmd.Printf("signed bearer token was successfully dumped to %s\n", to) } diff --git a/cmd/frostfs-cli/modules/util/sign_session.go b/cmd/frostfs-cli/modules/util/sign_session.go index f9350c671..920c3cc74 100644 --- a/cmd/frostfs-cli/modules/util/sign_session.go +++ b/cmd/frostfs-cli/modules/util/sign_session.go @@ -10,6 +10,7 @@ import ( "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/common" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/commonflags" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/key" + commonCmd "github.com/TrueCloudLab/frostfs-node/cmd/internal/common" "github.com/TrueCloudLab/frostfs-sdk-go/session" "github.com/spf13/cobra" ) @@ -34,10 +35,10 @@ func initSignSessionCmd() { func signSessionToken(cmd *cobra.Command, _ []string) { fPath, err := cmd.Flags().GetString(signFromFlag) - common.ExitOnErr(cmd, "", err) + commonCmd.ExitOnErr(cmd, "", err) if fPath == "" { - common.ExitOnErr(cmd, "", errors.New("missing session token flag")) + commonCmd.ExitOnErr(cmd, "", errors.New("missing session token flag")) } type iTokenSession interface { @@ -59,15 +60,15 @@ func signSessionToken(cmd *cobra.Command, _ []string) { } } - common.ExitOnErr(cmd, "decode session: %v", errLast) + commonCmd.ExitOnErr(cmd, "decode session: %v", errLast) pk := key.GetOrGenerate(cmd) err = stok.Sign(*pk) - common.ExitOnErr(cmd, "can't sign token: %w", err) + commonCmd.ExitOnErr(cmd, "can't sign token: %w", err) data, err := stok.MarshalJSON() - common.ExitOnErr(cmd, "can't encode session token: %w", err) + commonCmd.ExitOnErr(cmd, "can't encode session token: %w", err) to := cmd.Flag(signToFlag).Value.String() if len(to) == 0 { @@ -77,7 +78,7 @@ func signSessionToken(cmd *cobra.Command, _ []string) { err = os.WriteFile(to, data, 0644) if err != nil { - common.ExitOnErr(cmd, "", fmt.Errorf("can't write signed session token to %s: %w", to, err)) + commonCmd.ExitOnErr(cmd, "", fmt.Errorf("can't write signed session token to %s: %w", to, err)) } cmd.Printf("signed session token saved in %s\n", to) diff --git a/cmd/frostfs-cli/internal/common/exit.go b/cmd/internal/common/exit.go similarity index 100% rename from cmd/frostfs-cli/internal/common/exit.go rename to cmd/internal/common/exit.go diff --git a/cmd/frostfs-cli/internal/common/netmap.go b/cmd/internal/common/netmap.go similarity index 89% rename from cmd/frostfs-cli/internal/common/netmap.go rename to cmd/internal/common/netmap.go index 0cd5beed2..a16b4a944 100644 --- a/cmd/frostfs-cli/internal/common/netmap.go +++ b/cmd/internal/common/netmap.go @@ -39,11 +39,11 @@ func PrettyPrintNodeInfo(cmd *cobra.Command, node netmap.NodeInfo, } // PrettyPrintNetMap print information about network map. -func PrettyPrintNetMap(cmd *cobra.Command, nm netmap.NetMap) { +func PrettyPrintNetMap(cmd *cobra.Command, nm netmap.NetMap, short bool) { cmd.Println("Epoch:", nm.Epoch()) nodes := nm.Nodes() for i := range nodes { - PrettyPrintNodeInfo(cmd, nodes[i], i, "", false) + PrettyPrintNodeInfo(cmd, nodes[i], i, "", short) } } -- 2.45.2 From 17c05172ac8ba32230857113e3ddabecb0f32627 Mon Sep 17 00:00:00 2001 From: Anton Nikiforov Date: Tue, 31 Jan 2023 13:22:37 +0300 Subject: [PATCH 2/3] [#1889] Move flag `--config` in `cmd/frostfs-adm/internal/commonflags/flags.go` Signed-off-by: Anton Nikiforov --- cmd/frostfs-adm/internal/commonflags/flags.go | 7 +++++++ cmd/frostfs-adm/internal/modules/root.go | 7 +++---- 2 files changed, 10 insertions(+), 4 deletions(-) create mode 100644 cmd/frostfs-adm/internal/commonflags/flags.go diff --git a/cmd/frostfs-adm/internal/commonflags/flags.go b/cmd/frostfs-adm/internal/commonflags/flags.go new file mode 100644 index 000000000..081023642 --- /dev/null +++ b/cmd/frostfs-adm/internal/commonflags/flags.go @@ -0,0 +1,7 @@ +package commonflags + +const ( + ConfigFlag = "config" + ConfigFlagShorthand = "c" + ConfigFlagUsage = "Config file" +) diff --git a/cmd/frostfs-adm/internal/modules/root.go b/cmd/frostfs-adm/internal/modules/root.go index 5563d1bb3..9e1739867 100644 --- a/cmd/frostfs-adm/internal/modules/root.go +++ b/cmd/frostfs-adm/internal/modules/root.go @@ -3,6 +3,7 @@ package modules import ( "os" + "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-adm/internal/commonflags" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-adm/internal/modules/config" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-adm/internal/modules/morph" "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-adm/internal/modules/storagecfg" @@ -22,8 +23,6 @@ manage FrostFS network deployment.`, RunE: entryPoint, SilenceUsage: true, } - - configFlag = "config" ) func init() { @@ -34,7 +33,7 @@ func init() { // use stdout as default output for cmd.Print() rootCmd.SetOut(os.Stdout) - rootCmd.PersistentFlags().StringP(configFlag, "c", "", "Config file") + rootCmd.PersistentFlags().StringP(commonflags.ConfigFlag, commonflags.ConfigFlagShorthand, "", commonflags.ConfigFlagUsage) rootCmd.Flags().Bool("version", false, "Application version") rootCmd.AddCommand(config.RootCmd) @@ -60,7 +59,7 @@ func entryPoint(cmd *cobra.Command, args []string) error { } func initConfig(cmd *cobra.Command) { - configFile, err := cmd.Flags().GetString(configFlag) + configFile, err := cmd.Flags().GetString(commonflags.ConfigFlag) if err != nil || configFile == "" { return } -- 2.45.2 From abaf4c55bc4b4e8125860a9f56b22ae6c43b1f7f Mon Sep 17 00:00:00 2001 From: Anton Nikiforov Date: Tue, 31 Jan 2023 13:33:33 +0300 Subject: [PATCH 3/3] [#1889] adm: Add command `morph netmap-candidates` Signed-off-by: Anton Nikiforov --- CHANGELOG.md | 1 + cmd/frostfs-adm/internal/commonflags/flags.go | 4 +++ .../modules/morph/netmap_candidates.go | 29 +++++++++++++++++++ .../internal/modules/morph/root.go | 13 +++++++++ cmd/frostfs-adm/internal/modules/root.go | 2 ++ pkg/morph/client/netmap/netmap.go | 6 ++-- pkg/morph/client/netmap/snapshot.go | 2 +- 7 files changed, 53 insertions(+), 4 deletions(-) create mode 100644 cmd/frostfs-adm/internal/modules/morph/netmap_candidates.go diff --git a/CHANGELOG.md b/CHANGELOG.md index 50d6c90e1..81123199b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ Changelog for FrostFS Node - Doc for extended headers (#2128) - New `frostfs_node_object_container_size` metric for tracking size of reqular objects in a container (#2116) - New `frostfs_node_object_payload_size` metric for tracking size of reqular objects on a single shard (#1794) +- Add command `frostfs-adm morph netmap-candidates` (#1889) ### Changed - `common.PrintVerbose` prints via `cobra.Command.Printf` (#1962) diff --git a/cmd/frostfs-adm/internal/commonflags/flags.go b/cmd/frostfs-adm/internal/commonflags/flags.go index 081023642..b31b13255 100644 --- a/cmd/frostfs-adm/internal/commonflags/flags.go +++ b/cmd/frostfs-adm/internal/commonflags/flags.go @@ -4,4 +4,8 @@ const ( ConfigFlag = "config" ConfigFlagShorthand = "c" ConfigFlagUsage = "Config file" + + Verbose = "verbose" + VerboseShorthand = "v" + VerboseUsage = "Verbose output" ) diff --git a/cmd/frostfs-adm/internal/modules/morph/netmap_candidates.go b/cmd/frostfs-adm/internal/modules/morph/netmap_candidates.go new file mode 100644 index 000000000..241e274a4 --- /dev/null +++ b/cmd/frostfs-adm/internal/modules/morph/netmap_candidates.go @@ -0,0 +1,29 @@ +package morph + +import ( + "github.com/TrueCloudLab/frostfs-node/cmd/frostfs-adm/internal/commonflags" + commonCmd "github.com/TrueCloudLab/frostfs-node/cmd/internal/common" + "github.com/TrueCloudLab/frostfs-node/pkg/morph/client/netmap" + "github.com/nspcc-dev/neo-go/pkg/rpcclient/invoker" + "github.com/spf13/cobra" + "github.com/spf13/viper" +) + +func listNetmapCandidatesNodes(cmd *cobra.Command, _ []string) { + c, err := getN3Client(viper.GetViper()) + commonCmd.ExitOnErr(cmd, "can't create N3 client: %w", err) + + inv := invoker.New(c, nil) + + cs, err := c.GetContractStateByID(1) + commonCmd.ExitOnErr(cmd, "can't get NNS contract info: %w", err) + + nmHash, err := nnsResolveHash(inv, cs.Hash, netmapContract+".frostfs") + commonCmd.ExitOnErr(cmd, "can't get netmap contract hash: %w", err) + + res, err := inv.Call(nmHash, "netmapCandidates") + commonCmd.ExitOnErr(cmd, "can't fetch list of network config keys from the netmap contract", err) + nm, err := netmap.DecodeNetMap(res.Stack) + commonCmd.ExitOnErr(cmd, "unable to decode netmap: %w", err) + commonCmd.PrettyPrintNetMap(cmd, *nm, !viper.GetBool(commonflags.Verbose)) +} diff --git a/cmd/frostfs-adm/internal/modules/morph/root.go b/cmd/frostfs-adm/internal/modules/morph/root.go index 603ea23ac..c1d815607 100644 --- a/cmd/frostfs-adm/internal/modules/morph/root.go +++ b/cmd/frostfs-adm/internal/modules/morph/root.go @@ -226,6 +226,16 @@ var ( }, RunE: depositNotary, } + + netmapCandidatesCmd = &cobra.Command{ + Use: "netmap-candidates", + Short: "List netmap candidates nodes", + PreRun: func(cmd *cobra.Command, _ []string) { + _ = viper.BindPFlag(endpointFlag, cmd.Flags().Lookup(endpointFlag)) + _ = viper.BindPFlag(alphabetWalletsFlag, cmd.Flags().Lookup(alphabetWalletsFlag)) + }, + Run: listNetmapCandidatesNodes, + } ) func init() { @@ -323,4 +333,7 @@ func init() { depositNotaryCmd.Flags().String(walletAccountFlag, "", "Wallet account address") depositNotaryCmd.Flags().String(refillGasAmountFlag, "", "Amount of GAS to deposit") depositNotaryCmd.Flags().String(notaryDepositTillFlag, "", "Notary deposit duration in blocks") + + RootCmd.AddCommand(netmapCandidatesCmd) + netmapCandidatesCmd.Flags().StringP(endpointFlag, "r", "", "N3 RPC node endpoint") } diff --git a/cmd/frostfs-adm/internal/modules/root.go b/cmd/frostfs-adm/internal/modules/root.go index 9e1739867..4ac9a9b20 100644 --- a/cmd/frostfs-adm/internal/modules/root.go +++ b/cmd/frostfs-adm/internal/modules/root.go @@ -34,6 +34,8 @@ func init() { rootCmd.SetOut(os.Stdout) rootCmd.PersistentFlags().StringP(commonflags.ConfigFlag, commonflags.ConfigFlagShorthand, "", commonflags.ConfigFlagUsage) + rootCmd.PersistentFlags().BoolP(commonflags.Verbose, commonflags.VerboseShorthand, false, commonflags.VerboseUsage) + _ = viper.BindPFlag(commonflags.Verbose, rootCmd.PersistentFlags().Lookup(commonflags.Verbose)) rootCmd.Flags().Bool("version", false, "Application version") rootCmd.AddCommand(config.RootCmd) diff --git a/pkg/morph/client/netmap/netmap.go b/pkg/morph/client/netmap/netmap.go index 071154313..3943e8bc7 100644 --- a/pkg/morph/client/netmap/netmap.go +++ b/pkg/morph/client/netmap/netmap.go @@ -22,7 +22,7 @@ func (c *Client) GetNetMapByEpoch(epoch uint64) (*netmap.NetMap, error) { epochSnapshotMethod, err) } - nm, err := decodeNetMap(res) + nm, err := DecodeNetMap(res) if err != nil { return nil, err } @@ -61,10 +61,10 @@ func (c *Client) NetMap() (*netmap.NetMap, error) { netMapMethod, err) } - return decodeNetMap(res) + return DecodeNetMap(res) } -func decodeNetMap(resStack []stackitem.Item) (*netmap.NetMap, error) { +func DecodeNetMap(resStack []stackitem.Item) (*netmap.NetMap, error) { var nm netmap.NetMap if len(resStack) > 0 { diff --git a/pkg/morph/client/netmap/snapshot.go b/pkg/morph/client/netmap/snapshot.go index b11cfd39f..fc13a8eff 100644 --- a/pkg/morph/client/netmap/snapshot.go +++ b/pkg/morph/client/netmap/snapshot.go @@ -16,5 +16,5 @@ func (c *Client) GetNetMap(diff uint64) (*netmap.NetMap, error) { return nil, err } - return decodeNetMap(res) + return DecodeNetMap(res) } -- 2.45.2