]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: keep a region connection map
authorYehuda Sadeh <yehuda@inktank.com>
Sat, 27 Jul 2013 01:15:32 +0000 (18:15 -0700)
committerGreg Farnum <greg@inktank.com>
Mon, 29 Jul 2013 22:11:41 +0000 (15:11 -0700)
Fixes: #5793
Beforehand all remote copies were going to the master region
which was awfully wrong.

Signed-off-by: Yehuda Sadeh <yehuda@inktank.com>
Reviewed-by: Greg Farnum <greg@inktank.com>
src/rgw/rgw_rados.cc
src/rgw/rgw_rados.h

index 9e8f563741519b51876f3de3a3cbb50c5c4600a8..7131df9eaebb23c284fb604fecc394f96ca16708 100644 (file)
@@ -831,6 +831,11 @@ void RGWRados::finalize()
     RGWRESTConn *conn = iter->second;
     delete conn;
   }
+
+  for (iter = region_conn_map.begin(); iter != region_conn_map.end(); ++iter) {
+    RGWRESTConn *conn = iter->second;
+    delete conn;
+  }
 }
 
 /** 
@@ -896,6 +901,12 @@ int RGWRados::init_complete()
     }
     RGWRegion& region = iter->second;
     rest_master_conn = new RGWRESTConn(cct, this, region.endpoints);
+
+    for (iter = region_map.regions.begin(); iter != region_map.regions.end(); ++iter) {
+      RGWRegion& region = iter->second;
+
+      region_conn_map[region.name] = new RGWRESTConn(cct, this, region.endpoints);
+    }
   }
 
   map<string, RGWZone>::iterator ziter;
@@ -2535,7 +2546,17 @@ int RGWRados::copy_obj(void *ctx,
 
     RGWRESTConn *conn;
     if (source_zone.empty()) {
-      conn = rest_master_conn;
+      if (dest_bucket_info.region.empty()) {
+        /* source is in the master region */
+        conn = rest_master_conn;
+      } else {
+        map<string, RGWRESTConn *>::iterator iter = region_conn_map.find(src_bucket_info.region);
+        if (iter == zone_conn_map.end()) {
+          ldout(cct, 0) << "could not find region connection to region: " << source_zone << dendl;
+          return -ENOENT;
+        }
+        conn = iter->second;
+      }
     } else {
       map<string, RGWRESTConn *>::iterator iter = zone_conn_map.find(source_zone);
       if (iter == zone_conn_map.end()) {
index 099a7112514d39ec4839fe5116538ad4faccc4ed..d01f76ec2240719a93ad6555e014230810240fc8 100644 (file)
@@ -888,6 +888,7 @@ public:
   RGWRegionMap region_map;
   RGWRESTConn *rest_master_conn;
   map<string, RGWRESTConn *> zone_conn_map;
+  map<string, RGWRESTConn *> region_conn_map;
 
   RGWMetadataManager *meta_mgr;