From d9ff3a6b789c5b9c77aefa3751bd808f5d7b8ca7 Mon Sep 17 00:00:00 2001 From: Samuel Just Date: Mon, 20 Oct 2014 14:10:58 -0700 Subject: [PATCH] PG:: reset_interval_flush and in set_last_peering_reset If we have a change in the prior set, but not in the up/acting set, we go back through Reset in order to reset peering state. Previously, we would reset last_peering_reset in the Reset constructor. This did not, however, reset the flush_interval, which caused the eventual flush event to be ignored and the peering messages to not be sent. Instead, we will always reset_interval_flush if we are actually changing the last_peering_reset value. Fixes: #9821 Backport: firefly Signed-off-by: Samuel Just --- src/osd/PG.cc | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/osd/PG.cc b/src/osd/PG.cc index 49752edfdd2..eedc26b1d02 100644 --- a/src/osd/PG.cc +++ b/src/osd/PG.cc @@ -4568,7 +4568,10 @@ bool PG::old_peering_msg(epoch_t reply_epoch, epoch_t query_epoch) void PG::set_last_peering_reset() { dout(20) << "set_last_peering_reset " << get_osdmap()->get_epoch() << dendl; - last_peering_reset = get_osdmap()->get_epoch(); + if (last_peering_reset != get_osdmap()->get_epoch()) { + last_peering_reset = get_osdmap()->get_epoch(); + reset_interval_flush(); + } } struct FlushState { @@ -4622,7 +4625,6 @@ void PG::start_peering_interval( const OSDMapRef osdmap = get_osdmap(); set_last_peering_reset(); - reset_interval_flush(); vector oldacting, oldup; int oldrole = get_role();