]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: fix stat sum update of recovery pushing 13328/head
authorZhiqiang Wang <zhiqiang@xsky.com>
Wed, 8 Feb 2017 07:32:32 +0000 (15:32 +0800)
committerZhiqiang Wang <zhiqiang@xsky.com>
Thu, 9 Feb 2017 02:58:26 +0000 (10:58 +0800)
Use the stat field of PushInfo to do the stat update, which is
more accurate, especially in the case of sparse file. Also,
remove the stat sum update in on_peer_recover, which is done in
on_global_recover.

Signed-off-by: Zhiqiang Wang <zhiqiang@xsky.com>
src/osd/ECBackend.cc
src/osd/PGBackend.h
src/osd/PrimaryLogPG.cc
src/osd/PrimaryLogPG.h
src/osd/ReplicatedBackend.cc

index ddf238c83e02342c1dd11e8e9e11f0b689824c16..0f8b0d027a4900861cc458e3405b7b33e3ab5385 100644 (file)
@@ -635,8 +635,7 @@ void ECBackend::continue_recovery_op(
              get_parent()->on_peer_recover(
                *i,
                op.hoid,
-               op.recovery_info,
-               object_stat_sum_t());
+               op.recovery_info);
            }
          }
          object_stat_sum_t stat;
index b932ad31595e8c7c1ddba897783328e1f2be0602..b8b7b431ab155d0d2068dd728278606415b7cb77 100644 (file)
@@ -96,8 +96,7 @@ typedef ceph::shared_ptr<const OSDMap> OSDMapRef;
      virtual void on_peer_recover(
        pg_shard_t peer,
        const hobject_t &oid,
-       const ObjectRecoveryInfo &recovery_info,
-       const object_stat_sum_t &stat
+       const ObjectRecoveryInfo &recovery_info
        ) = 0;
 
      virtual void begin_peer_recover(
index 2c3e9061a44915e23d0b09fa76cb3a0eb50bba26..c5448720d0b28af4e97b92174e1d3a921f320129 100644 (file)
@@ -466,10 +466,8 @@ void PrimaryLogPG::on_global_recover(
 void PrimaryLogPG::on_peer_recover(
   pg_shard_t peer,
   const hobject_t &soid,
-  const ObjectRecoveryInfo &recovery_info,
-  const object_stat_sum_t &stat)
+  const ObjectRecoveryInfo &recovery_info)
 {
-  info.stats.stats.sum.add(stat);
   publish_stats_to_osd();
   // done!
   peer_missing[peer].got(soid, recovery_info.version);
index 8e3f19c64105ec6ed6e2f8d09d9b7b168056a0aa..beea586238a51889dc95c2a7ed688a8e7fc2f9ad 100644 (file)
@@ -257,8 +257,7 @@ public:
   void on_peer_recover(
     pg_shard_t peer,
     const hobject_t &oid,
-    const ObjectRecoveryInfo &recovery_info,
-    const object_stat_sum_t &stat
+    const ObjectRecoveryInfo &recovery_info
     ) override;
   void begin_peer_recover(
     pg_shard_t peer,
index 6af8b333d65ac17b91ee2c7187fb138444af10e7..d02455e2877ff363292e5bcb6c3aa139cef4efdf 100644 (file)
@@ -2213,19 +2213,13 @@ bool ReplicatedBackend::handle_push_reply(pg_shard_t peer, PushReplyOp &op, Push
     } else {
       // done!
       get_parent()->on_peer_recover(
-       peer, soid, pi->recovery_info,
-       pi->stat);
-
-      object_stat_sum_t stat;
-      stat.num_bytes_recovered = pi->recovery_info.size;
-      stat.num_keys_recovered = reply->omap_entries.size();
-      stat.num_objects_recovered = 1;
+       peer, soid, pi->recovery_info);
 
       get_parent()->release_locks(pi->lock_manager);
+      object_stat_sum_t stat = pi->stat;
       pushing[soid].erase(peer);
       pi = NULL;
 
-
       if (pushing[soid].empty()) {
        get_parent()->on_global_recover(soid, stat);
        pushing.erase(soid);