From a5cade1fe7338602fb2bbfa867433d825f337c87 Mon Sep 17 00:00:00 2001 From: Samuel Just Date: Thu, 25 Apr 2013 14:08:57 -0700 Subject: [PATCH] PG: clear want_acting when we leave Primary This is somewhat annoying actually. Intuitively we want to clear_primary_state when we leave primary, but when we restart peering due to a change in prior set status, we can't afford to forget most of our peering state. want_acting, on the other hand, should never persist across peering attempts. In fact, in the future, want_acting should be pulled into the Primary state structure. Fixes: #3904 Signed-off-by: Samuel Just Reviewed-by: Sage Weil Reviewed-by: David Zafman --- src/osd/PG.cc | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/osd/PG.cc b/src/osd/PG.cc index 70e2a326d2af2..c1155c33bbe1b 100644 --- a/src/osd/PG.cc +++ b/src/osd/PG.cc @@ -4998,7 +4998,6 @@ void PG::start_peering_interval(const OSDMapRef lastmap, up = newup; acting = newacting; - want_acting.clear(); if (info.stats.up != up || info.stats.acting != acting) { @@ -6005,6 +6004,8 @@ PG::RecoveryState::Primary::Primary(my_context ctx) { state_name = "Started/Primary"; context< RecoveryMachine >().log_enter(state_name); + PG *pg = context< RecoveryMachine >().pg; + assert(pg->want_acting.empty()); } boost::statechart::result PG::RecoveryState::Primary::react(const AdvMap &advmap) @@ -6040,6 +6041,8 @@ boost::statechart::result PG::RecoveryState::Primary::react(const ActMap&) void PG::RecoveryState::Primary::exit() { context< RecoveryMachine >().log_exit(state_name, enter_time); + PG *pg = context< RecoveryMachine >().pg; + pg->want_acting.clear(); } /*---------Peering--------*/ -- 2.39.5