honor DeleteAllVersions in list(), head() calls (#17604)

This commit is contained in:
Harshavardhana 2023-07-08 15:42:10 -07:00 committed by GitHub
parent 90c2129f44
commit f6186965c3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 10 additions and 3 deletions

View File

@ -944,7 +944,7 @@ func (i *scannerItem) applyLifecycle(ctx context.Context, o ObjectLayer, oi Obje
defer globalScannerMetrics.timeILM(lcEvt.Action)() defer globalScannerMetrics.timeILM(lcEvt.Action)()
switch lcEvt.Action { switch lcEvt.Action {
case lifecycle.DeleteAction, lifecycle.DeleteVersionAction, lifecycle.DeleteRestoredAction, lifecycle.DeleteRestoredVersionAction: case lifecycle.DeleteAction, lifecycle.DeleteVersionAction, lifecycle.DeleteRestoredAction, lifecycle.DeleteRestoredVersionAction, lifecycle.DeleteAllVersionsAction:
return applyLifecycleAction(lcEvt, lcEventSrc_Scanner, oi), 0 return applyLifecycleAction(lcEvt, lcEventSrc_Scanner, oi), 0
case lifecycle.TransitionAction, lifecycle.TransitionVersionAction: case lifecycle.TransitionAction, lifecycle.TransitionVersionAction:
return applyLifecycleAction(lcEvt, lcEventSrc_Scanner, oi), size return applyLifecycleAction(lcEvt, lcEventSrc_Scanner, oi), size
@ -1133,6 +1133,12 @@ func evalActionFromLifecycle(ctx context.Context, lc lifecycle.Lifecycle, lr loc
return event return event
} }
if obj.IsLatest && event.Action == lifecycle.DeleteAllVersionsAction {
if lr.LockEnabled && enforceRetentionForDeletion(ctx, obj) {
return lifecycle.Event{Action: lifecycle.NoneAction}
}
}
switch event.Action { switch event.Action {
case lifecycle.DeleteVersionAction, lifecycle.DeleteRestoredVersionAction: case lifecycle.DeleteVersionAction, lifecycle.DeleteRestoredVersionAction:
// Defensive code, should never happen // Defensive code, should never happen
@ -1232,7 +1238,8 @@ func applyExpiryRule(event lifecycle.Event, src lcEventSrc, obj ObjectInfo) bool
func applyLifecycleAction(event lifecycle.Event, src lcEventSrc, obj ObjectInfo) (success bool) { func applyLifecycleAction(event lifecycle.Event, src lcEventSrc, obj ObjectInfo) (success bool) {
switch action := event.Action; action { switch action := event.Action; action {
case lifecycle.DeleteVersionAction, lifecycle.DeleteAction, case lifecycle.DeleteVersionAction, lifecycle.DeleteAction,
lifecycle.DeleteRestoredAction, lifecycle.DeleteRestoredVersionAction: lifecycle.DeleteRestoredAction, lifecycle.DeleteRestoredVersionAction,
lifecycle.DeleteAllVersionsAction:
success = applyExpiryRule(event, src, obj) success = applyExpiryRule(event, src, obj)
case lifecycle.TransitionAction, lifecycle.TransitionVersionAction: case lifecycle.TransitionAction, lifecycle.TransitionVersionAction:
success = applyTransitionRule(event, src, obj) success = applyTransitionRule(event, src, obj)

View File

@ -92,7 +92,7 @@ func (a Action) Delete() bool {
if a.DeleteRestored() { if a.DeleteRestored() {
return true return true
} }
return a == DeleteVersionAction || a == DeleteAction return a == DeleteVersionAction || a == DeleteAction || a == DeleteAllVersionsAction
} }
// Lifecycle - Configuration for bucket lifecycle. // Lifecycle - Configuration for bucket lifecycle.