From: Sage Weil Date: Tue, 22 Nov 2011 23:29:43 +0000 (-0800) Subject: monmap: assign rank by sorting addr, not name X-Git-Tag: v0.39~17^2~4 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=0045c901691ab29ad183f4d5b32671b07682323e;p=ceph.git monmap: assign rank by sorting addr, not name This allows monitors to bootstrap knowing peer addrs but not their names, as when we specify mon_host. Signed-off-by: Sage Weil --- diff --git a/src/mon/MonMap.h b/src/mon/MonMap.h index e524b4d7bb0..bc302f9ef14 100644 --- a/src/mon/MonMap.h +++ b/src/mon/MonMap.h @@ -33,18 +33,24 @@ class MonMap { utime_t last_changed; utime_t created; + map addr_name; vector rank_name; vector rank_addr; void calc_ranks() { rank_name.resize(mon_addr.size()); rank_addr.resize(mon_addr.size()); - unsigned i = 0; for (map::iterator p = mon_addr.begin(); p != mon_addr.end(); + p++) { + addr_name[p->second] = p->first; + } + unsigned i = 0; + for (map::iterator p = addr_name.begin(); + p != addr_name.end(); p++, i++) { - rank_name[i] = p->first; - rank_addr[i] = p->second; + rank_name[i] = p->second; + rank_addr[i] = p->first; } } @@ -109,14 +115,10 @@ class MonMap { return -1; } bool get_addr_name(entity_addr_t a, string& name) { - for (map::iterator p = mon_addr.begin(); - p != mon_addr.end(); - p++) - if (p->second == a) { - name = p->first; - return true; - } - return false; + if (addr_name.count(a) == 0) + return false; + name = addr_name[a]; + return true; } void rename(string oldname, string newname) {