From 9e9c3c652339d85863af01cac621228f04eb4f18 Mon Sep 17 00:00:00 2001 From: David Zafman Date: Thu, 9 Oct 2014 11:20:13 -0700 Subject: [PATCH] osd: Get pgid ancestor from last_map when building past intervals Fixed OSD::build_past_intervals_parallel() and PG::generate_past_intervals() Fixes: #10430 Signed-off-by: David Zafman (cherry picked from commit 0c5b66da7a9ba516340d06d9e806beb9d1040d0e) --- src/osd/OSD.cc | 7 +++++-- src/osd/PG.cc | 4 ++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index 0752e8eef0d7c..e71f9560dc26c 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -3046,8 +3046,11 @@ void OSD::build_past_intervals_parallel() vector acting, up; int up_primary; int primary; + pg_t pgid = pg->info.pgid.pgid; + if (p.same_interval_since && last_map->get_pools().count(pgid.pool())) + pgid = pgid.get_ancestor(last_map->get_pg_num(pgid.pool())); cur_map->pg_to_up_acting_osds( - pg->info.pgid.pgid, &up, &up_primary, &acting, &primary); + pgid, &up, &up_primary, &acting, &primary); if (p.same_interval_since == 0) { dout(10) << __func__ << " epoch " << cur_epoch << " pg " << pg->info.pgid @@ -3073,7 +3076,7 @@ void OSD::build_past_intervals_parallel() p.same_interval_since, pg->info.history.last_epoch_clean, cur_map, last_map, - pg->info.pgid.pgid, + pgid, &pg->past_intervals, &debug); if (new_interval) { diff --git a/src/osd/PG.cc b/src/osd/PG.cc index 7b454b3020d1e..92c0549d33a48 100644 --- a/src/osd/PG.cc +++ b/src/osd/PG.cc @@ -671,8 +671,8 @@ void PG::generate_past_intervals() cur_map = osd->get_map(cur_epoch); pg_t pgid = get_pgid().pgid; - if (cur_map->get_pools().count(pgid.pool())) - pgid = pgid.get_ancestor(cur_map->get_pg_num(pgid.pool())); + if (last_map->get_pools().count(pgid.pool())) + pgid = pgid.get_ancestor(last_map->get_pg_num(pgid.pool())); cur_map->pg_to_up_acting_osds(pgid, &up, &up_primary, &acting, &primary); std::stringstream debug; -- 2.39.5