]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: should remove bucket dir instead of sending intent
authorYehuda Sadeh <yehuda@hq.newdream.net>
Tue, 31 Jan 2012 01:00:37 +0000 (17:00 -0800)
committerYehuda Sadeh <yehuda@hq.newdream.net>
Tue, 31 Jan 2012 01:02:17 +0000 (17:02 -0800)
that was really useless, and also bucket cleanup was broken anyway.

Signed-off-by: Yehuda Sadeh <yehuda@hq.newdream.net>
src/rgw/rgw_common.h
src/rgw/rgw_op.cc
src/rgw/rgw_rados.cc

index bacb5022fb6cef8b2aa58479982d2d316e552f72..cf888ebe735cfe9b7712db84c9ccb54c9d39751f 100644 (file)
@@ -165,8 +165,8 @@ extern int gen_rand_alphanumeric(char *dest, int size);
 extern int gen_rand_alphanumeric_upper(char *dest, int size);
 
 enum RGWIntentEvent {
-  DEL_OBJ,
-  DEL_POOL,
+  DEL_OBJ = 0,
+  DEL_DIR = 1,
 };
 
 enum RGWObjCategory {
index 4ed84755c438305742b59c963628634e4f6e06b6..c77611e3e4665901976c5af13caf722dadb8a5d4 100644 (file)
@@ -585,14 +585,6 @@ void RGWDeleteBucket::execute()
       if (ret < 0) {
         dout(0) << "WARNING: failed to remove bucket: ret=" << ret << dendl;
       }
-
-      string oid;
-      rgw_obj obj(s->bucket, oid);
-      RGWIntentEvent intent = DEL_POOL;
-      int r = rgw_log_intent(s, obj, intent);
-      if (r < 0) {
-        dout(0) << "WARNING: failed to log intent for bucket removal bucket=" << s->bucket << dendl;
-      }
     }
   }
 
index 2f66cdc0e69583fe051759060b34b2b66d2d469f..0e3b0d40339d9f281eee2018818ba95ae88cc289 100644 (file)
@@ -920,6 +920,16 @@ int RGWRados::delete_bucket(rgw_bucket& bucket)
   if (r < 0)
     return r;
 
+  ObjectWriteOperation op;
+  op.remove();
+  string oid = dir_oid_prefix;
+  oid.append(marker);
+  librados::AioCompletion *completion = rados->aio_create_completion(NULL, NULL, NULL);
+  r = list_ctx.aio_operate(oid, completion, &op);
+  completion->release();
+  if (r < 0)
+    return r;
+
   return 0;
 }
 
@@ -2364,7 +2374,7 @@ public:
 
 enum IntentFlags { // bitmask
   I_DEL_OBJ = 1,
-  I_DEL_POOL = 2,
+  I_DEL_DIR = 2,
 };
 
 
@@ -2415,7 +2425,7 @@ int RGWRados::remove_temp_objects(string date, string time)
     }
     vector<RGWObjEnt>::iterator iter;
     for (iter = objs.begin(); iter != objs.end(); ++iter) {
-      process_intent_log(bucket, (*iter).name, epoch, I_DEL_OBJ | I_DEL_POOL, true);
+      process_intent_log(bucket, (*iter).name, epoch, I_DEL_OBJ | I_DEL_DIR, true);
     }
   } while (is_truncated);
 
@@ -2487,15 +2497,22 @@ int RGWRados::process_intent_log(rgw_bucket& bucket, string& oid,
         complete = false;
       }
       break;
-    case DEL_POOL:
-      if (!flags & I_DEL_POOL) {
+    case DEL_DIR:
+      if (!flags & I_DEL_DIR) {
         complete = false;
         break;
-      }
-      r = delete_bucket(entry.obj.bucket);
-      if (r < 0 && r != -ENOENT) {
-        cerr << "failed to remove pool: " << entry.obj.bucket.pool << std::endl;
-        complete = false;
+      } else {
+        librados::IoCtx io_ctx;
+        int r = open_bucket_ctx(entry.obj.bucket, io_ctx);
+        if (r < 0)
+          return r;
+        string oid = dir_oid_prefix;
+        oid.append(entry.obj.bucket.marker);
+        r = io_ctx.remove(oid);
+        if (r < 0 && r != -ENOENT) {
+          cerr << "failed to remove pool: " << entry.obj.bucket.pool << std::endl;
+          complete = false;
+        }
       }
       break;
     default: