void pg_info_t::encode(bufferlist &bl) const
{
- ENCODE_START(30, 26, bl);
+ ENCODE_START(31, 26, bl);
::encode(pgid.pgid, bl);
::encode(last_update, bl);
::encode(last_complete, bl);
::encode(log_tail, bl);
- ::encode(last_backfill, bl);
+ if (last_backfill_bitwise && last_backfill != last_backfill.get_max()) {
+ ::encode(hobject_t(), bl);
+ } else {
+ ::encode(last_backfill, bl);
+ }
::encode(stats, bl);
history.encode(bl);
::encode(purged_snaps, bl);
::encode(last_user_version, bl);
::encode(hit_set, bl);
::encode(pgid.shard, bl);
+ ::encode(last_backfill, bl);
+ ::encode(last_backfill_bitwise, bl);
ENCODE_FINISH(bl);
}
void pg_info_t::decode(bufferlist::iterator &bl)
{
- DECODE_START_LEGACY_COMPAT_LEN(29, 26, 26, bl);
+ DECODE_START_LEGACY_COMPAT_LEN(31, 26, 26, bl);
if (struct_v < 23) {
old_pg_t opgid;
::decode(opgid, bl);
bool log_backlog;
::decode(log_backlog, bl);
}
- if (struct_v >= 24)
- ::decode(last_backfill, bl);
+ hobject_t old_last_backfill;
+ if (struct_v >= 24) {
+ ::decode(old_last_backfill, bl);
+ }
::decode(stats, bl);
history.decode(bl);
if (struct_v >= 22)
::decode(pgid.shard, bl);
else
pgid.shard = shard_id_t::NO_SHARD;
+ if (struct_v >= 31) {
+ ::decode(last_backfill, bl);
+ ::decode(last_backfill_bitwise, bl);
+ } else {
+ last_backfill = old_last_backfill;
+ last_backfill_bitwise = false;
+ }
DECODE_FINISH(bl);
}
f->dump_stream("log_tail") << log_tail;
f->dump_int("last_user_version", last_user_version);
f->dump_stream("last_backfill") << last_backfill;
+ f->dump_int("last_backfill_bitwise", (int)last_backfill_bitwise);
f->dump_stream("purged_snaps") << purged_snaps;
f->open_object_section("history");
history.dump(f);
o.back()->last_user_version = 2;
o.back()->log_tail = eversion_t(7, 8);
o.back()->last_backfill = hobject_t(object_t("objname"), "key", 123, 456, -1, "");
+ o.back()->last_backfill_bitwise = true;
{
list<pg_stat_t*> s;
pg_stat_t::generate_test_instances(s);
eversion_t log_tail; // oldest log entry.
hobject_t last_backfill; // objects >= this and < last_complete may be missing
+ bool last_backfill_bitwise; ///< true if last_backfill reflects a bitwise (vs nibblewise) sort
interval_set<snapid_t> purged_snaps;
pg_info_t()
: last_epoch_started(0), last_user_version(0),
- last_backfill(hobject_t::get_max())
+ last_backfill(hobject_t::get_max()),
+ last_backfill_bitwise(false)
{ }
pg_info_t(spg_t p)
: pgid(p),
last_epoch_started(0), last_user_version(0),
- last_backfill(hobject_t::get_max())
+ last_backfill(hobject_t::get_max()),
+ last_backfill_bitwise(false)
{ }
bool is_empty() const { return last_update.version == 0; }
out << " (" << pgi.log_tail << "," << pgi.last_update << "]";
}
if (pgi.is_incomplete())
- out << " lb " << pgi.last_backfill;
+ out << " lb " << pgi.last_backfill
+ << (pgi.last_backfill_bitwise ? " (bitwise)" : " (NIBBLEWISE)");
//out << " c " << pgi.epoch_created;
out << " local-les=" << pgi.last_epoch_started;
out << " n=" << pgi.stats.stats.sum.num_objects;