From d16f00c9b0dca1087e1adeca7216caed339a924e Mon Sep 17 00:00:00 2001 From: Neha Ojha Date: Tue, 16 Jan 2018 10:09:16 -0800 Subject: [PATCH] PG: update missing_loc for async_recovery_targets Signed-off-by: Neha Ojha --- src/osd/ECBackend.cc | 1 - src/osd/PrimaryLogPG.cc | 37 ++++++++++++++++++++++++++++--------- 2 files changed, 28 insertions(+), 10 deletions(-) diff --git a/src/osd/ECBackend.cc b/src/osd/ECBackend.cc index b679efe6b4b36..f78e0a12a72df 100644 --- a/src/osd/ECBackend.cc +++ b/src/osd/ECBackend.cc @@ -883,7 +883,6 @@ void ECBackend::handle_sub_write( if (msg) msg->mark_started(); trace.event("handle_sub_write"); - assert(!get_parent()->get_log().get_missing().is_missing(op.soid)); if (!get_parent()->pgb_is_primary()) get_parent()->update_stats(op.stats); ObjectStore::Transaction localt; diff --git a/src/osd/PrimaryLogPG.cc b/src/osd/PrimaryLogPG.cc index 14a92f28fbfb5..640cd6b7b3ec7 100644 --- a/src/osd/PrimaryLogPG.cc +++ b/src/osd/PrimaryLogPG.cc @@ -10065,6 +10065,34 @@ void PrimaryLogPG::issue_repop(RepGather *repop, OpContext *ctx) for (auto &&entry: ctx->log) { projected_log.add(entry); } + + for (set::iterator i = async_recovery_targets.begin(); + i != async_recovery_targets.end(); + ++i) { + if (*i == get_primary() || !peer_missing[*i].is_missing(soid)) continue; + for (auto &&entry: ctx->log) { + peer_missing[*i].add_next_event(entry); + } + } + + for (set::const_iterator i = acting_recovery_backfill.begin(); + i != acting_recovery_backfill.end(); + ++i) { + pg_shard_t peer(*i); + if (peer == pg_whoami) continue; + if (async_recovery_targets.count(peer) && peer_missing[peer].is_missing(soid)) { + missing_loc.add_missing(soid, ctx->at_version, eversion_t()); + } + } + + for (set::const_iterator i = actingset.begin(); + i != actingset.end(); + ++i) { + pg_shard_t peer(*i); + if (!peer_missing[peer].is_missing(soid)) + missing_loc.add_location(soid, peer); + } + pgbackend->submit_transaction( soid, ctx->delta_stats, @@ -10078,15 +10106,6 @@ void PrimaryLogPG::issue_repop(RepGather *repop, OpContext *ctx) repop->rep_tid, ctx->reqid, ctx->op); - - for (set::iterator i = async_recovery_targets.begin(); - i != async_recovery_targets.end(); - ++i) { - if (*i == get_primary() || !peer_missing[*i].is_missing(soid)) continue; - for (auto &&entry: ctx->log) { - peer_missing[*i].add_next_event(entry); - } - } } PrimaryLogPG::RepGather *PrimaryLogPG::new_repop( -- 2.39.5