void add_flags(int f) { flags |= f; }
+ void claim_op_out_data(vector<OSDOp>& o) {
+ assert(ops.size() == o.size());
+ for (unsigned i = 0; i < o.size(); i++) {
+ ops[i].outdata.claim(o[i].outdata);
+ }
+ }
+ void claim_ops(vector<OSDOp>& o) {
+ o.swap(ops);
+ }
+
/**
* get retry attempt
*
osdmap_epoch = e;
reassert_version = req->reassert_version;
retry_attempt = req->get_retry_attempt();
+
+ // zero out ops payload_len
+ for (unsigned i = 0; i < ops.size(); i++)
+ ops[i].op.payload_len = 0;
}
MOSDOpReply() {}
private:
public:
virtual void encode_payload(CephContext *cct) {
+
+ merge_osd_op_vector_out_data(ops, data);
+
if (!connection->has_feature(CEPH_FEATURE_PGID64)) {
ceph_osd_reply_head head;
memset(&head, 0, sizeof(head));
}
::encode_nohead(oid.name, payload);
} else {
- header.version = 3;
+ header.version = 4;
::encode(oid, payload);
::encode(pgid, payload);
::encode(flags, payload);
::encode(ops[i].op, payload);
::encode(retry_attempt, payload);
+
+ for (unsigned i = 0; i < num_ops; i++)
+ ::encode(ops[i].rval, payload);
}
}
virtual void decode_payload(CephContext *cct) {
::decode(retry_attempt, p);
else
retry_attempt = -1;
+
+ if (header.version >= 4) {
+ for (unsigned i = 0; i < num_ops; ++i)
+ ::decode(ops[i].rval, p);
+
+ split_osd_op_vector_out_data(ops, data);
+ }
}
}