Fix prefix validation in lifecycle rule #20684
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Community Contribution License
All community contributions in this pull request are licensed to the project maintainers
under the terms of the Apache 2 license.
By creating this pull request I represent that I have the right to license the
contributions to the project maintainers under the Apache 2 license.
Description
Attempts to create a lifecycle rule using cURL when the xml has no prefix fails with
errXMLNotWellFormederror:Motivation and Context
In the now deprecated
PutBucketLifecycleAPI, Rule had a mandatory Prefix element and there existed no Filter field.(See https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLifecycle.html)
In the newer
PutBucketLifecycleConfigurationAPI, Rule has a prefix field that is deprecated, and there exists an optional Filter field, and within it, an optional Prefix field.(See https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketLifecycleConfiguration.html)
Existing prefix validation fails if Rule.Prefix does not exist and there are no Filters. This behavior is incorrect since Prefix itself is not mandatory in
PutBucketLifecycleConfigurationAPI.A valid rule could be a pre-existing one created using the now deprecated
PutBucketLifecycle.Or, a valid rule could also be either a pre-existing or a new rule that is created using
PutBucketLifecycleConfiguration.Prefix validation has been modified to check that either Rule.Prefix or Rule.Filter.Prefix exist but not both.
In doing so, we are assuming that any pre-existing rule created using PutBucketLifecycle API is already valid; so validation won't fail if Rule.Prefix is empty.
How to test this PR?
Types of changes
Checklist:
commit-idorPR #here)