You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@ozone.apache.org by "Priyesh Karatha (Jira)" <ji...@apache.org> on 2026/09/02 08:04:00 UTC

[jira] [Created] (HDDS-16372) PutBucketLifecycleConfiguration returns generic "Invalid Request" message for a past Expiration Date

Priyesh Karatha created HDDS-16372:
--------------------------------------

             Summary:  PutBucketLifecycleConfiguration returns generic "Invalid Request" message for a past Expiration Date
                 Key: HDDS-16372
                 URL: https://issues.apache.org/jira/browse/HDDS-16372
             Project: Apache Ozone
          Issue Type: Sub-task
            Reporter: Priyesh Karatha


While testing the S3 bucket lifecycle configuration, providing an Expiration.Date in the past results in an HTTP 400 error. However, the response does not indicate that the date is invalid because it is in the past. Instead, the client receives only the generic error message: Invalid Request.

Steps to Reproduce

Create a lifecycle configuration with an expiration date in the past:

cat > /tmp/lifecycle.json <<EOF
{
  "Rules": [{
    "ID": "expire-key1-fso",
    "Status": "Enabled",
    "Filter": \{ "Prefix": "key1/" },
    "Expiration": \{ "Date": "2020-01-01T00:00:00Z" }
  }]
}
EOF


Run the following command:

ozones3api put-bucket-lifecycle-configuration \
  --bucket "$BUCKET" \
  --lifecycle-configuration file:///tmp/lifecycle.json

Actual Result

The request fails with HTTP 400 and the following generic error:

An error occurred (InvalidRequest) when calling the PutBucketLifecycleConfiguration operation: Invalid Request

Expected Result

The response should provide a meaningful error message indicating that the specified expiration date is invalid because it is in the past.

For example:

The expiration date must not be earlier than the bucket creation time.

Root Cause

S3LifecycleConfiguration.toOmLifecycleConfiguration() builds the OM model with creationTime=0. As a result, the S3 Gateway's client-side validation cannot determine whether the specified expiration date is genuinely in the past.

The actual validation is performed by OM in OmLCExpiration#validateExpirationDate, which uses the bucket's actual creation time. This validation is triggered when BucketEndpoint calls:

ozoneBucket.setLifecycleConfiguration(...)


BucketLifecycleHandler.putBucketLifecycleConfiguration() catches the resulting OMException and converts it to an OS3Exception using:

S3ErrorTable.newError(bucketName, ex)


However, the OS3Exception constructor sets errorMessage to the static, generic message from S3ErrorTable. It does not preserve ex.getMessage() from the underlying OMException, causing the detailed validation message from OM to be lost.



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

---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscribe@ozone.apache.org
For additional commands, e-mail: issues-help@ozone.apache.org