This is an automated email from the ASF dual-hosted git repository.

alexey pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/kudu.git


The following commit(s) were added to refs/heads/master by this push:
     new 9d571f954 [tools] KUDU-2671 Update the kudu table describe tool
9d571f954 is described below

commit 9d571f954302a52249435726cc67dd0b8fd582f7
Author: Abhishek Chennaka <achenn...@cloudera.com>
AuthorDate: Wed Jul 27 18:05:31 2022 -0400

    [tools] KUDU-2671 Update the kudu table describe tool
    
    This patch updates the kudu table describe tool to output ranges
    which have a custom hash schema with the corresponding hash schema.
    If a partition has multiple custom hash dimensions they are
    separated by a space.
    
    Change-Id: I9fa2eb965051a5f63d1c482e6fd43ff654ec6364
    Reviewed-on: http://gerrit.cloudera.org:8080/18794
    Tested-by: Kudu Jenkins
    Reviewed-by: Alexey Serbin <ale...@apache.org>
---
 src/kudu/tools/kudu-admin-test.cc   | 58 +++++++++++++++++++++++++++++++++++++
 src/kudu/tools/tool_action_table.cc |  6 ++--
 2 files changed, 61 insertions(+), 3 deletions(-)

diff --git a/src/kudu/tools/kudu-admin-test.cc 
b/src/kudu/tools/kudu-admin-test.cc
index 45e66b292..8602b74f4 100644
--- a/src/kudu/tools/kudu-admin-test.cc
+++ b/src/kudu/tools/kudu-admin-test.cc
@@ -2086,6 +2086,64 @@ TEST_F(AdminCliTest, TestDescribeTableNoOwner) {
   ASSERT_STR_CONTAINS(stdout, "OWNER \n");
 }
 
+TEST_F(AdminCliTest, TestDescribeTableCustomHashSchema) {
+  NO_FATALS(BuildAndStart({}, {}, {}, /*create_table*/false));
+  KuduSchema schema;
+
+  // Build the schema
+  {
+    KuduSchemaBuilder builder;
+    builder.AddColumn("key_range")->Type(KuduColumnSchema::INT32)->NotNull();
+    builder.AddColumn("key_hash0")->Type(KuduColumnSchema::INT32)->NotNull();
+    builder.AddColumn("key_hash1")->Type(KuduColumnSchema::INT32)->NotNull();
+    builder.SetPrimaryKey({"key_range", "key_hash0", "key_hash1"});
+    ASSERT_OK(builder.Build(&schema));
+  }
+
+  constexpr const char* const kTableName = "table_with_custom_hash_schema";
+  unique_ptr<KuduTableCreator> table_creator(client_->NewTableCreator());
+  table_creator->table_name(kTableName)
+      .schema(&schema)
+      .add_hash_partitions({"key_hash0"}, 2)
+      .set_range_partition_columns({"key_range"})
+      .num_replicas(1);
+
+  // Create a KuduRangePartition with custom hash schema
+  {
+    unique_ptr<KuduPartialRow> lower(schema.NewRow());
+    CHECK_OK(lower->SetInt32("key_range", 0));
+    unique_ptr<KuduPartialRow> upper(schema.NewRow());
+    CHECK_OK(upper->SetInt32("key_range", 100));
+    unique_ptr<client::KuduRangePartition> partition(
+        new client::KuduRangePartition(lower.release(), upper.release()));
+    partition->add_hash_partitions({"key_hash1"}, 3);
+    table_creator->add_custom_range_partition(partition.release());
+  }
+
+  // Create a partition with table wide hash schema
+  {
+    unique_ptr<KuduPartialRow> lower(schema.NewRow());
+    CHECK_OK(lower->SetInt32("key_range", 100));
+    unique_ptr<KuduPartialRow> upper(schema.NewRow());
+    CHECK_OK(upper->SetInt32("key_range", 200));
+    table_creator->add_range_partition(lower.release(), upper.release());
+  }
+
+  // Create the table and run the tool
+  ASSERT_OK(table_creator->Create());
+  string stdout;
+  ASSERT_OK(RunKuduTool(
+      {
+          "table",
+          "describe",
+          cluster_->master()->bound_rpc_addr().ToString(),
+          kTableName,
+      },
+      &stdout));
+  ASSERT_STR_CONTAINS(stdout, "PARTITION 0 <= VALUES < 100 HASH(key_hash1) 
PARTITIONS 3,\n"
+                              "    PARTITION 100 <= VALUES < 200");
+}
+
 TEST_F(AdminCliTest, TestListTabletWithPartition) {
   FLAGS_num_tablet_servers = 1;
   FLAGS_num_replicas = 1;
diff --git a/src/kudu/tools/tool_action_table.cc 
b/src/kudu/tools/tool_action_table.cc
index f6f82bbaa..2ebc2f9b7 100644
--- a/src/kudu/tools/tool_action_table.cc
+++ b/src/kudu/tools/tool_action_table.cc
@@ -435,9 +435,9 @@ Status DescribeTable(const RunnerContext& context) {
       continue;
     }
     auto range_partition_str =
-        
partition_schema.RangePartitionDebugString(partition.begin().range_key(),
-                                                   partition.end().range_key(),
-                                                   schema_internal);
+        
partition_schema.RangeWithCustomHashPartitionDebugString(partition.begin().range_key(),
+                                                                 
partition.end().range_key(),
+                                                                 
schema_internal);
     partition_strs.emplace_back(std::move(range_partition_str));
   }
   cout << partition_schema.DisplayString(schema_internal, partition_strs)

Reply via email to