]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
Zipper - forward_request_to_master in RGWStore
authorDaniel Gryniewicz <dang@redhat.com>
Mon, 27 Jul 2020 18:42:42 +0000 (14:42 -0400)
committerDaniel Gryniewicz <dang@redhat.com>
Mon, 17 Aug 2020 16:30:58 +0000 (12:30 -0400)
Signed-off-by: Daniel Gryniewicz <dang@redhat.com>
src/rgw/rgw_op.cc
src/rgw/rgw_op.h
src/rgw/rgw_rest_bucket.cc
src/rgw/rgw_rest_user.cc
src/rgw/rgw_rest_user_policy.cc
src/rgw/rgw_sal.cc
src/rgw/rgw_sal.h

index aa9fa9f07944cf13612cf855dbdeb9b5e9566342..ef5b292a2432115b8829c756ea89515ce2830d43 100644 (file)
@@ -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;
index efbfc06ac34cc81eb0deba04b9128df368ca21bd..ece46581c4afa2ae8ad6afaff392bfeb22471d79 100644 (file)
@@ -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 */
index 994f5660ed12c46a8bcecb8d4514545003219216..2cd1f980a4f8d618502fef4a8aad1c5f204f105b 100644 (file)
@@ -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);
 }
index c777e0e813d1b20c7d0b2cb4be2ddbc5db013274..9a67577bdd165069929f5277b3ecca6fcb30a829 100644 (file)
@@ -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);
 }
index 6a73a67fd9e829cab2f5812e6f0694c57e5c0b7f..3802a873a02be71670e70e31af6be1432922087b 100644 (file)
@@ -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<string, string> policies;
index 33601689a2e1fca706e5b23a3dfafd1e4c7207c9..a47037b8b0c0268d13ed83369e53a5481688855b 100644 (file)
@@ -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;
index b5068244c318643114edfea413a1dd4f6fad3989..96a9d29fd070069735152316ca1bc2fe4ccb371e 100644 (file)
@@ -73,6 +73,9 @@ class RGWStore : public DoutPrefixProvider {
                            req_info& req_info,
                            std::unique_ptr<RGWBucket>* 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<RGWBucket>* 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 "; }