From: Samuel Just Date: Fri, 6 Dec 2013 21:51:24 +0000 (-0800) Subject: src/: add CEPH_OSD_OP_READ_SYNC X-Git-Tag: v0.78~286^2~19 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=647e75ae784059e01243ab9ad5930c41dcea63c8;p=ceph.git src/: add CEPH_OSD_OP_READ_SYNC EC pools won't support SYNC reads. This means that TMAP and friends along with reads from an object class will not be supported. Signed-off-by: Samuel Just --- diff --git a/src/common/ceph_strings.cc b/src/common/ceph_strings.cc index ca3be2159906..686f504ce3ac 100644 --- a/src/common/ceph_strings.cc +++ b/src/common/ceph_strings.cc @@ -19,6 +19,7 @@ const char *ceph_osd_op_name(int op) { switch (op) { case CEPH_OSD_OP_READ: return "read"; + case CEPH_OSD_OP_SYNC_READ: return "sync_read"; case CEPH_OSD_OP_STAT: return "stat"; case CEPH_OSD_OP_MAPEXT: return "mapext"; case CEPH_OSD_OP_SPARSE_READ: return "sparse-read"; diff --git a/src/include/rados.h b/src/include/rados.h index 49a8b9dc5155..59cc77bceebb 100644 --- a/src/include/rados.h +++ b/src/include/rados.h @@ -188,6 +188,9 @@ enum { CEPH_OSD_OP_LIST_SNAPS = CEPH_OSD_OP_MODE_RD | CEPH_OSD_OP_TYPE_DATA | 10, + /* sync */ + CEPH_OSD_OP_SYNC_READ = CEPH_OSD_OP_MODE_RD | CEPH_OSD_OP_TYPE_DATA | 11, + /* write */ CEPH_OSD_OP_WRITE = CEPH_OSD_OP_MODE_WR | CEPH_OSD_OP_TYPE_DATA | 1, CEPH_OSD_OP_WRITEFULL = CEPH_OSD_OP_MODE_WR | CEPH_OSD_OP_TYPE_DATA | 2, diff --git a/src/objclass/class_api.cc b/src/objclass/class_api.cc index bb26c752f9b3..46a8ff54367e 100644 --- a/src/objclass/class_api.cc +++ b/src/objclass/class_api.cc @@ -157,7 +157,7 @@ int cls_read(cls_method_context_t hctx, int ofs, int len, { ReplicatedPG::OpContext **pctx = (ReplicatedPG::OpContext **)hctx; vector ops(1); - ops[0].op.op = CEPH_OSD_OP_READ; + ops[0].op.op = CEPH_OSD_OP_SYNC_READ; ops[0].op.extent.offset = ofs; ops[0].op.extent.length = len; int r = (*pctx)->pg->do_osd_ops(*pctx, ops); @@ -228,7 +228,7 @@ int cls_cxx_read(cls_method_context_t hctx, int ofs, int len, bufferlist *outbl) ReplicatedPG::OpContext **pctx = (ReplicatedPG::OpContext **)hctx; vector ops(1); int ret; - ops[0].op.op = CEPH_OSD_OP_READ; + ops[0].op.op = CEPH_OSD_OP_SYNC_READ; ops[0].op.extent.offset = ofs; ops[0].op.extent.length = len; ret = (*pctx)->pg->do_osd_ops(*pctx, ops); diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index 95594c5d618e..013b350b9a6c 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -2793,6 +2793,12 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector& ops) // --- READS --- + case CEPH_OSD_OP_SYNC_READ: + if (pool.info.ec_pool()) { + result = -EOPNOTSUPP; + break; + } + // fall through case CEPH_OSD_OP_READ: ++ctx->num_read; { @@ -3832,11 +3838,15 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector& ops) // -- trivial map -- case CEPH_OSD_OP_TMAPGET: + if (pool.info.ec_pool()) { + result = -EOPNOTSUPP; + break; + } ++ctx->num_read; { vector nops(1); OSDOp& newop = nops[0]; - newop.op.op = CEPH_OSD_OP_READ; + newop.op.op = CEPH_OSD_OP_SYNC_READ; newop.op.extent.offset = 0; newop.op.extent.length = 0; do_osd_ops(ctx, nops); @@ -3845,6 +3855,10 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector& ops) break; case CEPH_OSD_OP_TMAPPUT: + if (pool.info.ec_pool()) { + result = -EOPNOTSUPP; + break; + } ++ctx->num_write; { //_dout_lock.Lock(); @@ -3899,6 +3913,10 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector& ops) break; case CEPH_OSD_OP_TMAPUP: + if (pool.info.ec_pool()) { + result = -EOPNOTSUPP; + break; + } ++ctx->num_write; result = do_tmapup(ctx, bp, osd_op); break;