Repository: hbase Updated Branches: refs/heads/HBASE-14850 326bdfe39 -> 9b43493f8
HBASE-17466 [C++] Test cleanup and minor improvements Project: http://git-wip-us.apache.org/repos/asf/hbase/repo Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/9b43493f Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/9b43493f Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/9b43493f Branch: refs/heads/HBASE-14850 Commit: 9b43493f80ca84546013c4babd0bba0ee1117c8c Parents: 326bdfe Author: Enis Soztutar <e...@apache.org> Authored: Mon Mar 13 14:21:24 2017 -0700 Committer: Enis Soztutar <e...@apache.org> Committed: Mon Mar 13 14:21:24 2017 -0700 ---------------------------------------------------------------------- hbase-native-client/connection/BUCK | 12 +- hbase-native-client/core/BUCK | 35 ++-- .../core/async-rpc-retrying-test.cc | 13 +- hbase-native-client/core/client-test.cc | 41 +---- hbase-native-client/core/client.cc | 1 - hbase-native-client/core/client.h | 2 - hbase-native-client/core/filter-test.cc | 2 +- hbase-native-client/core/location-cache-test.cc | 12 +- hbase-native-client/core/location-cache.cc | 15 +- hbase-native-client/core/location-cache.h | 11 +- hbase-native-client/core/zk-util-test.cc | 50 ++++++ hbase-native-client/core/zk-util.cc | 58 ++++++ hbase-native-client/core/zk-util.h | 41 +++++ hbase-native-client/security/BUCK | 4 +- hbase-native-client/serde/BUCK | 52 ++---- hbase-native-client/test-util/mini-cluster.cc | 180 +++++++------------ hbase-native-client/test-util/mini-cluster.h | 23 +-- hbase-native-client/test-util/test-util.cc | 41 ++--- hbase-native-client/test-util/test-util.h | 23 +-- hbase-native-client/third-party/BUCK | 4 +- 20 files changed, 320 insertions(+), 300 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hbase/blob/9b43493f/hbase-native-client/connection/BUCK ---------------------------------------------------------------------- diff --git a/hbase-native-client/connection/BUCK b/hbase-native-client/connection/BUCK index bc05be0..19536d5 100644 --- a/hbase-native-client/connection/BUCK +++ b/hbase-native-client/connection/BUCK @@ -50,14 +50,8 @@ cxx_library( "//third-party:wangle", ], compiler_flags=['-Weffc++'], - visibility=[ - '//core/...', - ],) + visibility=['//core/...',],) cxx_test( name="connection-pool-test", - srcs=[ - "connection-pool-test.cc", - ], - deps=[ - ":connection", - ],) + srcs=["connection-pool-test.cc",], + deps=[":connection",],) http://git-wip-us.apache.org/repos/asf/hbase/blob/9b43493f/hbase-native-client/core/BUCK ---------------------------------------------------------------------- diff --git a/hbase-native-client/core/BUCK b/hbase-native-client/core/BUCK index fd4c0dc..3df48d6 100644 --- a/hbase-native-client/core/BUCK +++ b/hbase-native-client/core/BUCK @@ -41,6 +41,7 @@ cxx_library( "async-rpc-retrying-caller-factory.h", "async-rpc-retrying-caller.h", "hbase-rpc-controller.h", + "zk-util.h", ], srcs=[ "cell.cc", @@ -55,6 +56,7 @@ cxx_library( "request-converter.cc", "response-converter.cc", "table.cc", + "zk-util.cc", ], deps=[ "//exceptions:exceptions", @@ -83,14 +85,10 @@ cxx_library( ], deps=["//third-party:folly"], compiler_flags=['-Weffc++', '-ggdb'], - visibility=[ - 'PUBLIC', - ],) + visibility=['PUBLIC',],) cxx_test( name="location-cache-test", - srcs=[ - "location-cache-test.cc", - ], + srcs=["location-cache-test.cc",], deps=[ ":core", "//test-util:test-util", @@ -98,18 +96,12 @@ cxx_test( run_test_separately=True,) cxx_test( name="cell-test", - srcs=[ - "cell-test.cc", - ], - deps=[ - ":core", - ], + srcs=["cell-test.cc",], + deps=[":core",], run_test_separately=True,) cxx_test( name="filter-test", - srcs=[ - "filter-test.cc", - ], + srcs=["filter-test.cc",], deps=[ ":core", "//if:if", @@ -167,9 +159,7 @@ cxx_test( run_test_separately=True,) cxx_test( name="client-test", - srcs=[ - "client-test.cc", - ], + srcs=["client-test.cc",], deps=[ ":core", "//if:if", @@ -177,9 +167,12 @@ cxx_test( "//test-util:test-util", ], run_test_separately=True,) +cxx_test( + name="zk-util-test", + srcs=["zk-util-test.cc",], + deps=[":core",], + run_test_separately=True,) cxx_binary( name="simple-client", - srcs=[ - "simple-client.cc", - ], + srcs=["simple-client.cc",], deps=[":core", "//connection:connection"],) http://git-wip-us.apache.org/repos/asf/hbase/blob/9b43493f/hbase-native-client/core/async-rpc-retrying-test.cc ---------------------------------------------------------------------- diff --git a/hbase-native-client/core/async-rpc-retrying-test.cc b/hbase-native-client/core/async-rpc-retrying-test.cc index f2a79a1..81d726f 100644 --- a/hbase-native-client/core/async-rpc-retrying-test.cc +++ b/hbase-native-client/core/async-rpc-retrying-test.cc @@ -143,11 +143,10 @@ class MockRawAsyncTableImpl { }; TEST(AsyncRpcRetryTest, TestGetBasic) { - // Remove already configured env if present. - unsetenv("HBASE_CONF"); - // Using TestUtil to populate test data - hbase::TestUtil* test_util = new hbase::TestUtil(); + auto test_util = std::make_unique<hbase::TestUtil>(); + test_util->StartMiniCluster(2); + test_util->CreateTable("t", "d"); test_util->TablePut("t", "test2", "d", "2", "value2"); test_util->TablePut("t", "test2", "d", "extra", "value for extra"); @@ -231,12 +230,6 @@ TEST(AsyncRpcRetryTest, TestGetBasic) { hbase::Result result = async_caller->Call().get(); - /*Stopping the connection as we are getting segfault due to some folly issue - The connection stays open and we don't want that. - So we are stopping the connection. - We can remove this once we have fixed the folly part */ - delete test_util; - // Test the values, should be same as in put executed on hbase shell ASSERT_TRUE(!result.IsEmpty()) << "Result shouldn't be empty."; EXPECT_EQ("test2", result.Row()); http://git-wip-us.apache.org/repos/asf/hbase/blob/9b43493f/hbase-native-client/core/client-test.cc ---------------------------------------------------------------------- diff --git a/hbase-native-client/core/client-test.cc b/hbase-native-client/core/client-test.cc index 6f74e9c..72680c6 100644 --- a/hbase-native-client/core/client-test.cc +++ b/hbase-native-client/core/client-test.cc @@ -59,7 +59,8 @@ class ClientTest : public ::testing::Test { static std::unique_ptr<hbase::TestUtil> test_util; static void SetUpTestCase() { - test_util = std::make_unique<hbase::TestUtil>(2, ClientTest::kDefHBaseConfPath.c_str()); + test_util = std::make_unique<hbase::TestUtil>(); + test_util->StartMiniCluster(2); } }; std::unique_ptr<hbase::TestUtil> ClientTest::test_util = nullptr; @@ -86,9 +87,9 @@ const std::string ClientTest::kHBaseXmlData( "the License.\n " "*/\n-->\n<configuration>\n\n</configuration>"); -TEST(Client, EmptyConfigurationPassedToClient) { ASSERT_ANY_THROW(hbase::Client client); } +TEST_F(ClientTest, EmptyConfigurationPassedToClient) { ASSERT_ANY_THROW(hbase::Client client); } -TEST(Client, ConfigurationPassedToClient) { +TEST_F(ClientTest, ConfigurationPassedToClient) { // Remove already configured env if present. unsetenv("HBASE_CONF"); ClientTest::CreateHBaseConfWithEnv(); @@ -101,7 +102,7 @@ TEST(Client, ConfigurationPassedToClient) { client.Close(); } -TEST(Client, DefaultConfiguration) { +TEST_F(ClientTest, DefaultConfiguration) { // Remove already configured env if present. unsetenv("HBASE_CONF"); ClientTest::CreateHBaseConfWithEnv(); @@ -112,10 +113,6 @@ TEST(Client, DefaultConfiguration) { } TEST_F(ClientTest, Get) { - // Remove already configured env if present. - unsetenv("HBASE_CONF"); - ClientTest::CreateHBaseConfWithEnv(); - // Using TestUtil to populate test data ClientTest::test_util->CreateTable("t", "d"); ClientTest::test_util->TablePut("t", "test2", "d", "2", "value2"); @@ -128,12 +125,8 @@ TEST_F(ClientTest, Get) { // Get to be performed on above HBase Table hbase::Get get(row); - // Create Configuration - hbase::HBaseConfigurationLoader loader; - auto conf = loader.LoadDefaultResources(); - // Create a client - hbase::Client client(conf.value()); + hbase::Client client(*ClientTest::test_util->conf()); // Get connection to HBase Table auto table = client.Table(tn); @@ -152,11 +145,7 @@ TEST_F(ClientTest, Get) { client.Close(); } -TEST(Client, GetForNonExistentTable) { - // Remove already configured env if present. - unsetenv("HBASE_CONF"); - ClientTest::CreateHBaseConfWithEnv(); - +TEST_F(ClientTest, GetForNonExistentTable) { // Create TableName and Row to be fetched from HBase auto tn = folly::to<hbase::pb::TableName>("t_not_exists"); auto row = "test2"; @@ -164,12 +153,8 @@ TEST(Client, GetForNonExistentTable) { // Get to be performed on above HBase Table hbase::Get get(row); - // Create Configuration - hbase::HBaseConfigurationLoader loader; - auto conf = loader.LoadDefaultResources(); - // Create a client - hbase::Client client(conf.value()); + hbase::Client client(*ClientTest::test_util->conf()); // Get connection to HBase Table auto table = client.Table(tn); @@ -183,10 +168,6 @@ TEST(Client, GetForNonExistentTable) { } TEST_F(ClientTest, GetForNonExistentRow) { - // Remove already configured env if present. - unsetenv("HBASE_CONF"); - ClientTest::CreateHBaseConfWithEnv(); - // Using TestUtil to populate test data ClientTest::test_util->CreateTable("t_exists", "d"); @@ -197,12 +178,8 @@ TEST_F(ClientTest, GetForNonExistentRow) { // Get to be performed on above HBase Table hbase::Get get(row); - // Create Configuration - hbase::HBaseConfigurationLoader loader; - auto conf = loader.LoadDefaultResources(); - // Create a client - hbase::Client client(conf.value()); + hbase::Client client(*ClientTest::test_util->conf()); // Get connection to HBase Table auto table = client.Table(tn); http://git-wip-us.apache.org/repos/asf/hbase/blob/9b43493f/hbase-native-client/core/client.cc ---------------------------------------------------------------------- diff --git a/hbase-native-client/core/client.cc b/hbase-native-client/core/client.cc index f0483ef..3f889d4 100644 --- a/hbase-native-client/core/client.cc +++ b/hbase-native-client/core/client.cc @@ -41,7 +41,6 @@ Client::Client(const hbase::Configuration &conf) { init(conf); } void Client::init(const hbase::Configuration &conf) { conf_ = std::make_shared<hbase::Configuration>(conf); - auto zk_quorum = conf_->Get(kHBaseZookeeperQuorum_, kDefHBaseZookeeperQuorum_); conn_conf_ = std::make_shared<hbase::ConnectionConfiguration>(*conf_); // start thread pools http://git-wip-us.apache.org/repos/asf/hbase/blob/9b43493f/hbase-native-client/core/client.h ---------------------------------------------------------------------- diff --git a/hbase-native-client/core/client.h b/hbase-native-client/core/client.h index 6e3c889..040bea0 100644 --- a/hbase-native-client/core/client.h +++ b/hbase-native-client/core/client.h @@ -70,8 +70,6 @@ class Client { private: /** Constants */ - static constexpr const char* kHBaseZookeeperQuorum_ = "hbase.zookeeper.quorum"; - static constexpr const char* kDefHBaseZookeeperQuorum_ = "localhost:2181"; /** Parameter name for HBase client IO thread pool size. Defaults to num cpus */ static constexpr const char* kClientIoThreadPoolSize = "hbase.client.io.thread.pool.size"; /** Parameter name for HBase client CPU thread pool size. Defaults to (2 * num cpus) */ http://git-wip-us.apache.org/repos/asf/hbase/blob/9b43493f/hbase-native-client/core/filter-test.cc ---------------------------------------------------------------------- diff --git a/hbase-native-client/core/filter-test.cc b/hbase-native-client/core/filter-test.cc index 6529b5a..40081cc 100644 --- a/hbase-native-client/core/filter-test.cc +++ b/hbase-native-client/core/filter-test.cc @@ -41,6 +41,7 @@ class FilterTest : public ::testing::Test { protected: static void SetUpTestCase() { test_util_ = std::make_unique<TestUtil>(); + test_util_->StartMiniCluster(2); } static void TearDownTestCase() { test_util_.release(); } @@ -51,7 +52,6 @@ class FilterTest : public ::testing::Test { static std::unique_ptr<TestUtil> test_util_; }; - std::unique_ptr<TestUtil> FilterTest::test_util_ = nullptr; TEST_F(FilterTest, GetWithColumnPrefixFilter) { http://git-wip-us.apache.org/repos/asf/hbase/blob/9b43493f/hbase-native-client/core/location-cache-test.cc ---------------------------------------------------------------------- diff --git a/hbase-native-client/core/location-cache-test.cc b/hbase-native-client/core/location-cache-test.cc index 75a56d1..4159af4 100644 --- a/hbase-native-client/core/location-cache-test.cc +++ b/hbase-native-client/core/location-cache-test.cc @@ -34,6 +34,7 @@ class LocationCacheTest : public ::testing::Test { protected: static void SetUpTestCase() { test_util_ = std::make_unique<TestUtil>(); + test_util_->StartMiniCluster(2); } static void TearDownTestCase() { test_util_.release(); } @@ -46,7 +47,6 @@ class LocationCacheTest : public ::testing::Test { std::unique_ptr<TestUtil> LocationCacheTest::test_util_ = nullptr; - TEST_F(LocationCacheTest, TestGetMetaNodeContents) { auto cpu = std::make_shared<wangle::CPUThreadPoolExecutor>(4); auto io = std::make_shared<wangle::IOThreadPoolExecutor>(4); @@ -105,8 +105,9 @@ TEST_F(LocationCacheTest, TestCaching) { ASSERT_EQ(loc, cache.GetCachedLocation(tn_1, row_a)); // test with two regions - std::string empty; - LocationCacheTest::test_util_->CreateTable("t2", "d", "b", empty); + std::vector<std::string> keys; + keys.push_back("b"); + LocationCacheTest::test_util_->CreateTable("t2", "d", keys); ASSERT_FALSE(cache.IsLocationCached(tn_2, "a")); loc = cache.LocateRegion(tn_2, "a").get(milliseconds(1000)); @@ -121,7 +122,10 @@ TEST_F(LocationCacheTest, TestCaching) { ASSERT_EQ(loc, cache.GetCachedLocation(tn_2, "ba")); // test with three regions - LocationCacheTest::test_util_->CreateTable("t3", "d", "b", "c"); + keys.clear(); + keys.push_back("b"); + keys.push_back("c"); + LocationCacheTest::test_util_->CreateTable("t3", "d", keys); ASSERT_FALSE(cache.IsLocationCached(tn_3, "c")); ASSERT_FALSE(cache.IsLocationCached(tn_3, "ca")); http://git-wip-us.apache.org/repos/asf/hbase/blob/9b43493f/hbase-native-client/core/location-cache.cc ---------------------------------------------------------------------- diff --git a/hbase-native-client/core/location-cache.cc b/hbase-native-client/core/location-cache.cc index 9550614..505f48c 100644 --- a/hbase-native-client/core/location-cache.cc +++ b/hbase-native-client/core/location-cache.cc @@ -18,13 +18,12 @@ */ #include "core/location-cache.h" +#include <folly/Conv.h> #include <folly/Logging.h> #include <folly/io/IOBuf.h> #include <wangle/concurrent/CPUThreadPoolExecutor.h> #include <wangle/concurrent/IOThreadPoolExecutor.h> -#include <utility> - #include <folly/Logging.h> #include "connection/response.h" #include "connection/rpc-connection.h" @@ -34,6 +33,8 @@ #include "serde/server-name.h" #include "serde/zk.h" +#include <utility> + using namespace std; using namespace folly; using hbase::RpcConnection; @@ -63,8 +64,8 @@ LocationCache::LocationCache(std::shared_ptr<hbase::Configuration> conf, zk_(nullptr), cached_locations_(), locations_lock_() { - quorum_spec_ = conf_->Get(kHBaseZookeeperQuorum_, kDefHBaseZookeeperQuorum_); - zk_ = zookeeper_init(quorum_spec_.c_str(), nullptr, 1000, 0, 0, 0); + zk_quorum_ = ZKUtil::ParseZooKeeperQuorum(*conf_); + zk_ = zookeeper_init(zk_quorum_.c_str(), nullptr, 1000, 0, 0, 0); } LocationCache::~LocationCache() { @@ -100,15 +101,13 @@ 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_; + std::string zk_node = ZKUtil::MetaZNode(*conf_); // TODO(elliott): handle disconnects/reconntion as needed. 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."; - throw runtime_error("Error getting meta location. Quorum " + - conf_->Get(kHBaseZookeeperQuorum_, "")); + throw runtime_error("Error getting meta location. Quorum: " + zk_quorum_); } buf->append(len); http://git-wip-us.apache.org/repos/asf/hbase/blob/9b43493f/hbase-native-client/core/location-cache.h ---------------------------------------------------------------------- diff --git a/hbase-native-client/core/location-cache.h b/hbase-native-client/core/location-cache.h index 4d66e06..c1c5f62 100644 --- a/hbase-native-client/core/location-cache.h +++ b/hbase-native-client/core/location-cache.h @@ -36,6 +36,7 @@ #include "core/meta-utils.h" #include "core/region-location.h" #include "serde/table-name.h" +#include "zk-util.h" namespace hbase { // Forward @@ -172,6 +173,8 @@ class LocationCache { */ void ClearCachedLocation(const hbase::pb::TableName &tn, const std::string &row); + const std::string &zk_quorum() { return zk_quorum_; } + private: void RefreshMetaLocation(); hbase::pb::ServerName ReadMetaLocation(); @@ -180,15 +183,9 @@ 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::string zk_quorum_; std::shared_ptr<wangle::CPUThreadPoolExecutor> cpu_executor_; std::unique_ptr<folly::SharedPromise<hbase::pb::ServerName>> meta_promise_; std::mutex meta_lock_; http://git-wip-us.apache.org/repos/asf/hbase/blob/9b43493f/hbase-native-client/core/zk-util-test.cc ---------------------------------------------------------------------- diff --git a/hbase-native-client/core/zk-util-test.cc b/hbase-native-client/core/zk-util-test.cc new file mode 100644 index 0000000..b0cefdc --- /dev/null +++ b/hbase-native-client/core/zk-util-test.cc @@ -0,0 +1,50 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +#include <gtest/gtest.h> + +#include "core/zk-util.h" + +using hbase::Configuration; +using hbase::ZKUtil; + +TEST(ZKUtilTest, ParseZooKeeperQuorum) { + Configuration conf{}; + conf.Set(ZKUtil::kHBaseZookeeperQuorum_, "s1"); + conf.SetInt(ZKUtil::kHBaseZookeeperClientPort_, 100); + + ASSERT_EQ("s1:100", ZKUtil::ParseZooKeeperQuorum(conf)); + + conf.Set(ZKUtil::kHBaseZookeeperQuorum_, "s1:42"); + + ASSERT_EQ("s1:42", ZKUtil::ParseZooKeeperQuorum(conf)); + + conf.Set(ZKUtil::kHBaseZookeeperQuorum_, "s1,s2,s3"); + ASSERT_EQ("s1:100,s2:100,s3:100", ZKUtil::ParseZooKeeperQuorum(conf)); + + conf.Set(ZKUtil::kHBaseZookeeperQuorum_, "s1:42,s2:42,s3:42"); + ASSERT_EQ("s1:42,s2:42,s3:42", ZKUtil::ParseZooKeeperQuorum(conf)); +} + +TEST(ZKUtilTest, MetaZNode) { + Configuration conf{}; + ASSERT_EQ("/hbase/meta-region-server", ZKUtil::MetaZNode(conf)); + + conf.Set(ZKUtil::kHBaseZnodeParent_, "/hbase-secure"); + ASSERT_EQ("/hbase-secure/meta-region-server", ZKUtil::MetaZNode(conf)); +} http://git-wip-us.apache.org/repos/asf/hbase/blob/9b43493f/hbase-native-client/core/zk-util.cc ---------------------------------------------------------------------- diff --git a/hbase-native-client/core/zk-util.cc b/hbase-native-client/core/zk-util.cc new file mode 100644 index 0000000..50ea92a --- /dev/null +++ b/hbase-native-client/core/zk-util.cc @@ -0,0 +1,58 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include "core/zk-util.h" + +#include <folly/Conv.h> +#include <boost/algorithm/string.hpp> + +#include <vector> + +namespace hbase { + +/** + * Returns a "proper" zookeeper quorum string, from hbase's broken quorum string formats. In + * hbase.zookeeper.quorum, the ports are not listed explicitly per server (eg. s1,s2,s3), + * however ZooKeeper expects the string of the format s1:2181,s2:2181,s3:2181. This code + * appends the "clientPort" to each node in the quorum string if not there. + */ +std::string ZKUtil::ParseZooKeeperQuorum(const hbase::Configuration& conf) { + auto zk_quorum = conf.Get(kHBaseZookeeperQuorum_, kDefHBaseZookeeperQuorum_); + auto zk_port = conf.GetInt(kHBaseZookeeperClientPort_, kDefHBaseZookeeperClientPort_); + + std::vector<std::string> zk_quorum_parts; + boost::split(zk_quorum_parts, zk_quorum, boost::is_any_of(","), boost::token_compress_on); + std::vector<std::string> servers; + for (auto server : zk_quorum_parts) { + if (boost::contains(server, ":")) { + servers.push_back(server); + } else { + servers.push_back(server + ":" + folly::to<std::string>(zk_port)); + } + } + return boost::join(servers, ","); +} + +std::string ZKUtil::MetaZNode(const hbase::Configuration& conf) { + std::string zk_node = conf.Get(kHBaseZnodeParent_, kDefHBaseZnodeParent_) + "/"; + zk_node += kHBaseMetaRegionServer_; + return zk_node; +} + +} // namespace hbase http://git-wip-us.apache.org/repos/asf/hbase/blob/9b43493f/hbase-native-client/core/zk-util.h ---------------------------------------------------------------------- diff --git a/hbase-native-client/core/zk-util.h b/hbase-native-client/core/zk-util.h new file mode 100644 index 0000000..8f2d627 --- /dev/null +++ b/hbase-native-client/core/zk-util.h @@ -0,0 +1,41 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +#pragma once + +#include <cstdlib> +#include <string> +#include "core/configuration.h" + +namespace hbase { + +class ZKUtil { + public: + static constexpr const char* kHBaseZookeeperQuorum_ = "hbase.zookeeper.quorum"; + static constexpr const char* kDefHBaseZookeeperQuorum_ = "localhost:2181"; + static constexpr const char* kHBaseZookeeperClientPort_ = "hbase.zookeeper.property.clientPort"; + static constexpr const int32_t kDefHBaseZookeeperClientPort_ = 2181; + static constexpr const char* kHBaseZnodeParent_ = "zookeeper.znode.parent"; + static constexpr const char* kDefHBaseZnodeParent_ = "/hbase"; + static constexpr const char* kHBaseMetaRegionServer_ = "meta-region-server"; + + static std::string ParseZooKeeperQuorum(const hbase::Configuration& conf); + + static std::string MetaZNode(const hbase::Configuration& conf); +}; +} // namespace hbase http://git-wip-us.apache.org/repos/asf/hbase/blob/9b43493f/hbase-native-client/security/BUCK ---------------------------------------------------------------------- diff --git a/hbase-native-client/security/BUCK b/hbase-native-client/security/BUCK index 1199797..7383028 100644 --- a/hbase-native-client/security/BUCK +++ b/hbase-native-client/security/BUCK @@ -19,9 +19,7 @@ # to a single server. cxx_library( name="security", - exported_headers=[ - "user.h", - ], + exported_headers=["user.h",], srcs=[], deps=["//core:conf"], compiler_flags=['-Weffc++'], http://git-wip-us.apache.org/repos/asf/hbase/blob/9b43493f/hbase-native-client/serde/BUCK ---------------------------------------------------------------------- diff --git a/hbase-native-client/serde/BUCK b/hbase-native-client/serde/BUCK index 76d1c72..38e7b4d 100644 --- a/hbase-native-client/serde/BUCK +++ b/hbase-native-client/serde/BUCK @@ -41,54 +41,28 @@ cxx_library( ":region-info-deserializer-test", ], compiler_flags=['-Weffc++'], - visibility=[ - 'PUBLIC', - ],) + visibility=['PUBLIC',],) cxx_test( name="table-name-test", - srcs=[ - "table-name-test.cc", - ], - deps=[ - ":serde", - ],) + srcs=["table-name-test.cc",], + deps=[":serde",],) cxx_test( name="server-name-test", - srcs=[ - "server-name-test.cc", - ], - deps=[ - ":serde", - ],) + srcs=["server-name-test.cc",], + deps=[":serde",],) cxx_test( name="client-serializer-test", - srcs=[ - "client-serializer-test.cc", - ], - deps=[ - ":serde", - ],) + srcs=["client-serializer-test.cc",], + deps=[":serde",],) cxx_test( name="client-deserializer-test", - srcs=[ - "client-deserializer-test.cc", - ], - deps=[ - ":serde", - ],) + srcs=["client-deserializer-test.cc",], + deps=[":serde",],) cxx_test( name="zk-deserializer-test", - srcs=[ - "zk-deserializer-test.cc", - ], - deps=[ - ":serde", - ],) + srcs=["zk-deserializer-test.cc",], + deps=[":serde",],) cxx_test( name="region-info-deserializer-test", - srcs=[ - "region-info-deserializer-test.cc", - ], - deps=[ - ":serde", - ],) + srcs=["region-info-deserializer-test.cc",], + deps=[":serde",],) http://git-wip-us.apache.org/repos/asf/hbase/blob/9b43493f/hbase-native-client/test-util/mini-cluster.cc ---------------------------------------------------------------------- diff --git a/hbase-native-client/test-util/mini-cluster.cc b/hbase-native-client/test-util/mini-cluster.cc index 88a091c..fb58fc1 100644 --- a/hbase-native-client/test-util/mini-cluster.cc +++ b/hbase-native-client/test-util/mini-cluster.cc @@ -18,13 +18,12 @@ */ #include "test-util/mini-cluster.h" -#include <glog/logging.h> #include <fcntl.h> -#include <boost/filesystem/operations.hpp> +#include <glog/logging.h> #include <boost/filesystem/fstream.hpp> +#include <boost/filesystem/operations.hpp> #include <fstream> - using hbase::MiniCluster; JNIEnv *MiniCluster::CreateVM(JavaVM **jvm) { @@ -60,7 +59,7 @@ JNIEnv *MiniCluster::CreateVM(JavaVM **jvm) { } fd.close(); } - auto options = std::string {"-Djava.class.path="} + clspath; + auto options = std::string{"-Djava.class.path="} + clspath; jvm_options.optionString = const_cast<char *>(options.c_str()); args.options = &jvm_options; args.ignoreUnrecognized = 0; @@ -74,40 +73,11 @@ JNIEnv *MiniCluster::CreateVM(JavaVM **jvm) { return env_; } -void MiniCluster::WriteConf(jobject conf, const std::string& filepath) { - jclass class_fdesc = env_->FindClass("java/io/FileDescriptor"); - // construct a new FileDescriptor - jmethodID const_fdesc = env_->GetMethodID(class_fdesc, "<init>", "()V"); - - jobject file = env_->NewObject(class_fdesc, const_fdesc); - jfieldID field_fd = env_->GetFieldID(class_fdesc, "fd", "I"); - - int fd = open(filepath.c_str(), O_RDWR | O_NONBLOCK | O_CREAT, S_IRWXU); - if (fd < 0) { - LOG(INFO) << "Couldn't open file " << filepath.c_str(); - exit(-1); - } - env_->SetIntField(file, field_fd, fd); - - jclass cls_outstream = env_->FindClass("java/io/FileOutputStream"); - jmethodID ctor_stream = env_->GetMethodID(cls_outstream, "<init>", "(Ljava/io/FileDescriptor;)V"); - if (ctor_stream == NULL) { - LOG(INFO) << "Couldn't get ctor for FileOutputStream"; - exit(-1); - } - jobject file_outstream = env_->NewObject(cls_outstream, ctor_stream, file); - if (file_outstream == NULL) { - LOG(INFO) << "Couldn't create FileOutputStream"; - exit(-1); - } - jmethodID writeXmlMid = env_->GetMethodID(conf_class_, "writeXml", "(Ljava/io/OutputStream;)V"); - env_->CallObjectMethod(conf, writeXmlMid, file_outstream); -} void MiniCluster::Setup() { jmethodID constructor; pthread_mutex_lock(&count_mutex_); if (env_ == NULL) { - env_ = CreateVM(&jvm); + env_ = CreateVM(&jvm_); if (env_ == NULL) { exit(-1); } @@ -119,7 +89,7 @@ void MiniCluster::Setup() { exit(-1); } jmethodID mid = env_->GetStaticMethodID(testing_util_class_, "createLocalHTU", - "()Lorg/apache/hadoop/hbase/HBaseTestingUtility;"); + "()Lorg/apache/hadoop/hbase/HBaseTestingUtility;"); htu_ = env_->CallStaticObjectMethod(testing_util_class_, mid); // this should be converted to a globalref I think to avoid the underlying java obj getting // GC'ed @@ -128,12 +98,12 @@ void MiniCluster::Setup() { exit(-1); } get_conn_mid_ = env_->GetMethodID(testing_util_class_, "getConnection", - "()Lorg/apache/hadoop/hbase/client/Connection;"); - jclass connClass = env_->FindClass("org/apache/hadoop/hbase/client/Connection"); + "()Lorg/apache/hadoop/hbase/client/Connection;"); + jclass conn_class = env_->FindClass("org/apache/hadoop/hbase/client/Connection"); get_admin_mid_ = - env_->GetMethodID(connClass, "getAdmin", "()Lorg/apache/hadoop/hbase/client/Admin;"); + env_->GetMethodID(conn_class, "getAdmin", "()Lorg/apache/hadoop/hbase/client/Admin;"); get_table_mid_ = env_->GetMethodID( - connClass, "getTable", + conn_class, "getTable", "(Lorg/apache/hadoop/hbase/TableName;)Lorg/apache/hadoop/hbase/client/Table;"); if (get_table_mid_ == NULL) { LOG(INFO) << "Couldn't find getConnection"; @@ -145,9 +115,10 @@ void MiniCluster::Setup() { LOG(INFO) << "Couldn't find move"; exit(-1); } - create_table_mid_ = env_->GetMethodID(testing_util_class_, "createTable", - "(Lorg/apache/hadoop/hbase/TableName;Ljava/lang/String;)Lorg/" - "apache/hadoop/hbase/client/Table;"); + create_table_mid_ = + env_->GetMethodID(testing_util_class_, "createTable", + "(Lorg/apache/hadoop/hbase/TableName;Ljava/lang/String;)Lorg/" + "apache/hadoop/hbase/client/Table;"); create_table_with_split_mid_ = env_->GetMethodID( testing_util_class_, "createTable", "(Lorg/apache/hadoop/hbase/TableName;[[B[[B)Lorg/apache/hadoop/hbase/client/Table;"); @@ -166,12 +137,13 @@ void MiniCluster::Setup() { jclass hbaseMiniClusterClass = env_->FindClass("org/apache/hadoop/hbase/MiniHBaseCluster"); stop_rs_mid_ = env_->GetMethodID(hbaseMiniClusterClass, "stopRegionServer", - "(I)Lorg/apache/hadoop/hbase/util/JVMClusterUtil$RegionServerThread;"); + "(I)Lorg/apache/hadoop/hbase/util/JVMClusterUtil$RegionServerThread;"); get_conf_mid_ = env_->GetMethodID(hbaseMiniClusterClass, "getConfiguration", - "()Lorg/apache/hadoop/conf/Configuration;"); + "()Lorg/apache/hadoop/conf/Configuration;"); conf_class_ = env_->FindClass("org/apache/hadoop/conf/Configuration"); - set_conf_mid_ = env_->GetMethodID(conf_class_, "set", "(Ljava/lang/String;Ljava/lang/String;)V"); + set_conf_mid_ = + env_->GetMethodID(conf_class_, "set", "(Ljava/lang/String;Ljava/lang/String;)V"); if (set_conf_mid_ == NULL) { LOG(INFO) << "Couldn't find method getConf in MiniHBaseCluster"; exit(-1); @@ -182,7 +154,7 @@ void MiniCluster::Setup() { put_mid_ = env_->GetMethodID(tableClass, "put", "(Lorg/apache/hadoop/hbase/client/Put;)V"); jclass connFactoryClass = env_->FindClass("org/apache/hadoop/hbase/client/ConnectionFactory"); create_conn_mid_ = env_->GetStaticMethodID(connFactoryClass, "createConnection", - "()Lorg/apache/hadoop/hbase/client/Connection;"); + "()Lorg/apache/hadoop/hbase/client/Connection;"); if (create_conn_mid_ == NULL) { LOG(INFO) << "Couldn't find createConnection"; exit(-1); @@ -209,49 +181,49 @@ JNIEnv *MiniCluster::env() { return env_; } // converts C char* to Java byte[] -jbyteArray MiniCluster::StrToByteChar(const std::string& str) { - char *p = const_cast<char*>(str.c_str()); - int n = 0; - while (*p++) { - n++; - } - if (n == NULL) return NULL; +jbyteArray MiniCluster::StrToByteChar(const std::string &str) { + char *p = const_cast<char *>(str.c_str()); + int n = str.length(); jbyteArray arr = env_->NewByteArray(n); env_->SetByteArrayRegion(arr, 0, n, reinterpret_cast<const jbyte *>(str.c_str())); return arr; } -jobject MiniCluster::CreateTable(std::string tblNam, std::string familyName) { - jstring tblNameStr = env_->NewStringUTF(tblNam.c_str()); - jobject tblName = env_->CallStaticObjectMethod(table_name_class_, tbl_name_value_of_mid_, tblNameStr); - jstring famStr = env_->NewStringUTF(familyName.c_str()); - jobject tbl = env_->CallObjectMethod(htu_, create_table_mid_, tblName, famStr); - return tbl; +jobject MiniCluster::CreateTable(const std::string &table, const std::string &family) { + jstring table_name_str = env_->NewStringUTF(table.c_str()); + jobject table_name = + env_->CallStaticObjectMethod(table_name_class_, tbl_name_value_of_mid_, table_name_str); + jstring family_str = env_->NewStringUTF(family.c_str()); + jobject table_obj = env_->CallObjectMethod(htu_, create_table_mid_, table_name, family_str); + return table_obj; } -jobject MiniCluster::CreateTable(std::string tblNam, std::string familyName, std::string key1, - std::string key2) { - jstring tblNameStr = env_->NewStringUTF(tblNam.c_str()); - jobject tblName = env_->CallStaticObjectMethod(table_name_class_, tbl_name_value_of_mid_, tblNameStr); - jclass arrayElemType = env_->FindClass("[B"); - jobjectArray famArray = env_->NewObjectArray(1, arrayElemType, env_->NewByteArray(1)); - env_->SetObjectArrayElement(famArray, 0, StrToByteChar(familyName)); +jobject MiniCluster::CreateTable(const std::string &table, const std::string &family, + const std::vector<std::string> &keys) { + jstring table_name_str = env_->NewStringUTF(table.c_str()); + jobject table_name = + env_->CallStaticObjectMethod(table_name_class_, tbl_name_value_of_mid_, table_name_str); + jclass array_element_type = env_->FindClass("[B"); - int len = 2; - if (key2.empty()) len = 1; - jobjectArray keyArray = env_->NewObjectArray(len, arrayElemType, env_->NewByteArray(1)); + jobjectArray family_array = env_->NewObjectArray(1, array_element_type, env_->NewByteArray(1)); + env_->SetObjectArrayElement(family_array, 0, StrToByteChar(family)); - env_->SetObjectArrayElement(keyArray, 0, StrToByteChar(key1)); - if (!key2.empty()) { - env_->SetObjectArrayElement(keyArray, 1, StrToByteChar(key2)); + jobjectArray key_array = + env_->NewObjectArray(keys.size(), array_element_type, env_->NewByteArray(1)); + + int i = 0; + for (auto key : keys) { + env_->SetObjectArrayElement(key_array, i++, StrToByteChar(key)); } - jobject tbl = env_->CallObjectMethod(htu_, create_table_with_split_mid_, tblName, famArray, keyArray); + + jobject tbl = env_->CallObjectMethod(htu_, create_table_with_split_mid_, table_name, family_array, + key_array); return tbl; } -jobject MiniCluster::StopRegionServer(jobject cluster, int idx) { +jobject MiniCluster::StopRegionServer(int idx) { env(); - return env_->CallObjectMethod(cluster, stop_rs_mid_, (jint)idx); + return env_->CallObjectMethod(cluster_, stop_rs_mid_, (jint)idx); } // returns the Configuration for the cluster @@ -267,8 +239,9 @@ jobject MiniCluster::admin() { return admin; } -jobject MiniCluster::TablePut(const std::string table, const std::string row, const std::string fam, - const std::string col, const std::string value) { +jobject MiniCluster::TablePut(const std::string &table, const std::string &row, + const std::string &family, const std::string &column, + const std::string &value) { env(); jobject conn = env_->CallObjectMethod(htu(), get_conn_mid_); jobject put = env_->NewObject(put_class_, put_ctor_, StrToByteChar(row)); @@ -276,47 +249,30 @@ jobject MiniCluster::TablePut(const std::string table, const std::string row, co LOG(INFO) << "Couldn't create Put"; exit(-1); } - env_->CallObjectMethod(put, add_col_mid_, StrToByteChar(fam), StrToByteChar(col), - StrToByteChar(value)); - jobject tblName = - env_->CallStaticObjectMethod(table_name_class_, tbl_name_value_of_mid_, - env_->NewStringUTF(table.c_str())); - jobject tableObj = env_->CallObjectMethod(conn, get_table_mid_, tblName); - env_->CallObjectMethod(tableObj, put_mid_, put); - return tableObj; + env_->CallObjectMethod(put, add_col_mid_, StrToByteChar(family), StrToByteChar(column), + StrToByteChar(value)); + jobject table_name_obj = env_->CallStaticObjectMethod(table_name_class_, tbl_name_value_of_mid_, + env_->NewStringUTF(table.c_str())); + jobject table_obj = env_->CallObjectMethod(conn, get_table_mid_, table_name_obj); + env_->CallObjectMethod(table_obj, put_mid_, put); + return table_obj; } // moves region to server -void MiniCluster::MoveRegion(std::string region, std::string server) { +void MiniCluster::MoveRegion(const std::string ®ion, const std::string &server) { jobject admin_ = admin(); - env_->CallObjectMethod(admin_, move_mid_, StrToByteChar(region), - StrToByteChar(server)); + env_->CallObjectMethod(admin_, move_mid_, StrToByteChar(region), StrToByteChar(server)); } -jobject MiniCluster::StartCluster(int numRegionServers, std::string conf_path) { +jobject MiniCluster::StartCluster(int num_region_servers) { env(); jmethodID mid = env_->GetMethodID(testing_util_class_, "startMiniCluster", - "(I)Lorg/apache/hadoop/hbase/MiniHBaseCluster;"); + "(I)Lorg/apache/hadoop/hbase/MiniHBaseCluster;"); if (mid == NULL) { LOG(INFO) << "Couldn't find method startMiniCluster in the class HBaseTestingUtility"; exit(-1); } - cluster_ = env_->CallObjectMethod(htu(), mid, (jint)numRegionServers); - jobject conf = GetConf(); - jstring jport = (jstring)env_->CallObjectMethod( - conf, conf_get_mid_, env_->NewStringUTF("hbase.zookeeper.property.clientPort")); - const char *port = env_->GetStringUTFChars(jport, 0); - LOG(INFO) << "retrieved port " << port; - std::string quorum("localhost:"); - env_->CallObjectMethod(conf, set_conf_mid_, env_->NewStringUTF("hbase.zookeeper.quorum"), - env_->NewStringUTF((quorum + port).c_str())); - if (!conf_path.empty()) { - // Directory will be created if not present - if (!boost::filesystem::exists(conf_path)) { - boost::filesystem::create_directories(conf_path); - } - WriteConf(conf, conf_path + "/hbase-site.xml"); - } + cluster_ = env_->CallObjectMethod(htu(), mid, static_cast<jint>(num_region_servers)); return cluster_; } @@ -324,16 +280,16 @@ void MiniCluster::StopCluster() { env(); jmethodID mid = env_->GetMethodID(testing_util_class_, "shutdownMiniCluster", "()V"); env_->CallVoidMethod(htu(), mid); - if (jvm != NULL) { - jvm->DestroyJavaVM(); - jvm = NULL; + if (jvm_ != NULL) { + jvm_->DestroyJavaVM(); + jvm_ = NULL; } } -const std::string MiniCluster::GetConfValue(std::string key) { +const std::string MiniCluster::GetConfValue(const std::string &key) { jobject conf = GetConf(); - jstring jval = (jstring)env_->CallObjectMethod(conf, conf_get_mid_, - env_->NewStringUTF(key.c_str())); + jstring jval = + (jstring)env_->CallObjectMethod(conf, conf_get_mid_, env_->NewStringUTF(key.c_str())); const char *val = env_->GetStringUTFChars(jval, 0); return val; } http://git-wip-us.apache.org/repos/asf/hbase/blob/9b43493f/hbase-native-client/test-util/mini-cluster.h ---------------------------------------------------------------------- diff --git a/hbase-native-client/test-util/mini-cluster.h b/hbase-native-client/test-util/mini-cluster.h index 54842e1..a9502b5 100644 --- a/hbase-native-client/test-util/mini-cluster.h +++ b/hbase-native-client/test-util/mini-cluster.h @@ -19,27 +19,29 @@ #pragma once #include <string> +#include <vector> #include "jni.h" namespace hbase { class MiniCluster { public: - jobject StartCluster(int numRegionServers, std::string conf_path); + jobject StartCluster(int32_t num_region_servers); void StopCluster(); - jobject CreateTable(std::string tblNam, std::string familyName); - jobject CreateTable(std::string tblNam, std::string familyName, std::string key1, std::string k2); - jobject StopRegionServer(jobject cluster, int idx); + jobject CreateTable(const std::string &table, const std::string &family); + jobject CreateTable(const std::string &table, const std::string &family, + const std::vector<std::string> &keys); + jobject StopRegionServer(int idx); // moves region to server - void MoveRegion(std::string region, std::string server); + void MoveRegion(const std::string ®ion, const std::string &server); // returns the Configuration instance for the cluster jobject GetConf(); // returns the value for config key retrieved from cluster - const std::string GetConfValue(std::string key); + const std::string GetConfValue(const std::string &key); // Does Put into table for family fam, qualifier col with value - jobject TablePut(const std::string table, const std::string row, const std::string fam, - const std::string col, const std::string value); + jobject TablePut(const std::string &table, const std::string &row, const std::string &family, + const std::string &column, const std::string &value); private: JNIEnv *env_; @@ -66,13 +68,12 @@ class MiniCluster { jobject htu_; jobject cluster_; pthread_mutex_t count_mutex_; - JavaVM *jvm; + JavaVM *jvm_; JNIEnv *CreateVM(JavaVM **jvm); - void WriteConf(jobject conf, const std::string& filepath); void Setup(); jobject htu(); JNIEnv *env(); - jbyteArray StrToByteChar(const std::string& str); + jbyteArray StrToByteChar(const std::string &str); jobject admin(); }; } /*namespace hbase*/ http://git-wip-us.apache.org/repos/asf/hbase/blob/9b43493f/hbase-native-client/test-util/test-util.cc ---------------------------------------------------------------------- diff --git a/hbase-native-client/test-util/test-util.cc b/hbase-native-client/test-util/test-util.cc index 13c4ec4..dfe4260 100644 --- a/hbase-native-client/test-util/test-util.cc +++ b/hbase-native-client/test-util/test-util.cc @@ -22,6 +22,8 @@ #include <folly/Format.h> +#include "core/zk-util.h" + using hbase::TestUtil; using folly::Random; @@ -42,33 +44,28 @@ std::string TestUtil::RandString(int len) { return s; } -TestUtil::TestUtil() : TestUtil::TestUtil(2, "") {} - -TestUtil::TestUtil(int servers, const std::string& confPath) - : temp_dir_(TestUtil::RandString()), numRegionServers(servers), conf_path(confPath) { - auto p = temp_dir_.path().string(); - StartMiniCluster(2); - std::string quorum("localhost:"); - const std::string port = mini->GetConfValue("hbase.zookeeper.property.clientPort"); - conf()->Set("hbase.zookeeper.quorum", quorum + port); -} +TestUtil::TestUtil() : temp_dir_(TestUtil::RandString()) {} TestUtil::~TestUtil() { StopMiniCluster(); } -void TestUtil::StartMiniCluster(int num_region_servers) { - mini = std::make_unique<MiniCluster>(); - mini->StartCluster(num_region_servers, conf_path); +void TestUtil::StartMiniCluster(int32_t num_region_servers) { + mini_ = std::make_unique<MiniCluster>(); + mini_->StartCluster(num_region_servers); + + conf()->Set(ZKUtil::kHBaseZookeeperQuorum_, mini_->GetConfValue(ZKUtil::kHBaseZookeeperQuorum_)); + conf()->Set(ZKUtil::kHBaseZookeeperClientPort_, + mini_->GetConfValue(ZKUtil::kHBaseZookeeperClientPort_)); } -void TestUtil::StopMiniCluster() { mini->StopCluster(); } +void TestUtil::StopMiniCluster() { mini_->StopCluster(); } -void TestUtil::CreateTable(std::string tblNam, std::string familyName) { - mini->CreateTable(tblNam, familyName); +void TestUtil::CreateTable(const std::string &table, const std::string &family) { + mini_->CreateTable(table, family); } -void TestUtil::CreateTable(std::string tblNam, std::string familyName, std::string key1, - std::string k2) { - mini->CreateTable(tblNam, familyName, key1, k2); +void TestUtil::CreateTable(const std::string &table, const std::string &family, + const std::vector<std::string> &keys) { + mini_->CreateTable(table, family, keys); } -void TestUtil::TablePut(std::string table, std::string row, std::string fam, std::string col, - std::string value) { - mini->TablePut(table, row, fam, col, value); +void TestUtil::TablePut(const std::string &table, const std::string &row, const std::string &family, + const std::string &column, const std::string &value) { + mini_->TablePut(table, row, family, column, value); } http://git-wip-us.apache.org/repos/asf/hbase/blob/9b43493f/hbase-native-client/test-util/test-util.h ---------------------------------------------------------------------- diff --git a/hbase-native-client/test-util/test-util.h b/hbase-native-client/test-util/test-util.h index 1734870..611404d 100644 --- a/hbase-native-client/test-util/test-util.h +++ b/hbase-native-client/test-util/test-util.h @@ -24,6 +24,7 @@ #include <cstdlib> #include <memory> #include <string> +#include <vector> #include "core/configuration.h" #include "test-util/mini-cluster.h" @@ -33,14 +34,7 @@ namespace hbase { */ class TestUtil { public: - /** - * Creating a TestUtil will spin up a cluster. - */ TestUtil(); - /** - * Creating a TestUtil will spin up a cluster with numRegionServers region servers. - */ - TestUtil(int numRegionServers, const std::string& confPath); /** * Destroying a TestUtil will spin down a cluster and remove the test dir. @@ -61,19 +55,18 @@ class TestUtil { /** * Starts mini hbase cluster with specified number of region servers */ - void StartMiniCluster(int num_region_servers); + void StartMiniCluster(int32_t num_region_servers); void StopMiniCluster(); - void CreateTable(std::string tblNam, std::string familyName); - void CreateTable(std::string tblNam, std::string familyName, std::string key1, std::string k2); - void TablePut(std::string table, std::string row, std::string fam, std::string col, - std::string value); + void CreateTable(const std::string &table, const std::string &family); + void CreateTable(const std::string &table, const std::string &family, + const std::vector<std::string> &keys); + void TablePut(const std::string &table, const std::string &row, const std::string &family, + const std::string &column, const std::string &value); private: - std::unique_ptr<MiniCluster> mini; + std::unique_ptr<MiniCluster> mini_; folly::test::TemporaryDirectory temp_dir_; - int numRegionServers = 2; - std::string conf_path; std::shared_ptr<Configuration> conf_ = std::make_shared<Configuration>(); }; } // namespace hbase http://git-wip-us.apache.org/repos/asf/hbase/blob/9b43493f/hbase-native-client/third-party/BUCK ---------------------------------------------------------------------- diff --git a/hbase-native-client/third-party/BUCK b/hbase-native-client/third-party/BUCK index a55a6fb..f37eb4e 100644 --- a/hbase-native-client/third-party/BUCK +++ b/hbase-native-client/third-party/BUCK @@ -112,6 +112,4 @@ cxx_library( ('googletest/googlemock', 'src/*.cc'), ]), exported_deps=dynamic_rules, - visibility=[ - 'PUBLIC', - ],) + visibility=['PUBLIC',],)