]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
PG:: reset_interval_flush and in set_last_peering_reset
authorSamuel Just <sam.just@inktank.com>
Mon, 20 Oct 2014 21:10:58 +0000 (14:10 -0700)
committerSamuel Just <sam.just@inktank.com>
Thu, 30 Oct 2014 20:43:42 +0000 (13:43 -0700)
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 <sam.just@inktank.com>
(cherry picked from commit d9ff3a6b789c5b9c77aefa3751bd808f5d7b8ca7)

src/osd/PG.cc

index 3ca1ccb0a97298030e46602ce2d086b6e3368dd9..b68086dcdf28c970d36653fb1d874fc25495a6be 100644 (file)
@@ -4686,7 +4686,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 {
@@ -4740,7 +4743,6 @@ void PG::start_peering_interval(
   const OSDMapRef osdmap = get_osdmap();
 
   set_last_peering_reset();
-  reset_interval_flush();
 
   vector<int> oldacting, oldup;
   int oldrole = get_role();