level: advanced
desc: Path prefix to be used for accessing RGW RESTful admin API.
fmt_desc: The entry point for an admin request URL.
+ long_desc: Note that multisite replication requires the value admin,
+ so this option must be left at the default in such deployments.
default: admin
services:
- rgw
return 0;
}
-int RGWBucketAdminOp::remove_bucket(rgw::sal::Driver* driver, RGWBucketAdminOpState& op_state,
+int RGWBucketAdminOp::remove_bucket(rgw::sal::Driver* driver, const rgw::SiteConfig& site,
+ RGWBucketAdminOpState& op_state,
optional_yield y, const DoutPrefixProvider *dpp,
bool bypass_gc, bool keep_index_consistent, bool forwarded_request)
{
ret = bucket->remove_bypass_gc(op_state.get_max_aio(), keep_index_consistent, y, dpp);
else
ret = bucket->remove(dpp, op_state.will_delete_children(), y);
+ if (ret < 0)
+ return ret;
+
+ // forward to master zonegroup
+ const std::string delpath = "/admin/bucket";
+ RGWEnv env;
+ env.set("REQUEST_METHOD", "DELETE");
+ env.set("SCRIPT_URI", delpath);
+ env.set("REQUEST_URI", delpath);
+ env.set("QUERY_STRING", fmt::format("bucket={}&tenant={}", bucket->get_name(), bucket->get_tenant()));
+ req_info req(dpp->get_cct(), &env);
+
+ ret = rgw_forward_request_to_master(dpp, site, bucket->get_owner(), nullptr, nullptr, req, y);
+ if (ret < 0) {
+ ldpp_dout(dpp, 0) << "ERROR: failed to forward request to master zonegroup: "
+ << ret << dendl;
+ return ret;
+ }
return ret;
}
static int check_index_unlinked(rgw::sal::RadosStore* driver, RGWBucketAdminOpState& op_state,
RGWFormatterFlusher& flusher, const DoutPrefixProvider *dpp);
- static int remove_bucket(rgw::sal::Driver* driver, RGWBucketAdminOpState& op_state, optional_yield y,
+ static int remove_bucket(rgw::sal::Driver* driver, const rgw::SiteConfig& site, RGWBucketAdminOpState& op_state, optional_yield y,
const DoutPrefixProvider *dpp, bool bypass_gc = false, bool keep_index_consistent = true, bool forwarded_request = false);
static int remove_object(rgw::sal::Driver* driver, RGWBucketAdminOpState& op_state, const DoutPrefixProvider *dpp, optional_yield y);
static int info(rgw::sal::Driver* driver, RGWBucketAdminOpState& op_state, RGWFormatterFlusher& flusher, optional_yield y, const DoutPrefixProvider *dpp);
OPT::USER_SUSPEND, OPT::SUBUSER_CREATE,
OPT::SUBUSER_MODIFY, OPT::SUBUSER_RM,
OPT::BUCKET_LINK, OPT::BUCKET_UNLINK,
- OPT::BUCKET_RM,
OPT::BUCKET_CHOWN, OPT::METADATA_PUT,
OPT::METADATA_RM, OPT::MFA_CREATE,
OPT::MFA_REMOVE, OPT::MFA_RESYNC,
if (opt_cmd == OPT::BUCKET_RM) {
if (!inconsistent_index) {
- RGWBucketAdminOp::remove_bucket(driver, bucket_op, null_yield, dpp(), bypass_gc, true, false);
+ RGWBucketAdminOp::remove_bucket(driver, *site, bucket_op, null_yield, dpp(), bypass_gc, true, false);
} else {
if (!yes_i_really_mean_it) {
cerr << "using --inconsistent_index can corrupt the bucket index " << std::endl
<< "do you really mean it? (requires --yes-i-really-mean-it)" << std::endl;
return 1;
}
- RGWBucketAdminOp::remove_bucket(driver, bucket_op, null_yield, dpp(), bypass_gc, false, false);
+ RGWBucketAdminOp::remove_bucket(driver, *site, bucket_op, null_yield, dpp(), bypass_gc, false, false);
}
}
}
-static inline const std::string make_spec_item(const std::string& tenant,
- const std::string& id)
-{
- return tenant + ":" + id;
-}
-
-
static inline std::pair<bool, rgw::auth::Engine::result_t>
strategy_handle_rejected(rgw::auth::Engine::result_t&& engine_result,
const rgw::auth::Strategy::Control policy,