From 54721b7c7b0a0964cf763c3df69ddf1fcedf461a Mon Sep 17 00:00:00 2001 From: Harshavardhana Date: Fri, 10 Nov 2023 16:12:35 -0800 Subject: [PATCH] fix: batch replication from source allow out of band deletes (#18423) it is possible that ILM or Deletes got triggered on batch of objects that we are attempting to batch replicate, ignore this scenario as valid behavior. --- cmd/batch-handlers.go | 4 ++-- cmd/utils.go | 10 ++++++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/cmd/batch-handlers.go b/cmd/batch-handlers.go index b0e532d4d..cfa537e08 100644 --- a/cmd/batch-handlers.go +++ b/cmd/batch-handlers.go @@ -163,7 +163,7 @@ func (r *BatchJobReplicateV1) ReplicateFromSource(ctx context.Context, api Objec } rd, objInfo, _, err := core.GetObject(ctx, srcBucket, srcObject, gopts) if err != nil { - return err + return ErrorRespToObjectError(err, srcBucket, srcObject, srcObjInfo.VersionID) } defer rd.Close() @@ -226,7 +226,7 @@ func (r *BatchJobReplicateV1) copyWithMultipartfromSource(ctx context.Context, a } rd, objInfo, _, err := c.GetObject(ctx, srcBucket, srcObject, gopts) if err != nil { - return err + return ErrorRespToObjectError(err, srcBucket, srcObject, srcObjInfo.VersionID) } defer rd.Close() diff --git a/cmd/utils.go b/cmd/utils.go index 217067a9b..516782bab 100644 --- a/cmd/utils.go +++ b/cmd/utils.go @@ -99,12 +99,16 @@ func ErrorRespToObjectError(err error, params ...string) error { bucket := "" object := "" + versionID := "" if len(params) >= 1 { bucket = params[0] } if len(params) == 2 { object = params[1] } + if len(params) == 3 { + versionID = params[2] + } if xnet.IsNetworkOrHostDown(err, false) { return BackendDown{Err: err.Error()} @@ -142,6 +146,12 @@ func ErrorRespToObjectError(err error, params ...string) error { } else { err = BucketNotFound{Bucket: bucket} } + case "NoSuchVersion": + if object != "" { + err = ObjectNotFound{Bucket: bucket, Object: object, VersionID: versionID} + } else { + err = BucketNotFound{Bucket: bucket} + } case "XMinioInvalidObjectName": err = ObjectNameInvalid{} case "AccessDenied":