From: Sage Weil Date: Mon, 17 Sep 2018 12:41:15 +0000 (-0500) Subject: osd/osd_types: increasing pg_num_pending is also an interval change X-Git-Tag: v14.0.1~212^2~2 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=2bfa241f44270290b363d0e4c5f76b7a71441a02;p=ceph.git osd/osd_types: increasing pg_num_pending is also an interval change If we move into the premerge period (pg_num_pending < pg_num), that is a new interval. Moving out again (canceling the merge) is also a new interval. Signed-off-by: Sage Weil --- diff --git a/src/osd/osd_types.cc b/src/osd/osd_types.cc index 192d2e150d5c6..49e4e2b19e6b1 100644 --- a/src/osd/osd_types.cc +++ b/src/osd/osd_types.cc @@ -3476,12 +3476,14 @@ bool PastIntervals::is_new_interval( old_min_size != new_min_size || old_size != new_size || pgid.is_split(old_pg_num, new_pg_num, 0) || - // pre-merge source + // (is or was) pre-merge source pgid.is_merge_source(old_pg_num_pending, new_pg_num_pending, 0) || + pgid.is_merge_source(new_pg_num_pending, old_pg_num_pending, 0) || // merge source pgid.is_merge_source(old_pg_num, new_pg_num, 0) || - // pre-merge target + // (is or was) pre-merge target pgid.is_merge_target(old_pg_num_pending, new_pg_num_pending) || + pgid.is_merge_target(new_pg_num_pending, old_pg_num_pending) || // merge target pgid.is_merge_target(old_pg_num, new_pg_num) || old_sort_bitwise != new_sort_bitwise || diff --git a/src/test/osd/types.cc b/src/test/osd/types.cc index b87638e0ba0d8..6aba395c56a8e 100644 --- a/src/test/osd/types.cc +++ b/src/test/osd/types.cc @@ -347,6 +347,41 @@ for (unsigned i = 0; i < 4; ++i) { &past_intervals)); } + // + // PG was pre-merge source + // + { + std::shared_ptr osdmap(new OSDMap()); + osdmap->set_max_osd(10); + osdmap->set_state(osd_id, CEPH_OSD_EXISTS); + osdmap->set_epoch(epoch); + OSDMap::Incremental inc(epoch + 1); + inc.new_pools[pool_id].min_size = min_size; + inc.new_pools[pool_id].set_pg_num(pg_num); + inc.new_pools[pool_id].set_pg_num_pending(pg_num - 1); + osdmap->apply_incremental(inc); + + cout << "pg_num " << pg_num << std::endl; + PastIntervals past_intervals; + + ASSERT_TRUE(past_intervals.empty()); + ASSERT_TRUE(PastIntervals::check_new_interval(old_primary, + new_primary, + old_acting, + new_acting, + old_up_primary, + new_up_primary, + old_up, + new_up, + same_interval_since, + last_epoch_clean, + lastmap, // reverse order! + osdmap, + pg_t(pg_num - 1, pool_id), + recoverable.get(), + &past_intervals)); + } + // // PG is merge source // @@ -413,6 +448,39 @@ for (unsigned i = 0; i < 4; ++i) { &past_intervals)); } + // + // PG was pre-merge target + // + { + std::shared_ptr osdmap(new OSDMap()); + osdmap->set_max_osd(10); + osdmap->set_state(osd_id, CEPH_OSD_EXISTS); + osdmap->set_epoch(epoch); + OSDMap::Incremental inc(epoch + 1); + inc.new_pools[pool_id].min_size = min_size; + inc.new_pools[pool_id].set_pg_num_pending(pg_num - 1); + osdmap->apply_incremental(inc); + + PastIntervals past_intervals; + + ASSERT_TRUE(past_intervals.empty()); + ASSERT_TRUE(PastIntervals::check_new_interval(old_primary, + new_primary, + old_acting, + new_acting, + old_up_primary, + new_up_primary, + old_up, + new_up, + same_interval_since, + last_epoch_clean, + lastmap, // reverse order! + osdmap, + pg_t(pg_num / 2 - 1, pool_id), + recoverable.get(), + &past_intervals)); + } + // // PG is merge target //