]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
PG::handle_advance_map: on_pool_change after handling the map change 5890/head
authorSamuel Just <sjust@redhat.com>
Thu, 27 Aug 2015 18:08:33 +0000 (11:08 -0700)
committerAbhishek Varshney <abhishek.varshney@flipkart.com>
Mon, 21 Sep 2015 07:34:36 +0000 (13:04 +0530)
Otherwise, the is_active() checks in the hitset code can erroneously
return true firing off repops stamped with the new epoch which then get
cleared in the map change code.  The filestore callbacks then pass the
interval check and call into a destroyed repop structure.

Fixes: 12809
Backport: hammer,firefly
Signed-off-by: Samuel Just <sjust@redhat.com>
(cherry picked from commit 14e02bc90a463805f4c3e2de210892067a52514b)

src/osd/PG.cc

index acafb4f3d864cb3c3e64f16a0ee49500c8fae525..77c0d6bf2ff25f4bcfc1b4d07e9a3a67bd157e49 100644 (file)
@@ -5272,12 +5272,12 @@ void PG::handle_advance_map(
           << dendl;
   update_osdmap_ref(osdmap);
   pool.update(osdmap);
-  if (pool.info.last_change == osdmap_ref->get_epoch())
-    on_pool_change();
   AdvMap evt(
     osdmap, lastmap, newup, up_primary,
     newacting, acting_primary);
   recovery_state.handle_event(evt, rctx);
+  if (pool.info.last_change == osdmap_ref->get_epoch())
+    on_pool_change();
 }
 
 void PG::handle_activate_map(RecoveryCtx *rctx)