From 6001f9ba59cf68c61efa53eaaba89a0c042a52db Mon Sep 17 00:00:00 2001 From: Daniel Gryniewicz Date: Mon, 27 Jul 2020 14:42:42 -0400 Subject: [PATCH] Zipper - forward_request_to_master in RGWStore Signed-off-by: Daniel Gryniewicz --- src/rgw/rgw_op.cc | 213 ++++++++++++-------------------- src/rgw/rgw_op.h | 3 - src/rgw/rgw_rest_bucket.cc | 36 +++--- src/rgw/rgw_rest_user.cc | 96 ++++++-------- src/rgw/rgw_rest_user_policy.cc | 32 +++-- src/rgw/rgw_sal.cc | 12 +- src/rgw/rgw_sal.h | 8 +- 7 files changed, 163 insertions(+), 237 deletions(-) diff --git a/src/rgw/rgw_op.cc b/src/rgw/rgw_op.cc index aa9fa9f0794..ef5b292a243 100644 --- a/src/rgw/rgw_op.cc +++ b/src/rgw/rgw_op.cc @@ -1165,11 +1165,9 @@ void RGWPutBucketTags::execute() { if (op_ret < 0) return; - if (!store->svc()->zone->is_meta_master()) { - 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; - } + op_ret = store->forward_request_to_master(s->user, nullptr, in_data, nullptr, s->info); + if (op_ret < 0) { + ldpp_dout(this, 0) << "forward_request_to_master returned ret=" << op_ret << dendl; } op_ret = retry_raced_bucket_write(store->getRados(), s, [this] { @@ -1192,13 +1190,11 @@ int RGWDeleteBucketTags::verify_permission() void RGWDeleteBucketTags::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; - } + bufferlist in_data; + op_ret = store->forward_request_to_master(s->user, nullptr, in_data, nullptr, s->info); + 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] { @@ -1243,12 +1239,10 @@ void RGWPutBucketReplication::execute() { if (op_ret < 0) return; - if (!store->svc()->zone->is_meta_master()) { - 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 = store->forward_request_to_master(s->user, nullptr, in_data, nullptr, s->info); + 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] { @@ -1283,13 +1277,11 @@ int RGWDeleteBucketReplication::verify_permission() 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; - } + bufferlist in_data; + op_ret = store->forward_request_to_master(s->user, nullptr, in_data, nullptr, s->info); + 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] { @@ -2635,12 +2627,10 @@ void RGWSetBucketVersioning::execute() } } - if (!store->svc()->zone->is_meta_master()) { - op_ret = forward_request_to_master(s, NULL, store, in_data, nullptr); - if (op_ret < 0) { - ldpp_dout(this, 0) << "forward_request_to_master returned ret=" << op_ret << dendl; - return; - } + op_ret = store->forward_request_to_master(s->user, nullptr, in_data, nullptr, s->info); + if (op_ret < 0) { + ldpp_dout(this, 0) << "forward_request_to_master returned ret=" << op_ret << dendl; + return; } bool modified = mfa_set_status; @@ -2713,12 +2703,10 @@ void RGWSetBucketWebsite::execute() if (op_ret < 0) return; - if (!store->svc()->zone->is_meta_master()) { - op_ret = forward_request_to_master(s, NULL, store, in_data, nullptr); - if (op_ret < 0) { - ldpp_dout(this, 0) << " forward_request_to_master returned ret=" << op_ret << dendl; - return; - } + op_ret = store->forward_request_to_master(s->user, nullptr, in_data, nullptr, s->info); + 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] { @@ -2748,15 +2736,13 @@ void RGWDeleteBucketWebsite::pre_exec() void RGWDeleteBucketWebsite::execute() { + bufferlist in_data; - 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) << "NOTICE: forward_to_master failed on bucket=" << s->bucket->get_name() - << "returned err=" << op_ret << dendl; - return; - } + op_ret = store->forward_request_to_master(s->user, nullptr, in_data, nullptr, s->info); + if (op_ret < 0) { + ldpp_dout(this, 0) << "NOTICE: forward_to_master failed on bucket=" << s->bucket->get_name() + << "returned err=" << op_ret << dendl; + return; } op_ret = retry_raced_bucket_write(store->getRados(), s, [this] { s->bucket->get_info().has_website = false; @@ -2936,32 +2922,6 @@ int RGWCreateBucket::verify_permission() return 0; } -int forward_request_to_master(struct req_state *s, obj_version *objv, - rgw::sal::RGWRadosStore *store, bufferlist& in_data, - JSONParser *jp, req_info *forward_info) -{ - if (!store->svc()->zone->get_master_conn()) { - ldpp_dout(s, 0) << "rest connection is invalid" << dendl; - return -EINVAL; - } - ldpp_dout(s, 0) << "sending request to master zonegroup" << dendl; - bufferlist response; - string uid_str = s->user->get_id().to_str(); -#define MAX_REST_RESPONSE (128 * 1024) // we expect a very small response - int ret = store->svc()->zone->get_master_conn()->forward(rgw_user(uid_str), (forward_info ? *forward_info : s->info), - objv, MAX_REST_RESPONSE, &in_data, &response); - if (ret < 0) - return ret; - - ldpp_dout(s, 20) << "response: " << response.c_str() << dendl; - if (jp && !jp->parse(response.c_str(), response.length())) { - ldpp_dout(s, 0) << "failed parsing response from master zonegroup" << dendl; - return -EINVAL; - } - - return 0; -} - void RGWCreateBucket::pre_exec() { rgw_bucket_object_pre_exec(s); @@ -3403,18 +3363,15 @@ void RGWDeleteBucket::execute() return; } - if (!store->svc()->zone->is_meta_master()) { - bufferlist in_data; - op_ret = forward_request_to_master(s, &ot.read_version, store, in_data, - NULL); - if (op_ret < 0) { - if (op_ret == -ENOENT) { - /* adjust error, we want to return with NoSuchBucket and not - * NoSuchKey */ - op_ret = -ERR_NO_SUCH_BUCKET; - } - return; + bufferlist in_data; + op_ret = store->forward_request_to_master(s->user, &ot.read_version, in_data, nullptr, s->info); + if (op_ret < 0) { + if (op_ret == -ENOENT) { + /* adjust error, we want to return with NoSuchBucket and not + * NoSuchKey */ + op_ret = -ERR_NO_SUCH_BUCKET; } + return; } string prefix, delimiter; @@ -5378,13 +5335,13 @@ void RGWPutACLs::execute() } // forward bucket acl requests to meta master zone - if ((rgw::sal::RGWObject::empty(s->object.get())) && !store->svc()->zone->is_meta_master()) { + if ((rgw::sal::RGWObject::empty(s->object.get()))) { bufferlist in_data; // include acl data unless it was generated from a canned_acl if (s->canned_acl.empty()) { in_data.append(data); } - op_ret = forward_request_to_master(s, NULL, store, in_data, NULL); + op_ret = store->forward_request_to_master(s->user, nullptr, in_data, nullptr, s->info); if (op_ret < 0) { ldpp_dout(this, 0) << "forward_request_to_master returned ret=" << op_ret << dendl; return; @@ -5511,12 +5468,10 @@ void RGWPutLC::execute() ldpp_dout(this, 15) << "New LifecycleConfiguration:" << ss.str() << dendl; } - if (!store->svc()->zone->is_meta_master()) { - op_ret = forward_request_to_master(s, nullptr, store, data, nullptr); - if (op_ret < 0) { - ldpp_dout(this, 0) << "forward_request_to_master returned ret=" << op_ret << dendl; - return; - } + op_ret = store->forward_request_to_master(s->user, nullptr, data, nullptr, s->info); + if (op_ret < 0) { + ldpp_dout(this, 0) << "forward_request_to_master returned ret=" << op_ret << dendl; + return; } op_ret = store->getRados()->get_lc()->set_bucket_config(s->bucket->get_info(), s->bucket_attrs, &new_config); @@ -5528,13 +5483,11 @@ void RGWPutLC::execute() void RGWDeleteLC::execute() { - if (!store->svc()->zone->is_meta_master()) { - bufferlist data; - op_ret = forward_request_to_master(s, nullptr, store, data, nullptr); - if (op_ret < 0) { - ldpp_dout(this, 0) << "forward_request_to_master returned ret=" << op_ret << dendl; - return; - } + bufferlist data; + op_ret = store->forward_request_to_master(s->user, nullptr, data, nullptr, s->info); + if (op_ret < 0) { + ldpp_dout(this, 0) << "forward_request_to_master returned ret=" << op_ret << dendl; + return; } op_ret = store->getRados()->get_lc()->remove_bucket_config(s->bucket->get_info(), s->bucket_attrs); @@ -5575,12 +5528,10 @@ void RGWPutCORS::execute() if (op_ret < 0) return; - if (!store->svc()->zone->is_meta_master()) { - op_ret = forward_request_to_master(s, NULL, store, in_data, nullptr); - if (op_ret < 0) { - ldpp_dout(this, 0) << "forward_request_to_master returned ret=" << op_ret << dendl; - return; - } + op_ret = store->forward_request_to_master(s->user, nullptr, in_data, nullptr, s->info); + 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] { @@ -5600,13 +5551,11 @@ int RGWDeleteCORS::verify_permission() void RGWDeleteCORS::execute() { - if (!store->svc()->zone->is_meta_master()) { - bufferlist data; - op_ret = forward_request_to_master(s, nullptr, store, data, nullptr); - if (op_ret < 0) { - ldpp_dout(this, 0) << "forward_request_to_master returned ret=" << op_ret << dendl; - return; - } + bufferlist data; + op_ret = store->forward_request_to_master(s->user, nullptr, data, nullptr, s->info); + 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] { @@ -5715,12 +5664,10 @@ void RGWSetRequestPayment::pre_exec() void RGWSetRequestPayment::execute() { - if (!store->svc()->zone->is_meta_master()) { - 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 = store->forward_request_to_master(s->user, nullptr, in_data, nullptr, s->info); + if (op_ret < 0) { + ldpp_dout(this, 0) << "forward_request_to_master returned ret=" << op_ret << dendl; + return; } op_ret = get_params(); @@ -6848,12 +6795,12 @@ int RGWBulkUploadOp::handle_dir(const std::string_view path) real_time creation_time; obj_version objv, ep_objv, *pobjv = nullptr; - if (! store->svc()->zone->is_meta_master()) { + if (! store->is_meta_master()) { JSONParser jp; ceph::bufferlist in_data; req_info info = s->info; forward_req_info(s->cct, info, bucket_name); - op_ret = forward_request_to_master(s, nullptr, store, in_data, &jp, &info); + op_ret = store->forward_request_to_master(s->user, nullptr, in_data, &jp, info); if (op_ret < 0) { return op_ret; } @@ -7531,12 +7478,10 @@ void RGWPutBucketPolicy::execute() return; } - if (!store->svc()->zone->is_meta_master()) { - op_ret = forward_request_to_master(s, NULL, store, data, nullptr); - if (op_ret < 0) { - ldpp_dout(this, 20) << "forward_request_to_master returned ret=" << op_ret << dendl; - return; - } + op_ret = store->forward_request_to_master(s->user, nullptr, data, nullptr, s->info); + if (op_ret < 0) { + ldpp_dout(this, 20) << "forward_request_to_master returned ret=" << op_ret << dendl; + return; } try { @@ -7681,12 +7626,10 @@ void RGWPutBucketObjectLock::execute() return; } - if (!store->svc()->zone->is_meta_master()) { - op_ret = forward_request_to_master(s, NULL, store, data, nullptr); - if (op_ret < 0) { - ldout(s->cct, 20) << __func__ << "forward_request_to_master returned ret=" << op_ret << dendl; - return; - } + op_ret = store->forward_request_to_master(s->user, nullptr, data, nullptr, s->info); + if (op_ret < 0) { + ldout(s->cct, 20) << __func__ << "forward_request_to_master returned ret=" << op_ret << dendl; + return; } op_ret = retry_raced_bucket_write(store->getRados(), s, [this] { @@ -8003,12 +7946,10 @@ void RGWPutBucketPublicAccessBlock::execute() return; } - if (!store->svc()->zone->is_meta_master()) { - op_ret = forward_request_to_master(s, NULL, store, data, nullptr); - if (op_ret < 0) { - ldpp_dout(this, 0) << "forward_request_to_master returned ret=" << op_ret << dendl; - return; - } + op_ret = store->forward_request_to_master(s->user, nullptr, data, nullptr, s->info); + if (op_ret < 0) { + ldpp_dout(this, 0) << "forward_request_to_master returned ret=" << op_ret << dendl; + return; } bufferlist bl; diff --git a/src/rgw/rgw_op.h b/src/rgw/rgw_op.h index efbfc06ac34..ece46581c4a 100644 --- a/src/rgw/rgw_op.h +++ b/src/rgw/rgw_op.h @@ -2468,7 +2468,4 @@ static inline int parse_value_and_bound( return 0; } -int forward_request_to_master(struct req_state *s, obj_version *objv, rgw::sal::RGWRadosStore *store, - bufferlist& in_data, JSONParser *jp, req_info *forward_info = nullptr); - #endif /* CEPH_RGW_OP_H */ diff --git a/src/rgw/rgw_rest_bucket.cc b/src/rgw/rgw_rest_bucket.cc index 994f5660ed1..2cd1f980a4f 100644 --- a/src/rgw/rgw_rest_bucket.cc +++ b/src/rgw/rgw_rest_bucket.cc @@ -148,13 +148,11 @@ void RGWOp_Bucket_Link::execute() op_state.set_bucket_id(bucket_id); op_state.set_new_bucket_name(new_bucket_name); - if (!store->svc()->zone->is_meta_master()) { - bufferlist data; - op_ret = forward_request_to_master(s, nullptr, store, data, nullptr); - if (op_ret < 0) { - ldpp_dout(this, 0) << "forward_request_to_master returned ret=" << op_ret << dendl; - return; - } + bufferlist data; + op_ret = store->forward_request_to_master(s->user, nullptr, data, nullptr, s->info); + if (op_ret < 0) { + ldpp_dout(this, 0) << "forward_request_to_master returned ret=" << op_ret << dendl; + return; } http_ret = RGWBucketAdminOp::link(store, op_state); } @@ -188,13 +186,11 @@ void RGWOp_Bucket_Unlink::execute() op_state.set_user_id(uid); op_state.set_bucket_name(bucket); - if (!store->svc()->zone->is_meta_master()) { - bufferlist data; - op_ret = forward_request_to_master(s, nullptr, store, data, nullptr); - if (op_ret < 0) { - ldpp_dout(this, 0) << "forward_request_to_master returned ret=" << op_ret << dendl; - return; - } + bufferlist data; + op_ret = store->forward_request_to_master(s->user, nullptr, data, nullptr, s->info); + if (op_ret < 0) { + ldpp_dout(this, 0) << "forward_request_to_master returned ret=" << op_ret << dendl; + return; } http_ret = RGWBucketAdminOp::unlink(store, op_state); } @@ -226,13 +222,11 @@ void RGWOp_Bucket_Remove::execute() op_state.set_bucket_name(bucket); op_state.set_delete_children(delete_children); - if (!store->svc()->zone->is_meta_master()) { - bufferlist data; - op_ret = forward_request_to_master(s, nullptr, store, data, nullptr); - if (op_ret < 0) { - ldpp_dout(this, 0) << "forward_request_to_master returned ret=" << op_ret << dendl; - return; - } + bufferlist data; + op_ret = store->forward_request_to_master(s->user, nullptr, data, nullptr, s->info); + if (op_ret < 0) { + ldpp_dout(this, 0) << "forward_request_to_master returned ret=" << op_ret << dendl; + return; } http_ret = RGWBucketAdminOp::remove_bucket(store, op_state, s->yield); } diff --git a/src/rgw/rgw_rest_user.cc b/src/rgw/rgw_rest_user.cc index c777e0e813d..9a67577bdd1 100644 --- a/src/rgw/rgw_rest_user.cc +++ b/src/rgw/rgw_rest_user.cc @@ -223,13 +223,11 @@ void RGWOp_User_Create::execute() op_state.set_placement_tags(placement_tags_list); } - if (!store->svc()->zone->is_meta_master()) { - bufferlist data; - op_ret = forward_request_to_master(s, nullptr, store, data, nullptr); - if (op_ret < 0) { - ldpp_dout(this, 0) << "forward_request_to_master returned ret=" << op_ret << dendl; - return; - } + bufferlist data; + op_ret = store->forward_request_to_master(s->user, nullptr, data, nullptr, s->info); + if (op_ret < 0) { + ldpp_dout(this, 0) << "forward_request_to_master returned ret=" << op_ret << dendl; + return; } http_ret = RGWUserAdminOp_User::create(store, op_state, flusher); } @@ -367,13 +365,11 @@ void RGWOp_User_Modify::execute() op_state.set_placement_tags(placement_tags_list); } - if (!store->svc()->zone->is_meta_master()) { - bufferlist data; - op_ret = forward_request_to_master(s, nullptr, store, data, nullptr); - if (op_ret < 0) { - ldpp_dout(this, 0) << "forward_request_to_master returned ret=" << op_ret << dendl; - return; - } + bufferlist data; + op_ret = store->forward_request_to_master(s->user, nullptr, data, nullptr, s->info); + if (op_ret < 0) { + ldpp_dout(this, 0) << "forward_request_to_master returned ret=" << op_ret << dendl; + return; } http_ret = RGWUserAdminOp_User::modify(store, op_state, flusher); } @@ -410,13 +406,11 @@ void RGWOp_User_Remove::execute() op_state.set_purge_data(purge_data); - if (!store->svc()->zone->is_meta_master()) { - bufferlist data; - op_ret = forward_request_to_master(s, nullptr, store, data, nullptr); - if (op_ret < 0) { - ldpp_dout(this, 0) << "forward_request_to_master returned ret=" << op_ret << dendl; - return; - } + bufferlist data; + op_ret = store->forward_request_to_master(s->user, nullptr, data, nullptr, s->info); + if (op_ret < 0) { + ldpp_dout(this, 0) << "forward_request_to_master returned ret=" << op_ret << dendl; + return; } http_ret = RGWUserAdminOp_User::remove(store, op_state, flusher, s->yield); } @@ -488,13 +482,11 @@ void RGWOp_Subuser_Create::execute() } op_state.set_key_type(key_type); - if (!store->svc()->zone->is_meta_master()) { - bufferlist data; - op_ret = forward_request_to_master(s, nullptr, store, data, nullptr); - if (op_ret < 0) { - ldpp_dout(this, 0) << "forward_request_to_master returned ret=" << op_ret << dendl; - return; - } + bufferlist data; + op_ret = store->forward_request_to_master(s->user, nullptr, data, nullptr, s->info); + if (op_ret < 0) { + ldpp_dout(this, 0) << "forward_request_to_master returned ret=" << op_ret << dendl; + return; } http_ret = RGWUserAdminOp_Subuser::create(store, op_state, flusher); } @@ -557,13 +549,11 @@ void RGWOp_Subuser_Modify::execute() } op_state.set_key_type(key_type); - if (!store->svc()->zone->is_meta_master()) { - bufferlist data; - op_ret = forward_request_to_master(s, nullptr, store, data, nullptr); - if (op_ret < 0) { - ldpp_dout(this, 0) << "forward_request_to_master returned ret=" << op_ret << dendl; - return; - } + bufferlist data; + op_ret = store->forward_request_to_master(s->user, nullptr, data, nullptr, s->info); + if (op_ret < 0) { + ldpp_dout(this, 0) << "forward_request_to_master returned ret=" << op_ret << dendl; + return; } http_ret = RGWUserAdminOp_Subuser::modify(store, op_state, flusher); } @@ -602,13 +592,11 @@ void RGWOp_Subuser_Remove::execute() if (purge_keys) op_state.set_purge_keys(); - if (!store->svc()->zone->is_meta_master()) { - bufferlist data; - op_ret = forward_request_to_master(s, nullptr, store, data, nullptr); - if (op_ret < 0) { - ldpp_dout(this, 0) << "forward_request_to_master returned ret=" << op_ret << dendl; - return; - } + bufferlist data; + op_ret = store->forward_request_to_master(s->user, nullptr, data, nullptr, s->info); + if (op_ret < 0) { + ldpp_dout(this, 0) << "forward_request_to_master returned ret=" << op_ret << dendl; + return; } http_ret = RGWUserAdminOp_Subuser::remove(store, op_state, flusher); } @@ -745,13 +733,11 @@ void RGWOp_Caps_Add::execute() op_state.set_user_id(uid); op_state.set_caps(caps); - if (!store->svc()->zone->is_meta_master()) { - bufferlist data; - op_ret = forward_request_to_master(s, nullptr, store, data, nullptr); - if (op_ret < 0) { - ldpp_dout(this, 0) << "forward_request_to_master returned ret=" << op_ret << dendl; - return; - } + bufferlist data; + op_ret = store->forward_request_to_master(s->user, nullptr, data, nullptr, s->info); + if (op_ret < 0) { + ldpp_dout(this, 0) << "forward_request_to_master returned ret=" << op_ret << dendl; + return; } http_ret = RGWUserAdminOp_Caps::add(store, op_state, flusher); } @@ -785,13 +771,11 @@ void RGWOp_Caps_Remove::execute() op_state.set_user_id(uid); op_state.set_caps(caps); - if (!store->svc()->zone->is_meta_master()) { - bufferlist data; - op_ret = forward_request_to_master(s, nullptr, store, data, nullptr); - if (op_ret < 0) { - ldpp_dout(this, 0) << "forward_request_to_master returned ret=" << op_ret << dendl; - return; - } + bufferlist data; + op_ret = store->forward_request_to_master(s->user, nullptr, data, nullptr, s->info); + if (op_ret < 0) { + ldpp_dout(this, 0) << "forward_request_to_master returned ret=" << op_ret << dendl; + return; } http_ret = RGWUserAdminOp_Caps::remove(store, op_state, flusher); } diff --git a/src/rgw/rgw_rest_user_policy.cc b/src/rgw/rgw_rest_user_policy.cc index 6a73a67fd9e..3802a873a02 100644 --- a/src/rgw/rgw_rest_user_policy.cc +++ b/src/rgw/rgw_rest_user_policy.cc @@ -132,13 +132,11 @@ void RGWPutUserPolicy::execute() return; } - if (!store->svc()->zone->is_meta_master()) { - ceph::bufferlist in_data; - op_ret = forward_request_to_master(s, nullptr, store, in_data, nullptr); - if (op_ret < 0) { - ldpp_dout(this, 0) << "ERROR: forward_request_to_master returned ret=" << op_ret << dendl; - return; - } + ceph::bufferlist in_data; + op_ret = store->forward_request_to_master(s->user, nullptr, in_data, nullptr, s->info); + if (op_ret < 0) { + ldpp_dout(this, 0) << "ERROR: forward_request_to_master returned ret=" << op_ret << dendl; + return; } try { @@ -338,18 +336,16 @@ void RGWDeleteUserPolicy::execute() return; } - if (!store->svc()->zone->is_meta_master()) { - ceph::bufferlist in_data; - op_ret = forward_request_to_master(s, nullptr, store, in_data, nullptr); - if (op_ret < 0) { - // a policy might've been uploaded to this site when there was no sync - // req. in earlier releases, proceed deletion - if (op_ret != -ENOENT) { - ldpp_dout(this, 5) << "forward_request_to_master returned ret=" << op_ret << dendl; - return; - } - ldpp_dout(this, 0) << "ERROR: forward_request_to_master returned ret=" << op_ret << dendl; + ceph::bufferlist in_data; + op_ret = store->forward_request_to_master(s->user, nullptr, in_data, nullptr, s->info); + if (op_ret < 0) { + // a policy might've been uploaded to this site when there was no sync + // req. in earlier releases, proceed deletion + if (op_ret != -ENOENT) { + ldpp_dout(this, 5) << "forward_request_to_master returned ret=" << op_ret << dendl; + return; } + ldpp_dout(this, 0) << "ERROR: forward_request_to_master returned ret=" << op_ret << dendl; } map policies; diff --git a/src/rgw/rgw_sal.cc b/src/rgw/rgw_sal.cc index 33601689a2e..a47037b8b0c 100644 --- a/src/rgw/rgw_sal.cc +++ b/src/rgw/rgw_sal.cc @@ -149,7 +149,7 @@ int RGWRadosBucket::remove_bucket(bool delete_children, std::string prefix, std: lderr(store->ctx()) << "ERROR: unable to remove user bucket information" << dendl; } - if (forward_to_master && !store->svc()->zone->is_meta_master()) { + if (forward_to_master) { bufferlist in_data; ret = store->forward_request_to_master(owner, &ot.read_version, in_data, nullptr, *req_info); if (ret < 0) { @@ -683,10 +683,20 @@ static int rgw_op_get_bucket_policy_from_attr(RGWRadosStore *store, return 0; } +bool RGWRadosStore::is_meta_master() +{ + return svc()->zone->is_meta_master(); +} + int RGWRadosStore::forward_request_to_master(RGWUser* user, obj_version *objv, bufferlist& in_data, JSONParser *jp, req_info& info) { + if (is_meta_master()) { + /* We're master, don't forward */ + return 0; + } + if (!svc()->zone->get_master_conn()) { ldout(ctx(), 0) << "rest connection is invalid" << dendl; return -EINVAL; diff --git a/src/rgw/rgw_sal.h b/src/rgw/rgw_sal.h index b5068244c31..96a9d29fd07 100644 --- a/src/rgw/rgw_sal.h +++ b/src/rgw/rgw_sal.h @@ -73,6 +73,9 @@ class RGWStore : public DoutPrefixProvider { req_info& req_info, std::unique_ptr* bucket) = 0; virtual RGWBucketList* list_buckets(void) = 0; + virtual bool is_meta_master() = 0; + virtual int forward_request_to_master(RGWUser* user, obj_version *objv, + bufferlist& in_data, JSONParser *jp, req_info& info) = 0; virtual void finalize(void)=0; @@ -607,6 +610,9 @@ class RGWRadosStore : public RGWStore { req_info& req_info, std::unique_ptr* bucket); virtual RGWBucketList* list_buckets(void) { return new RGWBucketList(); } + virtual bool is_meta_master() override; + virtual int forward_request_to_master(RGWUser* user, obj_version *objv, + bufferlist& in_data, JSONParser *jp, req_info& info) override; void setRados(RGWRados * st) { rados = st; } RGWRados *getRados(void) { return rados; } @@ -623,8 +629,6 @@ class RGWRadosStore : public RGWStore { int get_obj_head_ioctx(const RGWBucketInfo& bucket_info, const rgw_obj& obj, librados::IoCtx *ioctx); - int forward_request_to_master(RGWUser* user, obj_version *objv, - bufferlist& in_data, JSONParser *jp, req_info& info); // implements DoutPrefixProvider std::ostream& gen_prefix(std::ostream& out) const { return out << "RGWRadosStore "; } -- 2.39.5