]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mon: discover peer names during probe
authorSage Weil <sage@inktank.com>
Thu, 17 May 2012 04:09:58 +0000 (21:09 -0700)
committerSage Weil <sage@inktank.com>
Fri, 18 May 2012 23:21:38 +0000 (16:21 -0700)
Fill in noname- entires in initial generate monmap (e.g., from mon_host)
with real peer names as we discover them.

This will make the upcoming initial quorum config check work by letting us
identify peers by name.

Signed-off-by: Sage Weil <sage@inktank.com>
src/mon/MonMap.h
src/mon/Monitor.cc

index f294b497145e6c665aaf8240e64d6622be366e87..f9706fd665b5156da20832a51e5287f06aaddc8b 100644 (file)
@@ -120,6 +120,13 @@ class MonMap {
     assert(n < rank_name.size());
     return rank_name[n];
   }
+  string get_name(entity_addr_t a) const {
+    map<entity_addr_t,string>::const_iterator p = addr_name.find(a);
+    if (p == addr_name.end())
+      return string();
+    else
+      return p->second;
+  }
 
   int get_rank(const string& n) {
     for (unsigned i=0; i<rank_name.size(); i++)
index 05d3563fecd0b157bab7adf0b2f70dda700364b5..f0cf460011d9039172ffa000b3d874101e80f42a 100644 (file)
@@ -575,6 +575,15 @@ void Monitor::handle_probe_reply(MMonProbe *m)
     return;
   }
 
+  // rename peer?
+  string peer_name = monmap->get_name(m->get_source_addr());
+  if (peer_name.find("noname-") == 0) {
+    dout(10) << " renaming peer " << m->get_source_addr() << " "
+            << peer_name << " -> " << m->name << " in my monmap"
+            << dendl;
+    monmap->rename(peer_name, m->name);
+  }
+
   // is there an existing quorum?
   if (m->quorum.size()) {
     dout(10) << " existing quorum " << m->quorum << dendl;