class MOSDSubOp : public Message {
- static const int HEAD_VERSION = 7;
+ static const int HEAD_VERSION = 8;
static const int COMPAT_VERSION = 1;
public:
// indicates that we must fix hobject_t encoding
bool hobject_incorrect_pool;
+ hobject_t new_temp_oid; ///< new temp object that we must now start tracking
+ hobject_t discard_temp_oid; ///< previously used temp object that we can now stop tracking
+
int get_cost() const {
if (ops.size() == 1 && ops[0].op.op == CEPH_OSD_OP_PULL)
return ops[0].op.extent.length;
poid.pool = pgid.pool();
hobject_incorrect_pool = true;
}
+
+ if (header.version >= 8) {
+ ::decode(new_temp_oid, p);
+ ::decode(discard_temp_oid, p);
+ }
}
virtual void encode_payload(uint64_t features) {
::encode(current_progress, payload);
::encode(omap_entries, payload);
::encode(omap_header, payload);
+ ::encode(new_temp_oid, payload);
+ ::encode(discard_temp_oid, payload);
}
MOSDSubOp()
wr->pg_stats = info.stats;
wr->pg_trim_to = pg_trim_to;
+
+ wr->new_temp_oid = repop->ctx->new_temp_oid;
+ wr->discard_temp_oid = repop->ctx->discard_temp_oid;
+
osd->send_message_osd_cluster(peer, wr, get_osdmap()->get_epoch());
// keep peer_info up to date
bufferlist::iterator p = m->get_data().begin();
+ if (m->new_temp_oid != hobject_t()) {
+ dout(20) << __func__ << " start tracking temp " << m->new_temp_oid << dendl;
+ temp_contents.insert(m->new_temp_oid);
+ get_temp_coll(&rm->localt);
+ }
+ if (m->discard_temp_oid != hobject_t()) {
+ dout(20) << __func__ << " stop tracking temp " << m->discard_temp_oid << dendl;
+ temp_contents.erase(m->discard_temp_oid);
+ }
+
::decode(rm->opt, p);
if (!(m->get_connection()->get_features() & CEPH_FEATURE_OSD_SNAPMAPPER))
rm->opt.set_tolerate_collection_add_enoent();