]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd/OSDMap: switch to addrvec for public_addr 22306/head
authorSage Weil <sage@redhat.com>
Wed, 30 May 2018 21:13:32 +0000 (16:13 -0500)
committerSage Weil <sage@redhat.com>
Fri, 1 Jun 2018 13:08:21 +0000 (08:08 -0500)
Signed-off-by: Sage Weil <sage@redhat.com>
src/mon/OSDMonitor.cc
src/osd/OSDMap.cc
src/osd/OSDMap.h
src/test/mon/test_mon_workloadgen.cc
src/test/osd/TestOSDMap.cc

index 7a451604ff1c9a953787b622a5aa3f311eb7ffa6..f0400c2a0d1c63d7e7fc8ffdefeee6cb4326bd49 100644 (file)
@@ -1256,7 +1256,7 @@ void OSDMonitor::encode_pending(MonitorDBStore::TransactionRef t)
     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
@@ -2758,12 +2758,10 @@ bool OSDMonitor::prepare_boot(MonOpRequestRef op)
     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
 
index 7be113a0efc566b8d326518e32ef1d5ed138b928..75605d2ef98b477a543bae0ee77d1546c1d20c68 100644 (file)
@@ -915,7 +915,8 @@ void OSDMap::Incremental::dump(Formatter *f) const
   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;
@@ -1174,7 +1175,7 @@ void OSDMap::set_max_osd(int m)
   }
   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);
@@ -1497,9 +1498,9 @@ void OSDMap::dedup(const OSDMap *o, OSDMap *n)
   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] &&
@@ -1872,7 +1873,7 @@ int OSDMap::apply_incremental(const Incremental &inc)
       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());
@@ -1884,12 +1885,10 @@ int OSDMap::apply_incremental(const Incremental &inc)
 
   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));
@@ -2452,7 +2451,7 @@ void OSDMap::encode_client_old(bufferlist& bl) const
     }
   }
   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();
@@ -2501,7 +2500,7 @@ void OSDMap::encode_classic(bufferlist& bl, uint64_t features) const
     }
   }
   encode(osd_weight, bl);
-  encode(osd_addrs->client_addr, bl, features);
+  encode(osd_addrs->client_addrs, bl, features);
 
   encode(*pg_temp, bl);
 
@@ -2590,7 +2589,7 @@ void OSDMap::encode(bufferlist& bl, uint64_t features) const
       }
     }
     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);
@@ -2754,7 +2753,7 @@ void OSDMap::decode_classic(bufferlist::const_iterator& p)
     }
   }
   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);
@@ -2788,7 +2787,7 @@ void OSDMap::decode_classic(bufferlist::const_iterator& 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);
@@ -2865,7 +2864,7 @@ void OSDMap::decode(bufferlist::const_iterator& bl)
       }
     }
     decode(osd_weight, bl);
-    decode(osd_addrs->client_addr, bl);
+    decode(osd_addrs->client_addrs, bl);
 
     decode(*pg_temp, bl);
     decode(*primary_temp, bl);
@@ -3073,7 +3072,8 @@ void OSDMap::dump(Formatter *f) const
       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);
index d58c052f9d000f8a98ec23768278ffea139fde92..e18407fc022b78d70c9117bda5018e13d3191832 100644 (file)
@@ -375,7 +375,7 @@ public:
     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;
@@ -524,14 +524,16 @@ private:
     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)
@@ -892,26 +894,28 @@ public:
   }
   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);
   }
 
@@ -922,11 +926,13 @@ public:
   }
   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 {
index 7306ba334698e9a062a02bfba070f7d12ea5ebed..1b968d33650f4c9df6267849a2dd89b2048ad403 100644 (file)
@@ -854,7 +854,7 @@ class OSDStub : public TestStub
     *_dout << dendl;
 
     if (osdmap.is_up(whoami) &&
-       osdmap.get_addr(whoami) == messenger->get_myaddr()) {
+       osdmap.get_addrs(whoami) == messenger->get_myaddrs()) {
       dout(1) << __func__
              << " got into the osdmap and we're up!" << dendl;
     }
index fbea1a4783129f4038700802b3bbf121bb366304..8a690f9963b3cd9b4a99f83c82d3623aced1c957 100644 (file)
@@ -48,7 +48,7 @@ public:
       sample_uuid.generate_random();
       sample_addr.nonce = i;
       pending_inc.new_state[i] = CEPH_OSD_EXISTS | CEPH_OSD_NEW;
-      pending_inc.new_up_client[i] = sample_addr;
+      pending_inc.new_up_client[i] = entity_addrvec_t(sample_addr);
       pending_inc.new_up_cluster[i] = sample_addr;
       pending_inc.new_hb_back_up[i] = sample_addr;
       pending_inc.new_hb_front_up[i] = sample_addr;