fix: batch replication pull must preserve versionID (#17805)

batch replication pull must preserve versionID regardless
of destination bucket versioning configuration.

This is similar to the issue with decommissioning and rebalancing
This commit is contained in:
Harshavardhana 2023-08-04 12:09:10 -07:00 committed by GitHub
parent cb089dcb52
commit 533cd8d6df
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -319,17 +319,17 @@ func (r *BatchJobReplicateV1) ReplicateFromSource(ctx context.Context, api Objec
tgtObject = path.Join(r.Target.Prefix, srcObjInfo.Name) tgtObject = path.Join(r.Target.Prefix, srcObjInfo.Name)
} }
versioned := globalBucketVersioningSys.PrefixEnabled(tgtBucket, tgtObject)
versionSuspended := globalBucketVersioningSys.PrefixSuspended(tgtBucket, tgtObject)
versionID := srcObjInfo.VersionID versionID := srcObjInfo.VersionID
if r.Target.Type == BatchJobReplicateResourceS3 || r.Source.Type == BatchJobReplicateResourceS3 { if r.Target.Type == BatchJobReplicateResourceS3 || r.Source.Type == BatchJobReplicateResourceS3 {
versionID = "" versionID = ""
} }
if srcObjInfo.DeleteMarker { if srcObjInfo.DeleteMarker {
_, err := api.DeleteObject(ctx, tgtBucket, tgtObject, ObjectOptions{ _, err := api.DeleteObject(ctx, tgtBucket, tgtObject, ObjectOptions{
VersionID: versionID, VersionID: versionID,
VersionSuspended: versionSuspended, // Since we are preserving a delete marker, we have to make sure this is always true.
Versioned: versioned, // regardless of the current configuration of the bucket we must preserve all versions
// on the pool being batch replicated from source.
Versioned: true,
MTime: srcObjInfo.ModTime, MTime: srcObjInfo.ModTime,
DeleteMarker: srcObjInfo.DeleteMarker, DeleteMarker: srcObjInfo.DeleteMarker,
ReplicationRequest: true, ReplicationRequest: true,
@ -338,12 +338,10 @@ func (r *BatchJobReplicateV1) ReplicateFromSource(ctx context.Context, api Objec
} }
opts := ObjectOptions{ opts := ObjectOptions{
VersionID: srcObjInfo.VersionID, VersionID: srcObjInfo.VersionID,
Versioned: versioned, MTime: srcObjInfo.ModTime,
VersionSuspended: versionSuspended, PreserveETag: srcObjInfo.ETag,
MTime: srcObjInfo.ModTime, UserDefined: srcObjInfo.UserDefined,
PreserveETag: srcObjInfo.ETag,
UserDefined: srcObjInfo.UserDefined,
} }
if r.Target.Type == BatchJobReplicateResourceS3 || r.Source.Type == BatchJobReplicateResourceS3 { if r.Target.Type == BatchJobReplicateResourceS3 || r.Source.Type == BatchJobReplicateResourceS3 {
opts.VersionID = "" opts.VersionID = ""