// 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;
}
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:
}
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;
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)