From: Sage Weil Date: Fri, 15 Jun 2018 12:09:04 +0000 (-0500) Subject: osd/osd_types: pg_t: add is_merge_target() X-Git-Tag: v14.0.1~371^2~24 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=ca8dfd35c85d0a7a9a99c1c3792fc4f6d39c2cd5;p=ceph.git osd/osd_types: pg_t: add is_merge_target() Signed-off-by: Sage Weil --- diff --git a/src/osd/osd_types.cc b/src/osd/osd_types.cc index cd8dd66ecef2e..da8799ede1d6d 100644 --- a/src/osd/osd_types.cc +++ b/src/osd/osd_types.cc @@ -3471,11 +3471,9 @@ bool PastIntervals::is_new_interval( // merge source pgid.is_merge_source(old_pg_num, new_pg_num, 0) || // pre-merge target - (pgid.ps() < new_pg_num_pending && - pgid.is_split(new_pg_num_pending, old_pg_num_pending, 0)) || + pgid.is_merge_target(old_pg_num_pending, new_pg_num_pending) || // merge target - (pgid.ps() < new_pg_num && - pgid.is_split(new_pg_num, old_pg_num, 0)) || + pgid.is_merge_target(old_pg_num, new_pg_num) || old_sort_bitwise != new_sort_bitwise || old_recovery_deletes != new_recovery_deletes; } diff --git a/src/osd/osd_types.h b/src/osd/osd_types.h index a6b8f642baf99..637f5cca1c1e9 100644 --- a/src/osd/osd_types.h +++ b/src/osd/osd_types.h @@ -413,6 +413,9 @@ struct pg_t { bool is_split(unsigned old_pg_num, unsigned new_pg_num, set *pchildren) const; bool is_merge_source(unsigned old_pg_num, unsigned new_pg_num, pg_t *parent) const; + bool is_merge_target(unsigned old_pg_num, unsigned new_pg_num) const { + return ps() < new_pg_num && is_split(new_pg_num, old_pg_num, nullptr); + } /** * Returns b such that for all object o: @@ -541,6 +544,9 @@ struct spg_t { } return is_split; } + bool is_merge_target(unsigned old_pg_num, unsigned new_pg_num) const { + return pgid.is_merge_target(old_pg_num, new_pg_num); + } bool is_merge_source(unsigned old_pg_num, unsigned new_pg_num, spg_t *parent) const { spg_t out = *this; diff --git a/src/test/osd/types.cc b/src/test/osd/types.cc index 219c60c51035c..9dd9c5d58c4c9 100644 --- a/src/test/osd/types.cc +++ b/src/test/osd/types.cc @@ -811,21 +811,26 @@ TEST(pg_t, merge) b = pgid.is_merge_source(8, 7, &parent); ASSERT_TRUE(b); ASSERT_EQ(parent, pg_t(3, 0)); + ASSERT_TRUE(parent.is_merge_target(8, 7)); b = pgid.is_merge_source(8, 5, &parent); ASSERT_TRUE(b); ASSERT_EQ(parent, pg_t(3, 0)); + ASSERT_TRUE(parent.is_merge_target(8, 5)); b = pgid.is_merge_source(8, 4, &parent); ASSERT_TRUE(b); ASSERT_EQ(parent, pg_t(3, 0)); + ASSERT_TRUE(parent.is_merge_target(8, 4)); b = pgid.is_merge_source(8, 3, &parent); ASSERT_TRUE(b); ASSERT_EQ(parent, pg_t(1, 0)); + ASSERT_TRUE(parent.is_merge_target(8, 4)); b = pgid.is_merge_source(9, 8, &parent); ASSERT_FALSE(b); + ASSERT_FALSE(parent.is_merge_target(9, 8)); } TEST(pg_missing_t, constructor)