]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw:adminops: slightly generalize /info
authorMatt Benjamin <mbenjamin@redhat.com>
Tue, 7 Dec 2021 15:53:30 +0000 (10:53 -0500)
committerMatt Benjamin <mbenjamin@redhat.com>
Thu, 9 Dec 2021 15:48:06 +0000 (10:48 -0500)
Adds a get_name() method to rgw::sal::Store, by which each store
returns its unique name in lowercase.

Signed-off-by: Matt Benjamin <mbenjamin@redhat.com>
qa/tasks/radosgw_admin_rest.py
src/rgw/rgw_rest_info.cc
src/rgw/rgw_sal.h
src/rgw/rgw_sal_dbstore.h
src/rgw/rgw_sal_rados.h

index c0657d53bae2a69df3210fdc75042d4bae224584..77fb3a65e623b808c4ecc4b3bbe62a9de2c9bfe9 100644 (file)
@@ -32,7 +32,7 @@ def rgwadmin_rest(connection, cmd, params=None, headers=None, raw=False):
     put_cmds = ['create', 'link', 'add']
     post_cmds = ['unlink', 'modify']
     delete_cmds = ['trim', 'rm', 'process']
-    get_cmds = ['check', 'info', 'show', 'list']
+    get_cmds = ['check', 'info', 'show', 'list', '']
 
     bucket_sub_resources = ['object', 'policy', 'index']
     user_sub_resources = ['subuser', 'key', 'caps']
@@ -722,11 +722,15 @@ def task(ctx, config):
     (ret, out) = rgwadmin_rest(admin_conn, ['user', 'info'], {'uid' :  user1})
     assert ret == 404
 
-    # TESTCASE 'info' 'info' 'show' 'display info' 'succeeds'
+    # TESTCASE 'info' 'display info' 'succeeds'
     (ret, out) = rgwadmin_rest(admin_conn, ['info', ''])
     assert ret == 200
     info = out['info']
-    # currently, cluster_id is the only element in the info section
-    fsid = info['cluster_id']
+    backends = info['storage_backends']
+    name = backends[0]['name']
+    fsid = backends[0]['cluster_id']
+    # name is always "rados" at time of writing, but zipper would allow
+    # other backends, at some point
+    assert len(name) > 0
     # fsid is a uuid, but I'm not going to try to parse it
     assert len(fsid) > 0
index c69f46243b786e54d5bd64199327af963293c7d7..4276819a394b53e4dff25257ab454478febab8f9 100644 (file)
@@ -24,12 +24,21 @@ void RGWOp_Info_Get::execute(optional_yield y) {
   Formatter *formatter = flusher.get_formatter();
   flusher.start(0);
 
-  // extensible array of general info sections
+  /* extensible array of general info sections, currently only
+   * storage backend is defined:
+   * {"info":{"storage_backends":[{"name":"rados","cluster_id":"75d1938b-2949-4933-8386-fb2d1449ff03"}]}}
+   */
   formatter->open_object_section("dummy");
   formatter->open_object_section("info");
+  formatter->open_array_section("storage_backends");
+  // for now, just return the backend that is accessible
+  formatter->open_object_section("dummy");
+  formatter->dump_string("name", store->get_name());
   formatter->dump_string("cluster_id", store->get_cluster_id(this, y));
   formatter->close_section();
   formatter->close_section();
+  formatter->close_section();
+  formatter->close_section();
 
   flusher.flush();
 } /* RGWOp_Info_Get::execute */
index 9e47bb592712751c181aad24d20ce326064d8a19..5bb3aff8e4c3fda00bd3e84ad0405eef5f345b87 100644 (file)
@@ -244,6 +244,8 @@ class Store {
     Store() {}
     virtual ~Store() = default;
 
+    /** Name of this store provider (e.g., RADOS") */
+    virtual const char* get_name() const = 0;
     /** Get cluster unique identifier */
     virtual std::string get_cluster_id(const DoutPrefixProvider* dpp,  optional_yield y) = 0;
     /** Get a User from a rgw_user.  Does not query store for user info, so quick */
index 93f6696afdd765f3bbbfe39085e89563b9e7c9ee..20788e1b6533633d9ee4ca4d01d9eee5e616a6f4 100644 (file)
@@ -506,6 +506,11 @@ protected:
       }
 
       int initialize(CephContext *cct, const DoutPrefixProvider *dpp);
+
+      virtual const char* get_name() const override {
+        return "dbstore";
+      }
+
       virtual std::unique_ptr<User> get_user(const rgw_user& u) override;
       virtual int get_user_by_access_key(const DoutPrefixProvider *dpp, const std::string& key, optional_yield y, std::unique_ptr<User>* user) override;
       virtual int get_user_by_email(const DoutPrefixProvider *dpp, const std::string& email, optional_yield y, std::unique_ptr<User>* user) override;
index c07315ddb3364eea32dc1cfc9283cf497418e46f..2b4dfb5169ce2629d955bb1b2678f6ae23a180f5 100644 (file)
@@ -373,6 +373,10 @@ class RadosStore : public Store {
       delete rados;
     }
 
+    virtual const char* get_name() const override {
+                       return "rados";
+       }
+
     virtual std::unique_ptr<User> get_user(const rgw_user& u) override;
     virtual std::string get_cluster_id(const DoutPrefixProvider* dpp,  optional_yield y) override;
     virtual int get_user_by_access_key(const DoutPrefixProvider* dpp, const std::string& key, optional_yield y, std::unique_ptr<User>* user) override;