You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@ozone.apache.org by "Mohanad Elsafty (Jira)" <ji...@apache.org> on 2023/03/31 06:28:00 UTC

[jira] [Created] (HDDS-8342) AWS S3 Lifecycle Configurations

Mohanad Elsafty created HDDS-8342:
-------------------------------------

             Summary: AWS S3 Lifecycle Configurations
                 Key: HDDS-8342
                 URL: https://issues.apache.org/jira/browse/HDDS-8342
             Project: Apache Ozone
          Issue Type: New Feature
          Components: OM, S3
            Reporter: Mohanad Elsafty
            Assignee: Mohanad Elsafty
         Attachments: image-2023-03-31-12-42-46-971.png

I had the need for a retention solution in my cluster (delete keys in specific paths after some time). The idea was very similar to AWS S3 Lifecycle configurations (Expiration part). 
[https://docs.aws.amazon.com/AmazonS3/latest/userguide/lifecycle-configuration-examples.html]


I made a design and already Implemented most of it, and would like to contribute back to Apache Ozone community.
h2. Here is what included
 # User should be able to create/remove/fetch lifecycle configurations for a specific S3 bucket.
 # The lifecycle configurations will be executed periodically.
 # Depending on the rules of the lifecycle configuration there could be different actions or even multiple actions. 
 # At the moment only expiration is supported (keys get deleted).
 # The lifecycle configurations supports all buckets not only S3 buckets.

 
h1. Design

!image-2023-03-31-12-42-46-971.png!

 
h2. Components
 # Lifecycle configurations (will be stored in DB) consists of volumeName, bucketName and a list of rules
 ** A rule contains prefix (string), Expiration and an optional Filter.
 ** Expiration contains either days (integer) or Date (long)
 ** Filter contains prefix (string).
 # S3G bucket endpoint needs few updates to accept ?/lifecycle 
 # ClientProtocol and all implementers provides (get, list, delete and create) lifecycle configuration
 # RetentionManager will be running periodically.
 ** Fetches a lifecycle configurations list with the help of OM
 ** Executes each lifecycle configuration on a specific bucket
 ** Lifecycle configurations will be running on parallel (each one against different bucket).

h2. Flow
 # Users PUT/GET/DELETE lifecycle configurations via S3Gateway.
 # The lifecycle configurations details will be sent to some handler to be processed.
 # The lifecycle configurations will be saved to/fetched from the DB.
 # RetentionManager will be running periodically in the Leader OM to execute these lifecycle configurations.
 # RetentionManager will be issuing deletions for eligible keys.

 
h2. Not a complete solution

The solution lacks some interesting features for example:
 * The filter doesn't support `AND` yet.
 * Only expiration is supported.
 * A CLI to manage lifecycle configurations for all the buckets (At the moment S3G is the only supported entry).

But these kind of features can be added in the future.

 

 

*I made some decisions that must be discussed before contributing (Current design)*

Lifecycle configurations will be stored in its own column family in the DB instead being a filed in the {*}OmBucketInfo{*}.

I preferred the lifecycle configuration to have its own table for two reasons:
 # No need to modify OmBucketInfo table.
 # The way the Retention manager Works, this way It will query only the buckets that has an attached lifecycle configuration. if the lifecycle is a filed in OmBucketInfo it will have to query all the buckets and filter the ones that has a LifecycleConfiguration.

If the other way is preferred, then I will get rid of LifecycleConfigurationsManager & the new codec.

 

To summarize this:

 
||A new table for lifecycle configurations||A new field in OmBucketInfo||
|A new table|Existing table|
|Efficient query|Less efficient|
|A new manager (lifecycle manager)|No need|
|A new codec |No need|
|No need to alter existing design|Need to update the existing design|
|Need to update Bucket Deletion. Delete
the linked lifecycle configuration when
the bucket is deleted. |No need for updates|
| |Needs updates to create, get, list
and delete lifecycle configuration
in the BucketManager.|

 

 
h2. Plan for contribution

The implementation is not small enough for review. I believe it needs to be split into few merge requests for better review. Here is my suggested breakdown.
 # Basic building blocks (lifecycle configuration, rule, expiration, ...) And the related table (if needed).
 # ClientProtocol & OzoneManager new operations (create, get, list, delete) lifecycle configurations (protobuf messages as well)
 # S3G endpoints updates.
 # The retention manager.
 # All of them to be merged into a new branch (Let's call it X)
 # Then merge branch X into master.

 

Please feel free to review the design and ask for more clarifications if needed.

 



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