f->dump_int("recovering_objects_per_sec", objps);
f->dump_int("recovering_bytes_per_sec", bps);
f->dump_int("recovering_keys_per_sec", kps);
+ f->dump_int("num_objects_recovered", pos_delta.stats.sum.num_objects_recovered);
+ f->dump_int("num_bytes_recovered", pos_delta.stats.sum.num_bytes_recovered);
+ f->dump_int("num_keys_recovered", pos_delta.stats.sum.num_keys_recovered);
} else {
*out << pretty_si_t(bps) << "B/s";
if (pos_delta.stats.sum.num_keys_recovered)
if ((get_parent()->pgb_is_primary())) {
assert(recovery_ops.count(op.soid));
assert(recovery_ops[op.soid].obc);
- object_stat_sum_t stats;
- stats.num_objects_recovered = 1;
- stats.num_bytes_recovered = recovery_ops[op.soid].obc->obs.oi.size;
get_parent()->on_local_recover(
op.soid,
- stats,
op.recovery_info,
recovery_ops[op.soid].obc,
m->t);
} else {
get_parent()->on_local_recover(
op.soid,
- object_stat_sum_t(),
op.recovery_info,
ObjectContextRef(),
m->t);
object_stat_sum_t());
}
}
- get_parent()->on_global_recover(op.hoid);
+ object_stat_sum_t stat;
+ stat.num_bytes_recovered = op.recovery_info.size;
+ stat.num_keys_recovered = 0; // ??? op ... omap_entries.size(); ?
+ stat.num_objects_recovered = 1;
+ get_parent()->on_global_recover(op.hoid, stat);
dout(10) << __func__ << ": WRITING return " << op << dendl;
recovery_ops.erase(op.hoid);
return;
*/
virtual void on_local_recover(
const hobject_t &oid,
- const object_stat_sum_t &stat_diff,
const ObjectRecoveryInfo &recovery_info,
ObjectContextRef obc,
ObjectStore::Transaction *t
* Called when transaction recovering oid is durable and
* applied on all replicas
*/
- virtual void on_global_recover(const hobject_t &oid) = 0;
+ virtual void on_global_recover(
+ const hobject_t &oid,
+ const object_stat_sum_t &stat_diff
+ ) = 0;
/**
* Called when peer is recovered
assert(j != bc->pulling.end());
if (!bc->start_pushes(*i, j->second.obc, h)) {
bc->get_parent()->on_global_recover(
- *i);
+ *i, j->second.stat);
}
bc->pulling.erase(*i);
handle.reset_tp_timeout();
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;
pop.omap_entries,
t);
- pi.stat.num_keys_recovered += pop.omap_entries.size();
-
if (complete) {
to_continue->push_back(hoid);
- pi.stat.num_objects_recovered++;
get_parent()->on_local_recover(
- hoid, pi.stat, pi.recovery_info, pi.obc, t);
+ hoid, pi.recovery_info, pi.obc, t);
pull_from_peer[from].erase(hoid);
if (pull_from_peer[from].empty())
pull_from_peer.erase(from);
if (complete)
get_parent()->on_local_recover(
pop.recovery_info.soid,
- object_stat_sum_t(),
pop.recovery_info,
ObjectContextRef(), // ok, is replica
t);
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;
+
pushing[soid].erase(peer);
pi = NULL;
if (pushing[soid].empty()) {
- get_parent()->on_global_recover(soid);
+ get_parent()->on_global_recover(soid, stat);
pushing.erase(soid);
} else {
dout(10) << "pushed " << soid << ", still waiting for push ack from "
void ReplicatedPG::on_local_recover(
const hobject_t &hoid,
- const object_stat_sum_t &stat_diff,
const ObjectRecoveryInfo &_recovery_info,
ObjectContextRef obc,
ObjectStore::Transaction *t
recover_got(recovery_info.soid, recovery_info.version);
if (is_primary()) {
- info.stats.stats.sum.add(stat_diff);
-
assert(obc);
obc->obs.exists = true;
obc->ondisk_write_lock();
}
void ReplicatedPG::on_global_recover(
- const hobject_t &soid)
+ const hobject_t &soid,
+ const object_stat_sum_t &stat_diff)
{
+ info.stats.stats.sum.add(stat_diff);
missing_loc.recovered(soid);
publish_stats_to_osd();
dout(10) << "pushed " << soid << " to all replicas" << dendl;
/// Listener methods
void on_local_recover(
const hobject_t &oid,
- const object_stat_sum_t &stat_diff,
const ObjectRecoveryInfo &recovery_info,
ObjectContextRef obc,
ObjectStore::Transaction *t
pg_shard_t peer,
const hobject_t oid);
void on_global_recover(
- const hobject_t &oid);
+ const hobject_t &oid,
+ const object_stat_sum_t &stat_diff);
void failed_push(pg_shard_t from, const hobject_t &soid);
void cancel_pull(const hobject_t &soid);