[
https://issues.apache.org/jira/browse/HDDS-16491?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Meng-Shuan Tsai reassigned HDDS-16491:
--------------------------------------
Assignee: Meng-Shuan Tsai
> Implement PutObjectLegalHold
> ----------------------------
>
> Key: HDDS-16491
> URL: https://issues.apache.org/jira/browse/HDDS-16491
> Project: Apache Ozone
> Issue Type: Sub-task
> Reporter: Chung-En Lee
> Assignee: Meng-Shuan Tsai
> Priority: Major
>
> Implement the S3 {{PutObjectLegalHold}} operation to apply or remove a legal
> hold ({{{}ON{}}} or {{{}OFF{}}}) on individual keys in an Object-Lock-enabled
> bucket. This task covers S3 Gateway REST parsing, OM RPC messages, Ranger
> authorization, and OM HA write execution.
> {*}1. S3 Gateway ({{{}hadoop-ozone/s3gateway{}}}){*}:
> * Add route handler for {{{}PUT /\{bucket}/\{key}?legal-hold{}}}.
> * Parse the incoming {{LegalHold}} XML payload:
> ** Extract {{Status}} (must be {{ON}} or {{{}OFF{}}}).
> * Validate the payload format and map malformed bodies to standard S3 errors
> (e.g., {{{}MalformedXML{}}}, {{{}InvalidArgument{}}}).
> * Forward the request to Ozone Manager via client protocol.
> {*}2. Protobuf Protocol ({{{}OmClientProtocol.proto{}}}){*}:
> * Add client RPC messages:
> ** {{SetObjectLegalHoldRequest}} (contains {{{}volumeName{}}},
> {{{}bucketName{}}}, {{{}keyName{}}}, and {{{}bool legalHold{}}}).
> ** {{{}SetObjectLegalHoldResponse{}}}.
> * Register the new request type in OM request dispatching pipeline.
> {*}3. {{OMKeySetLegalHoldRequest}}{*}:
> * {*}{{preExecute}}{*}:
> ** Authorize the caller against Ranger action {{PutObjectLegalHold}}
> (requiring key-level {{WRITE}} permission).
> ** Validate payload parameters (ensure boolean status is explicitly
> provided).
> * {*}{{validateAndUpdateCache}}{*}:
> ** Acquire key write lock.
> ** Verify the target bucket exists and has {{{}objectLockEnabled ==
> true{}}}; reject with {{InvalidRequest}} if Object Lock is not enabled on the
> bucket.
> ** Lookup target key in {{{}KeyTable{}}}. If absent, throw {{KEY_NOT_FOUND}}
> (mapped to S3 {{{}404 NoSuchKey{}}}).
> ** Update {{OmKeyInfo.legalHold}} ({{{}true{}}} for {{{}ON{}}}, {{false}}
> for {{{}OFF{}}}).
> ** Commit the updated {{OmKeyInfo}} to {{KeyTable}} cache and RocksDB.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]