From b44b2e97c868f1c4cbed901f662eb22c1179ade0 Mon Sep 17 00:00:00 2001 From: lvshanchun Date: Tue, 21 Nov 2017 13:01:34 +0800 Subject: [PATCH] rgw: implement S3RESTConn to send request to S3 add a sub-class of RGWRESTConn called S3RESTConn that do not populate zonegroup-related params, it shall only used for send request to S3-like interface. Signed-off-by: lvshanchun --- src/rgw/rgw_rest_conn.cc | 6 +++--- src/rgw/rgw_rest_conn.h | 18 ++++++++++++++++++ src/rgw/rgw_sync_module_aws.cc | 2 +- 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/src/rgw/rgw_rest_conn.cc b/src/rgw/rgw_rest_conn.cc index 14586bcd452f4..fc4cda6e852ea 100644 --- a/src/rgw/rgw_rest_conn.cc +++ b/src/rgw/rgw_rest_conn.cc @@ -81,7 +81,7 @@ string RGWRESTConn::get_url() return endpoint; } -static void populate_params(param_vec_t& params, const rgw_user *uid, const string& zonegroup) +void RGWRESTConn::populate_params(param_vec_t& params, const rgw_user *uid, const string& zonegroup) { if (uid) { string uid_str = uid->to_str(); @@ -371,7 +371,7 @@ RGWRESTReadResource::RGWRESTReadResource(RGWRESTConn *_conn, void RGWRESTReadResource::init_common(param_vec_t *extra_headers) { - populate_params(params, nullptr, conn->get_self_zonegroup()); + conn->populate_params(params, nullptr, conn->get_self_zonegroup()); if (extra_headers) { headers.insert(extra_headers->begin(), extra_headers->end()); @@ -431,7 +431,7 @@ RGWRESTSendResource::RGWRESTSendResource(RGWRESTConn *_conn, void RGWRESTSendResource::init_common(param_vec_t *extra_headers) { - populate_params(params, nullptr, conn->get_self_zonegroup()); + conn->populate_params(params, nullptr, conn->get_self_zonegroup()); if (extra_headers) { headers.insert(extra_headers->begin(), extra_headers->end()); diff --git a/src/rgw/rgw_rest_conn.h b/src/rgw/rgw_rest_conn.h index e4c9d3dbb1fb4..bc50ae9bac508 100644 --- a/src/rgw/rgw_rest_conn.h +++ b/src/rgw/rgw_rest_conn.h @@ -90,6 +90,8 @@ public: } size_t get_endpoint_count() const { return endpoints.size(); } + virtual void populate_params(param_vec_t& params, const rgw_user *uid, const string& zonegroup); + /* sync request */ int forward(const rgw_user& uid, req_info& info, obj_version *objv, size_t max_response, bufferlist *inbl, bufferlist *outbl); @@ -149,6 +151,22 @@ public: int get_json_resource(const string& resource, const rgw_http_param_pair *pp, T& t); }; +class S3RESTConn : public RGWRESTConn { + +public: + + S3RESTConn(CephContext *_cct, RGWRados *store, const string& _remote_id, const list& endpoints) : + RGWRESTConn(_cct, store, _remote_id, endpoints) {} + + S3RESTConn(CephContext *_cct, RGWRados *store, const string& _remote_id, const list& endpoints, RGWAccessKey _cred): + RGWRESTConn(_cct, store, _remote_id, endpoints, _cred) {} + + void populate_params(param_vec_t& params, const rgw_user *uid, const string& zonegroup) override { + // do not populate any params in S3 REST Connection. + return; + } +}; + template int RGWRESTConn::get_json_resource(const string& resource, param_vec_t *params, bufferlist *in_data, T& t) diff --git a/src/rgw/rgw_sync_module_aws.cc b/src/rgw/rgw_sync_module_aws.cc index 73fb938b2e6dc..162b12d7e2d7d 100644 --- a/src/rgw/rgw_sync_module_aws.cc +++ b/src/rgw/rgw_sync_module_aws.cc @@ -914,7 +914,7 @@ public: void init(RGWDataSyncEnv *sync_env, uint64_t instance_id) { instance.id = string("s3:") + instance.conf.s3_endpoint; - instance.conn.reset(new RGWRESTConn(cct, + instance.conn.reset(new S3RESTConn(cct, sync_env->store, instance.id, { instance.conf.s3_endpoint }, -- 2.39.5