]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: bracket role changes with scrub reg/unreg
authorSage Weil <sage@inktank.com>
Thu, 6 Mar 2014 19:13:35 +0000 (11:13 -0800)
committerSage Weil <sage@inktank.com>
Thu, 6 Mar 2014 19:35:04 +0000 (11:35 -0800)
Make sure the reg/unreg calls for putting ourselves in the scrub schedule
bracket any PG role changes, or that initial reg happens after the role
has been initialized.

Signed-off-by: Sage Weil <sage@inktank.com>
src/osd/OSD.cc
src/osd/PG.cc

index f229bc08503e78eb5866a4e7446ee6f3b3235e15..71e95d79bcad46eca69bd0ab858119a27a8b78e4 100644 (file)
@@ -2103,8 +2103,6 @@ void OSD::load_pgs()
 
     service.init_splits_between(pg->info.pgid, pg->get_osdmap(), osdmap);
 
-    pg->reg_next_scrub();
-
     // generate state for PG's current mapping
     int primary, up_primary;
     vector<int> acting, up;
@@ -2118,6 +2116,8 @@ void OSD::load_pgs()
     int role = OSDMap::calc_pg_role(whoami, pg->acting);
     pg->set_role(role);
 
+    pg->reg_next_scrub();
+
     PG::RecoveryCtx rctx(0, 0, 0, 0, 0, 0);
     pg->handle_loaded(&rctx);
 
index fe759efe1422fb28105c5869ce1fb5831d0b387b..3537ce576accaed27fab3cbe6593b1197cef67aa 100644 (file)
@@ -4640,6 +4640,8 @@ void PG::start_peering_interval(
   vector<int> oldacting, oldup;
   int oldrole = get_role();
 
+  unreg_next_scrub();
+
   pg_shard_t old_acting_primary = get_primary();
   pg_shard_t old_up_primary = up_primary;
   bool was_old_primary = is_primary();
@@ -4676,6 +4678,8 @@ void PG::start_peering_interval(
   else
     set_role(-1);
 
+  reg_next_scrub();
+
   // did acting, up, primary|acker change?
   if (!lastmap) {
     dout(10) << " no lastmap" << dendl;