bool is_replay() const { return state_test(PG_STATE_REPLAY); }
//bool is_complete() { return state_test(PG_STATE_COMPLETE); }
bool is_clean() const { return state_test(PG_STATE_CLEAN); }
+ bool is_degraded() const { return state_test(PG_STATE_DEGRADED); }
bool is_stray() const { return state_test(PG_STATE_STRAY); }
bool is_scrubbing() const { return state_test(PG_STATE_SCRUBBING); }
void ReplicatedPG::calc_trim_to()
{
- if (is_clean() ||
- log.top.version - log.bottom.version > info.stats.num_objects) {
- pg_trim_to = min_last_complete_ondisk;
- if (pg_trim_to != eversion_t()) {
+ if (!is_degraded() &&
+ (is_clean() ||
+ log.top.version - log.bottom.version > info.stats.num_objects)) {
+ if (min_last_complete_ondisk != eversion_t() &&
+ min_last_complete_ondisk != pg_trim_to) {
+ dout(10) << "calc_trim_to " << pg_trim_to << " -> " << min_last_complete_ondisk << dendl;
+ pg_trim_to = min_last_complete_ondisk;
assert(pg_trim_to >= log.bottom);
assert(pg_trim_to <= log.top);
}