op_ret = forward_request_to_master(s, nullptr, store, in_data, nullptr);
if (op_ret < 0) {
ldpp_dout(this, 0) << "forward_request_to_master returned ret=" << op_ret << dendl;
- }
- if (op_ret < 0) {
return;
}
}
s->bucket_info.set_sync_policy(std::move(sync_policy));
- return store->getRados()->put_bucket_instance_info(s->bucket_info, false, real_time(),
- &s->bucket_attrs);
+ int ret = store->getRados()->put_bucket_instance_info(s->bucket_info, false, real_time(),
+ &s->bucket_attrs);
+ if (ret < 0) {
+ ldpp_dout(this, 0) << "ERROR: put_bucket_instance_info (bucket=" << s->bucket_info.bucket.get_key() << ") returned ret=" << ret << dendl;
+ return ret;
+ }
+
+ return 0;
+ });
+}
+
+void RGWDeleteBucketReplication::pre_exec()
+{
+ rgw_bucket_object_pre_exec(s);
+}
+
+int RGWDeleteBucketReplication::verify_permission()
+{
+ return verify_bucket_owner_or_policy(s, rgw::IAM::s3PutBucketTagging);
+}
+
+void RGWDeleteBucketReplication::execute()
+{
+ if (!store->svc()->zone->is_meta_master()) {
+ bufferlist in_data;
+ op_ret = forward_request_to_master(s, nullptr, store, in_data, nullptr);
+ if (op_ret < 0) {
+ ldpp_dout(this, 0) << "forward_request_to_master returned ret=" << op_ret << dendl;
+ return;
+ }
+ }
+
+ op_ret = retry_raced_bucket_write(store->getRados(), s, [this] {
+ if (!s->bucket_info.sync_policy) {
+ return 0;
+ }
+
+ rgw_sync_policy_info sync_policy = *s->bucket_info.sync_policy;
+
+ update_sync_policy(&sync_policy);
+
+ s->bucket_info.set_sync_policy(std::move(sync_policy));
+
+ int ret = store->getRados()->put_bucket_instance_info(s->bucket_info, false, real_time(),
+ &s->bucket_attrs);
+ if (ret < 0) {
+ ldpp_dout(this, 0) << "ERROR: put_bucket_instance_info (bucket=" << s->bucket_info.bucket.get_key() << ") returned ret=" << ret << dendl;
+ return ret;
+ }
+
+ return 0;
});
}
RGWOpType get_type() override { return RGW_OP_PUT_BUCKET_REPLICATION; }
};
+class RGWDeleteBucketReplication : public RGWOp {
+protected:
+ virtual void update_sync_policy(rgw_sync_policy_info *policy) = 0;
+public:
+ void pre_exec() override;
+ int verify_permission() override;
+ void execute() override;
+
+ const char* name() const override { return "delete_bucket_replication"; }
+ virtual uint32_t op_mask() override { return RGW_OP_TYPE_DELETE; }
+ RGWOpType get_type() override { return RGW_OP_DELETE_BUCKET_REPLICATION;}
+};
+
class RGWBulkDelete : public RGWOp {
public:
struct acct_path_t {
virtual ~RGWPutBucketReplication_ObjStore() = default;
};
+class RGWDeleteBucketReplication_ObjStore: public RGWDeleteBucketReplication {
+public:
+ RGWDeleteBucketReplication_ObjStore() = default;
+ virtual ~RGWDeleteBucketReplication_ObjStore() = default;
+};
+
class RGWListBuckets_ObjStore : public RGWListBuckets {
public:
RGWListBuckets_ObjStore() {}
dump_start(s);
}
+void RGWDeleteBucketTags_ObjStore_S3::send_response()
+{
+ if (op_ret)
+ set_req_state_err(s, op_ret);
+ dump_errno(s);
+ end_header(s, this, "application/xml");
+ dump_start(s);
+}
+
namespace {
bool is_valid_status(const string& s) {
dump_start(s);
}
-void RGWDeleteBucketTags_ObjStore_S3::send_response()
+void RGWDeleteBucketReplication_ObjStore_S3::update_sync_policy(rgw_sync_policy_info *policy)
+{
+ policy->groups.erase(enabled_group_id);
+ policy->groups.erase(disabled_group_id);
+}
+
+void RGWDeleteBucketReplication_ObjStore_S3::send_response()
{
if (op_ret)
set_req_state_err(s, op_ret);
} else if (is_notification_op()) {
return RGWHandler_REST_PSNotifs_S3::create_delete_op();
} else if (is_replication_op()) {
- return nullptr; // new RGWDeleteBucketReplication_ObjStore_S3;
+ return new RGWDeleteBucketReplication_ObjStore_S3;
}
if (s->info.args.sub_resource_exists("website")) {
void send_response() override;
};
+class RGWDeleteBucketReplication_ObjStore_S3 : public RGWDeleteBucketReplication_ObjStore
+{
+protected:
+ void update_sync_policy(rgw_sync_policy_info *policy) override;
+public:
+ void send_response() override;
+};
+
class RGWListBuckets_ObjStore_S3 : public RGWListBuckets_ObjStore {
public:
RGWListBuckets_ObjStore_S3() {}