* bucket: the name of the bucket to delete
* Returns 0 on success, -ERR# otherwise.
*/
- virtual int delete_bucket(rgw_bucket& bucket, bool remove_pool) = 0;
- virtual int purge_buckets(vector<rgw_bucket>& buckets) { return -ENOTSUP; }
+ virtual int delete_bucket(rgw_bucket& bucket) = 0;
virtual int set_buckets_enabled(std::vector<rgw_bucket>& buckets, bool enabled) { return -ENOTSUP; }
virtual int bucket_suspended(rgw_bucket& bucket, bool *suspended) {
return -EINVAL;
}
//cout << "bucket is linked to user '" << owner.get_id() << "'.. unlinking" << std::endl;
- r = rgw_remove_user_bucket_info(owner.get_id(), bucket, false);
+ r = rgw_remove_user_bucket_info(owner.get_id(), bucket);
if (r < 0) {
cerr << "could not unlink policy from user '" << owner.get_id() << "'" << std::endl;
return r;
return usage();
}
- int r = rgw_remove_user_bucket_info(user_id, bucket, false);
+ int r = rgw_remove_user_bucket_info(user_id, bucket);
if (r < 0)
cerr << "error unlinking bucket " << cpp_strerror(-r) << std::endl;
return -r;
}
if (opt_cmd == OPT_USER_RM) {
- rgw_delete_user(info, purge_data);
+ rgw_delete_user(info);
}
if (opt_cmd == OPT_POOL_ADD) {
return ret;
}
-int RGWFS::delete_bucket(rgw_bucket& bucket, bool remove_pool)
+int RGWFS::delete_bucket(rgw_bucket& bucket)
{
int len = strlen(DIR_NAME) + 1 + bucket.name.size() + 1;
char buf[len];
map<std::string, bufferlist>& attrs,
RGWObjCategory category,
struct rgw_err *err);
- int delete_bucket(rgw_bucket& bucket, bool remove_pool);
+ int delete_bucket(rgw_bucket& bucket);
int delete_obj(void *ctx, rgw_obj& obj, bool sync);
int get_attr(const char *name, int fd, char **attr);
ret = rgw_add_bucket(s->user.user_id, s->bucket);
if (ret && !existed && ret != -EEXIST) /* if it exists (or previously existed), don't remove it! */
- rgw_remove_user_bucket_info(s->user.user_id, s->bucket, false);
+ rgw_remove_user_bucket_info(s->user.user_id, s->bucket);
if (ret == -EEXIST)
ret = -ERR_BUCKET_EXISTS;
ret = -EINVAL;
if (s->bucket_name) {
- ret = rgwstore->delete_bucket(s->bucket, false);
+ ret = rgwstore->delete_bucket(s->bucket);
if (ret == 0) {
- ret = rgw_remove_user_bucket_info(s->user.user_id, s->bucket, false);
+ ret = rgw_remove_user_bucket_info(s->user.user_id, s->bucket);
if (ret < 0) {
dout(0) << "WARNING: failed to remove bucket: ret=" << ret << dendl;
}
ret = store_bucket_info(info);
if (ret < 0) {
dout(0) << "failed to store bucket info, removing bucket" << dendl;
- delete_bucket(bucket, true);
+ delete_bucket(bucket);
return ret;
}
}
* bucket: the name of the bucket to delete
* Returns 0 on success, -ERR# otherwise.
*/
-int RGWRados::delete_bucket(rgw_bucket& bucket, bool remove_pool)
+int RGWRados::delete_bucket(rgw_bucket& bucket)
{
librados::IoCtx list_ctx;
int r = open_bucket_ctx(bucket, list_ctx);
}
} while (is_truncated);
- if (remove_pool) {
- r = rados->pool_delete(bucket.pool.c_str());
- if (r < 0)
- return r;
- }
-
rgw_obj obj(rgw_root_bucket, bucket.name);
r = delete_obj(NULL, obj, true);
if (r < 0)
return 0;
}
-/**
- * Delete buckets, don't care about content
- * bucket: the name of the bucket to delete
- * Returns 0 on success, -ERR# otherwise.
- */
-int RGWRados::purge_buckets(vector<rgw_bucket>& buckets)
-{
- librados::IoCtx list_ctx;
- vector<rgw_bucket>::iterator iter;
- vector<librados::PoolAsyncCompletion *> completions;
- int ret = 0, r;
-
- for (iter = buckets.begin(); iter != buckets.end(); ++iter) {
- rgw_bucket& bucket = *iter;
- librados::PoolAsyncCompletion *c = librados::Rados::pool_async_create_completion();
- r = rados->pool_delete_async(bucket.pool.c_str(), c);
- if (r < 0) {
- dout(0) << "WARNING: rados->pool_delete_async(bucket=" << bucket << ") returned err=" << r << dendl;
- ret = r;
- } else {
- completions.push_back(c);
- }
-
- rgw_obj obj(rgw_root_bucket, bucket.name);
- r = delete_obj(NULL, obj, true);
- if (r < 0) {
- dout(0) << "WARNING: could not remove bucket object: " << RGW_ROOT_BUCKET << ":" << bucket << dendl;
- ret = r;
- continue;
- }
- }
-
- vector<librados::PoolAsyncCompletion *>::iterator citer;
- for (citer = completions.begin(); citer != completions.end(); ++citer) {
- PoolAsyncCompletion *c = *citer;
- c->wait();
- r = c->get_return_value();
- if (r < 0) {
- dout(0) << "WARNING: async pool_removal returned " << r << dendl;
- ret = r;
- }
- c->release();
- }
-
- return ret;
-}
-
int RGWRados::set_buckets_enabled(vector<rgw_bucket>& buckets, bool enabled)
{
int ret = 0;
const string &oid = *iter;
// fill it in with initial values; we may correct later
- e.name = *iter;
+ e.name = oid;
m[e.name] = e;
dout(0) << " got " << e.name << dendl;
}
complete = false;
break;
}
- r = delete_bucket(entry.obj.bucket, true);
+ r = delete_bucket(entry.obj.bucket);
if (r < 0 && r != -ENOENT) {
cerr << "failed to remove pool: " << entry.obj.bucket.pool << std::endl;
complete = false;
RGWObjCategory category,
struct rgw_err *err);
/** delete a bucket*/
- virtual int delete_bucket(rgw_bucket& bucket, bool remove_pool);
- virtual int purge_buckets(vector<rgw_bucket>& buckets);
+ virtual int delete_bucket(rgw_bucket& bucket);
virtual int set_buckets_enabled(std::vector<rgw_bucket>& buckets, bool enabled);
virtual int bucket_suspended(rgw_bucket& bucket, bool *suspended);
return ret;
}
-int rgw_remove_user_bucket_info(string user_id, rgw_bucket& bucket, bool purge_data)
+int rgw_remove_user_bucket_info(string user_id, rgw_bucket& bucket)
{
int ret;
}
}
- if (ret == 0 && purge_data) {
- vector<rgw_bucket> buckets_vec;
- buckets_vec.push_back(bucket);
- ret = rgwstore->purge_buckets(buckets_vec);
- }
-
-
return ret;
}
* from the user and user email pools. This leaves the pools
* themselves alone, as well as any ACLs embedded in object xattrs.
*/
-int rgw_delete_user(RGWUserInfo& info, bool purge_data) {
+int rgw_delete_user(RGWUserInfo& info) {
RGWUserBuckets user_buckets;
int ret = rgw_read_user_buckets(info.user_id, user_buckets, false);
if (ret < 0)
return ret;
}
- if (purge_data) {
- dout(0) << "purging user buckets" << dendl;
- ret = rgwstore->purge_buckets(buckets_vec);
- if (ret < 0 && ret != -ENOENT) {
- dout(0) << "ERROR: delete_buckets returned " << ret << dendl;
- return ret;
- }
- }
-
string buckets_obj_id;
get_buckets_obj(info.user_id, buckets_obj_id);
rgw_obj uid_bucks(ui_uid_bucket, buckets_obj_id);
/**
* Given an RGWUserInfo, deletes the user and its bucket ACLs.
*/
-extern int rgw_delete_user(RGWUserInfo& user, bool purge_data);
+extern int rgw_delete_user(RGWUserInfo& user);
/**
* Store a list of the user's buckets, with associated functinos.
*/
extern int rgw_write_buckets_attr(string user_id, RGWUserBuckets& buckets);
extern int rgw_add_bucket(string user_id, rgw_bucket& bucket);
-extern int rgw_remove_user_bucket_info(string user_id, rgw_bucket& bucket, bool purge_data);
+extern int rgw_remove_user_bucket_info(string user_id, rgw_bucket& bucket);
/*
* remove the different indexes