From 2185c77a4975102dda69e63c92ce65968263cd26 Mon Sep 17 00:00:00 2001 From: Ekaterina Pavlova Date: Mon, 11 Sep 2023 14:37:00 +0400 Subject: [PATCH] neofs-lens: add payload-only flag With payload-only flag the inspect commands save only payload of the object, otherwise full object will be saved. Refs #2543. Signed-off-by: Ekaterina Pavlova --- CHANGELOG.md | 1 + cmd/neofs-lens/internal/blobovnicza/inspect.go | 8 +++++++- cmd/neofs-lens/internal/blobovnicza/root.go | 7 ++++--- cmd/neofs-lens/internal/flags.go | 4 ++++ cmd/neofs-lens/internal/peapod/inspect.go | 7 ++++++- cmd/neofs-lens/internal/peapod/root.go | 7 ++++--- cmd/neofs-lens/internal/printers.go | 8 ++++++-- cmd/neofs-lens/internal/storage/inspect.go | 7 ++++++- cmd/neofs-lens/internal/storage/root.go | 7 ++++--- cmd/neofs-lens/internal/writecache/inspect.go | 7 ++++++- cmd/neofs-lens/internal/writecache/root.go | 7 ++++--- 11 files changed, 52 insertions(+), 18 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b73068cc6e..31b32e8d6c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -29,6 +29,7 @@ minor release, the component will be purged, so be prepared (see `Updating` sect - SN network validation (is available by its announced addresses) on bootstrap by the IR (#2475) - Display of container alias fee info in `neofs-cli netmap netinfo` (#2553) - `neofs-lens storage inspect` CLI command (#1336) +- `neofs-lens` payload-only flag (#2543) ### Fixed - `neo-go` RPC connection loss handling (#1337) diff --git a/cmd/neofs-lens/internal/blobovnicza/inspect.go b/cmd/neofs-lens/internal/blobovnicza/inspect.go index 5799585072..c637b0f2a7 100644 --- a/cmd/neofs-lens/internal/blobovnicza/inspect.go +++ b/cmd/neofs-lens/internal/blobovnicza/inspect.go @@ -19,6 +19,7 @@ func init() { common.AddAddressFlag(inspectCMD, &vAddress) common.AddComponentPathFlag(inspectCMD, &vPath) common.AddOutputFileFlag(inspectCMD, &vOut) + common.AddPayloadOnlyFlag(inspectCMD, &vPayloadOnly) } func inspectFunc(cmd *cobra.Command, _ []string) { @@ -44,5 +45,10 @@ func inspectFunc(cmd *cobra.Command, _ []string) { ) common.PrintObjectHeader(cmd, o) - common.WriteObjectToFile(cmd, vOut, data) + if vPayloadOnly { + data = o.Payload() + common.WriteObjectToFile(cmd, vOut, data, true) + return + } + common.WriteObjectToFile(cmd, vOut, data, false) } diff --git a/cmd/neofs-lens/internal/blobovnicza/root.go b/cmd/neofs-lens/internal/blobovnicza/root.go index 59ce6e9907..b3eebe77cf 100644 --- a/cmd/neofs-lens/internal/blobovnicza/root.go +++ b/cmd/neofs-lens/internal/blobovnicza/root.go @@ -7,9 +7,10 @@ import ( ) var ( - vAddress string - vPath string - vOut string + vAddress string + vPath string + vOut string + vPayloadOnly bool ) // Root contains `blobovnicza` command definition. diff --git a/cmd/neofs-lens/internal/flags.go b/cmd/neofs-lens/internal/flags.go index 4de4893094..78c5657904 100644 --- a/cmd/neofs-lens/internal/flags.go +++ b/cmd/neofs-lens/internal/flags.go @@ -42,3 +42,7 @@ func AddConfigFileFlag(cmd *cobra.Command, v *string) { _ = cmd.MarkFlagFilename(flagConfigFile) _ = cmd.MarkFlagRequired(flagConfigFile) } + +func AddPayloadOnlyFlag(cmd *cobra.Command, v *bool) { + cmd.Flags().BoolVar(v, "payload-only", false, "Save only object payload") +} diff --git a/cmd/neofs-lens/internal/peapod/inspect.go b/cmd/neofs-lens/internal/peapod/inspect.go index 6cd5e5a356..8135872cf6 100644 --- a/cmd/neofs-lens/internal/peapod/inspect.go +++ b/cmd/neofs-lens/internal/peapod/inspect.go @@ -17,6 +17,7 @@ func init() { common.AddAddressFlag(inspectCMD, &vAddress) common.AddComponentPathFlag(inspectCMD, &vPath) common.AddOutputFileFlag(inspectCMD, &vOut) + common.AddPayloadOnlyFlag(inspectCMD, &vPayloadOnly) } func inspectFunc(cmd *cobra.Command, _ []string) { @@ -32,5 +33,9 @@ func inspectFunc(cmd *cobra.Command, _ []string) { common.ExitOnErr(cmd, common.Errf("failed to read object from Peapod: %w", err)) common.PrintObjectHeader(cmd, *res.Object) - common.WriteObjectToFile(cmd, vOut, res.RawData) + if vPayloadOnly { + common.WriteObjectToFile(cmd, vOut, res.RawData, true) + return + } + common.WriteObjectToFile(cmd, vOut, res.RawData, false) } diff --git a/cmd/neofs-lens/internal/peapod/root.go b/cmd/neofs-lens/internal/peapod/root.go index a58a4e7dbd..ee77c18be4 100644 --- a/cmd/neofs-lens/internal/peapod/root.go +++ b/cmd/neofs-lens/internal/peapod/root.go @@ -8,9 +8,10 @@ import ( ) var ( - vAddress string - vPath string - vOut string + vAddress string + vPath string + vOut string + vPayloadOnly bool ) // Root defines root command for operations with Peapod. diff --git a/cmd/neofs-lens/internal/printers.go b/cmd/neofs-lens/internal/printers.go index d530132fa6..853cc8156a 100644 --- a/cmd/neofs-lens/internal/printers.go +++ b/cmd/neofs-lens/internal/printers.go @@ -53,7 +53,7 @@ func printObjectID(cmd *cobra.Command, recv func() (oid.ID, bool)) { // WriteObjectToFile writes object to the provided path. Does nothing if // the path is empty. -func WriteObjectToFile(cmd *cobra.Command, path string, data []byte) { +func WriteObjectToFile(cmd *cobra.Command, path string, data []byte, payloadOnly bool) { if path == "" { return } @@ -61,5 +61,9 @@ func WriteObjectToFile(cmd *cobra.Command, path string, data []byte) { ExitOnErr(cmd, Errf("could not write file: %w", os.WriteFile(path, data, 0644))) - cmd.Printf("\nSaved payload to '%s' file\n", path) + if payloadOnly { + cmd.Printf("\nSaved payload to '%s' file\n", path) + return + } + cmd.Printf("\nSaved object to '%s' file\n", path) } diff --git a/cmd/neofs-lens/internal/storage/inspect.go b/cmd/neofs-lens/internal/storage/inspect.go index a4a94e4ab6..fecce16b54 100644 --- a/cmd/neofs-lens/internal/storage/inspect.go +++ b/cmd/neofs-lens/internal/storage/inspect.go @@ -19,6 +19,7 @@ func init() { common.AddAddressFlag(storageInspectObjCMD, &vAddress) common.AddOutputFileFlag(storageInspectObjCMD, &vOut) common.AddConfigFileFlag(storageInspectObjCMD, &vConfig) + common.AddPayloadOnlyFlag(storageInspectObjCMD, &vPayloadOnly) } func inspectObject(cmd *cobra.Command, _ []string) { @@ -34,7 +35,11 @@ func inspectObject(cmd *cobra.Command, _ []string) { common.ExitOnErr(cmd, common.Errf("could not fetch object: %w", err)) common.PrintObjectHeader(cmd, *obj) + if vPayloadOnly { + common.WriteObjectToFile(cmd, vOut, obj.Payload(), true) + return + } data, err := obj.Marshal() common.ExitOnErr(cmd, common.Errf("could not marshal object: %w", err)) - common.WriteObjectToFile(cmd, vOut, data) + common.WriteObjectToFile(cmd, vOut, data, false) } diff --git a/cmd/neofs-lens/internal/storage/root.go b/cmd/neofs-lens/internal/storage/root.go index f9739ea04b..208394757a 100644 --- a/cmd/neofs-lens/internal/storage/root.go +++ b/cmd/neofs-lens/internal/storage/root.go @@ -30,9 +30,10 @@ import ( ) var ( - vAddress string - vOut string - vConfig string + vAddress string + vOut string + vConfig string + vPayloadOnly bool ) var Root = &cobra.Command{ diff --git a/cmd/neofs-lens/internal/writecache/inspect.go b/cmd/neofs-lens/internal/writecache/inspect.go index f1dcfd9aec..17683e8cfd 100644 --- a/cmd/neofs-lens/internal/writecache/inspect.go +++ b/cmd/neofs-lens/internal/writecache/inspect.go @@ -18,6 +18,7 @@ func init() { common.AddAddressFlag(inspectCMD, &vAddress) common.AddComponentPathFlag(inspectCMD, &vPath) common.AddOutputFileFlag(inspectCMD, &vOut) + common.AddPayloadOnlyFlag(inspectCMD, &vPayloadOnly) } func inspectFunc(cmd *cobra.Command, _ []string) { @@ -31,5 +32,9 @@ func inspectFunc(cmd *cobra.Command, _ []string) { common.ExitOnErr(cmd, common.Errf("could not unmarshal object: %w", o.Unmarshal(data))) common.PrintObjectHeader(cmd, o) - common.WriteObjectToFile(cmd, vOut, data) + if vPayloadOnly { + common.WriteObjectToFile(cmd, vOut, data, true) + return + } + common.WriteObjectToFile(cmd, vOut, data, false) } diff --git a/cmd/neofs-lens/internal/writecache/root.go b/cmd/neofs-lens/internal/writecache/root.go index 0e0e778672..fdd13f0cc4 100644 --- a/cmd/neofs-lens/internal/writecache/root.go +++ b/cmd/neofs-lens/internal/writecache/root.go @@ -8,9 +8,10 @@ import ( ) var ( - vAddress string - vPath string - vOut string + vAddress string + vPath string + vOut string + vPayloadOnly bool ) // Root contains `write-cache` command definition.