Project

General

Profile

Actions

Bug #49446

open

rgw: RGWLC::process() may starve some bucket LCs at the end of a lc.N

Added by Jeegn Chen about 3 years ago. Updated over 1 year ago.

Status:
Pending Backport
Priority:
High
Assignee:
Target version:
-
% Done:

0%

Source:
Tags:
lifecycle backport_processed
Backport:
quincy, pacific
Regression:
No
Severity:
3 - minor
Reviewed:
Affected Versions:
ceph-qa-suite:
Pull request ID:
Crash signature (v1):
Crash signature (v2):

Description

Current implementation of RGWLC::process() implicitly assumes that all
the buckets in one lc.N can be processed within one day.
So the following snippet will always reset the marker to the beginning
of a lc.N when the lc.N is processed for the first time in a day.

    if(!if_already_run_today(head.start_date)) {
      head.start_date = now;
      head.marker.clear();
      ret = bucket_lc_prepare(index);
      if (ret < 0) {
      ldpp_dout(this, 0) << "RGWLC::process() failed to update lc object " 
          << obj_names[index] << ", ret=" << ret << dendl;
      goto exit;
      }
    }

However, this assumption may not be true, when the number of bucket
lifecycle configurations or the number of objects within buckets became
large enough. In these scenarios, the logic above may reset the marker
to the beginning when it was just pointing to some key in the middle of
lc.N. As a result, the bucket lifecycles after that key will get
no chance to be processed.

Maybe a more reasonable logic is that we should check whether the marker
is pointing to the end of a lc.N first. If yes, it is OK to reset.
But if it is not, the marker should be reserved.


Related issues 2 (1 open1 closed)

Copied to rgw - Backport #55246: pacific: rgw: RGWLC::process() may starve some bucket LCs at the end of a lc.NRejectedMatt BenjaminActions
Copied to rgw - Backport #58329: quincy: rgw: RGWLC::process() may starve some bucket LCs at the end of a lc.NIn ProgressMatt BenjaminActions
Actions

Also available in: Atom PDF