From: Samuel Just Date: Mon, 20 Oct 2014 21:10:58 +0000 (-0700) Subject: PG:: reset_interval_flush and in set_last_peering_reset X-Git-Tag: v0.87~10^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=d9ff3a6b789c5b9c77aefa3751bd808f5d7b8ca7;p=ceph.git 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 --- diff --git a/src/osd/PG.cc b/src/osd/PG.cc index 49752edfdd22..eedc26b1d02b 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();