]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
ReplicatedPG,osd_types: seperate require_rollback from ec_pool
authorSamuel Just <sam.just@inktank.com>
Thu, 23 Jan 2014 21:32:21 +0000 (13:32 -0800)
committerSamuel Just <sam.just@inktank.com>
Mon, 17 Feb 2014 22:24:56 +0000 (14:24 -0800)
It's handy to allow a pool to answer false to ec_pool() and
true to require_rollback() in order to allow a replicated
pool to test the rollback mechanisms without allowing
non-NO_SHARD shards.

Signed-off-by: Samuel Just <sam.just@inktank.com>
src/osd/PG.cc
src/osd/ReplicatedPG.cc
src/osd/osd_types.h

index 51c0b4271d27675a3ac2536dacf5757f2f3677ef..166dd8a715b222beedb541eb3a5b130506d5b5d8 100644 (file)
@@ -833,7 +833,7 @@ map<int, pg_info_t>::const_iterator PG::find_best_info(const map<int, pg_info_t>
       continue;
     }
     // Prefer newer last_update
-    if (pool.info.ec_pool()) {
+    if (pool.info.require_rollback()) {
       if (p->second.last_update > best->second.last_update)
        continue;
       if (p->second.last_update < best->second.last_update) {
index b26d2f1b81cb1e0901b55a7c27df57d84e210ad5..31e31c72dbc7f3c4d47577e44481d77f6142f768 100644 (file)
@@ -2227,7 +2227,7 @@ ReplicatedPG::RepGather *ReplicatedPG::trim_object(const hobject_t &coid)
        osd_reqid_t(),
        ctx->mtime)
       );
-    if (pool.info.ec_pool()) {
+    if (pool.info.require_rollback()) {
       set<snapid_t> snaps(
        ctx->obc->obs.oi.snaps.begin(),
        ctx->obc->obs.oi.snaps.end());
@@ -2264,7 +2264,7 @@ ReplicatedPG::RepGather *ReplicatedPG::trim_object(const hobject_t &coid)
        osd_reqid_t(),
        ctx->mtime)
       );
-    if (pool.info.ec_pool()) {
+    if (pool.info.require_rollback()) {
       set<string> changing;
       changing.insert(OI_ATTR);
       ctx->obc->fill_in_setattrs(changing, &(ctx->log.back().mod_desc));
@@ -2304,7 +2304,7 @@ ReplicatedPG::RepGather *ReplicatedPG::trim_object(const hobject_t &coid)
 
     ctx->snapset_obc->obs.exists = false;
     
-    if (pool.info.ec_pool()) {
+    if (pool.info.require_rollback()) {
       if (ctx->log.back().mod_desc.rmobject(ctx->at_version.version)) {
        t->stash(snapoid, ctx->at_version.version);
       } else {
@@ -2339,7 +2339,7 @@ ReplicatedPG::RepGather *ReplicatedPG::trim_object(const hobject_t &coid)
     ::encode(ctx->snapset_obc->obs.oi, bl);
     setattr_maybe_cache(ctx->snapset_obc, ctx, t, OI_ATTR, bl);
 
-    if (pool.info.ec_pool()) {
+    if (pool.info.require_rollback()) {
       set<string> changing;
       changing.insert(OI_ATTR);
       changing.insert(SS_ATTR);
@@ -2839,7 +2839,7 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector<OSDOp>& ops)
       // --- READS ---
 
     case CEPH_OSD_OP_SYNC_READ:
-      if (pool.info.ec_pool()) {
+      if (pool.info.require_rollback()) {
        result = -EOPNOTSUPP;
        break;
       }
@@ -2865,7 +2865,7 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector<OSDOp>& ops)
        bufferlist bl;
        if (trim != (uint64_t)-1 && op.extent.length == 0) {
          // read size was trimmed to zero
-       } else if (pool.info.ec_pool()) {
+       } else if (pool.info.require_rollback()) {
          ctx->pending_async_reads.push_back(
            make_pair(
              make_pair(op.extent.offset, op.extent.length),
@@ -2895,7 +2895,7 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector<OSDOp>& ops)
 
     /* map extents */
     case CEPH_OSD_OP_MAPEXT:
-      if (pool.info.ec_pool()) {
+      if (pool.info.require_rollback()) {
        result = -EOPNOTSUPP;
        break;
       }
@@ -2915,7 +2915,7 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector<OSDOp>& ops)
 
     /* map extents */
     case CEPH_OSD_OP_SPARSE_READ:
-      if (pool.info.ec_pool()) {
+      if (pool.info.require_rollback()) {
        result = -EOPNOTSUPP;
        break;
       }
@@ -3488,7 +3488,7 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector<OSDOp>& ops)
          ctx->mod_desc.append(oi.size);
        } else {
          ctx->mod_desc.mark_unrollbackable();
-         if (pool.info.ec_pool()) {
+         if (pool.info.require_rollback()) {
            result = -EOPNOTSUPP;
            break;
          }
@@ -3528,7 +3528,7 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector<OSDOp>& ops)
        result = check_offset_and_length(op.extent.offset, op.extent.length, cct->_conf->osd_max_object_size);
        if (result < 0)
          break;
-       if (pool.info.ec_pool()) {
+       if (pool.info.require_rollback()) {
          t->append(soid, op.extent.offset, op.extent.length, osd_op.indata);
        } else {
          t->write(soid, op.extent.offset, op.extent.length, osd_op.indata);
@@ -3553,7 +3553,7 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector<OSDOp>& ops)
        if (result < 0)
          break;
 
-       if (pool.info.ec_pool()) {
+       if (pool.info.require_rollback()) {
          if (obs.exists) {
            if (ctx->mod_desc.rmobject(oi.version.version)) {
              t->stash(soid, oi.version.version);
@@ -3597,7 +3597,7 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector<OSDOp>& ops)
       break;
 
     case CEPH_OSD_OP_ZERO:
-      if (pool.info.ec_pool()) {
+      if (pool.info.require_rollback()) {
        result = -EOPNOTSUPP;
        break;
       }
@@ -3661,7 +3661,7 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector<OSDOp>& ops)
       // falling through
 
     case CEPH_OSD_OP_TRUNCATE:
-      if (pool.info.ec_pool()) {
+      if (pool.info.require_rollback()) {
        result = -EOPNOTSUPP;
        break;
       }
@@ -3720,7 +3720,7 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector<OSDOp>& ops)
 
     case CEPH_OSD_OP_CLONERANGE:
       ctx->mod_desc.mark_unrollbackable();
-      if (pool.info.ec_pool()) {
+      if (pool.info.require_rollback()) {
        result = -EOPNOTSUPP;
        break;
       }
@@ -3810,7 +3810,7 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector<OSDOp>& ops)
        string aname;
        bp.copy(op.xattr.name_len, aname);
        string name = "_" + aname;
-       if (pool.info.ec_pool()) {
+       if (pool.info.require_rollback()) {
          map<string, boost::optional<bufferlist> > to_set;
          bufferlist old;
          int r = getattr_maybe_cache(ctx->obc, name, &old);
@@ -3836,7 +3836,7 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector<OSDOp>& ops)
        string aname;
        bp.copy(op.xattr.name_len, aname);
        string name = "_" + aname;
-       if (pool.info.ec_pool()) {
+       if (pool.info.require_rollback()) {
          map<string, boost::optional<bufferlist> > to_set;
          bufferlist old;
          int r = getattr_maybe_cache(ctx->obc, name, &old);
@@ -3880,7 +3880,7 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector<OSDOp>& ops)
 
       // -- trivial map --
     case CEPH_OSD_OP_TMAPGET:
-      if (pool.info.ec_pool()) {
+      if (pool.info.require_rollback()) {
        result = -EOPNOTSUPP;
        break;
       }
@@ -3897,7 +3897,7 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector<OSDOp>& ops)
       break;
 
     case CEPH_OSD_OP_TMAPPUT:
-      if (pool.info.ec_pool()) {
+      if (pool.info.require_rollback()) {
        result = -EOPNOTSUPP;
        break;
       }
@@ -3955,7 +3955,7 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector<OSDOp>& ops)
       break;
 
     case CEPH_OSD_OP_TMAPUP:
-      if (pool.info.ec_pool()) {
+      if (pool.info.require_rollback()) {
        result = -EOPNOTSUPP;
        break;
       }
@@ -3970,7 +3970,7 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector<OSDOp>& ops)
 
       // OMAP Read ops
     case CEPH_OSD_OP_OMAPGETKEYS:
-      if (pool.info.ec_pool()) {
+      if (pool.info.require_rollback()) {
        result = -EOPNOTSUPP;
        break;
       }
@@ -4007,7 +4007,7 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector<OSDOp>& ops)
       break;
 
     case CEPH_OSD_OP_OMAPGETVALS:
-      if (pool.info.ec_pool()) {
+      if (pool.info.require_rollback()) {
        result = -EOPNOTSUPP;
        break;
       }
@@ -4052,7 +4052,7 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector<OSDOp>& ops)
       break;
 
     case CEPH_OSD_OP_OMAPGETHEADER:
-      if (pool.info.ec_pool()) {
+      if (pool.info.require_rollback()) {
        result = -EOPNOTSUPP;
        break;
       }
@@ -4065,7 +4065,7 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector<OSDOp>& ops)
       break;
 
     case CEPH_OSD_OP_OMAPGETVALSBYKEYS:
-      if (pool.info.ec_pool()) {
+      if (pool.info.require_rollback()) {
        result = -EOPNOTSUPP;
        break;
       }
@@ -4088,7 +4088,7 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector<OSDOp>& ops)
       break;
 
     case CEPH_OSD_OP_OMAP_CMP:
-      if (pool.info.ec_pool()) {
+      if (pool.info.require_rollback()) {
        result = -EOPNOTSUPP;
        break;
       }
@@ -4159,7 +4159,7 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector<OSDOp>& ops)
 
       // OMAP Write ops
     case CEPH_OSD_OP_OMAPSETVALS:
-      if (pool.info.ec_pool()) {
+      if (pool.info.require_rollback()) {
        result = -EOPNOTSUPP;
        break;
       }
@@ -4192,7 +4192,7 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector<OSDOp>& ops)
       break;
 
     case CEPH_OSD_OP_OMAPSETHEADER:
-      if (pool.info.ec_pool()) {
+      if (pool.info.require_rollback()) {
        result = -EOPNOTSUPP;
        break;
       }
@@ -4211,7 +4211,7 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector<OSDOp>& ops)
       break;
 
     case CEPH_OSD_OP_OMAPCLEAR:
-      if (pool.info.ec_pool()) {
+      if (pool.info.require_rollback()) {
        result = -EOPNOTSUPP;
        break;
       }
@@ -4230,7 +4230,7 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector<OSDOp>& ops)
       break;
 
     case CEPH_OSD_OP_OMAPRMKEYS:
-      if (pool.info.ec_pool()) {
+      if (pool.info.require_rollback()) {
        result = -EOPNOTSUPP;
        break;
       }
@@ -4387,7 +4387,7 @@ inline int ReplicatedPG::_delete_head(OpContext *ctx, bool no_whiteout)
   if (!obs.exists || (obs.oi.is_whiteout() && !no_whiteout))
     return -ENOENT;
 
-  if (pool.info.ec_pool()) {
+  if (pool.info.require_rollback()) {
     if (ctx->mod_desc.rmobject(oi.version.version)) {
       t->stash(soid, oi.version.version);
     } else {
@@ -4494,7 +4494,7 @@ int ReplicatedPG::_rollback_to(OpContext *ctx, ceph_osd_op& op)
       dout(10) << "_rollback_to deleting " << soid.oid
               << " and rolling back to old snap" << dendl;
 
-      if (pool.info.ec_pool()) {
+      if (pool.info.require_rollback()) {
        if (obs.exists) {
          if (ctx->mod_desc.rmobject(oi.version.version)) {
            t->stash(soid, oi.version.version);
@@ -4619,7 +4619,7 @@ void ReplicatedPG::make_writeable(OpContext *ctx)
       ctx->clone_obc->destructor_callback = new C_PG_ObjectContext(this, ctx->clone_obc.get());
       ctx->clone_obc->obs.oi = static_snap_oi;
       ctx->clone_obc->obs.exists = true;
-      if (pool.info.ec_pool())
+      if (pool.info.require_rollback())
        ctx->clone_obc->attr_cache = ctx->obc->attr_cache;
       snap_oi = &ctx->clone_obc->obs.oi;
     } else {
@@ -4893,7 +4893,7 @@ void ReplicatedPG::finish_ctx(OpContext *ctx, int log_op_type)
              ctx->at_version,
              ctx->obs->oi.version,
              0, osd_reqid_t(), ctx->mtime));
-         if (pool.info.ec_pool()) {
+         if (pool.info.require_rollback()) {
            if (ctx->log.back().mod_desc.rmobject(ctx->at_version.version)) {
              ctx->op_t->stash(snapoid, ctx->at_version.version);
            } else {
@@ -4922,9 +4922,9 @@ void ReplicatedPG::finish_ctx(OpContext *ctx, int log_op_type)
                                        0, osd_reqid_t(), ctx->mtime));
 
       ctx->snapset_obc = get_object_context(snapoid, true);
-      if (pool.info.ec_pool() && !ctx->snapset_obc->obs.exists) {
+      if (pool.info.require_rollback() && !ctx->snapset_obc->obs.exists) {
        ctx->log.back().mod_desc.create();
-      } else if (!pool.info.ec_pool()) {
+      } else if (!pool.info.require_rollback()) {
        ctx->log.back().mod_desc.mark_unrollbackable();
       }
       ctx->snapset_obc->obs.exists = true;
@@ -4937,7 +4937,7 @@ void ReplicatedPG::finish_ctx(OpContext *ctx, int log_op_type)
       ctx->op_t->touch(snapoid);
       setattr_maybe_cache(ctx->snapset_obc, ctx, ctx->op_t, OI_ATTR, bv);
       setattr_maybe_cache(ctx->snapset_obc, ctx, ctx->op_t, SS_ATTR, bss);
-      if (pool.info.ec_pool()) {
+      if (pool.info.require_rollback()) {
        map<string, boost::optional<bufferlist> > to_set;
        to_set[SS_ATTR];
        to_set[OI_ATTR];
@@ -4984,7 +4984,7 @@ void ReplicatedPG::finish_ctx(OpContext *ctx, int log_op_type)
               << " in " << soid << dendl;
       setattr_maybe_cache(ctx->obc, ctx, ctx->op_t, SS_ATTR, bss);
 
-      if (pool.info.ec_pool()) {
+      if (pool.info.require_rollback()) {
        set<string> changing;
        changing.insert(OI_ATTR);
        changing.insert(SS_ATTR);
@@ -5132,7 +5132,7 @@ int ReplicatedPG::fill_in_copy_get(
   bool async_read_started = false;
   object_copy_data_t _reply_obj;
   C_CopyFrom_AsyncReadCb *cb = NULL;
-  if (pool.info.ec_pool()) {
+  if (pool.info.require_rollback()) {
     cb = new C_CopyFrom_AsyncReadCb(&osd_op, classic);
   }
   object_copy_data_t &reply_obj = cb ? cb->reply_obj : _reply_obj;
@@ -5189,7 +5189,7 @@ int ReplicatedPG::fill_in_copy_get(
 
   // omap
   std::map<std::string,bufferlist>& out_omap = reply_obj.omap;
-  if (pool.info.ec_pool()) {
+  if (pool.info.require_rollback()) {
     cursor.omap_complete = true;
   } else {
     if (left > 0 && !cursor.omap_complete) {
@@ -5344,7 +5344,7 @@ void ReplicatedPG::process_copy_chunk(hobject_t oid, tid_t tid, int r)
     return;
   }
 
-  if (r >= 0 && pool.info.ec_pool() && cop->omap.size()) {
+  if (r >= 0 && pool.info.require_rollback() && cop->omap.size()) {
     r = -EOPNOTSUPP;
   }
   cop->objecter_tid = 0;
@@ -5474,7 +5474,7 @@ void ReplicatedPG::finish_copyfrom(OpContext *ctx)
   ObjectState& obs = ctx->new_obs;
   CopyFromCallback *cb = static_cast<CopyFromCallback*>(ctx->copy_cb);
 
-  if (pool.info.ec_pool()) {
+  if (pool.info.require_rollback()) {
     if (obs.exists) {
       if (ctx->mod_desc.rmobject(ctx->at_version.version)) {
        ctx->op_t->stash(obs.oi.soid, ctx->at_version.version);
@@ -6251,7 +6251,7 @@ void ReplicatedPG::issue_repop(RepGather *repop, utime_t now)
 
   repop->ctx->apply_pending_attrs();
 
-  if (pool.info.ec_pool()) {
+  if (pool.info.require_rollback()) {
     for (vector<pg_log_entry_t>::iterator i = repop->ctx->log.begin();
         i != repop->ctx->log.end();
         ++i) {
@@ -6554,7 +6554,7 @@ void ReplicatedPG::handle_watch_timeout(WatchRef watch)
   ::encode(obc->obs.oi, bl);
   setattr_maybe_cache(obc, repop->ctx, t, OI_ATTR, bl);
 
-  if (pool.info.ec_pool()) {
+  if (pool.info.require_rollback()) {
     map<string, boost::optional<bufferlist> > to_set;
     to_set[OI_ATTR] = bl;
     ctx->log.back().mod_desc.setattrs(to_set);
@@ -6637,7 +6637,7 @@ ObjectContextRef ReplicatedPG::get_object_context(const hobject_t& soid,
 
     populate_obc_watchers(obc);
 
-    if (pool.info.ec_pool()) {
+    if (pool.info.require_rollback()) {
       if (attrs) {
        for (map<string, bufferptr>::iterator i = attrs->begin();
             i != attrs->end();
@@ -10103,7 +10103,7 @@ void ReplicatedPG::hit_set_persist()
                     0,
                     osd_reqid_t(),
                     ctx->mtime));
-    if (pool.info.ec_pool()) {
+    if (pool.info.require_rollback()) {
       if (ctx->log.back().mod_desc.rmobject(ctx->at_version.version)) {
        ctx->op_t->stash(old_obj, ctx->at_version.version);
       } else {
@@ -10163,7 +10163,7 @@ void ReplicatedPG::hit_set_persist()
       osd_reqid_t(),
       ctx->mtime)
     );
-  if (pool.info.ec_pool()) {
+  if (pool.info.require_rollback()) {
     ctx->log.back().mod_desc.create();
   } else {
     ctx->log.back().mod_desc.mark_unrollbackable();
@@ -10192,7 +10192,7 @@ void ReplicatedPG::hit_set_trim(RepGather *repop, unsigned max)
                       0,
                       osd_reqid_t(),
                       repop->ctx->mtime));
-    if (pool.info.ec_pool()) {
+    if (pool.info.require_rollback()) {
       if (repop->ctx->log.back().mod_desc.rmobject(
          repop->ctx->at_version.version)) {
        repop->ctx->op_t->stash(oid, repop->ctx->at_version.version);
@@ -11037,7 +11037,7 @@ void ReplicatedPG::setattr_maybe_cache(
   const string &key,
   bufferlist &val)
 {
-  if (pool.info.ec_pool()) {
+  if (pool.info.require_rollback()) {
     op->pending_attrs[obc][key] = val;
   }
   t->setattr(obc->obs.oi.soid, key, val);
@@ -11049,7 +11049,7 @@ void ReplicatedPG::rmattr_maybe_cache(
   PGBackend::PGTransaction *t,
   const string &key)
 {
-  if (pool.info.ec_pool()) {
+  if (pool.info.require_rollback()) {
     op->pending_attrs[obc][key] = boost::optional<bufferlist>();
   }
   t->rmattr(obc->obs.oi.soid, key);
@@ -11060,7 +11060,7 @@ int ReplicatedPG::getattr_maybe_cache(
   const string &key,
   bufferlist *val)
 {
-  if (pool.info.ec_pool()) {
+  if (pool.info.require_rollback()) {
     map<string, bufferlist>::iterator i = obc->attr_cache.find(key);
     if (i != obc->attr_cache.end()) {
       if (val)
@@ -11077,7 +11077,7 @@ int ReplicatedPG::getattrs_maybe_cache(
   ObjectContextRef obc,
   map<string, bufferlist> *out)
 {
-  if (pool.info.ec_pool()) {
+  if (pool.info.require_rollback()) {
     if (out)
       *out = obc->attr_cache;
     return 0;
index 185d4368e4ab4532191bb9ceae8ee0508191d279..4a958092f8dc4a1e57532ece8c79317d4593aaf5 100644 (file)
@@ -871,7 +871,10 @@ public:
 
   /// This method will later return true for ec pools as well
   bool ec_pool() const {
-    return flags & FLAG_DEBUG_FAKE_EC_POOL;
+    return type == TYPE_ERASURE;
+  }
+  bool require_rollback() const {
+    return ec_pool() || flags & FLAG_DEBUG_FAKE_EC_POOL;
   }
 
   unsigned get_type() const { return type; }