You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kudu.apache.org by da...@apache.org on 2018/07/24 23:54:33 UTC

kudu git commit: Add alter_external_catalogs flag to table rename tool

Repository: kudu
Updated Branches:
  refs/heads/master 141ee5a52 -> d6ee0047c


Add alter_external_catalogs flag to table rename tool

It's going to be necessary to be able to alter the Kudu catalog
independently of the HMS in order to repair and upgrade tables when the
HMS integration is turned on.  A follow-up commit will include a test
that exercises this flag when the HMS integration is enabled.

Change-Id: I9f5d97f234283b7740df727e085523c7f0b09735
Reviewed-on: http://gerrit.cloudera.org:8080/11017
Reviewed-by: Hao Hao <ha...@cloudera.com>
Tested-by: Dan Burkert <da...@apache.org>


Project: http://git-wip-us.apache.org/repos/asf/kudu/repo
Commit: http://git-wip-us.apache.org/repos/asf/kudu/commit/d6ee0047
Tree: http://git-wip-us.apache.org/repos/asf/kudu/tree/d6ee0047
Diff: http://git-wip-us.apache.org/repos/asf/kudu/diff/d6ee0047

Branch: refs/heads/master
Commit: d6ee0047cef6fc5e3777045d50b1cfe861f745e9
Parents: 141ee5a
Author: Dan Burkert <da...@apache.org>
Authored: Fri Jul 20 14:07:32 2018 -0700
Committer: Dan Burkert <da...@apache.org>
Committed: Tue Jul 24 23:54:18 2018 +0000

