summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYehuda Sadeh <yehuda@hq.newdream.net>2012-01-30 17:00:37 -0800
committerYehuda Sadeh <yehuda@hq.newdream.net>2012-01-30 17:02:17 -0800
commit1fe75ee64191f762861ec90f172db22764d2bb31 (patch)
treeb4e38ccdacaf0e003b480ee7220c08b5155bd628
parent2b5bbe8e9e80552f853fcb901fe62aa4e0299b48 (diff)
downloadceph-1fe75ee64191f762861ec90f172db22764d2bb31.tar.gz
rgw: should remove bucket dir instead of sending intent
that was really useless, and also bucket cleanup was broken anyway. Signed-off-by: Yehuda Sadeh <yehuda@hq.newdream.net>
-rw-r--r--src/rgw/rgw_common.h4
-rw-r--r--src/rgw/rgw_op.cc8
-rw-r--r--src/rgw/rgw_rados.cc35
3 files changed, 28 insertions, 19 deletions
diff --git a/src/rgw/rgw_common.h b/src/rgw/rgw_common.h
index bacb5022fb6..cf888ebe735 100644
--- a/src/rgw/rgw_common.h
+++ b/src/rgw/rgw_common.h
@@ -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 {
diff --git a/src/rgw/rgw_op.cc b/src/rgw/rgw_op.cc
index 4ed84755c43..c77611e3e46 100644
--- a/src/rgw/rgw_op.cc
+++ b/src/rgw/rgw_op.cc
@@ -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;
- }
}
}
diff --git a/src/rgw/rgw_rados.cc b/src/rgw/rgw_rados.cc
index 2f66cdc0e69..0e3b0d40339 100644
--- a/src/rgw/rgw_rados.cc
+++ b/src/rgw/rgw_rados.cc
@@ -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: