return true;
}
- assert(!actingbackfill.empty());
- set<pg_shard_t>::const_iterator end = actingbackfill.end();
- set<pg_shard_t>::const_iterator a = actingbackfill.begin();
+ assert(!acting_recovery_backfill.empty());
+ set<pg_shard_t>::const_iterator end = acting_recovery_backfill.end();
+ set<pg_shard_t>::const_iterator a = acting_recovery_backfill.begin();
for (; a != end; ++a) {
if (*a == get_primary()) continue;
pg_shard_t peer = *a;
return false;
}
want_acting.clear();
- actingbackfill = want_acting_backfill;
- dout(10) << "actingbackfill is " << actingbackfill << dendl;
+ acting_recovery_backfill = want_acting_backfill;
+ dout(10) << "acting_recovery_backfill is " << acting_recovery_backfill << dendl;
assert(backfill_targets.empty() || backfill_targets == want_backfill);
if (backfill_targets.empty()) {
// Caller is GetInfo
assert(ctx);
// start up replicas
- assert(!actingbackfill.empty());
- for (set<pg_shard_t>::iterator i = actingbackfill.begin();
- i != actingbackfill.end();
+ assert(!acting_recovery_backfill.empty());
+ for (set<pg_shard_t>::iterator i = acting_recovery_backfill.begin();
+ i != acting_recovery_backfill.end();
++i) {
if (*i == pg_whoami) continue;
pg_shard_t peer = *i;
// Set up missing_loc
set<pg_shard_t> complete_shards;
- for (set<pg_shard_t>::iterator i = actingbackfill.begin();
- i != actingbackfill.end();
+ for (set<pg_shard_t>::iterator i = acting_recovery_backfill.begin();
+ i != acting_recovery_backfill.end();
++i) {
dout(20) << __func__ << " setting up missing_loc from shard " << *i << " " << dendl;
if (*i == get_primary()) {
// source, this is considered safe since the PGLogs have been merged locally,
// and covers vast majority of the use cases, like one OSD/host is down for
// a while for hardware repairing
- if (complete_shards.size() + 1 == actingbackfill.size()) {
+ if (complete_shards.size() + 1 == acting_recovery_backfill.size()) {
missing_loc.add_batch_sources_info(complete_shards, ctx->handle);
} else {
missing_loc.add_source_info(pg_whoami, info, pg_log.get_missing(),
ctx->handle);
- for (set<pg_shard_t>::iterator i = actingbackfill.begin();
- i != actingbackfill.end();
+ for (set<pg_shard_t>::iterator i = acting_recovery_backfill.begin();
+ i != acting_recovery_backfill.end();
++i) {
if (*i == pg_whoami) continue;
dout(10) << __func__ << ": adding " << *i << " as a source" << dendl;
for (map<pg_shard_t, pg_missing_t>::iterator i = peer_missing.begin();
i != peer_missing.end();
++i) {
- if (is_actingbackfill(i->first))
+ if (is_acting_recovery_backfill(i->first))
continue;
assert(peer_info.count(i->first));
search_for_missing(
<< " last_interval_started " << info.history.last_interval_started
<< " last_epoch_started " << info.history.last_epoch_started
<< " same_interval_since " << info.history.same_interval_since << dendl;
- assert(!actingbackfill.empty());
- if (peer_activated.size() == actingbackfill.size())
+ assert(!acting_recovery_backfill.empty());
+ if (peer_activated.size() == acting_recovery_backfill.size())
all_activated_and_committed();
} else {
dout(10) << "_activate_committed " << epoch << " telling primary" << dendl;
{
dout(10) << "all_activated_and_committed" << dendl;
assert(is_primary());
- assert(peer_activated.size() == actingbackfill.size());
- assert(!actingbackfill.empty());
+ assert(peer_activated.size() == acting_recovery_backfill.size());
+ assert(!acting_recovery_backfill.empty());
assert(blocked_by.empty());
// Degraded?
for (set<pg_shard_t>::iterator p = stray_set.begin();
p != stray_set.end();
++p) {
- assert(!is_actingbackfill(*p));
+ assert(!is_acting_recovery_backfill(*p));
if (get_osdmap()->is_up(p->osd)) {
dout(10) << "sending PGRemove to osd." << *p << dendl;
vector<spg_t> to_remove;
if ((is_remapped() || is_undersized() || !is_clean()) && (is_peered() || is_activating())) {
dout(20) << __func__ << " actingset " << actingset << " upset "
- << upset << " actingbackfill " << actingbackfill << dendl;
+ << upset << " acting_recovery_backfill " << acting_recovery_backfill << dendl;
dout(20) << __func__ << " acting " << acting << " up " << up << dendl;
- assert(!actingbackfill.empty());
+ assert(!acting_recovery_backfill.empty());
bool estimate = false;
// Primary first
missing = pg_log.get_missing().num_missing();
- assert(actingbackfill.count(pg_whoami));
+ assert(acting_recovery_backfill.count(pg_whoami));
if (upset.count(pg_whoami)) {
missing_target_objects.insert(make_pair(missing, pg_whoami));
} else {
<< " primary objects " << num_objects
<< " missing " << missing
<< dendl;
-
}
// All other peers
dout(10) << __func__ << " to " << pg_trim_to << dendl;
if (pg_trim_to != eversion_t()) {
// inform peers to trim log
- assert(!actingbackfill.empty());
- for (set<pg_shard_t>::iterator i = actingbackfill.begin();
- i != actingbackfill.end();
+ assert(!acting_recovery_backfill.empty());
+ for (set<pg_shard_t>::iterator i = acting_recovery_backfill.begin();
+ i != acting_recovery_backfill.end();
++i) {
if (*i == pg_whoami) continue;
osd->send_message_osd_cluster(
void PG::scrub_reserve_replicas()
{
assert(backfill_targets.empty());
- for (set<pg_shard_t>::iterator i = actingbackfill.begin();
- i != actingbackfill.end();
+ for (set<pg_shard_t>::iterator i = acting_recovery_backfill.begin();
+ i != acting_recovery_backfill.end();
++i) {
if (*i == pg_whoami) continue;
dout(10) << "scrub requesting reserve from osd." << *i << dendl;
void PG::scrub_unreserve_replicas()
{
assert(backfill_targets.empty());
- for (set<pg_shard_t>::iterator i = actingbackfill.begin();
- i != actingbackfill.end();
+ for (set<pg_shard_t>::iterator i = acting_recovery_backfill.begin();
+ i != acting_recovery_backfill.end();
++i) {
if (*i == pg_whoami) continue;
dout(10) << "scrub requesting unreserve from osd." << *i << dendl;
scrubber.waiting_on_whom.insert(pg_whoami);
// request maps from replicas
- for (set<pg_shard_t>::iterator i = actingbackfill.begin();
- i != actingbackfill.end();
+ for (set<pg_shard_t>::iterator i = acting_recovery_backfill.begin();
+ i != acting_recovery_backfill.end();
++i) {
if (*i == pg_whoami) continue;
_request_scrub_map(*i, scrubber.subset_last_update,
map<pg_shard_t, ScrubMap *> maps;
maps[pg_whoami] = &scrubber.primary_scrubmap;
- for (const auto& i : actingbackfill) {
+ for (const auto& i : acting_recovery_backfill) {
if (i == pg_whoami) continue;
dout(2) << __func__ << " replica " << i << " has "
<< scrubber.received_maps[i].objects.size()
dout(10) << "share_pg_info" << dendl;
// share new pg_info_t with replicas
- assert(!actingbackfill.empty());
- for (set<pg_shard_t>::iterator i = actingbackfill.begin();
- i != actingbackfill.end();
+ assert(!acting_recovery_backfill.empty());
+ for (set<pg_shard_t>::iterator i = acting_recovery_backfill.begin();
+ i != acting_recovery_backfill.end();
++i) {
if (*i == pg_whoami) continue;
auto pg_shard = *i;
assert(is_primary());
bool rebuild_missing = append_log_entries_update_missing(entries, t, trim_to, roll_forward_to);
- for (set<pg_shard_t>::const_iterator i = actingbackfill.begin();
- i != actingbackfill.end();
+ for (set<pg_shard_t>::const_iterator i = acting_recovery_backfill.begin();
+ i != acting_recovery_backfill.end();
++i) {
pg_shard_t peer(*i);
if (peer == pg_whoami) continue;
missing_loc.rebuild(
i.soid,
pg_whoami,
- actingbackfill,
+ acting_recovery_backfill,
info,
pg_log.get_missing(),
peer_missing,
state_clear(PG_STATE_RECOVERING);
peer_purged.clear();
- actingbackfill.clear();
+ acting_recovery_backfill.clear();
scrub_queued = false;
// reset primary state?
// Make sure all nodes that part of the recovery aren't full
if (!pg->cct->_conf->osd_debug_skip_full_check_in_recovery &&
- pg->osd->check_osdmap_full(pg->actingbackfill)) {
+ pg->osd->check_osdmap_full(pg->acting_recovery_backfill)) {
post_event(RecoveryTooFull());
return;
}
// if we finished backfill, all acting are active; recheck if
// DEGRADED | UNDERSIZED is appropriate.
- assert(!pg->actingbackfill.empty());
+ assert(!pg->acting_recovery_backfill.empty());
if (pg->get_osdmap()->get_pg_size(pg->info.pgid.pgid) <=
- pg->actingbackfill.size()) {
+ pg->acting_recovery_backfill.size()) {
pg->state_clear(PG_STATE_FORCED_BACKFILL | PG_STATE_FORCED_RECOVERY);
pg->publish_stats_to_osd();
}
remote_shards_to_reserve_recovery(
unique_osd_shard_set(
context< RecoveryMachine >().pg->pg_whoami,
- context< RecoveryMachine >().pg->actingbackfill)),
+ context< RecoveryMachine >().pg->acting_recovery_backfill)),
remote_shards_to_reserve_backfill(
unique_osd_shard_set(
context< RecoveryMachine >().pg->pg_whoami,
// everyone has to commit/ack before we are truly active
pg->blocked_by.clear();
- for (set<pg_shard_t>::iterator p = pg->actingbackfill.begin();
- p != pg->actingbackfill.end();
+ for (set<pg_shard_t>::iterator p = pg->acting_recovery_backfill.begin();
+ p != pg->acting_recovery_backfill.end();
++p) {
if (p->shard != pg->pg_whoami.shard) {
pg->blocked_by.insert(p->shard);
PG *pg = context< RecoveryMachine >().pg;
assert(pg->is_primary());
- assert(!pg->actingbackfill.empty());
+ assert(!pg->acting_recovery_backfill.empty());
// don't update history (yet) if we are active and primary; the replica
// may be telling us they have activated (and committed) but we can't
// share that until _everyone_ does the same.
- if (pg->is_actingbackfill(infoevt.from) &&
+ if (pg->is_acting_recovery_backfill(infoevt.from) &&
pg->peer_activated.count(infoevt.from) == 0) {
ldout(pg->cct, 10) << " peer osd." << infoevt.from
<< " activated and committed" << dendl;
pg->peer_activated.insert(infoevt.from);
pg->blocked_by.erase(infoevt.from.shard);
pg->publish_stats_to_osd();
- if (pg->peer_activated.size() == pg->actingbackfill.size()) {
+ if (pg->peer_activated.size() == pg->acting_recovery_backfill.size()) {
pg->all_activated_and_committed();
}
}
// how much log to request?
eversion_t request_log_from = pg->info.last_update;
- assert(!pg->actingbackfill.empty());
- for (set<pg_shard_t>::iterator p = pg->actingbackfill.begin();
- p != pg->actingbackfill.end();
+ assert(!pg->acting_recovery_backfill.empty());
+ for (set<pg_shard_t>::iterator p = pg->acting_recovery_backfill.begin();
+ p != pg->acting_recovery_backfill.end();
++p) {
if (*p == pg->pg_whoami) continue;
pg_info_t& ri = pg->peer_info[*p];
context< RecoveryMachine >().log_enter(state_name);
PG *pg = context< RecoveryMachine >().pg;
- assert(!pg->actingbackfill.empty());
+ assert(!pg->acting_recovery_backfill.empty());
eversion_t since;
- for (set<pg_shard_t>::iterator i = pg->actingbackfill.begin();
- i != pg->actingbackfill.end();
+ for (set<pg_shard_t>::iterator i = pg->acting_recovery_backfill.begin();
+ i != pg->acting_recovery_backfill.end();
++i) {
if (*i == pg->get_primary()) continue;
const pg_info_t& pi = pg->peer_info[*i];
return true;
if (pg_log.get_missing().get_items().count(soid))
return true;
- assert(!actingbackfill.empty());
- for (set<pg_shard_t>::iterator i = actingbackfill.begin();
- i != actingbackfill.end();
+ assert(!acting_recovery_backfill.empty());
+ for (set<pg_shard_t>::iterator i = acting_recovery_backfill.begin();
+ i != acting_recovery_backfill.end();
++i) {
if (*i == get_primary()) continue;
pg_shard_t peer = *i;
min_version = pg_log.get_missing().get_rmissing().begin()->first;
soid = pg_log.get_missing().get_rmissing().begin()->second;
}
- assert(!actingbackfill.empty());
- for (set<pg_shard_t>::iterator it = actingbackfill.begin();
- it != actingbackfill.end();
+ assert(!acting_recovery_backfill.empty());
+ for (set<pg_shard_t>::iterator it = acting_recovery_backfill.begin();
+ it != acting_recovery_backfill.end();
++it) {
if (*it == get_primary()) continue;
pg_shard_t peer = *it;
f->dump_stream("shard") << *p;
f->close_section();
}
- if (!actingbackfill.empty()) {
- f->open_array_section("actingbackfill");
- for (set<pg_shard_t>::iterator p = actingbackfill.begin();
- p != actingbackfill.end();
+ if (!acting_recovery_backfill.empty()) {
+ f->open_array_section("acting_recovery_backfill");
+ for (set<pg_shard_t>::iterator p = acting_recovery_backfill.begin();
+ p != acting_recovery_backfill.end();
++p)
f->dump_stream("shard") << *p;
f->close_section();
repop->v = ctx->at_version;
if (ctx->at_version > eversion_t()) {
- for (set<pg_shard_t>::iterator i = actingbackfill.begin();
- i != actingbackfill.end();
+ for (set<pg_shard_t>::iterator i = acting_recovery_backfill.begin();
+ i != acting_recovery_backfill.end();
++i) {
if (*i == get_primary()) continue;
pg_info_t &pinfo = peer_info[*i];
set<pg_shard_t> waiting_on;
- for (set<pg_shard_t>::const_iterator i = actingbackfill.begin();
- i != actingbackfill.end();
+ for (set<pg_shard_t>::const_iterator i = acting_recovery_backfill.begin();
+ i != acting_recovery_backfill.end();
++i) {
pg_shard_t peer(*i);
if (peer == pg_whoami) continue;
lock();
if (!pg_has_reset_since(cur_epoch)) {
bool object_missing = false;
- for (const auto& shard : actingbackfill) {
+ for (const auto& shard : acting_recovery_backfill) {
if (shard == pg_whoami)
continue;
if (peer_missing[shard].is_missing(soid)) {
v = pmi.have;
dout(10) << "pick_newest_available " << oid << " " << v << " on osd." << osd->whoami << " (local)" << dendl;
- assert(!actingbackfill.empty());
- for (set<pg_shard_t>::iterator i = actingbackfill.begin();
- i != actingbackfill.end();
+ assert(!acting_recovery_backfill.empty());
+ for (set<pg_shard_t>::iterator i = acting_recovery_backfill.begin();
+ i != acting_recovery_backfill.end();
++i) {
if (*i == get_primary()) continue;
pg_shard_t peer = *i;
pg_log.set_last_requested(0);
missing_loc.remove_location(soid, pg_whoami);
bool uhoh = true;
- assert(!actingbackfill.empty());
- for (set<pg_shard_t>::iterator i = actingbackfill.begin();
- i != actingbackfill.end();
+ assert(!acting_recovery_backfill.empty());
+ for (set<pg_shard_t>::iterator i = acting_recovery_backfill.begin();
+ i != acting_recovery_backfill.end();
++i) {
if (*i == get_primary()) continue;
pg_shard_t peer = *i;
PGBackend::RecoveryHandle *h = pgbackend->open_recovery_op();
// this is FAR from an optimal recovery order. pretty lame, really.
- assert(!actingbackfill.empty());
+ assert(!acting_recovery_backfill.empty());
// choose replicas to recover, replica has the shortest missing list first
// so we can bring it back to normal ASAP
std::vector<std::pair<unsigned int, pg_shard_t>> replicas_by_num_missing;
- replicas_by_num_missing.reserve(actingbackfill.size() - 1);
- for (auto &p: actingbackfill) {
+ replicas_by_num_missing.reserve(acting_recovery_backfill.size() - 1);
+ for (auto &p: acting_recovery_backfill) {
if (p == get_primary()) {
continue;
}
assert(is_primary());
dout(10) << __func__ << " " << soid
- << " peers osd.{" << actingbackfill << "}" << dendl;
+ << " peers osd.{" << acting_recovery_backfill << "}" << dendl;
if (!is_clean()) {
block_for_clean(soid, op);