Skip to content

Commit

Permalink
neofs-cli/control: support ObjectStatus control command
Browse files Browse the repository at this point in the history
It is the second command related to object operations, so additional `object`
subcommand seems reasonable, in the future, the others can be placed (move to)
here too.
Example:
```
▶ neofs-cli control object status --endpoint s01.neofs.devenv:8081 -w services/storage/wallet01.json --object EnCqHUUwS6vd2MENDe1MvjiXv9jADF8iA1vZimpjJpYt/AWUFtrRLU8NkPVyF3b5WjMXUe8awxPdHtNvSRpKqEaFq
Enter password >
Shard ID: 66cJzDxA4hqqF3YKFiqFyc
        Metabase: AVAILABLE
        peapod: Path: "/storage/peapod1.db"
```
Closes #2886.

Signed-off-by: Pavel Karpy <[email protected]>
  • Loading branch information
carpawell committed Aug 9, 2024
1 parent 9fabc49 commit 9d9de7e
Show file tree
Hide file tree
Showing 3 changed files with 99 additions and 0 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ Changelog for NeoFS Node
- Indexes inspection command to neofs-lens (#2882)
- Add objects sanity checker to neofs-lens (#2506)
- Support for 0.20.0+ neofs-contract archive format (#2872)
- `neofs-cli control object status` command (#2886)

### Fixed
- Control service's Drop call does not clean metabase (#2822)
Expand Down
92 changes: 92 additions & 0 deletions cmd/neofs-cli/modules/control/objects.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
package control

import (
"fmt"

rawclient "github.com/nspcc-dev/neofs-api-go/v2/rpc/client"
"github.com/nspcc-dev/neofs-node/cmd/neofs-cli/internal/commonflags"
"github.com/nspcc-dev/neofs-node/cmd/neofs-cli/internal/key"
"github.com/nspcc-dev/neofs-node/pkg/services/control"
oid "github.com/nspcc-dev/neofs-sdk-go/object/id"
"github.com/spf13/cobra"
)

const objectFlag = "object"

var objectCmd = &cobra.Command{
Use: "object",
Short: "Direct object operations with storage engine",
}

var objectStatusCmd = &cobra.Command{
Use: "status",
Short: "Check current object status",
Args: cobra.NoArgs,
SilenceUsage: true,
RunE: objectStatus,
}

func objectStatus(cmd *cobra.Command, _ []string) error {
ctx, cancel := commonflags.GetCommandContext(cmd)
defer cancel()

pk := key.Get(cmd)
addressRaw, err := cmd.Flags().GetString(objectFlag)
if err != nil {
return fmt.Errorf("reading %s flag: %w", objectFlag, err)
}

var sdkAddr oid.Address
err = sdkAddr.DecodeString(addressRaw)
if err != nil {
return fmt.Errorf("validating address (%s): %w", addressRaw, err)
}

var resp *control.ObjectStatusResponse
req := &control.ObjectStatusRequest{
Body: &control.ObjectStatusRequest_Body{
ObjectAddress: addressRaw,
},
}
signRequest(cmd, pk, req)

cli := getClient(ctx, cmd)

err = cli.ExecRaw(func(client *rawclient.Client) error {
resp, err = control.ObjectStatus(client, req)
return err
})
if err != nil {
return fmt.Errorf("rpc error: %w", err)
}

verifyResponse(cmd, resp.GetSignature(), resp.GetBody())

shards := resp.GetBody().GetShards()
if len(shards) == 0 {
cmd.Println("<emtpy response>")
return nil
}

for _, shard := range resp.GetBody().GetShards() {
cmd.Printf("Shard ID: %s\n", shard.ShardId)
storages := shard.GetStorages()
if len(storages) == 0 {
cmd.Println("\t<emtpy response>")
continue
}

for _, storage := range storages {
cmd.Printf("\t%s: %s\n", storage.Type, storage.Status)
}
}

return nil
}

func initObjectStatusFlags() {
initControlFlags(objectStatusCmd)

flags := objectStatusCmd.Flags()
flags.String(objectFlag, "", "Object address")
}
6 changes: 6 additions & 0 deletions cmd/neofs-cli/modules/control/root.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,17 +27,23 @@ const (
)

func init() {
objectCmd.AddCommand(
objectStatusCmd,
)

Cmd.AddCommand(
healthCheckCmd,
setNetmapStatusCmd,
dropObjectsCmd,
shardsCmd,
synchronizeTreeCmd,
objectCmd,
)

initControlHealthCheckCmd()
initControlSetNetmapStatusCmd()
initControlDropObjectsCmd()
initControlShardsCmd()
initControlSynchronizeTreeCmd()
initObjectStatusFlags()
}

0 comments on commit 9d9de7e

Please sign in to comment.