Project

General

Profile

Actions

Backport #41116

closed

luminous: Lifecycle expiration action generates delete marker continuously

Added by Patrick Donnelly over 4 years ago. Updated about 3 years ago.

Status:
Rejected
Priority:
Normal
Assignee:
-
Target version:
-
Release:
luminous
Pull request ID:
Crash signature (v1):
Crash signature (v2):

Related issues 1 (0 open1 closed)

Copied from rgw - Bug #40393: Lifecycle expiration action generates delete marker continuouslyResolved

Actions
Actions #1

Updated by Patrick Donnelly over 4 years ago

  • Copied from Bug #40393: Lifecycle expiration action generates delete marker continuously added
Actions #2

Updated by Nathan Cutler over 4 years ago

  • Status changed from New to Need More Info

In luminous, src/rgw/rgw_lc.cc looks very different than in mimic+. This looks difficult to backport to luminous.

Actions #3

Updated by Matt Benjamin over 4 years ago

Hi Nathan,

The process on L is indeed (or should I say "remove_indeed") has a very different flow. It looks to me that this behavior was most likely a regression relative to L, though.

On L, the logic is unrolled in RGWLC::bucket_lc_process, into two large cases: !versioned bucket, and else (the case has a misleading comment "/* bucket versioning is enabled or suspended */"). So if there can be a delete marker, it's only in the else case, and, in the else case, remove_expired_obj can be reached only if we dont take the branch (my l.555):

if (obj_iter->is_delete_marker()) {
if ((obj_iter + 1)==objs.end()) {
if (is_truncated) {
//deal with it in next round because we can't judge whether this marker is the only version
list_op.get_next_marker() = obj_iter->key;
break;
}
} else if (obj_iter->key.name.compare((obj_iter + 1)->key.name) == 0) { //*obj_iter is delete marker and isn't the only version, do nothing.
continue;
}
skip_expiration = prefix_iter->second.dm_expiration;
remove_indeed = true; //we should remove the delete marker if it's the only version
} else {
remove_indeed = false;
}

Which looks like the same logic from the upstream PR l. 729?

}
if (o.is_delete_marker()) {
if (oc.ol.next_has_same_name()) {
return false;
} else {
*exp_time = real_clock::now();
return true;
}
}

Matt

Actions #4

Updated by Nathan Cutler about 3 years ago

  • Status changed from Need More Info to Rejected
Actions

Also available in: Atom PDF