From 8d3b0e71c5dc4e64e5d192f060b4fcc47dd12651 Mon Sep 17 00:00:00 2001 From: Radoslaw Zarzynski Date: Tue, 12 Jul 2016 20:01:24 +0200 Subject: [PATCH] rgw: settle /info implementation across other swift-at-root features. Signed-off-by: Radoslaw Zarzynski (cherry picked from commit dcfd7a92046a95516a5002e2d831be02dfa9612e) --- src/rgw/rgw_main.cc | 4 ++-- src/rgw/rgw_rest_swift.cc | 29 +++++----------------------- src/rgw/rgw_rest_swift.h | 40 +++++++++++++++++++++++++++++++-------- 3 files changed, 39 insertions(+), 34 deletions(-) diff --git a/src/rgw/rgw_main.cc b/src/rgw/rgw_main.cc index 2819c8e8cd02b..9f648123d79d6 100644 --- a/src/rgw/rgw_main.cc +++ b/src/rgw/rgw_main.cc @@ -352,8 +352,8 @@ int main(int argc, const char **argv) swift_resource->register_resource("healthcheck", set_logging(new RGWRESTMgr_SWIFT_HealthCheck)); - RGWRESTMgr* const swift_info_resource = new RGWRESTMgr_SWIFT_Info; - rest.register_resource("info", set_logging(swift_info_resource)); + swift_resource->register_resource("info", + set_logging(new RGWRESTMgr_SWIFT_Info)); if (! swift_at_root) { rest.register_resource(g_conf->rgw_swift_url_prefix, diff --git a/src/rgw/rgw_rest_swift.cc b/src/rgw/rgw_rest_swift.cc index eb87723742301..3510e315cbc3b 100644 --- a/src/rgw/rgw_rest_swift.cc +++ b/src/rgw/rgw_rest_swift.cc @@ -1432,11 +1432,6 @@ RGWOp *RGWHandler_REST_Service_SWIFT::op_delete() return NULL; } -RGWOp* RGWHandler_REST_SWIFT_Info::op_get() { - - return new RGWInfo_ObjStore_SWIFT; -} - RGWOp *RGWHandler_REST_Bucket_SWIFT::get_obj_op(bool get_data) { if (is_acl_op()) { @@ -1737,22 +1732,12 @@ int RGWHandler_REST_SWIFT::init_from_header(struct req_state *s) g_conf->rgw_swift_url_prefix.c_str(), tenant_path.c_str()); } - string uri = "/info"; - if ((s->decoded_uri[0] != '/' || - s->decoded_uri.compare(0, blen, buf) != 0) && - s->decoded_uri.compare(uri) != 0) { - return -ENOENT; - } - - int ret; - //Set the formatter to JSON by default for /info api - if (s->decoded_uri.compare(uri) == 0) { - ret = allocate_formatter(s, RGW_FORMAT_JSON, false); - } - else { - ret = allocate_formatter(s, RGW_FORMAT_PLAIN, true); + if (s->decoded_uri[0] != '/' || + s->decoded_uri.compare(0, blen, buf) != 0) { + return -ENOENT; } + int ret = allocate_formatter(s, RGW_FORMAT_PLAIN, true); if (ret < 0) return ret; @@ -1862,10 +1847,6 @@ RGWHandler_REST* RGWRESTMgr_SWIFT::get_handler(struct req_state *s) RGWHandler_REST* RGWRESTMgr_SWIFT_Info::get_handler(struct req_state *s) { - int ret = RGWHandler_REST_SWIFT::init_from_header(s); - if (ret < 0) { - return nullptr; - } - + s->prot_flags |= RGW_REST_SWIFT; return new RGWHandler_REST_SWIFT_Info; } diff --git a/src/rgw/rgw_rest_swift.h b/src/rgw/rgw_rest_swift.h index 329cbfa0dbe8b..447a5a2e4b50d 100644 --- a/src/rgw/rgw_rest_swift.h +++ b/src/rgw/rgw_rest_swift.h @@ -240,14 +240,6 @@ public: virtual ~RGWHandler_REST_Service_SWIFT() {} }; -class RGWHandler_REST_SWIFT_Info : public RGWHandler_REST_SWIFT { -protected: - RGWOp *op_get(); -public: - RGWHandler_REST_SWIFT_Info() = default; - virtual ~RGWHandler_REST_SWIFT_Info() = default; -}; - class RGWHandler_REST_Bucket_SWIFT : public RGWHandler_REST_SWIFT { protected: bool is_obj_update_op() { @@ -425,6 +417,38 @@ public: }; +class RGWHandler_REST_SWIFT_Info : public RGWHandler_REST_SWIFT { +public: + RGWHandler_REST_SWIFT_Info() = default; + ~RGWHandler_REST_SWIFT_Info() = default; + + RGWOp *op_get() override { + return new RGWInfo_ObjStore_SWIFT(); + } + + int init(RGWRados* const store, + struct req_state* const state, + RGWClientIO* const cio) override { + state->dialect = "swift"; + state->formatter = new JSONFormatter; + state->format = RGW_FORMAT_JSON; + + return RGWHandler::init(store, state, cio); + } + + int authorize() override { + return 0; + } + + int postauth_init() override { + return 0; + } + + int read_permissions(RGWOp *) override { + return 0; + } +}; + class RGWRESTMgr_SWIFT_Info : public RGWRESTMgr { public: RGWRESTMgr_SWIFT_Info() = default; -- 2.39.5