Inode *in = f->inode;
pool = in->layout.fl_pg_pool;
- return osdmap->get_pg_pool(pool).get_size();
+ return osdmap->get_pg_pool(pool)->get_size();
}
int Client::get_default_preferred_pg(int fd)
int RadosClient::snap_list(PoolCtx *pool, vector<rados_snap_t> *snaps)
{
Mutex::Locker l(lock);
- const pg_pool_t& pi = objecter->osdmap->get_pg_pool(pool->poolid);
- for (map<snapid_t,pool_snap_info_t>::const_iterator p = pi.snaps.begin();
- p != pi.snaps.end();
+ const pg_pool_t *pi = objecter->osdmap->get_pg_pool(pool->poolid);
+ for (map<snapid_t,pool_snap_info_t>::const_iterator p = pi->snaps.begin();
+ p != pi->snaps.end();
p++)
snaps->push_back(p->first);
return 0;
int RadosClient::snap_lookup(PoolCtx *pool, const char *name, rados_snap_t *snapid)
{
Mutex::Locker l(lock);
- const pg_pool_t& pi = objecter->osdmap->get_pg_pool(pool->poolid);
- for (map<snapid_t,pool_snap_info_t>::const_iterator p = pi.snaps.begin();
- p != pi.snaps.end();
+ const pg_pool_t *pi = objecter->osdmap->get_pg_pool(pool->poolid);
+ for (map<snapid_t,pool_snap_info_t>::const_iterator p = pi->snaps.begin();
+ p != pi->snaps.end();
p++) {
if (p->second.name == name) {
*snapid = p->first;
int RadosClient::snap_get_name(PoolCtx *pool, rados_snap_t snapid, std::string *s)
{
Mutex::Locker l(lock);
- const pg_pool_t& pi = objecter->osdmap->get_pg_pool(pool->poolid);
- map<snapid_t,pool_snap_info_t>::const_iterator p = pi.snaps.find(snapid);
- if (p == pi.snaps.end())
+ const pg_pool_t *pi = objecter->osdmap->get_pg_pool(pool->poolid);
+ map<snapid_t,pool_snap_info_t>::const_iterator p = pi->snaps.find(snapid);
+ if (p == pi->snaps.end())
return -ENOENT;
*s = p->second.name.c_str();
return 0;
int RadosClient::snap_get_stamp(PoolCtx *pool, rados_snap_t snapid, time_t *t)
{
Mutex::Locker l(lock);
- const pg_pool_t& pi = objecter->osdmap->get_pg_pool(pool->poolid);
- map<snapid_t,pool_snap_info_t>::const_iterator p = pi.snaps.find(snapid);
- if (p == pi.snaps.end())
+ const pg_pool_t *pi = objecter->osdmap->get_pg_pool(pool->poolid);
+ map<snapid_t,pool_snap_info_t>::const_iterator p = pi->snaps.find(snapid);
+ if (p == pi->snaps.end())
return -ENOENT;
*t = p->second.stamp.sec();
return 0;
p != need_to_purge.end();
p++) {
int id = p->first;
- const pg_pool_t& pi = mds->osdmap->get_pg_pool(id);
+ const pg_pool_t *pi = mds->osdmap->get_pg_pool(id);
for (set<snapid_t>::iterator q = p->second.begin();
q != p->second.end();
q++) {
- if (pi.is_removed_snap(*q)) {
+ if (pi->is_removed_snap(*q)) {
dout(10) << " osdmap marks " << *q << " as removed" << dendl;
all_purged[id].push_back(*q);
} else {
dout(10) << " ignoring removed_snaps " << q->second << " on non-existent pool " << q->first << dendl;
continue;
}
- const pg_pool_t& pi = osdmap.get_pg_pool(q->first);
+ const pg_pool_t *pi = osdmap.get_pg_pool(q->first);
for (vector<snapid_t>::iterator p = q->second.begin();
p != q->second.end();
p++) {
- if (*p > pi.get_snap_seq() ||
- !pi.removed_snaps.contains(*p))
+ if (*p > pi->get_snap_seq() ||
+ !pi->removed_snaps.contains(*p))
return false;
}
}
ss << "unrecognized pool '" << m->cmd[3] << "'";
err = -ENOENT;
} else {
- const pg_pool_t *p = &osdmap.get_pg_pool(pool);
+ const pg_pool_t *p = osdmap.get_pg_pool(pool);
pg_pool_t *pp = 0;
if (pending_inc.new_pools.count(pool))
pp = &pending_inc.new_pools[pool];
ss << "unrecognized pool '" << m->cmd[3] << "'";
err = -ENOENT;
} else {
- const pg_pool_t *p = &osdmap.get_pg_pool(pool);
+ const pg_pool_t *p = osdmap.get_pg_pool(pool);
pg_pool_t *pp = 0;
if (pending_inc.new_pools.count(pool))
pp = &pending_inc.new_pools[pool];
ss << "unrecognized pool '" << m->cmd[3] << "'";
err = -ENOENT;
} else {
- const pg_pool_t *p = &osdmap.get_pg_pool(pool);
+ const pg_pool_t *p = osdmap.get_pg_pool(pool);
int n = atoi(m->cmd[5].c_str());
if (n) {
if (m->cmd[4] == "size") {
pg_pool_t *pp = 0;
if (pending_inc.new_pools.count(m->pool)) pp = &pending_inc.new_pools[m->pool];
//check if the snapname exists
- if ((osdmap.get_pg_pool(m->pool).snap_exists(m->name.c_str())) ||
+ if ((osdmap.get_pg_pool(m->pool)->snap_exists(m->name.c_str())) ||
(pp && pp->snap_exists(m->name.c_str()))) snap_exists = true;
switch (m->op) {
if (m->op == POOL_OP_CREATE) {
return prepare_pool_op_create(m);
}
- const pg_pool_t *p = &osdmap.get_pg_pool(m->pool);
+ const pg_pool_t *p = osdmap.get_pg_pool(m->pool);
pg_pool_t* pp = 0;
//if the pool isn't already in the update, add it
if (!pending_inc.new_pools.count(m->pool))
pool_map[id] = p;
p->get();
- const pg_pool_t& pi = osdmap->get_pg_pool(id);
- p->info = pi;
- p->snapc = pi.get_snap_context();
+ const pg_pool_t *pi = osdmap->get_pg_pool(id);
+ p->info = *pi;
+ p->snapc = pi->get_snap_context();
- pi.build_removed_snaps(p->removed_snaps);
+ pi->build_removed_snaps(p->removed_snaps);
}
dout(10) << "_get_pool " << p->id << " " << p->num_pg << " -> " << (p->num_pg+1) << dendl;
p->num_pg++;
for (map<int, PGPool*>::iterator p = pool_map.begin();
p != pool_map.end();
p++) {
- const pg_pool_t& pi = osdmap->get_pg_pool(p->first);
- if (pi.get_snap_epoch() == cur+1) {
+ const pg_pool_t* pi = osdmap->get_pg_pool(p->first);
+ if (pi->get_snap_epoch() == cur+1) {
PGPool *pool = p->second;
- pi.build_removed_snaps(pool->newly_removed_snaps);
+ pi->build_removed_snaps(pool->newly_removed_snaps);
pool->newly_removed_snaps.subtract(pool->removed_snaps);
dout(10) << " pool " << p->first << " removed_snaps " << pool->removed_snaps
<< ", newly so are " << pool->newly_removed_snaps << ")"
<< dendl;
- pool->info = pi;
- pool->snapc = pi.get_snap_context();
+ pool->info = *pi;
+ pool->snapc = pi->get_snap_context();
} else {
- dout(10) << " pool " << p->first << " unchanged (snap_epoch = " << pi.get_snap_epoch() << ")" << dendl;
+ dout(10) << " pool " << p->first << " unchanged (snap_epoch = " << pi->get_snap_epoch() << ")" << dendl;
}
}
ceph_object_layout make_object_layout(object_t oid, int pg_pool, int preferred=-1, int object_stripe_unit = 0) {
// calculate ps (placement seed)
- pg_pool_t pool = get_pg_pool(pg_pool);
- ps_t ps = ceph_str_hash(pool.v.object_hash, oid.name.c_str(), oid.name.length());
+ const pg_pool_t *pool = get_pg_pool(pg_pool);
+ ps_t ps = ceph_str_hash(pool->v.object_hash, oid.name.c_str(), oid.name.length());
// mix in preferred osd, so we don't get the same peers for
// all of the placement pgs (e.g. 0.0p*)
int get_pg_num(int pg_pool)
{
- pg_pool_t pool = get_pg_pool(pg_pool);
- return pool.get_pg_num();
+ const pg_pool_t *pool = get_pg_pool(pg_pool);
+ return pool->get_pg_num();
}
int get_pg_layout(int pg_pool, int seed, ceph_object_layout& layout) {
- pg_pool_t pool = get_pg_pool(pg_pool);
+ const pg_pool_t *pool = get_pg_pool(pg_pool);
pg_t pgid = pg_t(seed, pg_pool, -1);
layout.ol_pgid = pgid.v;
layout.ol_stripe_unit = 0;
- return pool.get_pg_num();
+ return pool->get_pg_num();
}
// pg -> (osd list)
bool have_pg_pool(int p) const {
return pools.count(p);
}
- const pg_pool_t& get_pg_pool(int p) {
- assert(pools.count(p));
- return pools[p];
+ const pg_pool_t* get_pg_pool(int p) {
+ if(pools.count(p))
+ return &pools[p];
+ return NULL;
}
unsigned get_pg_size(pg_t pg) {
assert(pools.count(pg.pool()));
for (map<int,pg_pool_t>::const_iterator p = osdmap.get_pools().begin();
p != osdmap.get_pools().end();
p++) {
- const pg_pool_t& pool = osdmap.get_pg_pool(p->first);
- for (int ps = 0; ps < pool.get_pg_num(); ps++) {
+ const pg_pool_t *pool = osdmap.get_pg_pool(p->first);
+ for (int ps = 0; ps < pool->get_pg_num(); ps++) {
pg_t pgid(ps, p->first, -1);
for (int i=0; i<100; i++) {
cout << pgid << " attempt " << i << std::endl;
dev /= n;
dev = sqrt(dev);
- double pgavg = (double)osdmap.get_pg_pool(0).get_pg_num() / (double)n;
+ double pgavg = (double)osdmap.get_pg_pool(0)->get_pg_num() / (double)n;
double edev = sqrt(pgavg) * (double)avg / pgavg;
cout << " avg " << avg
<< " stddev " << dev