diff --git a/pkg/local_object_storage/engine/get.go b/pkg/local_object_storage/engine/get.go index 4a9199be7..9c00a0b68 100644 --- a/pkg/local_object_storage/engine/get.go +++ b/pkg/local_object_storage/engine/get.go @@ -94,6 +94,10 @@ func (e *StorageEngine) get(ctx context.Context, prm GetPrm) (GetRes, error) { return GetRes{}, errNotFound } + if client.IsErrObjectAlreadyRemoved(it.OutError) { + return GetRes{}, it.OutError + } + if it.Object == nil { if !it.HasDegraded && it.ShardWithMeta.Shard == nil || !client.IsErrObjectNotFound(it.OutError) { return GetRes{}, it.OutError @@ -146,7 +150,10 @@ func (i *getShardIterator) tryGetWithMeta(ctx context.Context) { res, err := sh.Get(ctx, i.ShardPrm) if err == nil { i.Object = res.Object() - return true + // Keep iterating over shards because the object's GC mark can be + // stored on another shard. For more information, please refer to + // https://git.frostfs.info/TrueCloudLab/frostfs-node/pulls/1403. + return false } if res.HasMeta() {