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