]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
ReplicatedBackend: handle stats properly
authorSamuel Just <sam.just@inktank.com>
Mon, 9 Sep 2013 21:31:13 +0000 (14:31 -0700)
committerSamuel Just <sam.just@inktank.com>
Thu, 26 Sep 2013 18:24:27 +0000 (11:24 -0700)
Signed-off-by: Samuel Just <sam.just@inktank.com>
src/osd/PGBackend.h
src/osd/ReplicatedBackend.h
src/osd/ReplicatedPG.cc
src/osd/ReplicatedPG.h

index 43283baa7601b723d6e9aa7e13e21332d24d298b..e3cc05bf345630b57ab18dafc935423447bfe0a8 100644 (file)
@@ -69,7 +69,8 @@
      virtual void on_peer_recover(
        int peer,
        const hobject_t &oid,
-       const ObjectRecoveryInfo &recovery_info
+       const ObjectRecoveryInfo &recovery_info,
+       const object_stat_sum_t &stat
        ) = 0;
 
      virtual void begin_peer_recover(
index dca081b7f44f26b74794c55a37bf02121ddc2345..e52c65fcbd09aac2196087236c221e5a014949b5 100644 (file)
@@ -149,6 +149,7 @@ private:
     ObjectRecoveryProgress recovery_progress;
     ObjectRecoveryInfo recovery_info;
     ObjectContextRef obc;
+    object_stat_sum_t stat;
 
     void dump(Formatter *f) const {
       {
@@ -171,6 +172,7 @@ private:
     ObjectRecoveryInfo recovery_info;
     ObjectContextRef head_ctx;
     ObjectContextRef obc;
+    object_stat_sum_t stat;
 
     void dump(Formatter *f) const {
       {
@@ -247,7 +249,8 @@ private:
   int build_push_op(const ObjectRecoveryInfo &recovery_info,
                    const ObjectRecoveryProgress &progress,
                    ObjectRecoveryProgress *out_progress,
-                   PushOp *out_op);
+                   PushOp *out_op,
+                   object_stat_sum_t *stat = 0);
   void submit_push_data(ObjectRecoveryInfo &recovery_info,
                        bool first,
                        bool complete,
@@ -269,7 +272,7 @@ private:
     const hobject_t& soid,
     ObjectContextRef headctx,
     RPGHandle *h);
-  void start_pushes(
+  int start_pushes(
     const hobject_t &soid,
     ObjectContextRef obj,
     RPGHandle *h);
index 272902ae00ea2a16eb65c85a5822cbba5d6fb5be..ba42805638cfd0514d29ea40e91724d2e4e159d5 100644 (file)
@@ -217,8 +217,11 @@ void ReplicatedPG::on_global_recover(
 void ReplicatedPG::on_peer_recover(
   int peer,
   const hobject_t &soid,
-  const ObjectRecoveryInfo &recovery_info)
+  const ObjectRecoveryInfo &recovery_info,
+  const object_stat_sum_t &stat)
 {
+  info.stats.stats.sum.add(stat);
+  publish_stats_to_osd();
   // done!
   if (peer == backfill_target && backfills_in_flight.count(soid))
     backfills_in_flight.erase(soid);
@@ -6146,7 +6149,8 @@ void ReplicatedBackend::prep_push(
   build_push_op(pi.recovery_info,
                pi.recovery_progress,
                &new_progress,
-               pop);
+               pop,
+               &(pi.stat));
   pi.recovery_progress = new_progress;
 }
 
@@ -6327,12 +6331,12 @@ bool ReplicatedBackend::handle_pull_response(
   data_included = usable_intervals;
   data.claim(usable_data);
 
-  // TODOSAM: add into the stats passed into on_local_recover
-  //info.stats.stats.sum.num_bytes_recovered += data.length();
 
   bool first = pi.recovery_progress.first;
   pi.recovery_progress = pop.after_progress;
 
+  pi.stat.num_bytes_recovered += data.length();
+
   dout(10) << "new recovery_info " << pi.recovery_info
           << ", new progress " << pi.recovery_progress
           << dendl;
@@ -6352,16 +6356,14 @@ bool ReplicatedBackend::handle_pull_response(
                   pop.omap_entries,
                   t);
 
-  // TODOSAM: add into the stats passed into on_local_recover
-  //info.stats.stats.sum.num_keys_recovered += pop.omap_entries.size();
+  pi.stat.num_keys_recovered += pop.omap_entries.size();
 
   if (complete) {
     pulling.erase(hoid);
     pull_from_peer[from].erase(hoid);
-    // TODOSAM: add into the stats passed into on_local_recover
-    //info.stats.stats.sum.num_objects_recovered++;
+    pi.stat.num_objects_recovered++;
     get_parent()->on_local_recover(
-      hoid, object_stat_sum_t(), pi.recovery_info, pi.obc, t);
+      hoid, pi.stat, pi.recovery_info, pi.obc, t);
     return false;
   } else {
     response->soid = pop.soid;
@@ -6499,7 +6501,8 @@ void ReplicatedBackend::send_pulls(int prio, map<int, vector<PullOp> > &pulls)
 int ReplicatedBackend::build_push_op(const ObjectRecoveryInfo &recovery_info,
                                     const ObjectRecoveryProgress &progress,
                                     ObjectRecoveryProgress *out_progress,
-                                    PushOp *out_op)
+                                    PushOp *out_op,
+                                    object_stat_sum_t *stat)
 {
   ObjectRecoveryProgress _new_progress;
   if (!out_progress)
@@ -6586,13 +6589,14 @@ int ReplicatedBackend::build_push_op(const ObjectRecoveryInfo &recovery_info,
 
   if (new_progress.is_complete(recovery_info)) {
     new_progress.data_complete = true;
-    // TODOSAM: fix
-    //info.stats.stats.sum.num_objects_recovered++;
+    if (stat)
+      stat->num_objects_recovered++;
   }
 
-  // TODOSAM: fix
-  //info.stats.stats.sum.num_keys_recovered += out_op->omap_entries.size();
-  //info.stats.stats.sum.num_bytes_recovered += out_op->data.length();
+  if (stat) {
+    stat->num_keys_recovered += out_op->omap_entries.size();
+    stat->num_bytes_recovered += out_op->data.length();
+  }
 
   osd->logger->inc(l_osd_push);
   osd->logger->inc(l_osd_push_outb, out_op->data.length());
@@ -6678,12 +6682,15 @@ bool ReplicatedBackend::handle_push_reply(int peer, PushReplyOp &op, PushOp *rep
       ObjectRecoveryProgress new_progress;
       build_push_op(
        pi->recovery_info,
-       pi->recovery_progress, &new_progress, reply);
+       pi->recovery_progress, &new_progress, reply,
+       &(pi->stat));
       pi->recovery_progress = new_progress;
       return true;
     } else {
       // done!
-      get_parent()->on_peer_recover(peer, soid, pi->recovery_info);
+      get_parent()->on_peer_recover(
+       peer, soid, pi->recovery_info,
+       pi->stat);
       
       pushing[soid].erase(peer);
       pi = NULL;
@@ -7774,11 +7781,12 @@ int ReplicatedPG::prep_object_replica_pushes(
   return 1;
 }
 
-void ReplicatedBackend::start_pushes(
+int ReplicatedBackend::start_pushes(
   const hobject_t &soid,
   ObjectContextRef obc,
   RPGHandle *h)
 {
+  int pushes = 0;
   // who needs it?  
   for (unsigned i=1; i<get_parent()->get_acting().size(); i++) {
     int peer = get_parent()->get_acting()[i];
@@ -7786,14 +7794,14 @@ void ReplicatedBackend::start_pushes(
       get_parent()->get_peer_missing().find(peer);
     assert(j != get_parent()->get_peer_missing().end());
     if (j->second.is_missing(soid)) {
+      ++pushes;
       h->pushes[peer].push_back(PushOp());
       prep_push_to_replica(obc, soid, peer,
                           &(h->pushes[peer].back())
        );
     }
   }
-  
-  dout(10) << " ondisk_read_unlock on " << soid << dendl;
+  return pushes;
 }
 
 int ReplicatedPG::recover_replicas(int max, ThreadPool::TPHandle &handle)
index 8b2be5ecdb8d388a7680bc91380b70b4436892bd..2908e4291b4a01a637e181715180905c5fe4e02b 100644 (file)
@@ -141,7 +141,9 @@ public:
   void on_peer_recover(
     int peer,
     const hobject_t &oid,
-    const ObjectRecoveryInfo &recovery_info);
+    const ObjectRecoveryInfo &recovery_info,
+    const object_stat_sum_t &stat
+    );
   void begin_peer_recover(
     int peer,
     const hobject_t oid);