fix: conditional checks write for multipart (#21567)

This commit is contained in:
M Alvee
2025-09-07 09:13:09 -07:00
committed by GitHub
parent 0cde982902
commit 07c3a429bf
5 changed files with 25 additions and 2 deletions

View File

@@ -393,6 +393,12 @@ func (er erasureObjects) newMultipartUpload(ctx context.Context, bucket string,
if err != nil && !isErrVersionNotFound(err) && !isErrObjectNotFound(err) && !isErrReadQuorum(err) {
return nil, err
}
// if object doesn't exist and not a replication request return error for If-Match conditional requests
// If-None-Match should be allowed to proceed for non-existent objects
if err != nil && !opts.ReplicationRequest && opts.HasIfMatch && (isErrObjectNotFound(err) || isErrVersionNotFound(err)) {
return nil, err
}
}
userDefined := cloneMSS(opts.UserDefined)
@@ -1111,6 +1117,12 @@ func (er erasureObjects) CompleteMultipartUpload(ctx context.Context, bucket str
if err != nil && !isErrVersionNotFound(err) && !isErrObjectNotFound(err) && !isErrReadQuorum(err) {
return ObjectInfo{}, err
}
// if object doesn't exist and not a replication request return error for If-Match conditional requests
// If-None-Match should be allowed to proceed for non-existent objects
if err != nil && !opts.ReplicationRequest && opts.HasIfMatch && (isErrObjectNotFound(err) || isErrVersionNotFound(err)) {
return ObjectInfo{}, err
}
}
fi, partsMetadata, err := er.checkUploadIDExists(ctx, bucket, object, uploadID, true)