diff --git a/cmd/object-handlers.go b/cmd/object-handlers.go index 2245c2219..88a449b6c 100644 --- a/cmd/object-handlers.go +++ b/cmd/object-handlers.go @@ -1446,9 +1446,11 @@ func (api objectAPIHandlers) CopyObjectHandler(w http.ResponseWriter, r *http.Re return } - var objInfo ObjectInfo + remoteCallRequired := isRemoteCopyRequired(ctx, srcBucket, dstBucket, objectAPI) - if isRemoteCopyRequired(ctx, srcBucket, dstBucket, objectAPI) { + var objInfo ObjectInfo + var os *objSweeper + if remoteCallRequired { var dstRecords []dns.SrvRecord dstRecords, err = globalDNSConfig.Get(dstBucket) if err != nil { @@ -1484,8 +1486,7 @@ func (api objectAPIHandlers) CopyObjectHandler(w http.ResponseWriter, r *http.Re objInfo.ETag = remoteObjInfo.ETag objInfo.ModTime = remoteObjInfo.LastModified } else { - - os := newObjSweeper(dstBucket, dstObject).WithVersioning(dstOpts.Versioned, dstOpts.VersionSuspended) + os = newObjSweeper(dstBucket, dstObject).WithVersioning(dstOpts.Versioned, dstOpts.VersionSuspended) // Get appropriate object info to identify the remote object to delete if !srcInfo.metadataOnly { goiOpts := os.GetOpts() @@ -1508,11 +1509,6 @@ func (api objectAPIHandlers) CopyObjectHandler(w http.ResponseWriter, r *http.Re writeErrorResponse(ctx, w, toAPIError(ctx, err), r.URL) return } - - // Remove the transitioned object whose object version is being overwritten. - if !globalTierConfigMgr.Empty() { - logger.LogIf(ctx, os.Sweep()) - } } objInfo.ETag = getDecryptedETag(r.Header, objInfo, false) @@ -1544,9 +1540,12 @@ func (api objectAPIHandlers) CopyObjectHandler(w http.ResponseWriter, r *http.Re UserAgent: r.UserAgent(), Host: handlers.GetSourceIP(r), }) - if !globalTierConfigMgr.Empty() { + + if !remoteCallRequired && !globalTierConfigMgr.Empty() { // Schedule object for immediate transition if eligible. enqueueTransitionImmediate(objInfo) + // Remove the transitioned object whose object version is being overwritten. + logger.LogIf(ctx, os.Sweep()) } }