]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: remove meta file after deleting bucket
authorOrit Wasserman <owasserm@redhat.com>
Fri, 3 Apr 2015 11:43:31 +0000 (13:43 +0200)
committerYehuda Sadeh <yehuda@redhat.com>
Fri, 17 Apr 2015 14:44:39 +0000 (07:44 -0700)
The meta file is deleted only if the bucket meta data is not synced

Signed-off-by: Orit Wasserman <owasserm@redhat.com>
Fixes: #11149
Backport: hammer, firefly
(cherry picked from commit dfdc7afb59cc8e32cf8bff55faa09076c853de06)

src/rgw/rgw_rados.cc
src/rgw/rgw_rados.h

index 57ca5c198a76996a2639e41db9912314c439fec1..604d4cb8ba715761fb26d86e4452fe0d38982929 100644 (file)
@@ -3908,6 +3908,31 @@ int RGWRados::copy_obj_data(RGWObjectCtx& obj_ctx,
   return ret;
 }
 
+/**
+  * Check to see if the bucket metadata could be synced
+  * bucket: the bucket to check
+  * Returns false is the bucket is not synced
+  */
+bool RGWRados::is_syncing_bucket_meta(rgw_bucket& bucket)
+{
+  /* region is not master region */
+  if (!region.is_master) {
+    return false;
+  }
+
+  /* single region and a single zone */
+  if (region_map.regions.size() == 1 && region.zones.size() == 1) {
+    return false;
+  }
+
+  /* zone is not master */
+  if (region.master_zone.compare(zone_name) != 0) {
+    return false;
+  }
+
+  return true;
+}
+  
 /**
  * Delete a bucket.
  * bucket: the name of the bucket to delete
@@ -3949,6 +3974,16 @@ int RGWRados::delete_bucket(rgw_bucket& bucket, RGWObjVersionTracker& objv_track
   if (r < 0)
     return r;
 
+  /* if the bucked is not synced we can remove the meta file */
+  if (!is_syncing_bucket_meta(bucket)) {
+    RGWObjVersionTracker objv_tracker;
+    string entry;
+    get_bucket_instance_entry(bucket, entry);
+    r= rgw_bucket_instance_remove_entry(this, entry, &objv_tracker);
+    if (r < 0) {
+      return r;
+    }
+  }
   return 0;
 }
 
index 082e85bb3c082d8272ec413f36a130053a6a3bf7..f6abe842349f7fa74ae48eb2ec9b137309e4d2be 100644 (file)
@@ -1774,6 +1774,11 @@ public:
    */
   virtual int delete_bucket(rgw_bucket& bucket, RGWObjVersionTracker& objv_tracker);
 
+  /**
+   * Check to see if the bucket metadata is synced
+   */
+  bool is_syncing_bucket_meta(rgw_bucket& bucket);
+  
   int set_bucket_owner(rgw_bucket& bucket, ACLOwner& owner);
   int set_buckets_enabled(std::vector<rgw_bucket>& buckets, bool enabled);
   int bucket_suspended(rgw_bucket& bucket, bool *suspended);