set<int> checked_osds;
for (unsigned ps = 0; ps < std::min(8u, pool.get_pg_num()); ++ps) {
vector<int> up, acting;
- pg_t pgid(ps, pool_id, -1);
+ pg_t pgid(ps, pool_id);
osdmap.pg_to_up_acting_osds(pgid, up, acting);
for (int osd : up) {
if (checked_osds.find(osd) != checked_osds.end())
o.back()->stamp = utime_t(123,345);
o.push_back(new Incremental);
o.back()->version = 2;
- o.back()->pg_stat_updates[pg_t(1,2,3)] = pg_stat_t();
+ o.back()->pg_stat_updates[pg_t(1,2)] = pg_stat_t();
o.back()->osd_stat_updates[5] = osd_stat_t();
o.push_back(new Incremental);
o.back()->version = 3;
o.back()->osdmap_epoch = 1;
o.back()->pg_scan = 2;
- o.back()->pg_stat_updates[pg_t(4,5,6)] = pg_stat_t();
+ o.back()->pg_stat_updates[pg_t(4,5)] = pg_stat_t();
o.back()->osd_stat_updates[6] = osd_stat_t();
- o.back()->pg_remove.insert(pg_t(1,2,3));
+ o.back()->pg_remove.insert(pg_t(1,2));
o.back()->osd_stat_rm.insert(5);
}
continue;
}
- if (pgid.preferred() >= 0) {
- dout(10) << __func__ << ": skipping localized PG " << pgid << dendl;
- // FIXME: delete it too, eventually
- continue;
- }
-
dout(10) << "pgid " << pgid << " coll " << coll_t(pgid) << dendl;
epoch_t map_epoch = 0;
int r = PG::peek_map_epoch(store, pgid, &map_epoch);
continue;
pg_t on = p->first;
- if (on.preferred() >= 0) {
- dout(20) << "ignoring localized pg " << on << dendl;
- continue;
- }
-
if (!osdmap->have_pg_pool(on.pool())) {
dout(20) << "ignoring pg on deleted pool " << on << dendl;
continue;
for (auto it = m->get_pg_list().begin();
it != m->get_pg_list().end();
++it) {
- if (it->first.info.pgid.preferred() >= 0) {
- dout(20) << "ignoring localized pg " << it->first.info.pgid << dendl;
- continue;
- }
-
handle_pg_peering_evt(
spg_t(it->first.info.pgid.pgid, it->first.to),
it->first.info.history, it->second,
if (!require_same_or_newer_map(op, m->get_epoch(), false))
return;
- if (m->get_pgid().preferred() >= 0) {
- dout(10) << "ignoring localized pg " << m->get_pgid() << dendl;
- return;
- }
-
op->mark_started();
handle_pg_peering_evt(
spg_t(m->get_pgid().pgid, m->to),
for (auto p = m->pg_list.begin();
p != m->pg_list.end();
++p) {
- if (p->first.info.pgid.preferred() >= 0) {
- dout(10) << "ignoring localized pg " << p->first.info.pgid << dendl;
- continue;
- }
-
handle_pg_peering_evt(
spg_t(p->first.info.pgid.pgid, p->first.to),
p->first.info.history, p->second, p->first.epoch_sent,
if (!require_same_or_newer_map(op, m->epoch, false))
return;
- if (m->pgid.preferred() >= 0) {
- dout(10) << "ignoring localized pg " << m->pgid << dendl;
- return;
- }
-
op->mark_started();
PG *pg = _lookup_lock_pg(m->pgid);
++it) {
spg_t pgid = it->first;
- if (pgid.preferred() >= 0) {
- dout(10) << "ignoring localized pg " << pgid << dendl;
- continue;
- }
-
if (service.splitting(pgid)) {
peering_wait_for_split[pgid].push_back(
PGPeeringEventRef(
it != m->pg_list.end();
++it) {
spg_t pgid = *it;
- if (pgid.preferred() >= 0) {
- dout(10) << "ignoring localized pg " << pgid << dendl;
- continue;
- }
-
enqueue_peering_evt(
pgid,
PGPeeringEventRef(
vector<int> up, up2;
int up_primary;
for (unsigned ps = 0; ps < pi->get_pg_num(); ++ps) {
- pg_t pgid(ps, pool_id, -1);
+ pg_t pgid(ps, pool_id);
total_pg += pi->get_size();
pg_to_up_acting_osds(pgid, &up, &up_primary, nullptr, nullptr);
for (int osd : up) {
int pg_t::print(char *o, int maxlen) const
{
- if (preferred() >= 0)
- return snprintf(o, maxlen, "%llu.%xp%d", (unsigned long long)pool(), ps(), preferred());
- else
- return snprintf(o, maxlen, "%llu.%x", (unsigned long long)pool(), ps());
+ return snprintf(o, maxlen, "%llu.%x", (unsigned long long)pool(), ps());
}
bool pg_t::parse(const char *s)
{
uint64_t ppool;
uint32_t pseed;
- int32_t pref;
- int r = sscanf(s, "%llu.%xp%d", (long long unsigned *)&ppool, &pseed, &pref);
+ int r = sscanf(s, "%llu.%x", (long long unsigned *)&ppool, &pseed);
if (r < 2)
return false;
m_pool = ppool;
m_seed = pseed;
- if (r == 3)
- m_preferred = pref;
- else
- m_preferred = -1;
return true;
}
shard = shard_id_t::NO_SHARD;
uint64_t ppool;
uint32_t pseed;
- int32_t pref;
uint32_t pshard;
int r = sscanf(s, "%llu.%x", (long long unsigned *)&ppool, &pseed);
if (r < 2)
pgid.set_pool(ppool);
pgid.set_ps(pseed);
- const char *p = strchr(s, 'p');
- if (p) {
- // preferred PGs were removed years ago
- return false;
- }
-
- p = strchr(s, 's');
+ const char *p = strchr(s, 's');
if (p) {
r = sscanf(p, "s%u", &pshard);
if (r == 1) {
if ((unsigned)ceph_stable_mod(s, old_pg_num, old_mask) == m_seed) {
split = true;
if (children)
- children->insert(pg_t(s, m_pool, m_preferred));
+ children->insert(pg_t(s, m_pool));
}
}
}
unsigned o = ceph_stable_mod(x, old_pg_num, old_mask);
if (o == m_seed) {
split = true;
- children->insert(pg_t(x, m_pool, m_preferred));
+ children->insert(pg_t(x, m_pool));
}
}
}
{
f->dump_unsigned("pool", m_pool);
f->dump_unsigned("seed", m_seed);
- f->dump_int("preferred_osd", m_preferred);
}
void pg_t::generate_test_instances(list<pg_t*>& o)
{
o.push_back(new pg_t);
- o.push_back(new pg_t(1, 2, -1));
- o.push_back(new pg_t(13123, 3, -1));
- o.push_back(new pg_t(131223, 4, 23));
+ o.push_back(new pg_t(1, 2));
+ o.push_back(new pg_t(13123, 3));
+ o.push_back(new pg_t(131223, 4));
}
char *pg_t::calc_name(char *buf, const char *suffix_backwords) const
while (*suffix_backwords)
*--buf = *suffix_backwords++;
- if (m_preferred >= 0)
- *--buf ='p';
-
buf = ritoa<uint32_t, 16>(m_seed, buf);
*--buf = '.';
a.ondisk_log_start = eversion_t(1, 5);
a.created = 6;
a.last_epoch_clean = 7;
- a.parent = pg_t(1, 2, 3);
+ a.parent = pg_t(1, 2);
a.parent_split_bits = 12;
a.last_scrub = eversion_t(9, 10);
a.last_scrub_stamp = utime_t(11, 12);
list<pg_history_t*> h;
pg_history_t::generate_test_instances(h);
o.back()->history = *h.back();
- o.back()->pgid = spg_t(pg_t(1, 2, -1), shard_id_t::NO_SHARD);
+ o.back()->pgid = spg_t(pg_t(1, 2), shard_id_t::NO_SHARD);
o.back()->last_update = eversion_t(3, 4);
o.back()->last_complete = eversion_t(5, 6);
o.back()->last_user_version = 2;
void pg_create_t::generate_test_instances(list<pg_create_t*>& o)
{
o.push_back(new pg_create_t);
- o.push_back(new pg_create_t(1, pg_t(3, 4, -1), 2));
+ o.push_back(new pg_create_t(1, pg_t(3, 4), 2));
}
struct pg_t {
uint64_t m_pool;
uint32_t m_seed;
- int32_t m_preferred;
- pg_t() : m_pool(0), m_seed(0), m_preferred(-1) {}
- pg_t(ps_t seed, uint64_t pool, int pref=-1) :
- m_pool(pool), m_seed(seed), m_preferred(pref) {}
+ pg_t() : m_pool(0), m_seed(0) {}
+ pg_t(ps_t seed, uint64_t pool) :
+ m_pool(pool), m_seed(seed) {}
// cppcheck-suppress noExplicitConstructor
pg_t(const ceph_pg& cpg) :
- m_pool(cpg.pool), m_seed(cpg.ps), m_preferred((__s16)cpg.preferred) {}
+ m_pool(cpg.pool), m_seed(cpg.ps) {}
// cppcheck-suppress noExplicitConstructor
pg_t(const old_pg_t& opg) {
assert(m_pool < 0xffffffffull);
o.v.pool = m_pool;
o.v.ps = m_seed;
- o.v.preferred = (__s16)m_preferred;
+ o.v.preferred = (__s16)-1;
return o;
}
uint64_t pool() const {
return m_pool;
}
- int32_t preferred() const {
- return m_preferred;
- }
static const uint8_t calc_name_buf_size = 36; // max length for max values len("18446744073709551615.ffffffff") + future suffix len("_head") + '\0'
char *calc_name(char *buf, const char *suffix_backwords) const;
encode(v, bl);
encode(m_pool, bl);
encode(m_seed, bl);
- encode(m_preferred, bl);
+ encode((int32_t)-1, bl); // was preferred
}
void decode(bufferlist::iterator& bl) {
using ceph::decode;
decode(v, bl);
decode(m_pool, bl);
decode(m_seed, bl);
- decode(m_preferred, bl);
+ bl.advance(sizeof(int32_t)); // was preferred
}
void decode_old(bufferlist::iterator& bl) {
using ceph::decode;
inline bool operator<(const pg_t& l, const pg_t& r) {
return l.pool() < r.pool() ||
- (l.pool() == r.pool() && (l.preferred() < r.preferred() ||
- (l.preferred() == r.preferred() && (l.ps() < r.ps()))));
+ (l.pool() == r.pool() && (l.ps() < r.ps()));
}
inline bool operator<=(const pg_t& l, const pg_t& r) {
return l.pool() < r.pool() ||
- (l.pool() == r.pool() && (l.preferred() < r.preferred() ||
- (l.preferred() == r.preferred() && (l.ps() <= r.ps()))));
+ (l.pool() == r.pool() && (l.ps() <= r.ps()));
}
inline bool operator==(const pg_t& l, const pg_t& r) {
return l.pool() == r.pool() &&
- l.preferred() == r.preferred() &&
l.ps() == r.ps();
}
inline bool operator!=(const pg_t& l, const pg_t& r) {
return l.pool() != r.pool() ||
- l.preferred() != r.preferred() ||
l.ps() != r.ps();
}
inline bool operator>(const pg_t& l, const pg_t& r) {
return l.pool() > r.pool() ||
- (l.pool() == r.pool() && (l.preferred() > r.preferred() ||
- (l.preferred() == r.preferred() && (l.ps() > r.ps()))));
+ (l.pool() == r.pool() && (l.ps() > r.ps()));
}
inline bool operator>=(const pg_t& l, const pg_t& r) {
return l.pool() > r.pool() ||
- (l.pool() == r.pool() && (l.preferred() > r.preferred() ||
- (l.preferred() == r.preferred() && (l.ps() >= r.ps()))));
+ (l.pool() == r.pool() && (l.ps() >= r.ps()));
}
ostream& operator<<(ostream& out, const pg_t &pg);
size_t operator()( const pg_t& x ) const
{
static hash<uint32_t> H;
- return H((x.pool() & 0xffffffff) ^ (x.pool() >> 32) ^ x.ps() ^ x.preferred());
+ // xor (s32)-1 in there to preserve original m_preferred result (paranoia!)
+ return H((x.pool() & 0xffffffff) ^ (x.pool() >> 32) ^ x.ps() ^ (int32_t)(-1));
}
};
} // namespace std
uint64_t pool() const {
return pgid.pool();
}
- int32_t preferred() const {
- return pgid.preferred();
- }
static const uint8_t calc_name_buf_size = pg_t::calc_name_buf_size + 4; // 36 + len('s') + len("255");
char *calc_name(char *buf, const char *suffix_backwords) const;
<< " epoch " << pool_epoch << dendl;
for (ps_t ps = 0; ps < pool.get_pg_num(); ++ps) {
- pg_t pgid(ps, pool_id, -1);
+ pg_t pgid(ps, pool_id);
pg_t parent;
dout(20) << __func__
<< " pgid " << pgid << " parent " << parent << dendl;
set_up_map();
std::cerr << " osdmap.pool_max==" << osdmap.get_pool_max() << std::endl;
- pg_t rawpg(0, my_rep_pool, -1);
+ pg_t rawpg(0, my_rep_pool);
pg_t pgid = osdmap.raw_pg_to_pg(rawpg);
vector<int> up_osds, acting_osds;
int up_primary, acting_primary;
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, my_rep_pool, -1);
+ pg_t rawpg(0, my_rep_pool);
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, my_rep_pool, -1);
+ pg_t rawpg(0, my_rep_pool);
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, my_rep_pool, -1);
+ pg_t rawpg(0, my_rep_pool);
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, my_rep_pool, -1);
+ pg_t rawpg(0, my_rep_pool);
pg_t pgid = osdmap.raw_pg_to_pg(rawpg);
vector<int> up_osds;
vector<int> acting_osds;
TEST_F(OSDMapTest, KeepsNecessaryTemps) {
set_up_map();
- pg_t rawpg(0, my_rep_pool, -1);
+ pg_t rawpg(0, my_rep_pool);
pg_t pgid = osdmap.raw_pg_to_pg(rawpg);
vector<int> up_osds, acting_osds;
int up_primary, acting_primary;
TEST(pg_t, get_ancestor)
{
- ASSERT_EQ(pg_t(0, 0, -1), pg_t(16, 0, -1).get_ancestor(16));
- ASSERT_EQ(pg_t(1, 0, -1), pg_t(17, 0, -1).get_ancestor(16));
- ASSERT_EQ(pg_t(0, 0, -1), pg_t(16, 0, -1).get_ancestor(8));
- ASSERT_EQ(pg_t(16, 0, -1), pg_t(16, 0, -1).get_ancestor(80));
- ASSERT_EQ(pg_t(16, 0, -1), pg_t(16, 0, -1).get_ancestor(83));
- ASSERT_EQ(pg_t(1, 0, -1), pg_t(1321, 0, -1).get_ancestor(123).get_ancestor(8));
- ASSERT_EQ(pg_t(3, 0, -1), pg_t(1323, 0, -1).get_ancestor(123).get_ancestor(8));
- ASSERT_EQ(pg_t(3, 0, -1), pg_t(1323, 0, -1).get_ancestor(8));
+ ASSERT_EQ(pg_t(0, 0), pg_t(16, 0).get_ancestor(16));
+ ASSERT_EQ(pg_t(1, 0), pg_t(17, 0).get_ancestor(16));
+ ASSERT_EQ(pg_t(0, 0), pg_t(16, 0).get_ancestor(8));
+ ASSERT_EQ(pg_t(16, 0), pg_t(16, 0).get_ancestor(80));
+ ASSERT_EQ(pg_t(16, 0), pg_t(16, 0).get_ancestor(83));
+ ASSERT_EQ(pg_t(1, 0), pg_t(1321, 0).get_ancestor(123).get_ancestor(8));
+ ASSERT_EQ(pg_t(3, 0), pg_t(1323, 0).get_ancestor(123).get_ancestor(8));
+ ASSERT_EQ(pg_t(3, 0), pg_t(1323, 0).get_ancestor(8));
}
TEST(pg_t, split)
{
- pg_t pgid(0, 0, -1);
+ pg_t pgid(0, 0);
set<pg_t> s;
bool b;
b = pgid.is_split(2, 4, &s);
ASSERT_TRUE(b);
ASSERT_EQ(1u, s.size());
- ASSERT_TRUE(s.count(pg_t(2, 0, -1)));
+ ASSERT_TRUE(s.count(pg_t(2, 0)));
s.clear();
b = pgid.is_split(2, 8, &s);
ASSERT_TRUE(b);
ASSERT_EQ(3u, s.size());
- ASSERT_TRUE(s.count(pg_t(2, 0, -1)));
- ASSERT_TRUE(s.count(pg_t(4, 0, -1)));
- ASSERT_TRUE(s.count(pg_t(6, 0, -1)));
+ ASSERT_TRUE(s.count(pg_t(2, 0)));
+ ASSERT_TRUE(s.count(pg_t(4, 0)));
+ ASSERT_TRUE(s.count(pg_t(6, 0)));
s.clear();
b = pgid.is_split(3, 8, &s);
ASSERT_TRUE(b);
ASSERT_EQ(1u, s.size());
- ASSERT_TRUE(s.count(pg_t(4, 0, -1)));
+ ASSERT_TRUE(s.count(pg_t(4, 0)));
s.clear();
b = pgid.is_split(6, 8, NULL);
ASSERT_TRUE(!b);
ASSERT_EQ(0u, s.size());
- pgid = pg_t(1, 0, -1);
+ pgid = pg_t(1, 0);
s.clear();
b = pgid.is_split(2, 4, &s);
ASSERT_TRUE(b);
ASSERT_EQ(1u, s.size());
- ASSERT_TRUE(s.count(pg_t(3, 0, -1)));
+ ASSERT_TRUE(s.count(pg_t(3, 0)));
s.clear();
b = pgid.is_split(2, 6, &s);
ASSERT_TRUE(b);
ASSERT_EQ(2u, s.size());
- ASSERT_TRUE(s.count(pg_t(3, 0, -1)));
- ASSERT_TRUE(s.count(pg_t(5, 0, -1)));
+ ASSERT_TRUE(s.count(pg_t(3, 0)));
+ ASSERT_TRUE(s.count(pg_t(5, 0)));
s.clear();
b = pgid.is_split(2, 8, &s);
ASSERT_TRUE(b);
ASSERT_EQ(3u, s.size());
- ASSERT_TRUE(s.count(pg_t(3, 0, -1)));
- ASSERT_TRUE(s.count(pg_t(5, 0, -1)));
- ASSERT_TRUE(s.count(pg_t(7, 0, -1)));
+ ASSERT_TRUE(s.count(pg_t(3, 0)));
+ ASSERT_TRUE(s.count(pg_t(5, 0)));
+ ASSERT_TRUE(s.count(pg_t(7, 0)));
s.clear();
b = pgid.is_split(4, 8, &s);
ASSERT_TRUE(b);
ASSERT_EQ(1u, s.size());
- ASSERT_TRUE(s.count(pg_t(5, 0, -1)));
+ ASSERT_TRUE(s.count(pg_t(5, 0)));
s.clear();
b = pgid.is_split(3, 8, &s);
ASSERT_TRUE(b);
ASSERT_EQ(3u, s.size());
- ASSERT_TRUE(s.count(pg_t(3, 0, -1)));
- ASSERT_TRUE(s.count(pg_t(5, 0, -1)));
- ASSERT_TRUE(s.count(pg_t(7, 0, -1)));
+ ASSERT_TRUE(s.count(pg_t(3, 0)));
+ ASSERT_TRUE(s.count(pg_t(5, 0)));
+ ASSERT_TRUE(s.count(pg_t(7, 0)));
s.clear();
b = pgid.is_split(6, 8, &s);
ASSERT_TRUE(!b);
ASSERT_EQ(0u, s.size());
- pgid = pg_t(3, 0, -1);
+ pgid = pg_t(3, 0);
s.clear();
b = pgid.is_split(7, 8, &s);
ASSERT_TRUE(b);
ASSERT_EQ(1u, s.size());
- ASSERT_TRUE(s.count(pg_t(7, 0, -1)));
+ ASSERT_TRUE(s.count(pg_t(7, 0)));
s.clear();
b = pgid.is_split(7, 12, &s);
ASSERT_TRUE(b);
ASSERT_EQ(2u, s.size());
- ASSERT_TRUE(s.count(pg_t(7, 0, -1)));
- ASSERT_TRUE(s.count(pg_t(11, 0, -1)));
+ ASSERT_TRUE(s.count(pg_t(7, 0)));
+ ASSERT_TRUE(s.count(pg_t(11, 0)));
s.clear();
b = pgid.is_split(7, 11, &s);
ASSERT_TRUE(b);
ASSERT_EQ(1u, s.size());
- ASSERT_TRUE(s.count(pg_t(7, 0, -1)));
+ ASSERT_TRUE(s.count(pg_t(7, 0)));
}
void init(uint32_t to_set) {
pgnum = to_set;
for (uint32_t i = 0; i < pgnum; ++i) {
- pg_t pgid(i, 0, -1);
+ pg_t pgid(i, 0);
mappers[pgid].reset(
new MapperVerifier(
driver.get(),
++p) {
const pg_pool_t *pool = osdmap.get_pg_pool(p->first);
for (ps_t ps = 0; ps < pool->get_pg_num(); ps++) {
- pg_t pgid(ps, p->first, -1);
+ pg_t pgid(ps, p->first);
for (int i=0; i<100; i++) {
cout << pgid << " attempt " << i << std::endl;