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.
This commit is contained in:
Harshavardhana 2023-11-10 16:12:35 -08:00 committed by GitHub
parent 91d8bddbd1
commit 54721b7c7b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 12 additions and 2 deletions

View File

@ -163,7 +163,7 @@ func (r *BatchJobReplicateV1) ReplicateFromSource(ctx context.Context, api Objec
} }
rd, objInfo, _, err := core.GetObject(ctx, srcBucket, srcObject, gopts) rd, objInfo, _, err := core.GetObject(ctx, srcBucket, srcObject, gopts)
if err != nil { if err != nil {
return err return ErrorRespToObjectError(err, srcBucket, srcObject, srcObjInfo.VersionID)
} }
defer rd.Close() defer rd.Close()
@ -226,7 +226,7 @@ func (r *BatchJobReplicateV1) copyWithMultipartfromSource(ctx context.Context, a
} }
rd, objInfo, _, err := c.GetObject(ctx, srcBucket, srcObject, gopts) rd, objInfo, _, err := c.GetObject(ctx, srcBucket, srcObject, gopts)
if err != nil { if err != nil {
return err return ErrorRespToObjectError(err, srcBucket, srcObject, srcObjInfo.VersionID)
} }
defer rd.Close() defer rd.Close()

View File

@ -99,12 +99,16 @@ func ErrorRespToObjectError(err error, params ...string) error {
bucket := "" bucket := ""
object := "" object := ""
versionID := ""
if len(params) >= 1 { if len(params) >= 1 {
bucket = params[0] bucket = params[0]
} }
if len(params) == 2 { if len(params) == 2 {
object = params[1] object = params[1]
} }
if len(params) == 3 {
versionID = params[2]
}
if xnet.IsNetworkOrHostDown(err, false) { if xnet.IsNetworkOrHostDown(err, false) {
return BackendDown{Err: err.Error()} return BackendDown{Err: err.Error()}
@ -142,6 +146,12 @@ func ErrorRespToObjectError(err error, params ...string) error {
} else { } else {
err = BucketNotFound{Bucket: bucket} err = BucketNotFound{Bucket: bucket}
} }
case "NoSuchVersion":
if object != "" {
err = ObjectNotFound{Bucket: bucket, Object: object, VersionID: versionID}
} else {
err = BucketNotFound{Bucket: bucket}
}
case "XMinioInvalidObjectName": case "XMinioInvalidObjectName":
err = ObjectNameInvalid{} err = ObjectNameInvalid{}
case "AccessDenied": case "AccessDenied":