public:
OSDMap osdmap;
OSDMapMapping mapping;
+ const uint64_t my_ec_pool = 1;
+ const uint64_t my_rep_pool = 2;
+
OSDMapTest() {}
void set_up_map() {
uuid_d fsid;
- osdmap.build_simple(g_ceph_context, 0, fsid, num_osds, 6, 6);
+ osdmap.build_simple(g_ceph_context, 0, fsid, num_osds);
OSDMap::Incremental pending_inc(osdmap.get_epoch() + 1);
pending_inc.fsid = osdmap.get_fsid();
entity_addr_t sample_addr;
// Create an EC ruleset and a pool using it
int r = osdmap.crush->add_simple_rule(
- "erasure", "default", "osd",
+ "erasure", "default", "osd", "",
"indep", pg_pool_t::TYPE_ERASURE,
&cerr);
new_pool_inc.new_pool_max = osdmap.get_pool_max();
new_pool_inc.fsid = osdmap.get_fsid();
pg_pool_t empty;
+ // make an ec pool
uint64_t pool_id = ++new_pool_inc.new_pool_max;
+ assert(pool_id == my_ec_pool);
pg_pool_t *p = new_pool_inc.get_new_pool(pool_id, &empty);
p->size = 3;
p->set_pg_num(64);
p->type = pg_pool_t::TYPE_ERASURE;
p->crush_rule = r;
new_pool_inc.new_pool_names[pool_id] = "ec";
+ // and a replicated pool
+ pool_id = ++new_pool_inc.new_pool_max;
+ assert(pool_id == my_rep_pool);
+ p = new_pool_inc.get_new_pool(pool_id, &empty);
+ p->size = 3;
+ p->set_pg_num(64);
+ p->set_pgp_num(64);
+ p->type = pg_pool_t::TYPE_REPLICATED;
+ p->crush_rule = 0;
+ p->set_flag(pg_pool_t::FLAG_HASHPSPOOL);
+ new_pool_inc.new_pool_names[pool_id] = "reppool";
osdmap.apply_incremental(new_pool_inc);
}
unsigned int get_num_osds() { return num_osds; }
ASSERT_EQ(acting, acting2);
ASSERT_EQ(acting_primary, acting_primary2);
}
+ cout << "any: " << *any << std::endl;;
+ cout << "first: " << *first << std::endl;;
+ cout << "primary: " << *primary << std::endl;;
}
};
TEST_F(OSDMapTest, MapPG) {
set_up_map();
- pg_t rawpg(0, 0, -1);
+ std::cerr << " osdmap.pool_max==" << osdmap.get_pool_max() << std::endl;
+ pg_t rawpg(0, my_rep_pool, -1);
pg_t pgid = osdmap.raw_pg_to_pg(rawpg);
vector<int> up_osds, acting_osds;
int up_primary, acting_primary;
ASSERT_EQ(old_up_osds, up_osds);
ASSERT_EQ(old_acting_osds, acting_osds);
- ASSERT_EQ(osdmap.get_pg_pool(0)->get_size(), up_osds.size());
+ ASSERT_EQ(osdmap.get_pg_pool(my_rep_pool)->get_size(), up_osds.size());
}
TEST_F(OSDMapTest, MapFunctionsMatch) {
// TODO: make sure pg_to_up_acting_osds and pg_to_acting_osds match
set_up_map();
-
- pg_t rawpg(0, 0, -1);
+ pg_t rawpg(0, my_rep_pool, -1);
pg_t pgid = osdmap.raw_pg_to_pg(rawpg);
vector<int> up_osds, acting_osds;
int up_primary, acting_primary;
TEST_F(OSDMapTest, PrimaryIsFirst) {
set_up_map();
- pg_t rawpg(0, 0, -1);
+ pg_t rawpg(0, my_rep_pool, -1);
pg_t pgid = osdmap.raw_pg_to_pg(rawpg);
vector<int> up_osds, acting_osds;
int up_primary, acting_primary;
TEST_F(OSDMapTest, PGTempRespected) {
set_up_map();
- pg_t rawpg(0, 0, -1);
+ pg_t rawpg(0, my_rep_pool, -1);
pg_t pgid = osdmap.raw_pg_to_pg(rawpg);
vector<int> up_osds, acting_osds;
int up_primary, acting_primary;
TEST_F(OSDMapTest, PrimaryTempRespected) {
set_up_map();
- pg_t rawpg(0, 0, -1);
+ pg_t rawpg(0, my_rep_pool, -1);
pg_t pgid = osdmap.raw_pg_to_pg(rawpg);
vector<int> up_osds;
vector<int> acting_osds;
OSDMap::Incremental pgtemp_map(osdmap.get_epoch() + 1);
OSDMap::Incremental pending_inc(osdmap.get_epoch() + 2);
- pg_t pga = osdmap.raw_pg_to_pg(pg_t(0, 0));
+ pg_t pga = osdmap.raw_pg_to_pg(pg_t(0, my_rep_pool));
{
vector<int> up_osds, acting_osds;
int up_primary, acting_primary;
up_osds.begin(), up_osds.end());
pgtemp_map.new_primary_temp[pga] = up_primary;
}
- pg_t pgb = osdmap.raw_pg_to_pg(pg_t(1, 0));
+ pg_t pgb = osdmap.raw_pg_to_pg(pg_t(1, my_rep_pool));
{
vector<int> up_osds, acting_osds;
int up_primary, acting_primary;
TEST_F(OSDMapTest, KeepsNecessaryTemps) {
set_up_map();
- pg_t rawpg(0, 0, -1);
+ pg_t rawpg(0, my_rep_pool, -1);
pg_t pgid = osdmap.raw_pg_to_pg(rawpg);
vector<int> up_osds, acting_osds;
int up_primary, acting_primary;
p != osdmap.get_pools().end();
++p) {
int pool = p->first;
- cout << "pool " << pool << std::endl;
+ int expect_primary = 10000 / n;
+ cout << "pool " << pool << " size " << (int)p->second.size
+ << " expect_primary " << expect_primary << std::endl;
{
vector<int> any(n, 0);
vector<int> first(n, 0);
vector<int> primary(n, 0);
- test_mappings(0, 10000, &any, &first, &primary);
+ test_mappings(pool, 10000, &any, &first, &primary);
for (int i=0; i<n; ++i) {
ASSERT_LT(0, any[i]);
ASSERT_LT(0, first[i]);
vector<int> first(n, 0);
vector<int> primary(n, 0);
test_mappings(pool, 10000, &any, &first, &primary);
+ int expect = (10000 / (n-2)) / 2; // half weight
+ cout << "expect " << expect << std::endl;
for (int i=0; i<n; ++i) {
ASSERT_LT(0, any[i]);
if (i >= 2) {
}
ASSERT_EQ(0, primary[i]);
} else {
- ASSERT_LT(10000/6/4, primary[0]);
- ASSERT_GT(10000/6/4*3, primary[0]);
+ ASSERT_LT(expect *2/3, primary[0]);
+ ASSERT_GT(expect *4/3, primary[0]);
}
}
}