From: Kefu Chai Date: Thu, 27 Apr 2017 20:47:18 +0000 (+0800) Subject: mon/OSDMonitor: do not alter the "created" epoch of a pg X-Git-Tag: v12.0.3~168^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=963b8d8617d4303f6f1450b8eeae5302cbfe64c8;p=ceph.git mon/OSDMonitor: do not alter the "created" epoch of a pg Fixes: http://tracker.ceph.com/issues/19787 Signed-off-by: Kefu Chai --- diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index 212195ffd1f..cf069c6b4b0 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -3192,7 +3192,7 @@ void OSDMonitor::update_creating_pgs() for (auto& pg : creating_pgs.pgs) { int acting_primary = -1; auto pgid = pg.first; - auto& created = pg.second.first; + auto mapped = pg.second.first; mapping.get(pgid, nullptr, nullptr, nullptr, &acting_primary); // check the previous creating_pgs, look for the target to whom the pg was // previously mapped @@ -3200,15 +3200,14 @@ void OSDMonitor::update_creating_pgs() const auto last_acting_primary = pgs_by_epoch.first; for (auto& pgs: pgs_by_epoch.second) { if (pgs.second.count(pgid)) { - if (last_acting_primary != acting_primary) { + if (last_acting_primary == acting_primary) { + mapped = pgs.first; + } else { dout(20) << __func__ << " " << pgid << " " << " acting_primary:" << last_acting_primary << " -> " << acting_primary << dendl; // note epoch if the target of the create message changed. - // creating_pgs is updated here instead of in - // scan_for_creating_pgs() because we don't have the updated pg - // mapping by then. - created = mapping.get_epoch(); + mapped = mapping.get_epoch(); } break; } @@ -3216,7 +3215,7 @@ void OSDMonitor::update_creating_pgs() } dout(10) << __func__ << " will instruct osd." << acting_primary << " to create " << pgid << dendl; - new_pgs_by_osd_epoch[acting_primary][created].insert(pgid); + new_pgs_by_osd_epoch[acting_primary][mapped].insert(pgid); } creating_pgs_by_osd_epoch = std::move(new_pgs_by_osd_epoch); creating_pgs_epoch = mapping.get_epoch();