From 2e8095052145eb178209002510db9544a97d3798 Mon Sep 17 00:00:00 2001 From: Zhiqiang Wang Date: Wed, 8 Feb 2017 15:32:32 +0800 Subject: [PATCH] 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 --- src/osd/ECBackend.cc | 3 +-- src/osd/PGBackend.h | 3 +-- src/osd/PrimaryLogPG.cc | 4 +--- src/osd/PrimaryLogPG.h | 3 +-- src/osd/ReplicatedBackend.cc | 10 ++-------- 5 files changed, 6 insertions(+), 17 deletions(-) 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); -- 2.47.3