ceph_osd_feature_incompat.insert(CEPH_OSD_FEATURE_INCOMPAT_OLOC);
ceph_osd_feature_incompat.insert(CEPH_OSD_FEATURE_INCOMPAT_LEC);
ceph_osd_feature_incompat.insert(CEPH_OSD_FEATURE_INCOMPAT_CATEGORIES);
+ ceph_osd_feature_incompat.insert(CEPH_OSD_FEATURE_INCOMPAT_HOBJECTPOOL);
return CompatSet(ceph_osd_feature_compat, ceph_osd_feature_ro_compat,
ceph_osd_feature_incompat);
}
}
}
+ if (e.invalid_pool) {
+ e.soid.pool = info.pgid.pool();
+ }
+
e.offset = pos;
uint64_t endpos = ondisklog.tail + p.get_off();
log.log.push_back(e);
void pg_log_entry_t::encode(bufferlist &bl) const
{
- ENCODE_START(4, 4, bl);
+ ENCODE_START(5, 4, bl);
::encode(op, bl);
::encode(soid, bl);
::encode(version, bl);
void pg_log_entry_t::decode(bufferlist::iterator &bl)
{
- DECODE_START_LEGACY_COMPAT_LEN(4, 4, 4, bl);
+ DECODE_START_LEGACY_COMPAT_LEN(5, 4, 4, bl);
::decode(op, bl);
if (struct_v < 2) {
sobject_t old_soid;
::decode(mtime, bl);
if (op == CLONE)
::decode(snaps, bl);
+ if (struct_v < 5)
+ invalid_pool = true;
DECODE_FINISH(bl);
}
void object_info_t::encode(bufferlist& bl) const
{
- ENCODE_START(9, 8, bl);
+ ENCODE_START(10, 8, bl);
::encode(soid, bl);
::encode(oloc, bl);
::encode(category, bl);
void object_info_t::decode(bufferlist::iterator& bl)
{
- DECODE_START_LEGACY_COMPAT_LEN(9, 8, 8, bl);
+ DECODE_START_LEGACY_COMPAT_LEN(10, 8, 8, bl);
if (struct_v >= 2 && struct_v <= 5) {
sobject_t obj;
::decode(obj, bl);
::decode(uses_tmap, bl);
else
uses_tmap = true;
+ if (struct_v < 10)
+ soid.pool = oloc.pool;
DECODE_FINISH(bl);
}
#define CEPH_OSD_FEATURE_INCOMPAT_OLOC CompatSet::Feature(3, "object locator")
#define CEPH_OSD_FEATURE_INCOMPAT_LEC CompatSet::Feature(4, "last_epoch_clean")
#define CEPH_OSD_FEATURE_INCOMPAT_CATEGORIES CompatSet::Feature(5, "categories")
+#define CEPH_OSD_FEATURE_INCOMPAT_HOBJECTPOOL CompatSet::Feature(6, "hobjectpool")
typedef hobject_t collection_list_handle_t;
utime_t mtime; // this is the _user_ mtime, mind you
bufferlist snaps; // only for clone entries
bool invalid_hash; // only when decoding sobject_t based entries
+ bool invalid_pool; // only when decoding pool-less hobject based entries
uint64_t offset; // [soft state] my offset on disk
const osd_reqid_t& rid, const utime_t& mt)
: op(_op), soid(_soid), version(v),
prior_version(pv),
- reqid(rid), mtime(mt), invalid_hash(false), offset(0) {}
+ reqid(rid), mtime(mt), invalid_hash(false), invalid_pool(false),
+ offset(0) {}
bool is_clone() const { return op == CLONE; }
bool is_modify() const { return op == MODIFY; }