]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: auto create placement target params
authorYehuda Sadeh <yehuda@redhat.com>
Thu, 15 Oct 2015 21:29:16 +0000 (14:29 -0700)
committerYehuda Sadeh <yehuda@redhat.com>
Fri, 12 Feb 2016 00:13:14 +0000 (16:13 -0800)
Signed-off-by: Yehuda Sadeh <yehuda@redhat.com>
src/rgw/rgw_rados.cc
src/rgw/rgw_rados.h

index 63846a1eaffa041b6e4cc4cdacff4087c43b646c..3631ab1cd80f1ab96f096e452f1f1f10da3063d0 100644 (file)
@@ -185,6 +185,8 @@ int RGWZoneGroup::create_default(bool old_format)
     name = id;
   }
 
+  post_process_params();
+
   return 0;
 }
 
@@ -248,9 +250,45 @@ int RGWZoneGroup::add_zone(const RGWZoneParams& zone_params, bool is_master, con
   if (!endpoints.empty()) {
     zone.endpoints = endpoints;
   }
+
+  post_process_params();
+
   return update();
 }
 
+void RGWZoneGroup::post_process_params()
+{
+  bool log_data = zones.size() > 1;
+
+  for (map<string, RGWZone>::iterator iter = zones.begin(); iter != zones.end(); ++iter) {
+    RGWZone& zone = iter->second;
+    zone.log_data = log_data;
+    zone.log_meta = (is_master && zone.name == master_zone);
+
+    RGWZoneParams zone_params(zone.id, zone.name);
+    int ret = zone_params.init(cct, store);
+    if (ret < 0) {
+      ldout(cct, 0) << "WARNING: could not read zone params for zone id=" << zone.id << " name=" << zone.name << dendl;
+      continue;
+    }
+
+    for (map<string, RGWZonePlacementInfo>::iterator iter = zone_params.placement_pools.begin(); 
+         iter != zone_params.placement_pools.end(); ++iter) {
+      const string& placement_name = iter->first;
+      if (placement_targets.find(placement_name) == placement_targets.end()) {
+        RGWZoneGroupPlacementTarget placement_target;
+        placement_target.name = placement_name;
+        placement_targets[placement_name] = placement_target;
+      }
+    }
+
+    if (default_placement.empty() && !placement_targets.empty()) {
+      default_placement = placement_targets.begin()->first;
+    }
+
+  }
+}
+
 int RGWZoneGroup::remove_zone(const RGWZoneParams& zone_params)
 {
   map<string, RGWZone>::iterator iter = zones.find(zone_params.get_id());
@@ -262,6 +300,8 @@ int RGWZoneGroup::remove_zone(const RGWZoneParams& zone_params)
 
   zones.erase(iter);
 
+  post_process_params();
+
   return update();
 }
 
index eb2633b7fcdb919fce702b6884bed8fd63b10082..a940e420341b4a6861d8f36745c7d659bae71ce3 100644 (file)
@@ -1076,7 +1076,11 @@ struct RGWZoneGroup : public RGWSystemMetaObj {
       realm_id(_realm_id) {}
 
   bool is_master_zonegroup() const { return is_master;}
-  void update_master(bool _is_master) { is_master = _is_master;}
+  void update_master(bool _is_master) {
+    is_master = _is_master;
+    post_process_params();
+  }
+  void post_process_params();
 
   void encode(bufferlist& bl) const {
     ENCODE_START(4, 1, bl);