]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: track open repops in logger
authorSage Weil <sage@newdream.net>
Mon, 28 Jun 2010 20:19:35 +0000 (13:19 -0700)
committerSage Weil <sage@newdream.net>
Tue, 29 Jun 2010 21:21:06 +0000 (14:21 -0700)
Signed-off-by: Sage Weil <sage@newdream.net>
src/osd/OSD.cc
src/osd/OSD.h
src/osd/ReplicatedPG.cc
src/osd/ReplicatedPG.h

index cf5ab41ed8aba3460d5fae8c5a0911fa2c6b9315..7384006037de9b0b895a4b0cb28a2576c1b8508e 100644 (file)
@@ -541,6 +541,7 @@ void OSD::reopen_logger()
     didit = true;
     osd_logtype.add_set(l_osd_opq, "opq");
     osd_logtype.add_inc(l_osd_op, "op");
+    osd_logtype.add_set(l_osd_opwip, "opwip");
     osd_logtype.add_inc(l_osd_c_rd, "c_rd");
     osd_logtype.add_inc(l_osd_c_rdb, "c_rdb");
     osd_logtype.add_inc(l_osd_c_wr, "c_wr");
index de164b2061b573866c5b74da8e5838163b7b268b..d6c148e3168ddd39f922ee9277cd711b9bb2718d 100644 (file)
@@ -49,6 +49,7 @@ enum {
   l_osd_first = 10000,
   l_osd_opq,
   l_osd_op,
+  l_osd_opwip,
   l_osd_c_rd,
   l_osd_c_rdb,
   l_osd_c_wr,
@@ -108,7 +109,6 @@ protected:
 
   LogClient   logclient;
 
-
   int whoami;
   const char *dev_path, *journal_path;
 
index 1d98ecc1efe13bbd4de5bf3d5f21fe3cbc9ac32d..bef5c6053f2d385215f3376f9147f8a422bc3d8f 100644 (file)
@@ -2248,8 +2248,7 @@ void ReplicatedPG::eval_repop(RepGather *repop)
       assert(repop_queue.front() == repop);
     }
     repop_queue.pop_front();
-    repop_map.erase(repop->rep_tid);
-    repop->put();
+    remove_repop(repop);
   }
 }
 
@@ -2346,9 +2345,20 @@ ReplicatedPG::RepGather *ReplicatedPG::new_repop(OpContext *ctx, ObjectContext *
   repop_map[repop->rep_tid] = repop;
   repop->get();
 
+  if (osd->logger)
+    osd->logger->set(l_osd_opwip, repop_map.size());
+
   return repop;
 }
  
+void ReplicatedPG::remove_repop(RepGather *repop)
+{
+  repop_map.erase(repop->rep_tid);
+  repop->put();
+
+  if (osd->logger)
+    osd->logger->set(l_osd_opwip, repop_map.size());
+}
 
 void ReplicatedPG::repop_ack(RepGather *repop, int result, int ack_type,
                             int fromosd, eversion_t peer_lcod)
@@ -3579,7 +3589,6 @@ void ReplicatedPG::apply_and_flush_repops(bool requeue)
     if (!repop->applied && !repop->applying)
       apply_repop(repop);
     repop->aborted = true;
-    repop_map.erase(repop->rep_tid);
 
     if (requeue && repop->ctx->op) {
       dout(10) << " requeuing " << *repop->ctx->op << dendl;
@@ -3587,7 +3596,7 @@ void ReplicatedPG::apply_and_flush_repops(bool requeue)
       repop->ctx->op = 0;
     }
 
-    repop->put();
+    remove_repop(repop);
   }
 
   if (requeue)
index c2d0855d9ff5b180a98b028fa420191bf1915b0c..fc1cb1655e96db49a4a1e364a4cf106a74905009 100644 (file)
@@ -410,6 +410,7 @@ protected:
   void issue_repop(RepGather *repop, utime_t now,
                   eversion_t old_last_update, bool old_exists, uint64_t old_size, eversion_t old_version);
   RepGather *new_repop(OpContext *ctx, ObjectContext *obc, bool noop, tid_t rep_tid);
+  void remove_repop(RepGather *repop);
   void repop_ack(RepGather *repop,
                  int result, int ack_type,
                  int fromosd, eversion_t pg_complete_thru=eversion_t(0,0));