]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
PG: pass OpRequestRef by ref to avoid refcounting overhead
authorSomnath Roy <somnath.roy@sandisk.com>
Fri, 27 Jun 2014 20:33:35 +0000 (13:33 -0700)
committerSomnath Roy <somnath.roy@sandisk.com>
Fri, 27 Jun 2014 20:33:35 +0000 (13:33 -0700)
Signed-off-by: Somnath Roy <somnath.roy@sandisk.com>
src/osd/PG.cc
src/osd/PG.h
src/osd/ReplicatedPG.cc
src/osd/ReplicatedPG.h

index 58359622c1dc396c3b3d93993993fb27d8735f73..a26c951ac145bc771069f2d125a122f3083b3f11 100644 (file)
@@ -1651,7 +1651,7 @@ void PG::activate(ObjectStore::Transaction& t,
   }
 }
 
-bool PG::op_has_sufficient_caps(OpRequestRef op)
+bool PG::op_has_sufficient_caps(OpRequestRef& op)
 {
   // only check MOSDOp
   if (op->get_req()->get_type() != CEPH_MSG_OSD_OP)
@@ -1705,7 +1705,7 @@ void PG::take_op_map_waiters()
   }
 }
 
-void PG::queue_op(OpRequestRef op)
+void PG::queue_op(OpRequestRef& op)
 {
   Mutex::Locker l(map_lock);
   if (!waiting_for_map.empty()) {
@@ -4734,7 +4734,7 @@ ostream& operator<<(ostream& out, const PG& pg)
   return out;
 }
 
-bool PG::can_discard_op(OpRequestRef op)
+bool PG::can_discard_op(OpRequestRef& op)
 {
   MOSDOp *m = static_cast<MOSDOp*>(op->get_req());
   if (OSD::op_is_discardable(m)) {
@@ -4784,7 +4784,7 @@ bool PG::can_discard_op(OpRequestRef op)
 }
 
 template<typename T, int MSGTYPE>
-bool PG::can_discard_replica_op(OpRequestRef op)
+bool PG::can_discard_replica_op(OpRequestRef& op)
 {
   T *m = static_cast<T *>(op->get_req());
   assert(m->get_header().type == MSGTYPE);
@@ -4835,7 +4835,7 @@ bool PG::can_discard_backfill(OpRequestRef op)
 
 }
 
-bool PG::can_discard_request(OpRequestRef op)
+bool PG::can_discard_request(OpRequestRef& op)
 {
   switch (op->get_req()->get_type()) {
   case CEPH_MSG_OSD_OP:
index e67b7216d16b9ddfb7e4928035ebc6f15ced397c..0481a35ab8d69bc7af80f88b97bbaf2be8b728b0 100644 (file)
@@ -207,7 +207,7 @@ protected:
   OSDMapRef last_persisted_osdmap_ref;
   PGPool pool;
 
-  void queue_op(OpRequestRef op);
+  void queue_op(OpRequestRef& op);
   void take_op_map_waiters();
 
   void update_osdmap_ref(OSDMapRef newmap) {
@@ -2049,13 +2049,13 @@ public:
     OSDMapRef osdmap);
 
   // OpRequest queueing
-  bool can_discard_op(OpRequestRef op);
+  bool can_discard_op(OpRequestRef& op);
   bool can_discard_scan(OpRequestRef op);
   bool can_discard_backfill(OpRequestRef op);
-  bool can_discard_request(OpRequestRef op);
+  bool can_discard_request(OpRequestRef& op);
 
   template<typename T, int MSGTYPE>
-  bool can_discard_replica_op(OpRequestRef op);
+  bool can_discard_replica_op(OpRequestRef& op);
 
   static bool op_must_wait_for_map(OSDMapRef curmap, OpRequestRef op);
 
@@ -2070,7 +2070,7 @@ public:
     return e <= get_osdmap()->get_epoch();
   }
 
-  bool op_has_sufficient_caps(OpRequestRef op);
+  bool op_has_sufficient_caps(OpRequestRef& op);
 
 
   // recovery bits
@@ -2102,11 +2102,11 @@ public:
 
   // abstract bits
   virtual void do_request(
-    OpRequestRef op,
+    OpRequestRef& op,
     ThreadPool::TPHandle &handle
   ) = 0;
 
-  virtual void do_op(OpRequestRef op) = 0;
+  virtual void do_op(OpRequestRef& op) = 0;
   virtual void do_sub_op(OpRequestRef op) = 0;
   virtual void do_sub_op_reply(OpRequestRef op) = 0;
   virtual void do_scan(
index bad48726029fa8809ee26a490bf7985ecd5294b8..03e103a7f3a19d868e755a8e2f512e2d080ab733 100644 (file)
@@ -1074,7 +1074,7 @@ void ReplicatedPG::get_src_oloc(const object_t& oid, const object_locator_t& olo
 }
 
 void ReplicatedPG::do_request(
-  OpRequestRef op,
+  OpRequestRef& op,
   ThreadPool::TPHandle &handle)
 {
   if (!op_has_sufficient_caps(op)) {
@@ -1184,7 +1184,7 @@ bool ReplicatedPG::check_src_targ(const hobject_t& soid, const hobject_t& toid)
  * pg lock will be held (if multithreaded)
  * osd_lock NOT held.
  */
-void ReplicatedPG::do_op(OpRequestRef op)
+void ReplicatedPG::do_op(OpRequestRef& op)
 {
   MOSDOp *m = static_cast<MOSDOp*>(op->get_req());
   assert(m->get_header().type == CEPH_MSG_OSD_OP);
index b75e8539b9d57c1c5f1f48dd23633544cb627366..4c73a35edac275535e1c2084ecb58acded87fb8b 100644 (file)
@@ -1270,9 +1270,9 @@ public:
                 bufferlist& odata);
 
   void do_request(
-    OpRequestRef op,
+    OpRequestRef& op,
     ThreadPool::TPHandle &handle);
-  void do_op(OpRequestRef op);
+  void do_op(OpRequestRef& op);
   bool pg_op_must_wait(MOSDOp *op);
   void do_pg_op(OpRequestRef op);
   void do_sub_op(OpRequestRef op);