]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: add `bucket object shard` command to radosgw-admin
authorAdam C. Emerson <aemerson@redhat.com>
Tue, 17 May 2022 03:23:40 +0000 (23:23 -0400)
committerCasey Bodley <cbodley@redhat.com>
Fri, 27 May 2022 19:47:34 +0000 (15:47 -0400)
Given an object, return the bucket shard appropriate to it.

Signed-off-by: Adam C. Emerson <aemerson@redhat.com>
src/rgw/rgw_admin.cc

index 97ca51cc8eae4193cdd5e0706a06524c1439266e..0c9d26ef8c5155d6770df0e65795f19de5a914f7 100644 (file)
@@ -650,6 +650,7 @@ enum class OPT {
   BUCKET_CHOWN,
   BUCKET_RADOS_LIST,
   BUCKET_SHARD_OBJECTS,
+  BUCKET_OBJECT_SHARD,
   POLICY,
   POOL_ADD,
   POOL_RM,
@@ -868,6 +869,7 @@ static SimpleCmd::Commands all_cmds = {
   { "bucket rados list", OPT::BUCKET_RADOS_LIST },
   { "bucket shard objects", OPT::BUCKET_SHARD_OBJECTS },
   { "bucket shard object", OPT::BUCKET_SHARD_OBJECTS },
+  { "bucket object shard", OPT::BUCKET_OBJECT_SHARD },
   { "policy", OPT::POLICY },
   { "pool add", OPT::POOL_ADD },
   { "pool rm", OPT::POOL_RM },
@@ -4255,6 +4257,7 @@ int main(int argc, const char **argv)
                         OPT::BUCKET_SYNC_STATUS,
                         OPT::BUCKET_SYNC_MARKERS,
                         OPT::BUCKET_SHARD_OBJECTS,
+                        OPT::BUCKET_OBJECT_SHARD,
                         OPT::LOG_LIST,
                         OPT::LOG_SHOW,
                         OPT::USAGE_SHOW,
@@ -7032,6 +7035,19 @@ int main(int argc, const char **argv)
     }
   }
 
+  if (opt_cmd == OPT::BUCKET_OBJECT_SHARD) {
+    if (!num_shards_specified || object.empty()) {
+      cerr << "ERROR: num-shards and object must be specified."
+          << std::endl;
+      return EINVAL;
+    }
+    auto shard = RGWSI_BucketIndex_RADOS::bucket_shard_index(object, num_shards);
+    formatter->open_object_section("obj_shard");
+    encode_json("shard", shard, formatter.get());
+    formatter->close_section();
+    formatter->flush(cout);
+  }
+
   if (opt_cmd == OPT::BUCKET_CHOWN) {
     if (bucket_name.empty()) {
       cerr << "ERROR: bucket name not specified" << std::endl;