diff options
author | Sage Weil <sage@inktank.com> | 2013-01-20 16:11:10 -0800 |
---|---|---|
committer | Sage Weil <sage@inktank.com> | 2013-01-20 16:11:10 -0800 |
commit | 17160843d0c523359d8fa934418ff2c1f7bffb25 (patch) | |
tree | b00f7cc84ca80ab5d691555136458e6c511d87be | |
parent | aea898db2b56878b50f09dcbbf52347f4cc5c754 (diff) | |
download | ceph-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.cc | 6 |
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); |