From 1a289745a400ebccf8c26e451bf9d2ac51aa3e12 Mon Sep 17 00:00:00 2001 From: Dmitrii Stepanov Date: Wed, 10 Jul 2024 12:14:44 +0300 Subject: [PATCH] [#1237] getSvc: Return error if EC object found in REP container Signed-off-by: Dmitrii Stepanov --- internal/logs/logs.go | 2 +- pkg/services/object/get/remote.go | 26 ++++++-------------------- 2 files changed, 7 insertions(+), 21 deletions(-) diff --git a/internal/logs/logs.go b/internal/logs/logs.go index 65e19ed58..06d8668b2 100644 --- a/internal/logs/logs.go +++ b/internal/logs/logs.go @@ -107,7 +107,7 @@ const ( GetUnableToGetAllPartsECObject = "unable to get all parts, continue to reconstruct with existed" GetUnableToGetPartECObject = "unable to get part of the erasure-encoded object" GetUnableToHeadPartECObject = "unable to head part of the erasure-encoded object" - GetUnableToGetECObjectContainer = "unable to get container for erasure-coded object" + GetECObjectInRepContainer = "found erasure-coded object in REP container" GetAssemblingSplittedObjectCompleted = "assembling splitted object completed" GetAssemblingECObjectCompleted = "assembling erasure-coded object completed" GetFailedToAssembleSplittedObject = "failed to assemble splitted object" diff --git a/pkg/services/object/get/remote.go b/pkg/services/object/get/remote.go index 302a4a4bc..9efd083c4 100644 --- a/pkg/services/object/get/remote.go +++ b/pkg/services/object/get/remote.go @@ -7,14 +7,14 @@ import ( "git.frostfs.info/TrueCloudLab/frostfs-node/internal/logs" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/core/client" - "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/core/policy" - "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/util" "git.frostfs.info/TrueCloudLab/frostfs-observability/tracing" apistatus "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/client/status" objectSDK "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object" "go.uber.org/zap" ) +var errECObjectInRepContainer = errors.New("found erasure-coded object in REP container") + func (r *request) processNode(ctx context.Context, info client.NodeInfo) bool { ctx, span := tracing.StartSpanFromContext(ctx, "getService.processNode") defer span.End() @@ -36,11 +36,6 @@ func (r *request) processNode(ctx context.Context, info client.NodeInfo) bool { switch { default: r.log.Debug(logs.GetRemoteCallFailed, zap.Error(err)) - if r.status == statusEC { - // we need to continue getting another chunks from another nodes - // in case of network issue - return false - } r.status = statusUndefined r.err = new(apistatus.ObjectNotFound) case err == nil: @@ -65,19 +60,10 @@ func (r *request) processNode(ctx context.Context, info client.NodeInfo) bool { mergeSplitInfo(r.splitInfo(), errSplitInfo.SplitInfo()) r.err = objectSDK.NewSplitInfoError(r.infoSplit) case errors.As(err, &errECInfo): - r.status = statusEC - util.MergeECInfo(r.infoEC, errECInfo.ECInfo()) - r.infoEC = errECInfo.ECInfo() - r.err = objectSDK.NewECInfoError(r.infoEC) - if r.isRaw() { - return len(r.infoEC.Chunks) == int(r.infoEC.Chunks[0].Total) - } - cnt, err := r.containerSource.Get(r.address().Container()) - if err == nil { - return len(r.infoEC.Chunks) == policy.ECDataCount(cnt.Value.PlacementPolicy()) - } - r.log.Debug(logs.GetUnableToGetECObjectContainer, zap.Error(err)) - return len(r.infoEC.Chunks) == int(r.infoEC.Chunks[0].Total) + r.log.Error(logs.GetECObjectInRepContainer, zap.Stringer("address", r.address())) + r.status = statusUndefined + r.err = errECObjectInRepContainer + return true } return r.status != statusUndefined