]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd/osd_types: pg_t: add is_merge_target()
authorSage Weil <sage@redhat.com>
Fri, 15 Jun 2018 12:09:04 +0000 (07:09 -0500)
committerSage Weil <sage@redhat.com>
Fri, 7 Sep 2018 17:08:41 +0000 (12:08 -0500)
Signed-off-by: Sage Weil <sage@redhat.com>
src/osd/osd_types.cc
src/osd/osd_types.h
src/test/osd/types.cc

index cd8dd66ecef2e3f443e2d442388fbd244f392d29..da8799ede1d6db7fc407b57f484a3864c5d583ab 100644 (file)
@@ -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;
 }
index a6b8f642baf99a94d9909150ca1fe65bd9e67acf..637f5cca1c1e91600538bc8e5bccc62b4ff0b89d 100644 (file)
@@ -413,6 +413,9 @@ struct pg_t {
   bool is_split(unsigned old_pg_num, unsigned new_pg_num, set<pg_t> *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;
index 219c60c51035c7d85c26839d8d5dc292639332c5..9dd9c5d58c4c9fb752eb72a83169e7a13b75aae0 100644 (file)
@@ -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)