]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
src/: add CEPH_OSD_OP_READ_SYNC
authorSamuel Just <sam.just@inktank.com>
Fri, 6 Dec 2013 21:51:24 +0000 (13:51 -0800)
committerSamuel Just <sam.just@inktank.com>
Wed, 22 Jan 2014 22:39:16 +0000 (14:39 -0800)
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 <sam.just@inktank.com>
src/common/ceph_strings.cc
src/include/rados.h
src/objclass/class_api.cc
src/osd/ReplicatedPG.cc

index ca3be215990604f97989592a398a95a488e8e3a0..686f504ce3ac459f27e915b385a0914a4a65b3e2 100644 (file)
@@ -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";
index 49a8b9dc5155f6825a288ed8b204e158f0f1daab..59cc77bceebb588ac4fc0dc705cc4a0562cd9442 100644 (file)
@@ -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,
index bb26c752f9b34ffab729911d473fa45e10e0817a..46a8ff54367e195437dee853efeccf79bc4631e8 100644 (file)
@@ -157,7 +157,7 @@ int cls_read(cls_method_context_t hctx, int ofs, int len,
 {
   ReplicatedPG::OpContext **pctx = (ReplicatedPG::OpContext **)hctx;
   vector<OSDOp> 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<OSDOp> 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);
index 95594c5d618ec5fc08b3fbf6af4dd647668bdcb9..013b350b9a6c482b92c53a499ff483666e3c072b 100644 (file)
@@ -2793,6 +2793,12 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector<OSDOp>& 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<OSDOp>& ops)
 
       // -- trivial map --
     case CEPH_OSD_OP_TMAPGET:
+      if (pool.info.ec_pool()) {
+       result = -EOPNOTSUPP;
+       break;
+      }
       ++ctx->num_read;
       {
        vector<OSDOp> 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<OSDOp>& 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<OSDOp>& 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;