]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: settle /info implementation across other swift-at-root features. 11497/head
authorRadoslaw Zarzynski <rzarzynski@mirantis.com>
Tue, 12 Jul 2016 18:01:24 +0000 (20:01 +0200)
committerRadoslaw Zarzynski <rzarzynski@mirantis.com>
Sat, 19 Nov 2016 16:50:55 +0000 (17:50 +0100)
Signed-off-by: Radoslaw Zarzynski <rzarzynski@mirantis.com>
(cherry picked from commit dcfd7a92046a95516a5002e2d831be02dfa9612e)

src/rgw/rgw_main.cc
src/rgw/rgw_rest_swift.cc
src/rgw/rgw_rest_swift.h

index 2819c8e8cd02b6467dd72e153353d42be06370cb..9f648123d79d6831e9e4192da08caeeffa50d604 100644 (file)
@@ -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,
index eb8772374230119e72e47ad236497ad238ef0d28..3510e315cbc3bd526d7ba46740bb807b85049cf5 100644 (file)
@@ -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;
 }
index 329cbfa0dbe8bcf35fb45e5f5510cf50a0446155..447a5a2e4b50d81457fc3773b24f696c99ad3f79 100644 (file)
@@ -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;