diff options
author | Yehuda Sadeh <yehuda@hq.newdream.net> | 2012-01-30 17:00:37 -0800 |
---|---|---|
committer | Yehuda Sadeh <yehuda@hq.newdream.net> | 2012-01-30 17:02:17 -0800 |
commit | 1fe75ee64191f762861ec90f172db22764d2bb31 (patch) | |
tree | b4e38ccdacaf0e003b480ee7220c08b5155bd628 | |
parent | 2b5bbe8e9e80552f853fcb901fe62aa4e0299b48 (diff) | |
download | ceph-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.h | 4 | ||||
-rw-r--r-- | src/rgw/rgw_op.cc | 8 | ||||
-rw-r--r-- | src/rgw/rgw_rados.cc | 35 |
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: |