to match the behavior of AWS S3
Signed-off-by: Jiaying Ren <jiaying.ren@umcloud.com>
if (op_ret < 0)
return;
+ if (!location_constraint.empty() &&
+ !store->has_zonegroup_api(location_constraint)) {
+ ldout(s->cct, 0) << "location constraint (" << location_constraint << ")"
+ << " can't be found." << dendl;
+ op_ret = -ERR_INVALID_LOCATION_CONSTRAINT;
+ s->err.message = "The specified location-constraint is not valid";
+ return;
+ }
+
if (!store->get_zonegroup().is_master_zonegroup() &&
store->get_zonegroup().api_name != location_constraint) {
ldout(s->cct, 0) << "location constraint (" << location_constraint << ")"
const string& get_current_period_id() {
return current_period.get_id();
}
+
+ bool has_zonegroup_api(const std::string& api) const {
+ if (!current_period.get_id().empty()) {
+ const auto& zonegroups_by_api = current_period.get_map().zonegroups_by_api;
+ if (zonegroups_by_api.find(api) != zonegroups_by_api.end())
+ return true;
+ }
+ return false;
+ }
+
// pulls missing periods for period_history
std::unique_ptr<RGWPeriodPuller> period_puller;
// maintains a connected history of periods