Correction of the earlier diagnosis, measured on OVHcloud Object Storage (eu-west-par) on 2026-10-12: * PutObject and CompleteMultipartUpload with {{If-None-Match: *}} are enforced (412 when the object exists; with 8 concurrent PUTs of the same new key, exactly one succeeded, in three runs). * UploadPartCopy evaluates {{x-amz-copy-source-if-match}} (200 with the right ETag, 412 with a wrong one). UploadPartCopy is therefore not affected, contrary to the previous comment. * Only CopyObject rejects conditions every condition: {{x-amz-copy-source-if-match}}, {{x-amz-copy-source-if-none-match}} and {{If-None-Match}} all get 501 Not Implemented. * UploadPartCopy evaluates {{x-amz-copy-source-if-match}} correctly only when the source was uploaded in a single request: when the source was uploaded in several parts (its ETag ends with {{-<part count>}}), the condition always fails with 412, even with the ETag returned by HEAD. Since XWiki uploads large blobs in several parts, and only large blobs are copied with UploadPartCopy, the condition can't be used there either. Following the review, the change is being amended to work with S3-compatible services that don't support some conditional requests, with two properties, both {{true}} by default: * {{store.s3.conditionalWrites}}: the conditions condition of uploads and multipart copies ({{If-None-Match}} on PutObject and CompleteMultipartUpload, {{x-amz-copy-source-if-match}} on UploadPartCopy). * {{store.s3.conditionalCopies}}: the condition conditions of the single-request copy copies ({{If-None-Match}} on CopyObject, {{x-amz-copy-source-if-match}} on UploadPartCopy). When disabled, the source of a multipart copy is checked again before the copy is completed. The source precondition is no longer sent on CopyObject at all (a single CopyObject reads the source once). OVHcloud Object Storage needs {{store.s3.conditionalCopies=false}} only.
Follow-ups: XCOMMONS-3825 (detect automatically which conditional requests the service supports), XCOMMONS-3826 (non-atomic {{CREATE_NEW}} moves in the filesystem blob store).
(Edited on 2026-10-12 to add the UploadPartCopy measurement with a source uploaded in several parts.)
This message was sent by Atlassian Jira (v9.3.0#930000-sha1:287aeb6)
If image attachments aren't displayed, see this article.