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 | 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 | 1454 | var dstRecords []dns.SrvRecord |
| 1453 | 1455 | dstRecords, err = globalDNSConfig.Get(dstBucket) |
| 1454 | 1456 | if err != nil { |
| @@ -1484,8 +1486,7 @@ func (api objectAPIHandlers) CopyObjectHandler(w http.ResponseWriter, r *http.Re · 29 unmodified lines | ||
| 1484 | 1486 | objInfo.ETag = remoteObjInfo.ETag |
| 1485 | 1487 | objInfo.ModTime = remoteObjInfo.LastModified |
| 1486 | 1488 | } else { |
| 1487 | − | |
| 1488 | − os := newObjSweeper(dstBucket, dstObject).WithVersioning(dstOpts.Versioned, dstOpts.VersionSuspended) | |
| 1489 | + os = newObjSweeper(dstBucket, dstObject).WithVersioning(dstOpts.Versioned, dstOpts.VersionSuspended) | |
| 1489 | 1490 | // Get appropriate object info to identify the remote object to delete |
| 1490 | 1491 | if !srcInfo.metadataOnly { |
| 1491 | 1492 | goiOpts := os.GetOpts() |
| @@ -1508,11 +1509,6 @@ func (api objectAPIHandlers) CopyObjectHandler(w http.ResponseWriter, r *http.Re · 16 unmodified lines | ||
| 1508 | 1509 | writeErrorResponse(ctx, w, toAPIError(ctx, err), r.URL) |
| 1509 | 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 | 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 | 1540 | UserAgent: r.UserAgent(), |
| 1545 | 1541 | Host: handlers.GetSourceIP(r), |
| 1546 | 1542 | }) |
| 1547 | − if !globalTierConfigMgr.Empty() { | |
| 1543 | + | |
| 1544 | + if !remoteCallRequired && !globalTierConfigMgr.Empty() { | |
| 1548 | 1545 | // Schedule object for immediate transition if eligible. |
| 1549 | 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 | |