epoch_t first = 0;
epoch_t last = 0; // inclusive
set<pg_shard_t> all_participants;
-
list<compact_interval_t> intervals;
pi_compact_rep(
bool ec_pool,
ENCODE_START(1, 1, bl);
::encode(first, bl);
::encode(last, bl);
+ ::encode(all_participants, bl);
::encode(intervals, bl);
ENCODE_FINISH(bl);
}
DECODE_START(1, bl);
::decode(first, bl);
::decode(last, bl);
+ ::decode(all_participants, bl);
::decode(intervals, bl);
DECODE_FINISH(bl);
}
f->open_object_section("PastIntervals::compact_rep");
f->dump_stream("first") << first;
f->dump_stream("last") << last;
+ f->open_array_section("all_participants");
+ for (auto& i : all_participants) {
+ f->dump_object("pg_shard", i);
+ }
+ f->close_section();
f->open_array_section("intervals");
for (auto &&i: intervals) {
i.dump(f);
}
void encode(bufferlist &bl) const;
void decode(bufferlist::iterator &bl);
+ void dump(Formatter *f) const {
+ f->dump_unsigned("osd", osd);
+ if (shard != shard_id_t::NO_SHARD) {
+ f->dump_unsigned("shard", shard);
+ }
+ }
};
WRITE_CLASS_ENCODER(pg_shard_t)
WRITE_EQ_OPERATORS_2(pg_shard_t, osd, shard)
}
set<pg_shard_t> all_probe = past_intervals.get_all_probe(ec_pool);
+ ldpp_dout(dpp, 10) << "build_prior all_probe " << all_probe << dendl;
for (auto &&i: all_probe) {
switch (f(0, i.osd, nullptr)) {
case UP: {
// ensure that we haven't lost any information.
if (!(*pcontdec)(up_now) && any_down_now) {
// fixme: how do we identify a "clean" shutdown anyway?
- ldpp_dout(dpp, 10) << "build_prior possibly went active+rw, insufficient up;"
- << " including down osds" << dendl;
+ ldpp_dout(dpp, 10) << "build_prior possibly went active+rw,"
+ << " insufficient up; including down osds" << dendl;
assert(!candidate_blocked_by.empty());
pg_down = true;
blocked_by.insert(