From 0045c901691ab29ad183f4d5b32671b07682323e Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Tue, 22 Nov 2011 15:29:43 -0800 Subject: [PATCH] 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 --- src/mon/MonMap.h | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/src/mon/MonMap.h b/src/mon/MonMap.h index e524b4d7bb0a5..bc302f9ef142b 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) { -- 2.39.5