Siyao Meng created HDDS-16739:
---------------------------------

             Summary: S3 ListObjectVersions should return the null version of 
each object
                 Key: HDDS-16739
                 URL: https://issues.apache.org/jira/browse/HDDS-16739
             Project: Apache Ozone
          Issue Type: Bug
          Components: s3gateway
            Reporter: Siyao Meng
            Assignee: Siyao Meng


h2. Problem
Since HDDS-16591, {{GET /bucket?versions}} (ListObjectVersions) returns 501 
NotImplemented. Before that, the request fell through to ListObjects and 
returned a {{ListBucketResult}} body, which clients parsed as an empty version 
list.

Bucket cleanup tools commonly list versions and then delete them with the 
returned version IDs. The ceph/s3-tests cleanup fixture ({{nuke_bucket}}) calls 
ListObjectVersions on every leftover bucket before and after each test, so once 
one bucket exists every following test fails in setup:
{noformat}
failed on setup with "botocore.exceptions.ClientError: An error occurred 
(NotImplemented) when calling the ListObjectVersions operation: This part of 
feature is not implemented yet."
{noformat}
The nightly [Apache Ozone S3 Compatibility 
Report|https://ozone.s3.peterxcli.dev/] dropped from 37.0% to 0.4% for s3-tests 
in the 2026-10-01 run.

h2. Expected behavior
Ozone does not support bucket versioning yet, so every bucket behaves like an 
AWS S3 bucket that never had versioning enabled. For such a bucket AWS S3 
returns:
* one {{Version}} entry per object, with {{VersionId}} {{null}} and 
{{IsLatest}} {{true}}
* no {{DeleteMarker}} entries
* pagination with {{key-marker}} and {{NextKeyMarker}}, with 
{{NextVersionIdMarker}} {{null}}

AWS S3 also accepts {{null}} as the version ID of the current object in such a 
bucket.

h2. Proposed change
* Implement ListObjectVersions in S3 Gateway on top of the existing key 
listing, returning a {{ListVersionsResult}} with the null version of each key.
* Accept version ID {{null}} in DeleteObjects, DeleteObject, PutObjectTagging 
and DeleteObjectTagging, and treat it as the current object. Any other version 
ID is still rejected with NotImplemented.
* Return {{VersionId}} in the DeleteObjects response when the request specified 
it.

This is the unversioned subset of the ListObjectVersions work planned in 
HDDS-15728, which can extend it with the merged listing for versioned buckets.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to