From: Zhiqiang Wang Date: Wed, 8 Feb 2017 07:32:32 +0000 (+0800) Subject: osd: fix stat sum update of recovery pushing X-Git-Tag: v12.0.1~406^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=2e8095052145eb178209002510db9544a97d3798;p=ceph.git osd: fix stat sum update of recovery pushing 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 --- diff --git a/src/osd/ECBackend.cc b/src/osd/ECBackend.cc index ddf238c83e02..0f8b0d027a49 100644 --- a/src/osd/ECBackend.cc +++ b/src/osd/ECBackend.cc @@ -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; diff --git a/src/osd/PGBackend.h b/src/osd/PGBackend.h index b932ad31595e..b8b7b431ab15 100644 --- a/src/osd/PGBackend.h +++ b/src/osd/PGBackend.h @@ -96,8 +96,7 @@ typedef ceph::shared_ptr 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( diff --git a/src/osd/PrimaryLogPG.cc b/src/osd/PrimaryLogPG.cc index 2c3e9061a449..c5448720d0b2 100644 --- a/src/osd/PrimaryLogPG.cc +++ b/src/osd/PrimaryLogPG.cc @@ -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); diff --git a/src/osd/PrimaryLogPG.h b/src/osd/PrimaryLogPG.h index 8e3f19c64105..beea586238a5 100644 --- a/src/osd/PrimaryLogPG.h +++ b/src/osd/PrimaryLogPG.h @@ -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, diff --git a/src/osd/ReplicatedBackend.cc b/src/osd/ReplicatedBackend.cc index 6af8b333d65a..d02455e2877f 100644 --- a/src/osd/ReplicatedBackend.cc +++ b/src/osd/ReplicatedBackend.cc @@ -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);