mirror of
https://github.com/minio/minio.git
synced 2025-05-21 17:43:48 -04:00
fix: deleteMultiObjects performance regression (#12951)
fixes performance regression found in deleteObjects(), putObject(), copyObject and completeMultipart calls.
This commit is contained in:
parent
ce28e904c9
commit
f9ae71fd17
@ -618,14 +618,6 @@ func (api objectAPIHandlers) DeleteMultipleObjectsHandler(w http.ResponseWriter,
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Clean up transitioned objects from remote tier
|
|
||||||
for _, os := range oss {
|
|
||||||
if os == nil { // skip objects that weren't deleted due to invalid versionID etc.
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
logger.LogIf(ctx, os.Sweep())
|
|
||||||
}
|
|
||||||
|
|
||||||
// Notify deleted event for objects.
|
// Notify deleted event for objects.
|
||||||
for _, dobj := range deletedObjects {
|
for _, dobj := range deletedObjects {
|
||||||
eventName := event.ObjectRemovedDelete
|
eventName := event.ObjectRemovedDelete
|
||||||
@ -650,6 +642,14 @@ func (api objectAPIHandlers) DeleteMultipleObjectsHandler(w http.ResponseWriter,
|
|||||||
Host: handlers.GetSourceIP(r),
|
Host: handlers.GetSourceIP(r),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Clean up transitioned objects from remote tier
|
||||||
|
for _, os := range oss {
|
||||||
|
if os == nil { // skip objects that weren't deleted due to invalid versionID etc.
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
logger.LogIf(ctx, os.Sweep())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// PutBucketHandler - PUT Bucket
|
// PutBucketHandler - PUT Bucket
|
||||||
|
@ -1395,8 +1395,9 @@ func (api objectAPIHandlers) CopyObjectHandler(w http.ResponseWriter, r *http.Re
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Remove the transitioned object whose object version is being overwritten.
|
// Remove the transitioned object whose object version is being overwritten.
|
||||||
logger.LogIf(ctx, os.Sweep())
|
defer logger.LogIf(ctx, os.Sweep())
|
||||||
}
|
}
|
||||||
|
|
||||||
objInfo.ETag = getDecryptedETag(r.Header, objInfo, false)
|
objInfo.ETag = getDecryptedETag(r.Header, objInfo, false)
|
||||||
response := generateCopyObjectResponse(objInfo.ETag, objInfo.ModTime)
|
response := generateCopyObjectResponse(objInfo.ETag, objInfo.ModTime)
|
||||||
encodedSuccessResponse := encodeResponse(response)
|
encodedSuccessResponse := encodeResponse(response)
|
||||||
@ -1684,11 +1685,11 @@ func (api objectAPIHandlers) PutObjectHandler(w http.ResponseWriter, r *http.Req
|
|||||||
// Ensure that metadata does not contain sensitive information
|
// Ensure that metadata does not contain sensitive information
|
||||||
crypto.RemoveSensitiveEntries(metadata)
|
crypto.RemoveSensitiveEntries(metadata)
|
||||||
|
|
||||||
oc := newObjSweeper(bucket, object)
|
os := newObjSweeper(bucket, object)
|
||||||
// Get appropriate object info to identify the remote object to delete
|
// Get appropriate object info to identify the remote object to delete
|
||||||
goiOpts := oc.GetOpts()
|
goiOpts := os.GetOpts()
|
||||||
if goi, gerr := getObjectInfo(ctx, bucket, object, goiOpts); gerr == nil {
|
if goi, gerr := getObjectInfo(ctx, bucket, object, goiOpts); gerr == nil {
|
||||||
oc.SetTransitionState(goi)
|
os.SetTransitionState(goi)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create the object..
|
// Create the object..
|
||||||
@ -1735,9 +1736,6 @@ func (api objectAPIHandlers) PutObjectHandler(w http.ResponseWriter, r *http.Req
|
|||||||
scheduleReplication(ctx, objInfo.Clone(), objectAPI, sync, replication.ObjectReplicationType)
|
scheduleReplication(ctx, objInfo.Clone(), objectAPI, sync, replication.ObjectReplicationType)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Remove the transitioned object whose object version is being overwritten.
|
|
||||||
logger.LogIf(ctx, oc.Sweep())
|
|
||||||
|
|
||||||
setPutObjHeaders(w, objInfo, false)
|
setPutObjHeaders(w, objInfo, false)
|
||||||
|
|
||||||
writeSuccessResponseHeadersOnly(w)
|
writeSuccessResponseHeadersOnly(w)
|
||||||
@ -1752,6 +1750,9 @@ func (api objectAPIHandlers) PutObjectHandler(w http.ResponseWriter, r *http.Req
|
|||||||
UserAgent: r.UserAgent(),
|
UserAgent: r.UserAgent(),
|
||||||
Host: handlers.GetSourceIP(r),
|
Host: handlers.GetSourceIP(r),
|
||||||
})
|
})
|
||||||
|
|
||||||
|
// Remove the transitioned object whose object version is being overwritten.
|
||||||
|
logger.LogIf(ctx, os.Sweep())
|
||||||
}
|
}
|
||||||
|
|
||||||
// PutObjectExtractHandler - PUT Object extract is an extended API
|
// PutObjectExtractHandler - PUT Object extract is an extended API
|
||||||
@ -3118,9 +3119,6 @@ func (api objectAPIHandlers) CompleteMultipartUploadHandler(w http.ResponseWrite
|
|||||||
scheduleReplication(ctx, objInfo.Clone(), objectAPI, sync, replication.ObjectReplicationType)
|
scheduleReplication(ctx, objInfo.Clone(), objectAPI, sync, replication.ObjectReplicationType)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Remove the transitioned object whose object version is being overwritten.
|
|
||||||
logger.LogIf(ctx, os.Sweep())
|
|
||||||
|
|
||||||
// Write success response.
|
// Write success response.
|
||||||
writeSuccessResponseXML(w, encodedSuccessResponse)
|
writeSuccessResponseXML(w, encodedSuccessResponse)
|
||||||
|
|
||||||
@ -3134,6 +3132,9 @@ func (api objectAPIHandlers) CompleteMultipartUploadHandler(w http.ResponseWrite
|
|||||||
UserAgent: r.UserAgent(),
|
UserAgent: r.UserAgent(),
|
||||||
Host: handlers.GetSourceIP(r),
|
Host: handlers.GetSourceIP(r),
|
||||||
})
|
})
|
||||||
|
|
||||||
|
// Remove the transitioned object whose object version is being overwritten.
|
||||||
|
logger.LogIf(ctx, os.Sweep())
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Delete objectAPIHandlers
|
/// Delete objectAPIHandlers
|
||||||
|
Loading…
x
Reference in New Issue
Block a user