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

Janus Chow updated HDDS-16093:
------------------------------
    Description: 
This ticket includes the following tasks:
|*Sub-task*|*Scope*|*Acceptance*|
|T6.1 lifecycle proto + action wiring|noncurrentVersionExpiration on 
LifecycleAction, expiredObjectDeleteMarker on LifecycleExpiration; 
validation and the three S3 lifecycle endpoints accept them|rules round-trip 
through Put / Get / DeleteBucketLifecycleConfiguration; invalid combinations 
rejected|
|T6.2 versionedKeyTable scan in LifecycleActionTask|a second scan alongside the 
existing keyTable scan, reusing its batching, saved scan state and 
metrics|noncurrent versions past NoncurrentDays deleted with quota deducted; 
NewerNoncurrentVersions keeps N per key, oldest-first; the scan resumes from 
saved state;
The scan resumes from saved state at a key boundary, so a key is never 
evaluated against half of its own versions|
|T6.3 Expiration inserts a marker|on an ENABLED or SUSPENDED bucket, 
Expiration.Days / .Date inserts a delete marker through the insertion the write 
requests already share (T3.4) instead of deleting; 
an unversioned bucket keeps today's actual delete|an expired current version is 
demoted to the versionedKeyTable under a new marker rather than removed — still 
readable by versionId, its blocks not reclaimed; a SUSPENDED bucket takes the 
null slot with T5.1's semantics; unversioned buckets byte-for-byte unchanged|
|T6.4 ExpiredObjectDeleteMarker|removes a delete marker, and the key with it, 
once nothing is left under it; the condition is "no version below the marker", 
not the marker's own age|a key whose only remaining version is a marker 
disappears from both tables; 
a key that still has noncurrent versions is left alone, so promotion can never 
resurrect an object the user deleted; 
markers reachable by versionId until then|
|T6.5 maxVersions backstop and defaults|the per-bucket cap folded into the same 
scan, oldest-first, markers counting toward it; an explicit 
NewerNoncurrentVersions rule overrides it; ozone.lifecycle.service.enabled 
flips to true and OM rejects PutBucketVersioning(Enabled) while the service is 
off|a bucket with no lifecycle configuration converges to the cap; where both 
apply the rule's N wins; boundaries (0 = unlimited, 1, cluster default) 
covered; enabling versioning with the service disabled returns an explanatory 
error|
 

  was:
This ticket includes the following tasks:
|*Sub-task*|*Scope*|*Acceptance*|
|T6.1 maxVersions + TRIM / REJECT policy|bucket-level parameter + 
maxVersionsPolicy; TRIM reclaims oldest-first in VersionCleanupService, REJECT 
fails the write|over-limit PUT deletes the oldest version with quota deducted; 
markers count toward the limit|
|T6.2 VersionCleanupService|background service (KeyDeletingService pattern) + 
noncurrent expiration|expired versions removed; rate configurable; throughput 
metrics|
|T6.3 expired marker cleanup|keys left with only a marker cleaned up entirely 
(keyTable record included)|such keys disappear completely; keys with data 
versions unaffected|


> [Ozone versioning] [T6] Version-aware lifecycle
> -----------------------------------------------
>
>                 Key: HDDS-16093
>                 URL: https://issues.apache.org/jira/browse/HDDS-16093
>             Project: Apache Ozone
>          Issue Type: Sub-task
>            Reporter: Janus Chow
>            Assignee: Janus Chow
>            Priority: Major
>              Labels: pull-request-available
>
> This ticket includes the following tasks:
> |*Sub-task*|*Scope*|*Acceptance*|
> |T6.1 lifecycle proto + action wiring|noncurrentVersionExpiration on 
> LifecycleAction, expiredObjectDeleteMarker on LifecycleExpiration; 
> validation and the three S3 lifecycle endpoints accept them|rules round-trip 
> through Put / Get / DeleteBucketLifecycleConfiguration; invalid combinations 
> rejected|
> |T6.2 versionedKeyTable scan in LifecycleActionTask|a second scan alongside 
> the existing keyTable scan, reusing its batching, saved scan state and 
> metrics|noncurrent versions past NoncurrentDays deleted with quota deducted; 
> NewerNoncurrentVersions keeps N per key, oldest-first; the scan resumes from 
> saved state;
> The scan resumes from saved state at a key boundary, so a key is never 
> evaluated against half of its own versions|
> |T6.3 Expiration inserts a marker|on an ENABLED or SUSPENDED bucket, 
> Expiration.Days / .Date inserts a delete marker through the insertion the 
> write requests already share (T3.4) instead of deleting; 
> an unversioned bucket keeps today's actual delete|an expired current version 
> is demoted to the versionedKeyTable under a new marker rather than removed — 
> still readable by versionId, its blocks not reclaimed; a SUSPENDED bucket 
> takes the null slot with T5.1's semantics; unversioned buckets byte-for-byte 
> unchanged|
> |T6.4 ExpiredObjectDeleteMarker|removes a delete marker, and the key with it, 
> once nothing is left under it; the condition is "no version below the 
> marker", not the marker's own age|a key whose only remaining version is a 
> marker disappears from both tables; 
> a key that still has noncurrent versions is left alone, so promotion can 
> never resurrect an object the user deleted; 
> markers reachable by versionId until then|
> |T6.5 maxVersions backstop and defaults|the per-bucket cap folded into the 
> same scan, oldest-first, markers counting toward it; an explicit 
> NewerNoncurrentVersions rule overrides it; ozone.lifecycle.service.enabled 
> flips to true and OM rejects PutBucketVersioning(Enabled) while the service 
> is off|a bucket with no lifecycle configuration converges to the cap; where 
> both apply the rule's N wins; boundaries (0 = unlimited, 1, cluster default) 
> covered; enabling versioning with the service disabled returns an explanatory 
> error|
>  



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