case CEPH_OSD_OP_WATCH: return "watch";
case CEPH_OSD_OP_COPY_GET_CLASSIC: return "copy-get-classic";
+ case CEPH_OSD_OP_COPY_GET: return "copy-get";
case CEPH_OSD_OP_COPY_FROM: return "copy-from";
case CEPH_OSD_OP_UNDIRTY: return "undirty";
case CEPH_OSD_OP_ISDIRTY: return "isdirty";
CEPH_OSD_OP_COPY_GET_CLASSIC = CEPH_OSD_OP_MODE_RD | CEPH_OSD_OP_TYPE_DATA | 27,
CEPH_OSD_OP_UNDIRTY = CEPH_OSD_OP_MODE_WR | CEPH_OSD_OP_TYPE_DATA | 28,
CEPH_OSD_OP_ISDIRTY = CEPH_OSD_OP_MODE_RD | CEPH_OSD_OP_TYPE_DATA | 29,
+ CEPH_OSD_OP_COPY_GET = CEPH_OSD_OP_MODE_RD | CEPH_OSD_OP_TYPE_DATA | 30,
/** multi **/
CEPH_OSD_OP_CLONERANGE = CEPH_OSD_OP_MODE_WR | CEPH_OSD_OP_TYPE_MULTI | 1,
goto fail;
break;
+ case CEPH_OSD_OP_COPY_GET:
+ ++ctx->num_read;
+ result = fill_in_copy_get(bp, osd_op, oi, false);
+ if (result == -EINVAL)
+ goto fail;
+ break;
+
case CEPH_OSD_OP_COPY_FROM:
++ctx->num_write;
{
int ReplicatedPG::fill_in_copy_get(bufferlist::iterator& bp, OSDOp& osd_op,
object_info_t& oi, bool classic)
{
- assert(classic);
hobject_t& soid = oi.soid;
int result = 0;
object_copy_cursor_t cursor;
<< " " << out_omap.size() << " keys"
<< dendl;
reply_obj.cursor = cursor;
- ::encode(reply_obj, osd_op.outdata);
+ if (classic) {
+ reply_obj.encode_classic(osd_op.outdata);
+ } else {
+ ::encode(reply_obj, osd_op.outdata);
+ }
result = 0;
return result;
}
// -- object_copy_data_t --
+void object_copy_data_t::encode_classic(bufferlist& bl) const
+{
+ ::encode(size, bl);
+ ::encode(mtime, bl);
+ ::encode(attrs, bl);
+ ::encode(data, bl);
+ ::encode(omap, bl);
+ ::encode(cursor, bl);
+}
+
+void object_copy_data_t::decode_classic(bufferlist::iterator& bl)
+{
+ ::decode(size, bl);
+ ::decode(mtime, bl);
+ ::decode(attrs, bl);
+ ::decode(data, bl);
+ ::decode(omap, bl);
+ ::decode(cursor, bl);
+}
+
void object_copy_data_t::encode(bufferlist& bl) const
{
+ ENCODE_START(1, 1, bl);
::encode(size, bl);
::encode(mtime, bl);
::encode(attrs, bl);
::encode(data, bl);
::encode(omap, bl);
::encode(cursor, bl);
+ ENCODE_FINISH(bl);
}
void object_copy_data_t::decode(bufferlist::iterator& bl)
{
+ DECODE_START(1, bl);
::decode(size, bl);
::decode(mtime, bl);
::decode(attrs, bl);
::decode(data, bl);
::decode(omap, bl);
::decode(cursor, bl);
+ DECODE_FINISH(bl);
}
void object_copy_data_t::generate_test_instances(list<object_copy_data_t*>& o)
object_copy_data_t() : size((uint64_t)-1) {}
static void generate_test_instances(list<object_copy_data_t*>& o);
+ void encode_classic(bufferlist& bl) const;
+ void decode_classic(bufferlist::iterator& bl);
void encode(bufferlist& bl) const;
void decode(bufferlist::iterator& bl);
void dump(Formatter *f) const;
bufferlist *out_data,
std::map<std::string,bufferlist> *out_omap,
int *prval) {
- OSDOp& osd_op = add_op(CEPH_OSD_OP_COPY_GET_CLASSIC);
+ OSDOp& osd_op = add_op(CEPH_OSD_OP_COPY_GET);
osd_op.op.copy_get.max = max;
::encode(*cursor, osd_op.indata);
::encode(max, osd_op.indata);