return crashed;
}
-bool PG::is_split(OSDMapRef lastmap, OSDMapRef nextmap)
-{
- return info.pgid.is_split(
- lastmap->get_pg_num(pool.id),
- nextmap->get_pg_num(pool.id),
- 0);
-}
-
-bool PG::acting_up_affected(
+bool PG::should_restart_peering(
int newupprimary,
int newactingprimary,
- const vector<int>& newup, const vector<int>& newacting)
-{
- if (newupprimary != up_primary.osd ||
- newactingprimary != primary.osd ||
- acting != newacting ||
- up != newup) {
- dout(20) << "acting_up_affected newup " << newup
+ const vector<int>& newup,
+ const vector<int>& newacting,
+ OSDMapRef lastmap,
+ OSDMapRef osdmap)
+{
+ if (pg_interval_t::is_new_interval(
+ primary.osd,
+ newactingprimary,
+ acting,
+ newacting,
+ up_primary.osd,
+ newupprimary,
+ up,
+ newup,
+ osdmap,
+ lastmap,
+ info.pgid.pool(),
+ info.pgid.pgid)) {
+ dout(20) << "new interval newup " << newup
<< " newacting " << newacting << dendl;
return true;
} else {
{
dout(10) << "Started advmap" << dendl;
PG *pg = context< RecoveryMachine >().pg;
- if (pg->acting_up_affected(
+ if (pg->should_restart_peering(
advmap.up_primary,
advmap.acting_primary,
advmap.newup,
- advmap.newacting) ||
- pg->is_split(advmap.lastmap, advmap.osdmap)) {
- dout(10) << "up or acting affected, transitioning to Reset" << dendl;
+ advmap.newacting,
+ advmap.lastmap,
+ advmap.osdmap)) {
+ dout(10) << "should_restart_peering, transitioning to Reset" << dendl;
post_event(advmap);
return transit< Reset >();
}
// _before_ we are active.
pg->generate_past_intervals();
- if (pg->acting_up_affected(
+ if (pg->should_restart_peering(
advmap.up_primary,
advmap.acting_primary,
advmap.newup,
- advmap.newacting) ||
- pg->is_split(advmap.lastmap, advmap.osdmap)) {
- dout(10) << "up or acting affected, calling start_peering_interval again"
+ advmap.newacting,
+ advmap.lastmap,
+ advmap.osdmap)) {
+ dout(10) << "should restart peering, calling start_peering_interval again"
<< dendl;
pg->start_peering_interval(
advmap.lastmap,
void fulfill_info(pg_shard_t from, const pg_query_t &query,
pair<pg_shard_t, pg_info_t> ¬ify_info);
void fulfill_log(pg_shard_t from, const pg_query_t &query, epoch_t query_epoch);
- bool is_split(OSDMapRef lastmap, OSDMapRef nextmap);
- bool acting_up_affected(
- int newupprimary, int newactingprimary,
- const vector<int>& newup, const vector<int>& newacting);
+
+ bool should_restart_peering(
+ int newupprimary,
+ int newactingprimary,
+ const vector<int>& newup,
+ const vector<int>& newacting,
+ OSDMapRef lastmap,
+ OSDMapRef osdmap);
// OpRequest queueing
bool can_discard_op(OpRequestRef op);