summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSage Weil <sage@inktank.com>2013-01-20 16:11:10 -0800
committerSage Weil <sage@inktank.com>2013-01-20 16:11:10 -0800
commit17160843d0c523359d8fa934418ff2c1f7bffb25 (patch)
treeb00f7cc84ca80ab5d691555136458e6c511d87be
parentaea898db2b56878b50f09dcbbf52347f4cc5c754 (diff)
downloadceph-17160843d0c523359d8fa934418ff2c1f7bffb25.tar.gz
osd: calculate initial PG mapping from PG's osdmap
The initial values of up/acting need to be based on the PG's osdmap, not the OSD's latest. This can cause various confusion in pg_interval_t::check_new_interval() when calling OSDMap methods due to the up/acting OSDs not existing yet (for example). Fixes: #3879 Reported-by: Jens Kristian S?gaard <jens@mermaidconsulting.dk> Tested-by: Jens Kristian S?gaard <jens@mermaidconsulting.dk> Signed-off-by: Sage Weil <sage@inktank.com> Reviewed-by: Samuel Just <sam.just@inktank.com>
-rw-r--r--src/osd/OSD.cc6
1 files changed, 3 insertions, 3 deletions
diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc
index d0236e06419..a805d659758 100644
--- a/src/osd/OSD.cc
+++ b/src/osd/OSD.cc
@@ -1531,9 +1531,9 @@ void OSD::load_pgs()
service.reg_last_pg_scrub(pg->info.pgid, pg->info.history.last_scrub_stamp);
- // generate state for current mapping
- osdmap->pg_to_up_acting_osds(pgid, pg->up, pg->acting);
- int role = osdmap->calc_pg_role(whoami, pg->acting);
+ // generate state for PG's current mapping
+ pg->get_osdmap()->pg_to_up_acting_osds(pgid, pg->up, pg->acting);
+ int role = pg->get_osdmap()->calc_pg_role(whoami, pg->acting);
pg->set_role(role);
PG::RecoveryCtx rctx(0, 0, 0, 0, 0, 0);