* @type: storage ruleset type (user defined)
* @size: output set size
*/
-int crush_find_rule(struct crush_map *map, int ruleset, int type, int size)
+int crush_find_rule(const struct crush_map *map, int ruleset, int type, int size)
{
__u32 i;
* true if device is marked "out" (failed, fully offloaded)
* of the cluster
*/
-static int is_out(struct crush_map *map, __u32 *weight, int item, int x)
+static int is_out(const struct crush_map *map, const __u32 *weight, int item, int x)
{
if (weight[item] >= 0x10000)
return 0;
* @recurse_to_leaf: true if we want one device under each item of given type
* @out2: second output vector for leaf items (if @recurse_to_leaf)
*/
-static int crush_choose(struct crush_map *map,
+static int crush_choose(const struct crush_map *map,
struct crush_bucket *bucket,
- __u32 *weight,
+ const __u32 *weight,
int x, int numrep, int type,
int *out, int outpos,
int firstn, int recurse_to_leaf,
* @result_max: maximum result size
* @force: force initial replica choice; -1 for none
*/
-int crush_do_rule(struct crush_map *map,
+int crush_do_rule(const struct crush_map *map,
int ruleno, int x, int *result, int result_max,
- int force, __u32 *weight)
+ int force, const __u32 *weight)
{
int result_len;
int force_context[CRUSH_MAX_DEPTH];
const utime_t& get_created() const { return created; }
const utime_t& get_modified() const { return modified; }
- bool is_blacklisted(const entity_addr_t& a);
+ bool is_blacklisted(const entity_addr_t& a) const;
string get_cluster_snapshot() const {
if (cluster_snapshot_epoch == epoch)
}
int calc_num_osds();
- void get_all_osds(set<int32_t>& ls) {
+ void get_all_osds(set<int32_t>& ls) const {
for (int i=0; i<max_osd; i++)
if (exists(i))
ls.insert(i);
return i;
return -1;
}
- bool have_inst(int osd) {
+ bool have_inst(int osd) const {
return exists(osd) && is_up(osd);
}
const entity_addr_t &get_addr(int osd) const {
assert(exists(osd));
return osd_hb_addr[osd];
}
- entity_inst_t get_inst(int osd) {
+ entity_inst_t get_inst(int osd) const {
assert(exists(osd));
assert(is_up(osd));
return entity_inst_t(entity_name_t::OSD(osd), osd_addr[osd]);
}
- entity_inst_t get_cluster_inst(int osd) {
+ entity_inst_t get_cluster_inst(int osd) const {
assert(exists(osd));
assert(is_up(osd));
if (osd_cluster_addr[osd] == entity_addr_t())
return get_inst(osd);
return entity_inst_t(entity_name_t::OSD(osd), osd_cluster_addr[osd]);
}
- entity_inst_t get_hb_inst(int osd) {
+ entity_inst_t get_hb_inst(int osd) const {
assert(exists(osd));
assert(is_up(osd));
return entity_inst_t(entity_name_t::OSD(osd), osd_hb_addr[osd]);
/**** mapping facilities ****/
- int object_locator_to_pg(const object_t& oid, const object_locator_t& loc, pg_t &pg) {
+ int object_locator_to_pg(const object_t& oid, const object_locator_t& loc, pg_t &pg) const {
// calculate ps (placement seed)
const pg_pool_t *pool = get_pg_pool(loc.get_pool());
if (!pool)
return 0;
}
- pg_t object_locator_to_pg(const object_t& oid, const object_locator_t& loc) {
+ pg_t object_locator_to_pg(const object_t& oid, const object_locator_t& loc) const {
pg_t pg;
int ret = object_locator_to_pg(oid, loc, pg);
assert(ret == 0);
return pg;
}
- object_locator_t file_to_object_locator(const ceph_file_layout& layout) {
+ object_locator_t file_to_object_locator(const ceph_file_layout& layout) const {
return object_locator_t(layout.fl_pg_pool, layout.fl_pg_preferred);
}
// oid -> pg
- ceph_object_layout file_to_object_layout(object_t oid, ceph_file_layout& layout) {
+ ceph_object_layout file_to_object_layout(object_t oid, ceph_file_layout& layout) const {
return make_object_layout(oid, layout.fl_pg_pool,
layout.fl_pg_preferred);
}
- ceph_object_layout make_object_layout(object_t oid, int pg_pool, int preferred=-1) {
+ ceph_object_layout make_object_layout(object_t oid, int pg_pool, int preferred=-1) const {
object_locator_t loc(pg_pool);
loc.preferred = preferred;
return ol;
}
- int get_pg_num(int pg_pool)
+ int get_pg_num(int pg_pool) const
{
const pg_pool_t *pool = get_pg_pool(pg_pool);
return pool->get_pg_num();
// pg -> (osd list)
private:
- int _pg_to_osds(const pg_pool_t& pool, pg_t pg, vector<int>& osds) {
+ int _pg_to_osds(const pg_pool_t& pool, pg_t pg, vector<int>& osds) const {
// map to osds[]
ps_t pps = pool.raw_pg_to_pps(pg); // placement ps
unsigned size = pool.get_size();
}
// pg -> (up osd list)
- void _raw_to_up_osds(pg_t pg, vector<int>& raw, vector<int>& up) {
+ void _raw_to_up_osds(pg_t pg, vector<int>& raw, vector<int>& up) const {
up.clear();
for (unsigned i=0; i<raw.size(); i++) {
if (!exists(raw[i]) || is_down(raw[i]))
}
}
- bool _raw_to_temp_osds(const pg_pool_t& pool, pg_t pg, vector<int>& raw, vector<int>& temp) {
+ bool _raw_to_temp_osds(const pg_pool_t& pool, pg_t pg, vector<int>& raw, vector<int>& temp) const {
pg = pool.raw_pg_to_pg(pg);
- map<pg_t,vector<int> >::iterator p = pg_temp.find(pg);
+ map<pg_t,vector<int> >::const_iterator p = pg_temp.find(pg);
if (p != pg_temp.end()) {
temp.clear();
for (unsigned i=0; i<p->second.size(); i++) {
return _pg_to_osds(*pool, pg, raw);
}
- int pg_to_acting_osds(pg_t pg, vector<int>& acting) { // list of osd addr's
+ int pg_to_acting_osds(pg_t pg, vector<int>& acting) const { // list of osd addr's
const pg_pool_t *pool = get_pg_pool(pg.pool());
if (!pool)
return 0;
_raw_to_up_osds(pg, raw, up);
}
- void pg_to_up_acting_osds(pg_t pg, vector<int>& up, vector<int>& acting) {
+ void pg_to_up_acting_osds(pg_t pg, vector<int>& up, vector<int>& acting) const {
const pg_pool_t *pool = get_pg_pool(pg.pool());
if (!pool)
return;
}
const map<int64_t,pg_pool_t>& get_pools() { return pools; }
- const char *get_pool_name(int64_t p) {
- if (pool_name.count(p))
- return pool_name[p].c_str();
+ const char *get_pool_name(int64_t p) const {
+ map<int64_t, string>::const_iterator i = pool_name.find(p);
+ if (i != pool_name.end())
+ return i->second.c_str();
return 0;
}
bool have_pg_pool(int64_t p) const {
return pools.count(p);
}
- const pg_pool_t* get_pg_pool(int64_t p) {
- if (pools.count(p))
- return &pools[p];
+ const pg_pool_t* get_pg_pool(int64_t p) const {
+ map<int64_t, pg_pool_t>::const_iterator i = pools.find(p);
+ if (i != pools.end())
+ return &i->second;
return NULL;
}
unsigned get_pg_size(pg_t pg) const {
assert(p != pools.end());
return p->second.get_size();
}
- int get_pg_type(pg_t pg) {
+ int get_pg_type(pg_t pg) const {
assert(pools.count(pg.pool()));
- pg_pool_t &pool = pools[pg.pool()];
- return pool.get_type();
+ return pools.find(pg.pool())->second.get_type();
}
- pg_t raw_pg_to_pg(pg_t pg) {
+ pg_t raw_pg_to_pg(pg_t pg) const {
assert(pools.count(pg.pool()));
- pg_pool_t &pool = pools[pg.pool()];
- return pool.raw_pg_to_pg(pg);
+ return pools.find(pg.pool())->second.raw_pg_to_pg(pg);
}
// pg -> primary osd
};
-typedef std::tr1::shared_ptr<OSDMap> OSDMapRef;
+typedef std::tr1::shared_ptr<const OSDMap> OSDMapRef;
inline ostream& operator<<(ostream& out, const OSDMap& m) {
m.print_summary(out);