----------------------------------------------------------------------
 src/kudu/client/client.h             | 15 ++++-----------
 src/kudu/tools/kudu-tool-test.cc     | 14 +++++++++-----
 src/kudu/tools/tool_action_common.cc |  4 ++++
 src/kudu/tools/tool_action_common.h  |  4 ++++
 src/kudu/tools/tool_action_hms.cc    |  2 +-
 src/kudu/tools/tool_action_table.cc  |  5 +++++
 6 files changed, 27 insertions(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/kudu/blob/d6ee0047/src/kudu/client/client.h
----------------------------------------------------------------------
diff --git a/src/kudu/client/client.h b/src/kudu/client/client.h
index 13e25da..cbf3257 100644
--- a/src/kudu/client/client.h
+++ b/src/kudu/client/client.h
@@ -58,19 +58,17 @@ class PartitionSchema;
 class SecurityUnknownTskTest;
 
 namespace client {
-class KuduClient;
+class KuduTableAlterer;
 }
 
 namespace tools {
 class LeaderMasterProxy;
-
-Status AlterKuduTableOnly(client::KuduClient* kudu_client,
-                          const std::string& name,
-                          const std::string& new_name);
+void SetAlterExternalCatalogs(client::KuduTableAlterer*, bool);
 } // namespace tools
 
 namespace client {
 
+class KuduClient;
 class KuduDelete;
 class KuduInsert;
 class KuduLoggingCallback;
@@ -79,7 +77,6 @@ class KuduScanBatch;
 class KuduSession;
 class KuduStatusCallback;
 class KuduTable;
-class KuduTableAlterer;
 class KuduTableCreator;
 class KuduTablet;
 class KuduTabletServer;
@@ -1193,11 +1190,7 @@ class KUDU_EXPORT KuduTableAlterer {
 
   friend class KuduClient;
 
-  friend Status tools::AlterKuduTableOnly(
-      client::KuduClient* kudu_client,
-      const std::string& name,
-      const std::string& new_name);
-
+  friend void tools::SetAlterExternalCatalogs(KuduTableAlterer*, bool);
   FRIEND_TEST(kudu::MasterHmsTest, TestAlterTable);
   FRIEND_TEST(kudu::MasterHmsUpgradeTest, TestRenameExistingTables);
 

http://git-wip-us.apache.org/repos/asf/kudu/blob/d6ee0047/src/kudu/tools/kudu-tool-test.cc
----------------------------------------------------------------------
diff --git a/src/kudu/tools/kudu-tool-test.cc b/src/kudu/tools/kudu-tool-test.cc
index d19dd15..f9ca66b 100644
--- a/src/kudu/tools/kudu-tool-test.cc
+++ b/src/kudu/tools/kudu-tool-test.cc
@@ -2013,6 +2013,10 @@ TEST_F(ToolTest, TestMasterList) {
 
 TEST_F(ToolTest, TestRenameTable) {
   NO_FATALS(StartExternalMiniCluster());
+  shared_ptr<KuduClient> client;
+  ASSERT_OK(cluster_->CreateClient(nullptr, &client));
+  string master_addr = cluster_->master()->bound_rpc_addr().ToString();
+
   const string& kTableName = "kudu.table";
   const string& kNewTableName = "kudu_table";
 
@@ -2022,17 +2026,17 @@ TEST_F(ToolTest, TestRenameTable) {
   workload.set_num_replicas(1);
   workload.Setup();
 
-  string master_addr = cluster_->master()->bound_rpc_addr().ToString();
   string out;
   NO_FATALS(RunActionStdoutNone(Substitute("table rename_table $0 $1 $2",
                                            master_addr, kTableName,
                                            kNewTableName)));
-  shared_ptr<KuduClient> client;
-  ASSERT_OK(KuduClientBuilder()
-      .add_master_server_addr(master_addr)
-      .Build(&client));
   shared_ptr<KuduTable> table;
   ASSERT_OK(client->OpenTable(kNewTableName, &table));
+
+  NO_FATALS(RunActionStdoutNone(
+        Substitute("table rename_table $0 $1 $2 --noalter_external_catalogs",
+          master_addr, kNewTableName, kTableName)));
+  ASSERT_OK(client->OpenTable(kTableName, &table));
 }
 
 TEST_F(ToolTest, TestRenameColumn) {

http://git-wip-us.apache.org/repos/asf/kudu/blob/d6ee0047/src/kudu/tools/tool_action_common.cc
----------------------------------------------------------------------
diff --git a/src/kudu/tools/tool_action_common.cc b/src/kudu/tools/tool_action_common.cc
index e3bcc8f..c0e7301 100644
--- a/src/kudu/tools/tool_action_common.cc
+++ b/src/kudu/tools/tool_action_common.cc
@@ -428,6 +428,10 @@ Status SetServerFlag(const string& address, uint16_t default_port,
   }
 }
 
+void SetAlterExternalCatalogs(client::KuduTableAlterer* alterer, bool alter_external_catalogs) {
+  alterer->alter_external_catalogs(alter_external_catalogs);
+}
+
 Status PrintServerStatus(const string& address, uint16_t default_port) {
   ServerStatusPB status;
   RETURN_NOT_OK(GetServerStatus(address, default_port, &status));

http://git-wip-us.apache.org/repos/asf/kudu/blob/d6ee0047/src/kudu/tools/tool_action_common.h
----------------------------------------------------------------------
diff --git a/src/kudu/tools/tool_action_common.h b/src/kudu/tools/tool_action_common.h
index eb97f78..b3ca23a 100644
--- a/src/kudu/tools/tool_action_common.h
+++ b/src/kudu/tools/tool_action_common.h
@@ -41,6 +41,7 @@ class faststring;
 
 namespace client {
 class KuduClient;
+class KuduTableAlterer;
 } // namespace client
 
 namespace master {
@@ -117,6 +118,9 @@ Status PrintServerFlags(const std::string& address, uint16_t default_port);
 Status SetServerFlag(const std::string& address, uint16_t default_port,
                      const std::string& flag, const std::string& value);
 
+// Set the non-public 'alter_external_catalogs' option on a KuduTableAlterer.
+void SetAlterExternalCatalogs(client::KuduTableAlterer* alterer, bool alter_external_catalogs);
+
 // A table of data to present to the user.
 //
 // Supports formatting based on the --format flag.

http://git-wip-us.apache.org/repos/asf/kudu/blob/d6ee0047/src/kudu/tools/tool_action_hms.cc
----------------------------------------------------------------------
diff --git a/src/kudu/tools/tool_action_hms.cc b/src/kudu/tools/tool_action_hms.cc
index 751cf3c..6273ed2 100644
--- a/src/kudu/tools/tool_action_hms.cc
+++ b/src/kudu/tools/tool_action_hms.cc
@@ -110,8 +110,8 @@ Status AlterKuduTableOnly(KuduClient* kudu_client,
                           const string& name,
                           const string& new_name) {
   unique_ptr<KuduTableAlterer> alterer(kudu_client->NewTableAlterer(name));
+  SetAlterExternalCatalogs(alterer.get(), false);
   return alterer->RenameTo(new_name)
-                ->alter_external_catalogs(false)
                 ->Alter();
 }
 

http://git-wip-us.apache.org/repos/asf/kudu/blob/d6ee0047/src/kudu/tools/tool_action_table.cc
----------------------------------------------------------------------
diff --git a/src/kudu/tools/tool_action_table.cc b/src/kudu/tools/tool_action_table.cc
index 6fd0037..75d3a61 100644
--- a/src/kudu/tools/tool_action_table.cc
+++ b/src/kudu/tools/tool_action_table.cc
@@ -36,6 +36,9 @@
 #include "kudu/tools/tool_action_common.h"
 #include "kudu/util/status.h"
 
+DEFINE_bool(alter_external_catalogs, true,
+            "Whether to alter external catalogs, such as the Hive Metastore, "
+            "when renaming a table.");
 DEFINE_bool(list_tablets, false,
             "Include tablet and replica UUIDs in the output");
 
@@ -130,6 +133,7 @@ Status RenameTable(const RunnerContext& context) {
   client::sp::shared_ptr<KuduClient> client;
   RETURN_NOT_OK(CreateKuduClient(context, &client));
   unique_ptr<KuduTableAlterer> alterer(client->NewTableAlterer(table_name));
+  SetAlterExternalCatalogs(alterer.get(), FLAGS_alter_external_catalogs);
   return alterer->RenameTo(new_table_name)
                 ->Alter();
 }
@@ -168,6 +172,7 @@ unique_ptr<Mode> BuildTableMode() {
       .AddRequiredParameter({ kMasterAddressesArg, kMasterAddressesArgDesc })
       .AddRequiredParameter({ kTableNameArg, "Name of the table to rename" })
       .AddRequiredParameter({ kNewTableNameArg, "New table name" })
+      .AddOptionalParameter("alter_external_catalogs")
       .Build();
 
   unique_ptr<Action> rename_column =