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

Priyesh Karatha resolved HDDS-16626.
------------------------------------
    Resolution: Duplicate

Its duplicate of HDDS-16624

> Misleading error message when DaysAfterInitiation is below the configured MPU 
> cleanup threshold
> -----------------------------------------------------------------------------------------------
>
>                 Key: HDDS-16626
>                 URL: https://issues.apache.org/jira/browse/HDDS-16626
>             Project: Apache Ozone
>          Issue Type: Bug
>            Reporter: Prince Raj
>            Assignee: Priyesh Karatha
>            Priority: Major
>
> h3. Description
> While testing the {{PutBucketLifecycleConfiguration}} API for incomplete 
> multipart uploads, I observed that the validation correctly rejects a 
> lifecycle rule when {{AbortIncompleteMultipartUpload.DaysAfterInitiation}} 
> exceeds the configured multipart-upload cleanup threshold.
> The lifecycle configuration used was:
>  
> {{}}
> {code:java}
> ozones3api put-bucket-lifecycle-configuration \ --bucket "$BUCKET" \ 
> --lifecycle-configuration '{ "Rules": [ { "ID": "expiration-and-abort", 
> "Status": "Enabled", "Filter": { "Prefix": "key1" }, "Expiration": { "Days": 
> 1 }, "AbortIncompleteMultipartUpload": { "DaysAfterInitiation": 1 } } ] }' \ 
> --debug{code}
> {{ }}
> The cluster was configured with:
>  
> {{ozone.om.open.mpu.expire.threshold=300s}}
> Since the lifecycle rule specifies {{DaysAfterInitiation=1}} day, while the 
> MPU cleanup threshold is configured to 300 seconds (5 minutes), the request 
> is correctly rejected because the background multipart-upload cleanup can 
> remove the upload before the lifecycle rule takes effect.
> h3. Current Behavior
> The API returns {{InvalidRequest}} with the following message:
>  
> {{}}
> {code:java}
> Invalid lifecycle configuration: rule 'abort-incomplete-mpu' has an 
> AbortIncompleteMultipartUpload action with daysAfterInitiation=1 day(s), 
> which is not less than the cluster MPU expire threshold 
> (ozone.om.open.mpu.expire.threshold=300s). The MultipartUploadCleanupService 
> will clean up the upload before the lifecycle rule fires, making the rule 
> ineffective. Set daysAfterInitiation to a value less than 300s, or increase 
> ozone.om.open.mpu.expire.threshold{code}
> {{ }}
> h3. Problem
> The validation is correct, but the remediation suggested in the error message 
> is misleading.
> {{AbortIncompleteMultipartUpload.DaysAfterInitiation}} is defined by the S3 
> lifecycle API as a whole number of {*}days{*}. The value cannot be configured 
> directly in seconds through the S3 lifecycle API.
> Therefore, when:
>  
> {{ozone.om.open.mpu.expire.threshold=300s}}
> the recommendation:
>  
> {{Set daysAfterInitiation to a value less than 300s}}
> is not actionable through the S3 lifecycle API. There is no valid lifecycle 
> configuration in which {{DaysAfterInitiation}} can be set to a value such as 
> {{299}} seconds.
> h3. Expected Behavior
> The API should continue rejecting the lifecycle configuration with 
> {{{}InvalidRequest{}}}, since the configured MPU cleanup threshold can cause 
> the multipart upload to be removed before the lifecycle rule takes effect.
> However, the error message should provide remediation that is consistent with 
> the units supported by the S3 lifecycle API.
> For example:
>  
> {{Invalid lifecycle configuration: rule 'abort-incomplete-mpu' has
> daysAfterInitiation=1 day(s), but the configured
> ozone.om.open.mpu.expire.threshold is 300s.
> The MultipartUploadCleanupService may clean up the upload before
> the lifecycle rule takes effect.
> DaysAfterInitiation must be specified as a whole number of days.
> Increase ozone.om.open.mpu.expire.threshold to a value that allows
> the configured lifecycle period, or adjust the lifecycle rule.}}
> Alternatively, the message could explicitly explain the unit mismatch:
>  
> {{daysAfterInitiation must be configured in whole days; it cannot be
> set to a value below the configured 300-second threshold using the
> S3 lifecycle API. Increase ozone.om.open.mpu.expire.threshold to
> accommodate the lifecycle period.}}
> h3. Expected Result
>  * The existing validation behavior should remain unchanged.
>  * The API should continue returning {{InvalidRequest}} when the configured 
> lifecycle period cannot take effect before MPU cleanup.
>  * The error message should accurately describe the relationship between 
> {{DaysAfterInitiation}} and {{{}ozone.om.open.mpu.expire.threshold{}}}.
>  * The remediation guidance should account for the fact that 
> {{DaysAfterInitiation}} is specified in whole days, while the MPU cleanup 
> threshold is configured in seconds.
>  * The error message should not recommend setting {{DaysAfterInitiation}} to 
> a value in seconds that cannot be represented through the S3 lifecycle API.
> h3. Reproduction
>  # Configure the MPU cleanup threshold to a value smaller than one day, for 
> example:
> {{ozone.om.open.mpu.expire.threshold=300s}}
>  # Create a lifecycle configuration containing:
> {{{
>   "AbortIncompleteMultipartUpload": \{
>     "DaysAfterInitiation": 1
>   }
> }}}
>  # Submit the configuration using {{{}PutBucketLifecycleConfiguration{}}}.
>  # Observe that the API returns {{{}InvalidRequest{}}}.
>  # Observe that the validation error recommends configuring 
> {{DaysAfterInitiation}} to a value less than {{{}300s{}}}.
>  # Note that {{DaysAfterInitiation}} only accepts a whole number of days, 
> making this remediation invalid through the S3 lifecycle API.
> h3. Impact
> The validation prevents an ineffective lifecycle configuration, but the 
> current error message can mislead users into attempting a configuration that 
> the S3 lifecycle API cannot represent.
> The issue is therefore limited to the {*}accuracy and actionability of the 
> validation error message{*}, not the underlying validation logic.



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