diff options
author | Samuel Just <sam.just@inktank.com> | 2013-09-09 14:31:13 -0700 |
---|---|---|
committer | Samuel Just <sam.just@inktank.com> | 2013-09-19 12:50:46 -0700 |
commit | 2beaa6421633fc5770bcebec66eb73c0e8a099fa (patch) | |
tree | 8a8be922fb0eda27703362f3c528d7447cbecdb7 | |
parent | d7df51d58abaa4e27a529a2be5fc6ec43b755b83 (diff) | |
download | ceph-2beaa6421633fc5770bcebec66eb73c0e8a099fa.tar.gz |
ReplicatedBackend: handle stats properly
Signed-off-by: Samuel Just <sam.just@inktank.com>
-rw-r--r-- | src/osd/PGBackend.h | 3 | ||||
-rw-r--r-- | src/osd/ReplicatedBackend.h | 7 | ||||
-rw-r--r-- | src/osd/ReplicatedPG.cc | 48 | ||||
-rw-r--r-- | src/osd/ReplicatedPG.h | 4 |
4 files changed, 38 insertions, 24 deletions
diff --git a/src/osd/PGBackend.h b/src/osd/PGBackend.h index 43283baa760..e3cc05bf345 100644 --- a/src/osd/PGBackend.h +++ b/src/osd/PGBackend.h @@ -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( diff --git a/src/osd/ReplicatedBackend.h b/src/osd/ReplicatedBackend.h index dca081b7f44..e52c65fcbd0 100644 --- a/src/osd/ReplicatedBackend.h +++ b/src/osd/ReplicatedBackend.h @@ -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); diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index 9e293bf2627..40800f00e38 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -216,8 +216,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); @@ -6133,7 +6136,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; } @@ -6314,12 +6318,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; @@ -6339,16 +6343,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; @@ -6486,7 +6488,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) @@ -6573,13 +6576,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()); @@ -6665,12 +6669,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; @@ -7760,11 +7767,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]; @@ -7772,14 +7780,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) diff --git a/src/osd/ReplicatedPG.h b/src/osd/ReplicatedPG.h index 28a0a8b3c2e..d976337c265 100644 --- a/src/osd/ReplicatedPG.h +++ b/src/osd/ReplicatedPG.h @@ -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); |