From 2894677246b9fccf744b4f93ecc6591f7dae784a Mon Sep 17 00:00:00 2001 From: xie xingguo Date: Fri, 4 Jan 2019 08:39:01 +0800 Subject: [PATCH] mon/OSDMonitor: do not populate void pg_temp into nextmap Due to commit ea723fb, pg_temp with clean acting set are added to inc map. The original intent was to clear out pg_temps during priming, but as written it would set a new_pg_temp item clearing the pg_temp even if one didn't already exist. Adding the up != acting condition in there makes us only take that path if there is an existing pg_temp entry to remove. Fixes: https://tracker.ceph.com/issues/37784 Signed-off-by: Aleksei Zakharov (cherry picked from commit b1d3ca5e78eaee509c923f06e9024c23cc6ce31a) --- src/mon/OSDMonitor.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index ac2c3b5242f04..bab11dd7ff9e6 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -1006,7 +1006,8 @@ void OSDMonitor::prime_pg_temp( int next_up_primary, next_acting_primary; next.pg_to_up_acting_osds(pgid, &next_up, &next_up_primary, &next_acting, &next_acting_primary); - if (acting == next_acting && next_up != next_acting) + if (acting == next_acting && + !(up != acting && next_up == next_acting)) return; // no change since last epoch if (acting.empty())