diff --git a/cmd/frostfs-cli/modules/object/util.go b/cmd/frostfs-cli/modules/object/util.go index ff6b3219d..381c790e9 100644 --- a/cmd/frostfs-cli/modules/object/util.go +++ b/cmd/frostfs-cli/modules/object/util.go @@ -354,7 +354,7 @@ func collectObjectRelatives(cmd *cobra.Command, cli *client.Client, cnr cid.ID, Prepare(cmd, &prmHead) - _, err := internal.HeadObject(cmd.Context(), prmHead) + o, err := internal.HeadObject(cmd.Context(), prmHead) var errSplit *objectSDK.SplitInfoError var errEC *objectSDK.ECInfoError @@ -364,6 +364,9 @@ func collectObjectRelatives(cmd *cobra.Command, cli *client.Client, cnr cid.ID, commonCmd.ExitOnErr(cmd, "failed to get raw object header: %w", err) case err == nil: common.PrintVerbose(cmd, "Raw header received - object is singular.") + if ech := o.Header().ECHeader(); ech != nil { + commonCmd.ExitOnErr(cmd, "Lock EC chunk failed: %w", errors.ErrUnsupported) + } return nil case errors.As(err, &errSplit): common.PrintVerbose(cmd, "Split information received - object is virtual.") diff --git a/pkg/core/object/fmt.go b/pkg/core/object/fmt.go index b997aa182..96f721806 100644 --- a/pkg/core/object/fmt.go +++ b/pkg/core/object/fmt.go @@ -14,7 +14,6 @@ import ( "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/core/netmap" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/util/logger" "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/acl" - cid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id" frostfsecdsa "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/crypto/ecdsa" objectSDK "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object" oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id" @@ -41,30 +40,12 @@ type cfg struct { verifyTokenIssuer bool } -// DeleteHandler is an interface of delete queue processor. -type DeleteHandler interface { - // DeleteObjects places objects to a removal queue. - // - // Returns apistatus.LockNonRegularObject if at least one object - // is locked. - DeleteObjects(oid.Address, ...oid.Address) error -} - // LockSource is a source of lock relations between the objects. type LockSource interface { // IsLocked must clarify object's lock status. IsLocked(ctx context.Context, address oid.Address) (bool, error) } -// Locker is an object lock storage interface. -type Locker interface { - // Lock list of objects as locked by locker in the specified container. - // - // Returns apistatus.LockNonRegularObject if at least object in locked - // list is irregular (not type of REGULAR). - Lock(idCnr cid.ID, locker oid.ID, locked []oid.ID) error -} - var errNilObject = errors.New("object is nil") var errNilID = errors.New("missing identifier") diff --git a/pkg/local_object_storage/engine/head.go b/pkg/local_object_storage/engine/head.go index 97fb5be3a..92d1b20fc 100644 --- a/pkg/local_object_storage/engine/head.go +++ b/pkg/local_object_storage/engine/head.go @@ -151,18 +151,3 @@ func Head(ctx context.Context, storage *StorageEngine, addr oid.Address) (*objec return res.Header(), nil } - -// HeadRaw reads object header from local storage by provided address and raw -// flag. -func HeadRaw(ctx context.Context, storage *StorageEngine, addr oid.Address, raw bool) (*objectSDK.Object, error) { - var headPrm HeadPrm - headPrm.WithAddress(addr) - headPrm.WithRaw(raw) - - res, err := storage.Head(ctx, headPrm) - if err != nil { - return nil, err - } - - return res.Header(), nil -} diff --git a/pkg/services/object/delete/exec.go b/pkg/services/object/delete/exec.go index 22928dcd5..c2f92950f 100644 --- a/pkg/services/object/delete/exec.go +++ b/pkg/services/object/delete/exec.go @@ -17,6 +17,8 @@ import ( "go.uber.org/zap" ) +var errDeleteECChunk = errors.New("invalid operation: delete EC object chunk") + type execCtx struct { svc *Service @@ -66,13 +68,16 @@ func (exec *execCtx) newAddress(id oid.ID) oid.Address { } func (exec *execCtx) formExtendedInfo(ctx context.Context) error { - _, err := exec.svc.header.head(ctx, exec) + obj, err := exec.svc.header.head(ctx, exec) var errSplitInfo *objectSDK.SplitInfoError var errECInfo *objectSDK.ECInfoError switch { case err == nil: + if ech := obj.ECHeader(); ech != nil { + return errDeleteECChunk + } return nil case errors.As(err, &errSplitInfo): exec.splitInfo = errSplitInfo.SplitInfo()