]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
PG:: reset_interval_flush and in set_last_peering_reset 2785/head
authorSamuel Just <sam.just@inktank.com>
Mon, 20 Oct 2014 21:10:58 +0000 (14:10 -0700)
committerSamuel Just <sam.just@inktank.com>
Tue, 21 Oct 2014 18:02:49 +0000 (11:02 -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>
src/osd/PG.cc

index 49752edfdd22f7cfcf4b218491884bd3a53cd818..eedc26b1d02b10f31e74be509fde758380b5885f 100644 (file)
@@ -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<int> oldacting, oldup;
   int oldrole = get_role();