forked from TrueCloudLab/frostfs-node
[#791] neofs-lens: Implement object listing
Implement `list` command for object listing. Support listing of the objects from write-cache and blobovnicza. Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
This commit is contained in:
parent
522cbab47c
commit
4d7915a366
3 changed files with 105 additions and 1 deletions
72
cmd/neofs-lens/internal/commands/list/list.go
Normal file
72
cmd/neofs-lens/internal/commands/list/list.go
Normal file
|
@ -0,0 +1,72 @@
|
||||||
|
package cmdlist
|
||||||
|
|
||||||
|
import (
|
||||||
|
"io"
|
||||||
|
|
||||||
|
"github.com/nspcc-dev/neofs-api-go/pkg/object"
|
||||||
|
common "github.com/nspcc-dev/neofs-node/cmd/neofs-lens/internal"
|
||||||
|
"github.com/nspcc-dev/neofs-node/pkg/local_object_storage/blobovnicza"
|
||||||
|
"github.com/nspcc-dev/neofs-node/pkg/local_object_storage/writecache"
|
||||||
|
"github.com/spf13/cobra"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
flagFile = "path"
|
||||||
|
flagWriteCache = "writecache"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
vPath string
|
||||||
|
vWriteCache bool
|
||||||
|
)
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
Command.Flags().StringVar(&vPath, flagFile, "",
|
||||||
|
"Path to storage engine component",
|
||||||
|
)
|
||||||
|
_ = Command.MarkFlagFilename(flagFile)
|
||||||
|
_ = Command.MarkFlagRequired(flagFile)
|
||||||
|
|
||||||
|
Command.Flags().BoolVar(&vWriteCache, flagWriteCache, false,
|
||||||
|
"Process write-cache",
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
var Command = &cobra.Command{
|
||||||
|
Use: "list",
|
||||||
|
Short: "Object listing",
|
||||||
|
Long: `List all objects stored in storage engine component.`,
|
||||||
|
Run: func(cmd *cobra.Command, args []string) {
|
||||||
|
// other targets can be supported
|
||||||
|
w := cmd.OutOrStderr()
|
||||||
|
|
||||||
|
wAddr := func(addr *object.Address) error {
|
||||||
|
_, err := io.WriteString(w, addr.String()+"\n")
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if vWriteCache {
|
||||||
|
db, err := writecache.OpenDB(vPath, true)
|
||||||
|
common.ExitOnErr(cmd, common.Errf("could not open write-cache db: %w", err))
|
||||||
|
|
||||||
|
defer db.Close()
|
||||||
|
|
||||||
|
err = writecache.IterateDB(db, wAddr)
|
||||||
|
common.ExitOnErr(cmd, common.Errf("write-cache iterator failure: %w", err))
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
blz := blobovnicza.New(
|
||||||
|
blobovnicza.WithPath(vPath),
|
||||||
|
blobovnicza.ReadOnly(),
|
||||||
|
)
|
||||||
|
|
||||||
|
common.ExitOnErr(cmd, blz.Open())
|
||||||
|
|
||||||
|
defer blz.Close()
|
||||||
|
|
||||||
|
err := blobovnicza.IterateAddresses(blz, wAddr)
|
||||||
|
common.ExitOnErr(cmd, common.Errf("blobovnicza iterator failure: %w", err))
|
||||||
|
},
|
||||||
|
}
|
31
cmd/neofs-lens/internal/common.go
Normal file
31
cmd/neofs-lens/internal/common.go
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
package common
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
|
||||||
|
"github.com/spf13/cobra"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Errf returns formatted error in errFmt format if err is not nil.
|
||||||
|
func Errf(errFmt string, err error) error {
|
||||||
|
if err == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return fmt.Errorf(errFmt, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ExitOnErr calls exitOnErrCode with code 1.
|
||||||
|
func ExitOnErr(cmd *cobra.Command, err error) {
|
||||||
|
exitOnErrCode(cmd, err, 1)
|
||||||
|
}
|
||||||
|
|
||||||
|
// exitOnErrCode prints error via cmd and calls os.Exit with passed exit code.
|
||||||
|
// Does nothing if err is nil.
|
||||||
|
func exitOnErrCode(cmd *cobra.Command, err error, code int) {
|
||||||
|
if err != nil {
|
||||||
|
cmd.PrintErrln(err)
|
||||||
|
os.Exit(code)
|
||||||
|
}
|
||||||
|
}
|
|
@ -4,6 +4,7 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
|
cmdlist "github.com/nspcc-dev/neofs-node/cmd/neofs-lens/internal/commands/list"
|
||||||
"github.com/nspcc-dev/neofs-node/misc"
|
"github.com/nspcc-dev/neofs-node/misc"
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
)
|
)
|
||||||
|
@ -32,7 +33,7 @@ func entryPoint(cmd *cobra.Command, _ []string) error {
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
command.AddCommand(
|
command.AddCommand(
|
||||||
// sub-commands
|
cmdlist.Command,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue