if (s & CEPH_OSD_EXISTS)
dout(2) << " osd." << i->first << " DNE" << dendl;
}
- for (map<int32_t,entity_addr_t>::iterator i = pending_inc.new_up_client.begin();
+ for (auto i = pending_inc.new_up_client.begin();
i != pending_inc.new_up_client.end();
++i) {
//FIXME: insert cluster addresses too
wait_for_finished_proposal(op, new C_RetryMessage(this, op));
} else {
// mark new guy up.
- pending_inc.new_up_client[from] = m->get_orig_source_addr();
- if (!m->cluster_addr.is_blank_ip())
- pending_inc.new_up_cluster[from] = m->cluster_addr;
+ pending_inc.new_up_client[from] = m->get_orig_source_addrs();
+ pending_inc.new_up_cluster[from] = m->cluster_addr;
pending_inc.new_hb_back_up[from] = m->hb_back_addr;
- if (!m->hb_front_addr.is_blank_ip())
- pending_inc.new_hb_front_up[from] = m->hb_front_addr;
+ pending_inc.new_hb_front_up[from] = m->hb_front_addr;
down_pending_out.erase(from); // if any
for (const auto &upclient : new_up_client) {
f->open_object_section("osd");
f->dump_int("osd", upclient.first);
- f->dump_stream("public_addr") << upclient.second;
+ f->dump_stream("public_addr") << upclient.second.legacy_addr();
+ f->dump_object("public_addrs", upclient.second);
f->dump_stream("cluster_addr") << new_up_cluster.find(upclient.first)->second;
f->dump_stream("heartbeat_back_addr") << new_hb_back_up.find(upclient.first)->second;
map<int32_t, entity_addr_t>::const_iterator q;
}
osd_info.resize(m);
osd_xinfo.resize(m);
- osd_addrs->client_addr.resize(m);
+ osd_addrs->client_addrs.resize(m);
osd_addrs->cluster_addr.resize(m);
osd_addrs->hb_back_addr.resize(m);
osd_addrs->hb_front_addr.resize(m);
if (o->max_osd != n->max_osd)
diff++;
for (int i = 0; i < o->max_osd && i < n->max_osd; i++) {
- if ( n->osd_addrs->client_addr[i] && o->osd_addrs->client_addr[i] &&
- *n->osd_addrs->client_addr[i] == *o->osd_addrs->client_addr[i])
- n->osd_addrs->client_addr[i] = o->osd_addrs->client_addr[i];
+ if ( n->osd_addrs->client_addrs[i] && o->osd_addrs->client_addrs[i] &&
+ *n->osd_addrs->client_addrs[i] == *o->osd_addrs->client_addrs[i])
+ n->osd_addrs->client_addrs[i] = o->osd_addrs->client_addrs[i];
else
diff++;
if ( n->osd_addrs->cluster_addr[i] && o->osd_addrs->cluster_addr[i] &&
osd_info[osd] = osd_info_t();
osd_xinfo[osd] = osd_xinfo_t();
set_primary_affinity(osd, CEPH_OSD_DEFAULT_PRIMARY_AFFINITY);
- osd_addrs->client_addr[osd].reset(new entity_addr_t());
+ osd_addrs->client_addrs[osd].reset(new entity_addrvec_t());
osd_addrs->cluster_addr[osd].reset(new entity_addr_t());
osd_addrs->hb_front_addr[osd].reset(new entity_addr_t());
osd_addrs->hb_back_addr[osd].reset(new entity_addr_t());
for (const auto &client : inc.new_up_client) {
osd_state[client.first] |= CEPH_OSD_EXISTS | CEPH_OSD_UP;
- osd_addrs->client_addr[client.first].reset(new entity_addr_t(client.second));
- if (inc.new_hb_back_up.empty())
- osd_addrs->hb_back_addr[client.first].reset(new entity_addr_t(client.second)); //this is a backward-compatibility hack
- else
- osd_addrs->hb_back_addr[client.first].reset(
- new entity_addr_t(inc.new_hb_back_up.find(client.first)->second));
+ osd_addrs->client_addrs[client.first].reset(
+ new entity_addrvec_t(client.second));
+ osd_addrs->hb_back_addr[client.first].reset(
+ new entity_addr_t(inc.new_hb_back_up.find(client.first)->second));
const auto j = inc.new_hb_front_up.find(client.first);
if (j != inc.new_hb_front_up.end())
osd_addrs->hb_front_addr[client.first].reset(new entity_addr_t(j->second));
}
}
encode(osd_weight, bl);
- encode(osd_addrs->client_addr, bl, 0);
+ encode(osd_addrs->client_addrs, bl, 0);
// for encode(pg_temp, bl);
n = pg_temp->size();
}
}
encode(osd_weight, bl);
- encode(osd_addrs->client_addr, bl, features);
+ encode(osd_addrs->client_addrs, bl, features);
encode(*pg_temp, bl);
}
}
encode(osd_weight, bl);
- encode(osd_addrs->client_addr, bl, features);
+ encode(osd_addrs->client_addrs, bl, features);
encode(*pg_temp, bl);
encode(*primary_temp, bl);
}
}
decode(osd_weight, p);
- decode(osd_addrs->client_addr, p);
+ decode(osd_addrs->client_addrs, p);
if (v <= 5) {
pg_temp->clear();
decode(n, p);
if (ev >= 6)
decode(osd_addrs->cluster_addr, p);
else
- osd_addrs->cluster_addr.resize(osd_addrs->client_addr.size());
+ osd_addrs->cluster_addr.resize(osd_addrs->client_addrs.size());
if (ev >= 7) {
decode(cluster_snapshot_epoch, p);
}
}
decode(osd_weight, bl);
- decode(osd_addrs->client_addr, bl);
+ decode(osd_addrs->client_addrs, bl);
decode(*pg_temp, bl);
decode(*primary_temp, bl);
f->dump_float("weight", get_weightf(i));
f->dump_float("primary_affinity", get_primary_affinityf(i));
get_info(i).dump(f);
- f->dump_object("public_addr", get_addrs(i));
+ f->dump_stream("public_addr") << get_addrs(i).legacy_addr();
+ f->dump_object("public_addrs", get_addrs(i));
f->dump_stream("cluster_addr") << get_cluster_addr(i);
f->dump_stream("heartbeat_back_addr") << get_hb_back_addr(i);
f->dump_stream("heartbeat_front_addr") << get_hb_front_addr(i);
mempool::osdmap::set<int64_t> old_pools;
mempool::osdmap::map<string,map<string,string> > new_erasure_code_profiles;
mempool::osdmap::vector<string> old_erasure_code_profiles;
- mempool::osdmap::map<int32_t,entity_addr_t> new_up_client;
+ mempool::osdmap::map<int32_t,entity_addrvec_t> new_up_client;
mempool::osdmap::map<int32_t,entity_addr_t> new_up_cluster;
mempool::osdmap::map<int32_t,uint32_t> new_state; // XORed onto previous state.
mempool::osdmap::map<int32_t,uint32_t> new_weight;
CEPH_FEATUREMASK_SERVER_NAUTILUS;
struct addrs_s {
- mempool::osdmap::vector<ceph::shared_ptr<entity_addr_t> > client_addr;
+ mempool::osdmap::vector<ceph::shared_ptr<entity_addrvec_t> > client_addrs;
mempool::osdmap::vector<ceph::shared_ptr<entity_addr_t> > cluster_addr;
mempool::osdmap::vector<ceph::shared_ptr<entity_addr_t> > hb_back_addr;
mempool::osdmap::vector<ceph::shared_ptr<entity_addr_t> > hb_front_addr;
- entity_addr_t blank;
};
ceph::shared_ptr<addrs_s> osd_addrs;
+ entity_addr_t _blank_addr;
+ entity_addrvec_t _blank_addrvec;
+
mempool::osdmap::vector<__u32> osd_weight; // 16.16 fixed point, 0x10000 = "in", 0 = "out"
mempool::osdmap::vector<osd_info_t> osd_info;
ceph::shared_ptr<PGTempMap> pg_temp; // temp pg mapping (e.g. while we rebuild)
}
int find_osd_on_ip(const entity_addr_t& ip) const;
- entity_addrvec_t get_addrs(int osd) const {
+ const entity_addrvec_t& get_addrs(int osd) const {
assert(exists(osd));
- return entity_addrvec_t(osd_addrs->client_addr[osd] ? *osd_addrs->client_addr[osd] : osd_addrs->blank);
+ return osd_addrs->client_addrs[osd] ?
+ *osd_addrs->client_addrs[osd] : _blank_addrvec;
}
entity_addrvec_t get_cluster_addrs(int osd) const {
assert(exists(osd));
- if (!osd_addrs->cluster_addr[osd] || *osd_addrs->cluster_addr[osd] == entity_addr_t())
- return get_addrs(osd);
+ if (!osd_addrs->cluster_addr[osd])
+ return entity_addrvec_t();
return entity_addrvec_t(*osd_addrs->cluster_addr[osd]);
}
entity_addrvec_t get_hb_back_addrs(int osd) const {
assert(exists(osd));
- return entity_addrvec_t(osd_addrs->hb_back_addr[osd] ? *osd_addrs->hb_back_addr[osd] : osd_addrs->blank);
+ return entity_addrvec_t(osd_addrs->hb_back_addr[osd] ?
+ *osd_addrs->hb_back_addr[osd] : _blank_addr);
}
entity_addrvec_t get_hb_front_addrs(int osd) const {
assert(exists(osd));
- return entity_addrvec_t(osd_addrs->hb_front_addr[osd] ? *osd_addrs->hb_front_addr[osd] : osd_addrs->blank);
+ return entity_addrvec_t(osd_addrs->hb_front_addr[osd] ?
+ *osd_addrs->hb_front_addr[osd] : _blank_addr);
}
- entity_addrvec_t get_most_recent_addrs(int osd) const {
- assert(exists(osd));
+ const entity_addrvec_t& get_most_recent_addrs(int osd) const {
return get_addrs(osd);
}
}
const entity_addr_t &get_hb_back_addr(int osd) const {
assert(exists(osd));
- return osd_addrs->hb_back_addr[osd] ? *osd_addrs->hb_back_addr[osd] : osd_addrs->blank;
+ return osd_addrs->hb_back_addr[osd] ?
+ *osd_addrs->hb_back_addr[osd] : _blank_addr;
}
const entity_addr_t &get_hb_front_addr(int osd) const {
assert(exists(osd));
- return osd_addrs->hb_front_addr[osd] ? *osd_addrs->hb_front_addr[osd] : osd_addrs->blank;
+ return osd_addrs->hb_front_addr[osd] ?
+ *osd_addrs->hb_front_addr[osd] : _blank_addr;
}
const uuid_d& get_uuid(int osd) const {