]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: skip promotion when proxying a delete op
authorZhiqiang Wang <zhiqiang.wang@intel.com>
Wed, 27 May 2015 13:54:35 +0000 (21:54 +0800)
committerSamuel Just <sjust@redhat.com>
Tue, 18 Aug 2015 18:25:23 +0000 (11:25 -0700)
When the object is deleted, there is no need to promote it.

Signed-off-by: Zhiqiang Wang <zhiqiang.wang@intel.com>
src/osd/OSD.cc
src/osd/OpRequest.cc
src/osd/OpRequest.h
src/osd/ReplicatedPG.cc
src/osd/osd_types.h

index f10ead5c23f5eadefecc96218f3a5a345e0845f6..00df5129179d3fcc08d3fe1c6779f2d8fb0327bf 100644 (file)
@@ -8642,6 +8642,10 @@ int OSD::init_op_flags(OpRequestRef& op)
          iter->op.flags == CEPH_OSD_OP_FLAG_FAILOK) {
        op->set_skip_handle_cache();
       }
+      // skip promotion when proxying a delete op
+      if (m->ops.size() == 1) {
+       op->set_skip_promote();
+      }
       break;
 
     case CEPH_OSD_OP_CACHE_TRY_FLUSH:
index fb6007c0fa7c4152286f3dc211fc3f7ba2a8009b..7104a31566376d33e78b5cd34cf416a1b636b8fc 100644 (file)
@@ -104,6 +104,9 @@ bool OpRequest::need_promote() {
 bool OpRequest::need_skip_handle_cache() {
   return check_rmw(CEPH_OSD_RMW_FLAG_SKIP_HANDLE_CACHE);
 }
+bool OpRequest::need_skip_promote() {
+  return check_rmw(CEPH_OSD_RMW_FLAG_SKIP_PROMOTE);
+}
 
 void OpRequest::set_rmw_flags(int flags) {
 #ifdef WITH_LTTNG
@@ -123,6 +126,7 @@ void OpRequest::set_pg_op() { set_rmw_flags(CEPH_OSD_RMW_FLAG_PGOP); }
 void OpRequest::set_cache() { set_rmw_flags(CEPH_OSD_RMW_FLAG_CACHE); }
 void OpRequest::set_promote() { set_rmw_flags(CEPH_OSD_RMW_FLAG_FORCE_PROMOTE); }
 void OpRequest::set_skip_handle_cache() { set_rmw_flags(CEPH_OSD_RMW_FLAG_SKIP_HANDLE_CACHE); }
+void OpRequest::set_skip_promote() { set_rmw_flags(CEPH_OSD_RMW_FLAG_SKIP_PROMOTE); }
 
 void OpRequest::mark_flag_point(uint8_t flag, const string& s) {
 #ifdef WITH_LTTNG
index 0a79a7de536cc912101c29f5d8c91d362e4a776d..c8649b8500a3e617ef0e5e77aa5385e14f613f20 100644 (file)
@@ -67,6 +67,7 @@ struct OpRequest : public TrackedOp {
   bool need_class_write_cap();
   bool need_promote();
   bool need_skip_handle_cache();
+  bool need_skip_promote();
   void set_read();
   void set_write();
   void set_cache();
@@ -75,6 +76,7 @@ struct OpRequest : public TrackedOp {
   void set_pg_op();
   void set_promote();
   void set_skip_handle_cache();
+  void set_skip_promote();
 
   void _dump(utime_t now, Formatter *f) const;
 
index 79aedf20bf6330e123b9674c5eb4a9275cb86977..aa87d85a9886e0d044fba33a2ad4e72294e9e1a2 100644 (file)
@@ -1863,9 +1863,11 @@ bool ReplicatedPG::maybe_handle_cache(OpRequestRef op,
       }
 
       // Promote too?
-      maybe_promote(obc, missing_oid, oloc, in_hit_set,
-                   pool.info.min_write_recency_for_promote,
-                   OpRequestRef());
+      if (!op->need_skip_promote()) {
+        maybe_promote(obc, missing_oid, oloc, in_hit_set,
+                     pool.info.min_write_recency_for_promote,
+                     OpRequestRef());
+      }
     } else {
       if (can_proxy_read)
         do_proxy_read(op);
index 94de7abdb2ef16b07bfc9f0e9da09829ce81c0ad..73df5bb7ccf3386516d2ab00a962c74affe2845a 100644 (file)
@@ -261,6 +261,7 @@ enum {
   CEPH_OSD_RMW_FLAG_CACHE       = (1 << 6),
   CEPH_OSD_RMW_FLAG_FORCE_PROMOTE   = (1 << 7),
   CEPH_OSD_RMW_FLAG_SKIP_HANDLE_CACHE = (1 << 8),
+  CEPH_OSD_RMW_FLAG_SKIP_PROMOTE      = (1 << 9),
 };