From 79475d8e8fa9a0af07f5192a5b8aff463c506d3f Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Wed, 23 Sep 2015 10:01:35 -0400 Subject: [PATCH] osd/osd_types: add last_epoch_marked_full to pg_history_t Signed-off-by: Sage Weil --- src/osd/osd_types.cc | 10 ++++++++-- src/osd/osd_types.h | 9 ++++++++- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/osd/osd_types.cc b/src/osd/osd_types.cc index d18a86aa24acf..81864424ce622 100644 --- a/src/osd/osd_types.cc +++ b/src/osd/osd_types.cc @@ -2377,7 +2377,7 @@ void pool_stat_t::generate_test_instances(list& o) void pg_history_t::encode(bufferlist &bl) const { - ENCODE_START(6, 4, bl); + ENCODE_START(7, 4, bl); ::encode(epoch_created, bl); ::encode(last_epoch_started, bl); ::encode(last_epoch_clean, bl); @@ -2390,12 +2390,13 @@ void pg_history_t::encode(bufferlist &bl) const ::encode(last_deep_scrub, bl); ::encode(last_deep_scrub_stamp, bl); ::encode(last_clean_scrub_stamp, bl); + ::encode(last_epoch_marked_full, bl); ENCODE_FINISH(bl); } void pg_history_t::decode(bufferlist::iterator &bl) { - DECODE_START_LEGACY_COMPAT_LEN(6, 4, 4, bl); + DECODE_START_LEGACY_COMPAT_LEN(7, 4, 4, bl); ::decode(epoch_created, bl); ::decode(last_epoch_started, bl); if (struct_v >= 3) @@ -2417,6 +2418,9 @@ void pg_history_t::decode(bufferlist::iterator &bl) if (struct_v >= 6) { ::decode(last_clean_scrub_stamp, bl); } + if (struct_v >= 7) { + ::decode(last_epoch_marked_full, bl); + } DECODE_FINISH(bl); } @@ -2426,6 +2430,7 @@ void pg_history_t::dump(Formatter *f) const f->dump_int("last_epoch_started", last_epoch_started); f->dump_int("last_epoch_clean", last_epoch_clean); f->dump_int("last_epoch_split", last_epoch_split); + f->dump_int("last_epoch_marked_full", last_epoch_marked_full); f->dump_int("same_up_since", same_up_since); f->dump_int("same_interval_since", same_interval_since); f->dump_int("same_primary_since", same_primary_since); @@ -2452,6 +2457,7 @@ void pg_history_t::generate_test_instances(list& o) o.back()->last_deep_scrub = eversion_t(12, 13); o.back()->last_deep_scrub_stamp = utime_t(14, 15); o.back()->last_clean_scrub_stamp = utime_t(16, 17); + o.back()->last_epoch_marked_full = 18; } diff --git a/src/osd/osd_types.h b/src/osd/osd_types.h index c0616ebfcec02..ca2d960b3b2be 100644 --- a/src/osd/osd_types.h +++ b/src/osd/osd_types.h @@ -1780,6 +1780,7 @@ struct pg_history_t { epoch_t last_epoch_started; // lower bound on last epoch started (anywhere, not necessarily locally) epoch_t last_epoch_clean; // lower bound on last epoch the PG was completely clean. epoch_t last_epoch_split; // as parent + epoch_t last_epoch_marked_full; // pool or cluster /** * In the event of a map discontinuity, same_*_since may reflect the first @@ -1801,6 +1802,7 @@ struct pg_history_t { pg_history_t() : epoch_created(0), last_epoch_started(0), last_epoch_clean(0), last_epoch_split(0), + last_epoch_marked_full(0), same_up_since(0), same_interval_since(0), same_primary_since(0) {} bool merge(const pg_history_t &other) { @@ -1822,6 +1824,10 @@ struct pg_history_t { last_epoch_split = other.last_epoch_split; modified = true; } + if (last_epoch_marked_full < other.last_epoch_marked_full) { + last_epoch_marked_full = other.last_epoch_marked_full; + modified = true; + } if (other.last_scrub > last_scrub) { last_scrub = other.last_scrub; modified = true; @@ -1854,7 +1860,8 @@ WRITE_CLASS_ENCODER(pg_history_t) inline ostream& operator<<(ostream& out, const pg_history_t& h) { return out << "ec=" << h.epoch_created - << " les/c " << h.last_epoch_started << "/" << h.last_epoch_clean + << " les/c/f " << h.last_epoch_started << "/" << h.last_epoch_clean + << "/" << h.last_epoch_marked_full << " " << h.same_up_since << "/" << h.same_interval_since << "/" << h.same_primary_since; } -- 2.39.5