]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: Speed up the building of valid de-duplicated hostnames for regions.
authorRobin H. Johnson <robbat2@gentoo.org>
Wed, 15 Apr 2015 01:30:16 +0000 (18:30 -0700)
committerRobin H. Johnson <robbat2@gentoo.org>
Wed, 15 Apr 2015 01:30:16 +0000 (18:30 -0700)
Signed-off-by: Robin H. Johnson <robbat2@gentoo.org>
src/rgw/rgw_rest.cc

index 4dc160a6cecce3f0c992f891d01aba1368468209..169b5baf557af7b3e56faae2464d297ebd54c65a 100644 (file)
@@ -161,7 +161,8 @@ string camelcase_dash_http_attr(const string& orig)
   return string(buf);
 }
 
-static list<string> hostnames_list;
+/* avoid duplicate hostnames in hostnames list */
+static set<string> hostnames_set;
 
 void rgw_rest_init(CephContext *cct, RGWRegion& region)
 {
@@ -193,18 +194,10 @@ void rgw_rest_init(CephContext *cct, RGWRegion& region)
     http_status_names[h->code] = h->name;
   }
 
-  /* avoid duplicate hostnames in hostnames list */
-  map<string, bool> hostnames_map;
   if (!cct->_conf->rgw_dns_name.empty()) {
-    hostnames_map[cct->_conf->rgw_dns_name] = true;
-  }
-  for (list<string>::iterator iter = region.hostnames.begin(); iter != region.hostnames.end(); ++iter) {
-    hostnames_map[*iter] = true;
-  }
-
-  for (map<string, bool>::iterator iter = hostnames_map.begin(); iter != hostnames_map.end(); ++iter) {
-    hostnames_list.push_back(iter->first);
+    hostnames_set.insert(cct->_conf->rgw_dns_name);
   }
+  hostnames_set.insert(region.hostnames.begin(),  region.hostnames.end());
 }
 
 static bool str_ends_with(const string& s, const string& suffix, size_t *pos)
@@ -224,8 +217,8 @@ static bool str_ends_with(const string& s, const string& suffix, size_t *pos)
 
 static bool rgw_find_host_in_domains(const string& host, string *domain, string *subdomain)
 {
-  list<string>::iterator iter;
-  for (iter = hostnames_list.begin(); iter != hostnames_list.end(); ++iter) {
+  set<string>::iterator iter;
+  for (iter = hostnames_set.begin(); iter != hostnames_set.end(); ++iter) {
     size_t pos;
     if (!str_ends_with(host, *iter, &pos))
       continue;