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]