class MOSDSubOp : public Message {
- static const int HEAD_VERSION = 5;
+ static const int HEAD_VERSION = 6;
static const int COMPAT_VERSION = 1;
public:
ObjectRecoveryProgress current_progress;
map<string,bufferlist> omap_entries;
+ bufferlist omap_header;
virtual void decode_payload() {
bufferlist::iterator p = payload.begin();
}
if (header.version >= 5)
::decode(omap_entries, p);
+ if (header.version >= 6)
+ ::decode(omap_header, p);
}
virtual void encode_payload(uint64_t features) {
::encode(recovery_progress, payload);
::encode(current_progress, payload);
::encode(omap_entries, payload);
+ ::encode(omap_header, payload);
}
MOSDSubOp()
bool first,
const interval_set<uint64_t> &intervals_included,
bufferlist data_included,
+ bufferlist omap_header,
map<string, bufferptr> &attrs,
map<string, bufferlist> &omap_entries,
ObjectStore::Transaction *t)
if (first) {
t->remove(coll_t::TEMP_COLL, recovery_info.soid);
t->touch(coll_t::TEMP_COLL, recovery_info.soid);
+ t->omap_setheader(coll_t::TEMP_COLL, recovery_info.soid, omap_header);
}
uint64_t off = 0;
for (interval_set<uint64_t>::const_iterator p = intervals_included.begin();
Context *onreadable = 0;
Context *onreadable_sync = 0;
submit_push_data(pi.recovery_info, first,
- data_included, data, m->attrset,
+ data_included, data,
+ m->omap_header,
+ m->attrset,
m->omap_entries,
t);
first,
m->data_included,
data,
+ m->omap_header,
m->attrset,
m->omap_entries,
t);
subop->ops[0].op.op = CEPH_OSD_OP_PUSH;
if (progress.first) {
+ osd->store->omap_get_header(coll, recovery_info.soid, &subop->omap_header);
osd->store->getattrs(coll, recovery_info.soid, subop->attrset);
// Debug
bool first,
const interval_set<uint64_t> &intervals_included,
bufferlist data_included,
+ bufferlist omap_header,
map<string, bufferptr> &attrs,
map<string, bufferlist> &omap_entries,
ObjectStore::Transaction *t);