]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: we need to clear the id in create_default in case of a race
authorOrit Wasserman <owasserm@redhat.com>
Tue, 16 Feb 2016 15:36:41 +0000 (16:36 +0100)
committerYehuda Sadeh <yehuda@redhat.com>
Thu, 18 Feb 2016 22:04:18 +0000 (14:04 -0800)
Signed-off-by: Orit Wasserman <owasserm@redhat.com>
src/rgw/rgw_rados.cc
src/rgw/rgw_rados.h

index 2df09d776f426fec02654cf8dc981b116bb7fc7a..7f55352a02e9e372eeb0b745b0d653d7b04c4165 100644 (file)
@@ -159,12 +159,15 @@ int RGWZoneGroup::create_default(bool old_format)
     derr << "create_default: error in create_default  zone params: " << cpp_strerror(-r) << dendl;
     return r;
   } else if (r == -EEXIST) {
-    ldout(cct, 0) << "zone_params::create_default() returned -EEXIST, we raced with another zonegroup creation" << dendl;
+    ldout(cct, 0) << "zone_params::create_default() returned -EEXIST, we raced with another default zone_params creation" << dendl;
+    zone_params.clear_id();
     r = zone_params.init(cct, store);
     if (r < 0) {
       derr << "create_default: error in init existing zone params: " << cpp_strerror(-r) << dendl;
       return r;
     }
+    ldout(cct, 20) << "zone_params::create_default() " << zone_params.get_name() << " id " << zone_params.get_id()
+                  << dendl;
   }
   
   RGWZone& default_zone = zones[zone_params.get_id()];
@@ -180,7 +183,8 @@ int RGWZoneGroup::create_default(bool old_format)
 
   if (r == -EEXIST) {
     ldout(cct, 0) << "create_default() returned -EEXIST, we raced with another zonegroup creation" << dendl;
-    r = read_info(id);
+    id.clear();
+    r = init(cct, store);
     if (r < 0) {
       return r;
     }
index f2773838adf1349698f59e996e002dd1bacc1eaa..60d54c5b67355de9bfe9be6e4b9f4876ea007337 100644 (file)
@@ -758,6 +758,7 @@ public:
 
   void set_name(const string& _name) { name = _name;}
   void set_id(const string& _id) { id = _id;}
+  void clear_id() { id.clear(); }
 
   virtual ~RGWSystemMetaObj() {}