Repository: kudu Updated Branches: refs/heads/master b3486d99a -> ef714838a
Use preferred private client API method for a couple of tools functions Change-Id: Ic5bc5e59c9e8a77faa99ca0be11db19eb04dbcb9 Reviewed-on: http://gerrit.cloudera.org:8080/11736 Reviewed-by: Adar Dembo <a...@cloudera.com> Tested-by: Will Berkeley <wdberke...@gmail.com> Project: http://git-wip-us.apache.org/repos/asf/kudu/repo Commit: http://git-wip-us.apache.org/repos/asf/kudu/commit/ef714838 Tree: http://git-wip-us.apache.org/repos/asf/kudu/tree/ef714838 Diff: http://git-wip-us.apache.org/repos/asf/kudu/diff/ef714838 Branch: refs/heads/master Commit: ef714838a8ba4e2a0dbf1d2f7998f8909d591402 Parents: b3486d9 Author: Will Berkeley <wdberke...@gmail.org> Authored: Fri Oct 19 10:28:20 2018 -0700 Committer: Will Berkeley <wdberke...@gmail.com> Committed: Fri Oct 19 20:19:44 2018 +0000 ---------------------------------------------------------------------- src/kudu/client/client.cc | 38 ++++++++++++++++++++++++++ src/kudu/client/client.h | 32 ++++++++++++++++------ src/kudu/tools/tool_action_common.cc | 45 ------------------------------- src/kudu/tools/tool_action_common.h | 9 ------- src/kudu/tools/tool_action_hms.cc | 2 +- src/kudu/tools/tool_action_table.cc | 4 +-- 6 files changed, 65 insertions(+), 65 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/kudu/blob/ef714838/src/kudu/client/client.cc ---------------------------------------------------------------------- diff --git a/src/kudu/client/client.cc b/src/kudu/client/client.cc index 1986257..d301105 100644 --- a/src/kudu/client/client.cc +++ b/src/kudu/client/client.cc @@ -85,6 +85,7 @@ #include "kudu/security/token.pb.h" #include "kudu/tserver/tserver.pb.h" #include "kudu/tserver/tserver_service.proxy.h" +#include "kudu/util/async_util.h" #include "kudu/util/debug-util.h" #include "kudu/util/init.h" #include "kudu/util/logging.h" @@ -598,6 +599,10 @@ Status KuduClient::GetTablet(const string& tablet_id, KuduTablet** tablet) { return Status::OK(); } +string KuduClient::GetMasterAddresses() const { + return HostPort::ToCommaSeparatedString(data_->master_hostports()); +} + bool KuduClient::IsMultiMaster() const { return data_->master_server_addrs_.size() > 1; } @@ -926,6 +931,39 @@ KuduPredicate* KuduTable::NewIsNullPredicate(const Slice& col_name) { }); } +// The strategy for retrieving the partitions from the metacache is adapted +// from KuduScanTokenBuilder::Data::Build. +Status KuduTable::ListPartitions(vector<Partition>* partitions) { + DCHECK(partitions); + partitions->clear(); + auto& client = data_->client_; + const auto deadline = MonoTime::Now() + client->default_admin_operation_timeout(); + PartitionPruner pruner; + pruner.Init(*data_->schema_.schema_, data_->partition_schema_, ScanSpec()); + while (pruner.HasMorePartitionKeyRanges()) { + scoped_refptr<client::internal::RemoteTablet> tablet; + Synchronizer sync; + const string& partition_key = pruner.NextPartitionKey(); + client->data_->meta_cache_->LookupTabletByKey( + this, + partition_key, + deadline, + client::internal::MetaCache::LookupType::kLowerBound, + &tablet, + sync.AsStatusCallback()); + Status s = sync.Wait(); + if (s.IsNotFound()) { + // No more tablets. + break; + } + RETURN_NOT_OK(s); + + partitions->emplace_back(tablet->partition()); + pruner.RemovePartitionKeyRange(tablet->partition().partition_key_end()); + } + return Status::OK(); +} + //////////////////////////////////////////////////////////// // Error //////////////////////////////////////////////////////////// http://git-wip-us.apache.org/repos/asf/kudu/blob/ef714838/src/kudu/client/client.h ---------------------------------------------------------------------- diff --git a/src/kudu/client/client.h b/src/kudu/client/client.h index 79153a0..5335e00 100644 --- a/src/kudu/client/client.h +++ b/src/kudu/client/client.h @@ -63,9 +63,6 @@ class KuduTable; namespace tools { class LeaderMasterProxy; -Status ListPartitions(const client::sp::shared_ptr<client::KuduTable>& table, - std::vector<Partition>* partitions); -std::string GetMasterAddresses(const client::KuduClient&); } // namespace tools namespace client { @@ -77,7 +74,6 @@ class KuduPartitioner; class KuduScanBatch; class KuduSession; class KuduStatusCallback; -class KuduTable; class KuduTableAlterer; class KuduTableCreator; class KuduTablet; @@ -452,6 +448,15 @@ class KUDU_EXPORT KuduClient : public sp::enable_shared_from_this<KuduClient> { Status GetTablet(const std::string& tablet_id, KuduTablet** tablet) KUDU_NO_EXPORT; + /// Get the master RPC addresses as configured on the last leader master this + /// client connected to, as a CSV. If the client has not connected to a leader + /// master, an empty string is returned. + /// + /// Private API. + /// + /// @return The master addresses as a CSV. + std::string GetMasterAddresses() const KUDU_NO_EXPORT; + /// @endcond /// Policy with which to choose amongst multiple replicas. @@ -590,10 +595,6 @@ class KUDU_EXPORT KuduClient : public sp::enable_shared_from_this<KuduClient> { friend class internal::WriteRpc; friend class kudu::SecurityUnknownTskTest; friend class tools::LeaderMasterProxy; - friend Status tools::ListPartitions( - const client::sp::shared_ptr<client::KuduTable>& table, - std::vector<Partition>* partitions); - friend std::string tools::GetMasterAddresses(const client::KuduClient&); FRIEND_TEST(kudu::ClientStressTest, TestUniqueClientIds); FRIEND_TEST(ClientTest, TestGetSecurityInfoFromMaster); @@ -1050,6 +1051,21 @@ class KUDU_EXPORT KuduTable : public sp::enable_shared_from_this<KuduTable> { /// @return The partition schema for the table. const PartitionSchema& partition_schema() const; + /// @cond false + + /// List the partitions of this table in 'partitions'. This operation may + /// involve RPC roundtrips to the leader master, and has a timeout equal + /// to the table's client instance's default admin operation timeout. + /// + /// Private API. + /// + /// @param [out] partitions + /// The list of partitions of the table. + /// @return Status object for the operation. + Status ListPartitions(std::vector<Partition>* partitions); + + /// @end cond + private: class KUDU_NO_EXPORT Data; http://git-wip-us.apache.org/repos/asf/kudu/blob/ef714838/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 099a32c..22e5b66 100644 --- a/src/kudu/tools/tool_action_common.cc +++ b/src/kudu/tools/tool_action_common.cc @@ -37,15 +37,10 @@ #include <google/protobuf/util/json_util.h> #include "kudu/client/client-internal.h" // IWYU pragma: keep -#include "kudu/client/client-test-util.h" #include "kudu/client/client.h" -#include "kudu/client/meta_cache.h" #include "kudu/client/shared_ptr.h" #include "kudu/common/common.pb.h" -#include "kudu/common/partition.h" -#include "kudu/common/partition_pruner.h" #include "kudu/common/row_operations.h" -#include "kudu/common/scan_spec.h" #include "kudu/common/schema.h" #include "kudu/common/wire_protocol.h" #include "kudu/consensus/consensus.pb.h" @@ -73,7 +68,6 @@ #include "kudu/tserver/tserver.pb.h" #include "kudu/tserver/tserver_admin.proxy.h" // IWYU pragma: keep #include "kudu/tserver/tserver_service.proxy.h" // IWYU pragma: keep -#include "kudu/util/async_util.h" #include "kudu/util/faststring.h" #include "kudu/util/jsonwriter.h" #include "kudu/util/memory/arena.h" @@ -451,10 +445,6 @@ Status SetServerFlag(const string& address, uint16_t default_port, } } -string GetMasterAddresses(const client::KuduClient& client) { - return HostPort::ToCommaSeparatedString(client.data_->master_hostports()); -} - bool MatchesAnyPattern(const vector<string>& patterns, const string& str) { // Consider no filter a wildcard. if (patterns.empty()) return true; @@ -858,40 +848,5 @@ Status ControlShellProtocol::SendMessage(const ControlShellRequestPB& message); template Status ControlShellProtocol::SendMessage(const ControlShellResponsePB& message); -// The strategy for retrieving the partitions from the metacache is adapted -// from KuduScanTokenBuilder::Data::Build. -Status ListPartitions(const client::sp::shared_ptr<KuduTable>& table, - vector<Partition>* partitions) { - DCHECK(table); - DCHECK(partitions); - auto* client = table->client(); - const auto deadline = MonoTime::Now() + client->default_admin_operation_timeout(); - PartitionPruner pruner; - const auto& schema_internal = SchemaFromKuduSchema(table->schema()); - pruner.Init(schema_internal, table->partition_schema(), ScanSpec()); - while (pruner.HasMorePartitionKeyRanges()) { - scoped_refptr<client::internal::RemoteTablet> tablet; - Synchronizer sync; - const string& partition_key = pruner.NextPartitionKey(); - client->data_->meta_cache_->LookupTabletByKey( - table.get(), - partition_key, - deadline, - client::internal::MetaCache::LookupType::kLowerBound, - &tablet, - sync.AsStatusCallback()); - Status s = sync.Wait(); - if (s.IsNotFound()) { - // No more tablets. - break; - } - RETURN_NOT_OK(s); - - partitions->emplace_back(tablet->partition()); - pruner.RemovePartitionKeyRange(tablet->partition().partition_key_end()); - } - - return Status::OK(); -} } // namespace tools } // namespace kudu http://git-wip-us.apache.org/repos/asf/kudu/blob/ef714838/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 b71889c..b90e12b 100644 --- a/src/kudu/tools/tool_action_common.h +++ b/src/kudu/tools/tool_action_common.h @@ -37,12 +37,10 @@ class function; namespace kudu { class MonoDelta; -class Partition; class faststring; // NOLINT namespace client { class KuduClient; -class KuduTable; } // namespace client namespace master { @@ -135,17 +133,10 @@ 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); -// Get the configured master addresses on the most recently connected to leader master. -std::string GetMasterAddresses(const client::KuduClient& client); - // Return true if 'str' matches any of the patterns in 'patterns', or if // 'patterns' is empty. bool MatchesAnyPattern(const std::vector<std::string>& patterns, const std::string& str); -// Populates `partitions` with the partitions of the table `table`. -Status ListPartitions(const client::sp::shared_ptr<client::KuduTable>& table, - std::vector<Partition>* partitions); - // 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/ef714838/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 ded8871..ac963d6 100644 --- a/src/kudu/tools/tool_action_hms.cc +++ b/src/kudu/tools/tool_action_hms.cc @@ -118,7 +118,7 @@ Status Init(const RunnerContext& context, // that the check and fix tools use the exact same master address // configuration that the masters do, otherwise the HMS table entries will // disagree on the master addresses property. - *master_addrs = GetMasterAddresses(**kudu_client); + *master_addrs = (*kudu_client)->GetMasterAddresses(); if (FLAGS_hive_metastore_uris.empty()) { string hive_metastore_uris = (*kudu_client)->GetHiveMetastoreUris(); http://git-wip-us.apache.org/repos/asf/kudu/blob/ef714838/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 310cb97..dbdf31f 100644 --- a/src/kudu/tools/tool_action_table.cc +++ b/src/kudu/tools/tool_action_table.cc @@ -164,7 +164,7 @@ Status DescribeTable(const RunnerContext& context) { // The partition schema with current range partitions. vector<Partition> partitions; - RETURN_NOT_OK_PREPEND(ListPartitions(table, &partitions), + RETURN_NOT_OK_PREPEND(table->ListPartitions(&partitions), "failed to retrieve current partitions"); const auto& schema_internal = client::SchemaFromKuduSchema(schema); const auto& partition_schema = table->partition_schema(); @@ -181,7 +181,7 @@ Status DescribeTable(const RunnerContext& context) { partition_schema.RangePartitionDebugString(partition.range_key_start(), partition.range_key_end(), schema_internal); - partition_strs.push_back(std::move(range_partition_str)); + partition_strs.emplace_back(std::move(range_partition_str)); } cout << partition_schema.DisplayString(schema_internal, partition_strs) << endl;