[
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]