[#1512] object: Fix put already removed object in EC
-container
All checks were successful
Tests and linters / Run gofumpt (pull_request) Successful in 3m27s
DCO action / DCO (pull_request) Successful in 4m0s
Vulncheck / Vulncheck (pull_request) Successful in 4m37s
Tests and linters / Staticcheck (pull_request) Successful in 6m1s
Pre-commit hooks / Pre-commit (pull_request) Successful in 6m23s
Tests and linters / Lint (pull_request) Successful in 6m28s
Tests and linters / gopls check (pull_request) Successful in 6m36s
Build / Build Components (pull_request) Successful in 6m57s
Tests and linters / Tests (pull_request) Successful in 7m1s
Tests and linters / Tests with -race (pull_request) Successful in 7m1s
All checks were successful
Tests and linters / Run gofumpt (pull_request) Successful in 3m27s
DCO action / DCO (pull_request) Successful in 4m0s
Vulncheck / Vulncheck (pull_request) Successful in 4m37s
Tests and linters / Staticcheck (pull_request) Successful in 6m1s
Pre-commit hooks / Pre-commit (pull_request) Successful in 6m23s
Tests and linters / Lint (pull_request) Successful in 6m28s
Tests and linters / gopls check (pull_request) Successful in 6m36s
Build / Build Components (pull_request) Successful in 6m57s
Tests and linters / Tests (pull_request) Successful in 7m1s
Tests and linters / Tests with -race (pull_request) Successful in 7m1s
* Make metabase if EC-chunk's parent is already removed in fact; * EC-writer should check `ObjectAlreadyRemoved` errors Signed-off-by: Airat Arifullin <a.arifullin@yadro.com>
This commit is contained in:
parent
7c8fa76636
commit
6347459a39
2 changed files with 16 additions and 0 deletions
|
@ -15,6 +15,7 @@ import (
|
|||
"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/internal/metaerr"
|
||||
"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/util"
|
||||
"git.frostfs.info/TrueCloudLab/frostfs-observability/tracing"
|
||||
clientSDK "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/client"
|
||||
cid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id"
|
||||
objectSDK "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object"
|
||||
oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id"
|
||||
|
@ -120,6 +121,18 @@ func (db *DB) put(tx *bbolt.Tx,
|
|||
return PutRes{}, errors.New("missing container in object")
|
||||
}
|
||||
|
||||
// Graveyard owns no information about an EC-chunk, but only about its parent.
|
||||
// Thus, before we put the chunk to metabase, we should check if its parent is already removed.
|
||||
if ech := obj.ECHeader(); ech != nil {
|
||||
pObj := objectSDK.New()
|
||||
pObj.SetContainerID(cnr)
|
||||
pObj.SetID(ech.Parent())
|
||||
|
||||
if _, _, err := db.exists(tx, objectCore.AddressOf(pObj), oid.Address{}, currEpoch); err != nil && clientSDK.IsErrObjectAlreadyRemoved(err) {
|
||||
return PutRes{}, err
|
||||
}
|
||||
}
|
||||
|
||||
isParent := si != nil
|
||||
|
||||
exists, _, err := db.exists(tx, objectCore.AddressOf(obj), oid.Address{}, currEpoch)
|
||||
|
|
|
@ -14,6 +14,7 @@ import (
|
|||
"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/core/policy"
|
||||
svcutil "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/services/object/util"
|
||||
"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/services/object_manager/placement"
|
||||
clientSDK "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/client"
|
||||
containerSDK "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container"
|
||||
objectSDK "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object"
|
||||
"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/erasurecode"
|
||||
|
@ -250,6 +251,8 @@ func (e *ECWriter) writePart(ctx context.Context, obj *objectSDK.Object, partIdx
|
|||
err := e.putECPartToNode(ctx, obj, node)
|
||||
if err == nil {
|
||||
return nil
|
||||
} else if clientSDK.IsErrObjectAlreadyRemoved(err) {
|
||||
return err
|
||||
}
|
||||
e.Config.Logger.Warn(logs.ECFailedToSaveECPart, zap.Stringer("part_address", object.AddressOf(obj)),
|
||||
zap.Stringer("parent_address", obj.ECHeader().Parent()), zap.Int("part_index", partIdx),
|
||||
|
|
Loading…
Add table
Reference in a new issue