[#1500] neofs-cli: Check if container contains LOCK objects before removal
Signed-off-by: Evgenii Stratonikov <evgeniy@nspcc.ru>
This commit is contained in:
parent
a421344727
commit
6eb5260562
2 changed files with 28 additions and 0 deletions
|
@ -8,6 +8,7 @@ Changelog for NeoFS Node
|
|||
### Changed
|
||||
|
||||
- Require SG members to be unique (#1490)
|
||||
- `neofs-cli` now doesn't remove container with LOCK objects without `--force` flag (#1500)
|
||||
|
||||
### Fixed
|
||||
|
||||
|
|
|
@ -1,16 +1,20 @@
|
|||
package container
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
internalclient "github.com/nspcc-dev/neofs-node/cmd/neofs-cli/internal/client"
|
||||
"github.com/nspcc-dev/neofs-node/cmd/neofs-cli/internal/common"
|
||||
"github.com/nspcc-dev/neofs-node/cmd/neofs-cli/internal/commonflags"
|
||||
"github.com/nspcc-dev/neofs-node/cmd/neofs-cli/internal/key"
|
||||
objectSDK "github.com/nspcc-dev/neofs-sdk-go/object"
|
||||
"github.com/nspcc-dev/neofs-sdk-go/session"
|
||||
"github.com/spf13/cobra"
|
||||
)
|
||||
|
||||
const forceFlag = "force"
|
||||
|
||||
var deleteContainerCmd = &cobra.Command{
|
||||
Use: "delete",
|
||||
Short: "Delete existing container",
|
||||
|
@ -30,6 +34,28 @@ Only owner of the container has a permission to remove container.`,
|
|||
pk := key.GetOrGenerate(cmd)
|
||||
cli := internalclient.GetSDKClientByFlag(cmd, pk, commonflags.RPC)
|
||||
|
||||
if force, _ := cmd.Flags().GetBool(forceFlag); !force {
|
||||
fs := objectSDK.NewSearchFilters()
|
||||
fs.AddTypeFilter(objectSDK.MatchStringEqual, objectSDK.TypeLock)
|
||||
|
||||
var searchPrm internalclient.SearchObjectsPrm
|
||||
searchPrm.SetClient(cli)
|
||||
searchPrm.SetContainerID(id)
|
||||
searchPrm.SetFilters(fs)
|
||||
searchPrm.SetTTL(2)
|
||||
|
||||
common.PrintVerbose("Searching for LOCK objects...")
|
||||
|
||||
res, err := internalclient.SearchObjects(searchPrm)
|
||||
common.ExitOnErr(cmd, "can't search for LOCK objects: %w", err)
|
||||
|
||||
if len(res.IDList()) != 0 {
|
||||
common.ExitOnErr(cmd, "",
|
||||
fmt.Errorf("Container wasn't removed because LOCK objects were found.\n"+
|
||||
"Use --%s flag to remove anyway.", forceFlag))
|
||||
}
|
||||
}
|
||||
|
||||
var delPrm internalclient.DeleteContainerPrm
|
||||
delPrm.SetClient(cli)
|
||||
delPrm.SetContainer(id)
|
||||
|
@ -72,4 +98,5 @@ func initContainerDeleteCmd() {
|
|||
|
||||
flags.StringVar(&containerID, "cid", "", "container ID")
|
||||
flags.BoolVar(&containerAwait, "await", false, "block execution until container is removed")
|
||||
flags.Bool(forceFlag, false, "do not check whether container contains locks and remove immediately")
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue