int nosd, int pg_bits, int pgp_bits)
{
ldout(cct, 10) << "build_simple on " << num_osd
- << " osds with " << pg_bits << " pg bits per osd, "
- << dendl;
+ << " osds" << dendl;
epoch = e;
set_fsid(fsid);
created = modified = ceph_clock_now();
set_max_osd(maxosd + 1);
}
- // pgp_num <= pg_num
- if (pgp_bits > pg_bits)
- pgp_bits = pg_bits;
-
- vector<string> pool_names;
- pool_names.push_back("rbd");
-
stringstream ss;
int r;
if (nosd >= 0)
r = build_simple_crush_map_from_conf(cct, *crush, &ss);
assert(r == 0);
- int poolbase = get_max_osd() ? get_max_osd() : 1;
-
- int const default_replicated_rule =
- crush->get_osd_pool_default_crush_replicated_ruleset(cct);
- assert(default_replicated_rule >= 0);
-
- for (auto &plname : pool_names) {
- int64_t pool = ++pool_max;
- pools[pool].type = pg_pool_t::TYPE_REPLICATED;
- pools[pool].flags = cct->_conf->osd_pool_default_flags;
- if (cct->_conf->osd_pool_default_flag_hashpspool)
- pools[pool].set_flag(pg_pool_t::FLAG_HASHPSPOOL);
- if (cct->_conf->osd_pool_default_flag_nodelete)
- pools[pool].set_flag(pg_pool_t::FLAG_NODELETE);
- if (cct->_conf->osd_pool_default_flag_nopgchange)
- pools[pool].set_flag(pg_pool_t::FLAG_NOPGCHANGE);
- if (cct->_conf->osd_pool_default_flag_nosizechange)
- pools[pool].set_flag(pg_pool_t::FLAG_NOSIZECHANGE);
- pools[pool].size = cct->_conf->osd_pool_default_size;
- pools[pool].min_size = cct->_conf->get_osd_pool_default_min_size();
- pools[pool].crush_rule = default_replicated_rule;
- pools[pool].object_hash = CEPH_STR_HASH_RJENKINS;
- pools[pool].set_pg_num(poolbase << pg_bits);
- pools[pool].set_pgp_num(poolbase << pgp_bits);
- pools[pool].last_change = epoch;
- pool_name[pool] = plname;
- name_pool[plname] = pool;
- }
-
for (int i=0; i<get_max_osd(); i++) {
set_state(i, 0);
set_weight(i, CEPH_OSD_OUT);
public:
OSDMap osdmap;
OSDMapMapping mapping;
+ const uint64_t my_ec_pool = 1;
+ const uint64_t my_rep_pool = 2;
+
OSDMapTest() {}
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; }
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;