This is an automated email from the ASF dual-hosted git repository. zghao pushed a commit to branch HBASE-14850 in repository https://gitbox.apache.org/repos/asf/hbase.git
commit eae654abe41882fdde6b8bebc9300d627aa896c3 Author: Enis Soztutar <[email protected]> AuthorDate: Tue Jan 24 15:41:34 2017 -0800 HBASE-17485 [C++] Zookeeper quorum and znode lookup made configurable (Sudeep Sunthankar & enis) --- hbase-native-client/core/client.cc | 4 ++-- hbase-native-client/core/location-cache-test.cc | 7 +++---- hbase-native-client/core/location-cache.cc | 14 +++++++------- hbase-native-client/core/location-cache.h | 12 ++++++++++-- hbase-native-client/core/simple-client.cc | 8 +++++++- hbase-native-client/test-util/BUCK | 3 ++- hbase-native-client/test-util/test-util.h | 8 ++++++++ 7 files changed, 39 insertions(+), 17 deletions(-) diff --git a/hbase-native-client/core/client.cc b/hbase-native-client/core/client.cc index dd568ce..c1efd8b 100644 --- a/hbase-native-client/core/client.cc +++ b/hbase-native-client/core/client.cc @@ -47,8 +47,8 @@ void Client::init(const hbase::Configuration &conf) { io_executor_ = std::make_shared<wangle::IOThreadPoolExecutor>(sysconf(_SC_NPROCESSORS_ONLN)); rpc_client_ = std::make_shared<hbase::RpcClient>(io_executor_); - location_cache_ = std::make_shared<hbase::LocationCache>(zk_quorum, cpu_executor_, - rpc_client_->connection_pool()); + location_cache_ = + std::make_shared<hbase::LocationCache>(conf_, cpu_executor_, rpc_client_->connection_pool()); } // We can't have the threads continue running after everything is done diff --git a/hbase-native-client/core/location-cache-test.cc b/hbase-native-client/core/location-cache-test.cc index 42e7bb3..1ad6c65 100644 --- a/hbase-native-client/core/location-cache-test.cc +++ b/hbase-native-client/core/location-cache-test.cc @@ -31,11 +31,10 @@ using namespace std::chrono; TEST(LocationCacheTest, TestGetMetaNodeContents) { TestUtil test_util{}; - auto cpu = std::make_shared<wangle::CPUThreadPoolExecutor>(4); auto io = std::make_shared<wangle::IOThreadPoolExecutor>(4); auto cp = std::make_shared<ConnectionPool>(io); - LocationCache cache{"localhost:2181", cpu, cp}; + LocationCache cache{test_util.conf(), cpu, cp}; auto f = cache.LocateMeta(); auto result = f.get(); ASSERT_FALSE(f.hasException()); @@ -51,7 +50,7 @@ TEST(LocationCacheTest, TestGetRegionLocation) { auto cpu = std::make_shared<wangle::CPUThreadPoolExecutor>(4); auto io = std::make_shared<wangle::IOThreadPoolExecutor>(4); auto cp = std::make_shared<ConnectionPool>(io); - LocationCache cache{"localhost:2181", cpu, cp}; + LocationCache cache{test_util.conf(), cpu, cp}; // If there is no table this should throw an exception auto tn = folly::to<hbase::pb::TableName>("t"); @@ -70,7 +69,7 @@ TEST(LocationCacheTest, TestCaching) { auto cpu = std::make_shared<wangle::CPUThreadPoolExecutor>(4); auto io = std::make_shared<wangle::IOThreadPoolExecutor>(4); auto cp = std::make_shared<ConnectionPool>(io); - LocationCache cache{"localhost:2181", cpu, cp}; + LocationCache cache{test_util.conf(), cpu, cp}; auto tn_1 = folly::to<hbase::pb::TableName>("t1"); auto tn_2 = folly::to<hbase::pb::TableName>("t2"); diff --git a/hbase-native-client/core/location-cache.cc b/hbase-native-client/core/location-cache.cc index 66f3eb7..dab5deb 100644 --- a/hbase-native-client/core/location-cache.cc +++ b/hbase-native-client/core/location-cache.cc @@ -50,13 +50,10 @@ using hbase::pb::ServerName; using hbase::pb::MetaRegionServer; using hbase::pb::RegionInfo; -// TODO(eclark): make this configurable on client creation -static const char META_ZNODE_NAME[] = "/hbase/meta-region-server"; - -LocationCache::LocationCache(std::string quorum_spec, +LocationCache::LocationCache(std::shared_ptr<hbase::Configuration> conf, std::shared_ptr<wangle::CPUThreadPoolExecutor> cpu_executor, std::shared_ptr<ConnectionPool> cp) - : quorum_spec_(quorum_spec), + : conf_(conf), cpu_executor_(cpu_executor), meta_promise_(nullptr), meta_lock_(), @@ -65,7 +62,8 @@ LocationCache::LocationCache(std::string quorum_spec, zk_(nullptr), cached_locations_(), locations_lock_() { - zk_ = zookeeper_init(quorum_spec.c_str(), nullptr, 1000, 0, 0, 0); + quorum_spec_ = conf_->Get(kHBaseZookeeperQuorum_, kDefHBaseZookeeperQuorum_); + zk_ = zookeeper_init(quorum_spec_.c_str(), nullptr, 1000, 0, 0, 0); } LocationCache::~LocationCache() { @@ -101,8 +99,10 @@ ServerName LocationCache::ReadMetaLocation() { // This needs to be int rather than size_t as that's what ZK expects. int len = buf->capacity(); + std::string zk_node = conf_->Get(kHBaseMetaZnodeName_, kDefHBaseMetaZnodeName_); + zk_node += "/" + kHBaseMetaRegionServer_; // TODO(elliott): handle disconnects/reconntion as needed. - int zk_result = zoo_get(this->zk_, META_ZNODE_NAME, 0, + int zk_result = zoo_get(this->zk_, zk_node.c_str(), 0, reinterpret_cast<char *>(buf->writableData()), &len, nullptr); if (zk_result != ZOK || len < 9) { LOG(ERROR) << "Error getting meta location."; diff --git a/hbase-native-client/core/location-cache.h b/hbase-native-client/core/location-cache.h index 22a8ad5..4d66e06 100644 --- a/hbase-native-client/core/location-cache.h +++ b/hbase-native-client/core/location-cache.h @@ -32,6 +32,7 @@ #include <string> #include "connection/connection-pool.h" +#include "core/configuration.h" #include "core/meta-utils.h" #include "core/region-location.h" #include "serde/table-name.h" @@ -77,12 +78,12 @@ class LocationCache { public: /** * Constructor. - * @param quorum_spec Where to connect for Zookeeper. + * @param conf Configuration instance to fetch Zookeeper Quorum and Zookeeper Znode. * @param cpu_executor executor used to run non network IO based * continuations. * @param io_executor executor used to talk to the network */ - LocationCache(std::string quorum_spec, + LocationCache(std::shared_ptr<hbase::Configuration> conf, std::shared_ptr<wangle::CPUThreadPoolExecutor> cpu_executor, std::shared_ptr<ConnectionPool> cp); /** @@ -179,7 +180,14 @@ class LocationCache { const hbase::pb::TableName &tn); std::shared_ptr<hbase::PerTableLocationMap> GetNewTableLocations(const hbase::pb::TableName &tn); + const std::string kHBaseZookeeperQuorum_ = "hbase.zookeeper.quorum"; + const std::string kDefHBaseZookeeperQuorum_ = "localhost:2181"; + const std::string kHBaseMetaZnodeName_ = "zookeeper.znode.parent"; + const std::string kDefHBaseMetaZnodeName_ = "/hbase"; + const std::string kHBaseMetaRegionServer_ = "meta-region-server"; + /* data */ + std::shared_ptr<hbase::Configuration> conf_; std::string quorum_spec_; std::shared_ptr<wangle::CPUThreadPoolExecutor> cpu_executor_; std::unique_ptr<folly::SharedPromise<hbase::pb::ServerName>> meta_promise_; diff --git a/hbase-native-client/core/simple-client.cc b/hbase-native-client/core/simple-client.cc index dac0d10..3cd0a93 100644 --- a/hbase-native-client/core/simple-client.cc +++ b/hbase-native-client/core/simple-client.cc @@ -39,6 +39,7 @@ using namespace folly; using namespace std; using namespace std::chrono; +using hbase::Configuration; using hbase::Response; using hbase::Request; using hbase::HBaseService; @@ -87,9 +88,14 @@ int main(int argc, char *argv[]) { // Set up thread pools. auto cpu_pool = std::make_shared<wangle::CPUThreadPoolExecutor>(FLAGS_threads); auto io_pool = std::make_shared<wangle::IOThreadPoolExecutor>(5); + auto cp = std::make_shared<ConnectionPool>(io_pool); + + // Configuration + auto conf = std::make_shared<Configuration>(); + conf->Set("hbase.zookeeper.quorum", FLAGS_zookeeper); // Create the cache. - LocationCache cache{FLAGS_zookeeper, cpu_pool, io_pool}; + LocationCache cache{conf, cpu_pool, cp}; auto row = FLAGS_row; auto tn = folly::to<TableName>(FLAGS_table); diff --git a/hbase-native-client/test-util/BUCK b/hbase-native-client/test-util/BUCK index e5e6ea2..c6e41f1 100644 --- a/hbase-native-client/test-util/BUCK +++ b/hbase-native-client/test-util/BUCK @@ -22,8 +22,9 @@ cxx_library(name="test-util", srcs=["test-util.cc"], deps=[ "//third-party:folly", + "//core:core" ], visibility=[ 'PUBLIC', ], - ) \ No newline at end of file + ) diff --git a/hbase-native-client/test-util/test-util.h b/hbase-native-client/test-util/test-util.h index 2fc9d69..cc35511 100644 --- a/hbase-native-client/test-util/test-util.h +++ b/hbase-native-client/test-util/test-util.h @@ -24,6 +24,8 @@ #include <cstdlib> #include <string> +#include "core/configuration.h" + namespace hbase { /** * @brief Class to deal with a local instance cluster for testing. @@ -55,7 +57,13 @@ class TestUtil { */ static std::string RandString(int len = 32); + /** + * Returns the configuration to talk to the local cluster + */ + std::shared_ptr<Configuration> conf() const { return conf_; } + private: folly::test::TemporaryDirectory temp_dir_; + std::shared_ptr<Configuration> conf_ = std::make_shared<Configuration>(); }; } // namespace hbase
