[ 
https://issues.apache.org/jira/browse/HDDS-16739?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Siyao Meng updated HDDS-16739:
------------------------------
    Status: Patch Available  (was: Open)

> 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
>            Priority: Major
>              Labels: pull-request-available
>
> 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