keep it similar to PutObject/CompleteMultipart
Unified · Split
| @@ -1446,9 +1446,11 @@ func (api objectAPIHandlers) CopyObjectHandler(w http.ResponseWriter, r *http.Re · 1445 unmodified lines | |||
| 1446 | return | 1446 | return |
| 1447 | } | 1447 | } |
| 1448 | 1448 | ||
| 1449 | var objInfo ObjectInfo | 1449 | remoteCallRequired := isRemoteCopyRequired(ctx, srcBucket, dstBucket, objectAPI) |
| 1450 | 1450 | ||
| 1451 | if isRemoteCopyRequired(ctx, srcBucket, dstBucket, objectAPI) { | 1451 | var objInfo ObjectInfo |
| 1452 | var os *objSweeper | ||
| 1453 | if remoteCallRequired { | ||
| 1452 | var dstRecords []dns.SrvRecord | 1454 | var dstRecords []dns.SrvRecord |
| 1453 | dstRecords, err = globalDNSConfig.Get(dstBucket) | 1455 | dstRecords, err = globalDNSConfig.Get(dstBucket) |
| 1454 | if err != nil { | 1456 | if err != nil { |
| @@ -1484,8 +1486,7 @@ func (api objectAPIHandlers) CopyObjectHandler(w http.ResponseWriter, r *http.Re · 29 unmodified lines | |||
| 1484 | objInfo.ETag = remoteObjInfo.ETag | 1486 | objInfo.ETag = remoteObjInfo.ETag |
| 1485 | objInfo.ModTime = remoteObjInfo.LastModified | 1487 | objInfo.ModTime = remoteObjInfo.LastModified |
| 1486 | } else { | 1488 | } else { |
| 1487 | 1489 | os = newObjSweeper(dstBucket, dstObject).WithVersioning(dstOpts.Versioned, dstOpts.VersionSuspended) | |
| 1488 | os := newObjSweeper(dstBucket, dstObject).WithVersioning(dstOpts.Versioned, dstOpts.VersionSuspended) | ||
| 1489 | // Get appropriate object info to identify the remote object to delete | 1490 | // Get appropriate object info to identify the remote object to delete |
| 1490 | if !srcInfo.metadataOnly { | 1491 | if !srcInfo.metadataOnly { |
| 1491 | goiOpts := os.GetOpts() | 1492 | goiOpts := os.GetOpts() |
| @@ -1508,11 +1509,6 @@ func (api objectAPIHandlers) CopyObjectHandler(w http.ResponseWriter, r *http.Re · 16 unmodified lines | |||
| 1508 | writeErrorResponse(ctx, w, toAPIError(ctx, err), r.URL) | 1509 | writeErrorResponse(ctx, w, toAPIError(ctx, err), r.URL) |
| 1509 | return | 1510 | return |
| 1510 | } | 1511 | } |
| 1511 | |||
| 1512 | // Remove the transitioned object whose object version is being overwritten. | ||
| 1513 | if !globalTierConfigMgr.Empty() { | ||
| 1514 | logger.LogIf(ctx, os.Sweep()) | ||
| 1515 | } | ||
| 1516 | } | 1512 | } |
| 1517 | 1513 | ||
| 1518 | objInfo.ETag = getDecryptedETag(r.Header, objInfo, false) | 1514 | objInfo.ETag = getDecryptedETag(r.Header, objInfo, false) |
| @@ -1544,9 +1540,12 @@ func (api objectAPIHandlers) CopyObjectHandler(w http.ResponseWriter, r *http.Re · 25 unmodified lines | |||
| 1544 | UserAgent: r.UserAgent(), | 1540 | UserAgent: r.UserAgent(), |
| 1545 | Host: handlers.GetSourceIP(r), | 1541 | Host: handlers.GetSourceIP(r), |
| 1546 | }) | 1542 | }) |
| 1547 | if !globalTierConfigMgr.Empty() { | 1543 | |
| 1544 | if !remoteCallRequired && !globalTierConfigMgr.Empty() { | ||
| 1548 | // Schedule object for immediate transition if eligible. | 1545 | // Schedule object for immediate transition if eligible. |
| 1549 | enqueueTransitionImmediate(objInfo) | 1546 | enqueueTransitionImmediate(objInfo) |
| 1547 | // Remove the transitioned object whose object version is being overwritten. | ||
| 1548 | logger.LogIf(ctx, os.Sweep()) | ||
| 1550 | } | 1549 | } |
| 1551 | } | 1550 | } |
| 1552 | 1551 | ||