You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by zg...@apache.org on 2019/03/12 12:46:28 UTC
[hbase] 100/133: HBASE-18400 [C++] ConnectionId Equals/Hash should
consider service_name (Xiaobing Zhou)
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 9736565050e29cb3c549158511c50972afa98001
Author: tedyu <yu...@gmail.com>
AuthorDate: Tue Jul 18 14:11:43 2017 -0700
HBASE-18400 [C++] ConnectionId Equals/Hash should consider service_name (Xiaobing Zhou)
---
hbase-native-client/connection/connection-id.h | 7 +++++-
.../connection/connection-pool-test.cc | 26 ++++++++++++++++++++++
2 files changed, 32 insertions(+), 1 deletion(-)
diff --git a/hbase-native-client/connection/connection-id.h b/hbase-native-client/connection/connection-id.h
index 7381103..059469f 100644
--- a/hbase-native-client/connection/connection-id.h
+++ b/hbase-native-client/connection/connection-id.h
@@ -39,6 +39,10 @@ class ConnectionId {
const std::string &service_name)
: user_(user), service_name_(service_name), host_(host), port_(port) {}
+ ConnectionId(const std::string &host, uint16_t port,
+ const std::string &service_name)
+ : user_(security::User::defaultUser()), service_name_(service_name), host_(host), port_(port) {}
+
virtual ~ConnectionId() = default;
std::shared_ptr<security::User> user() const { return user_; }
@@ -59,7 +63,7 @@ struct ConnectionIdEquals {
bool operator()(const std::shared_ptr<ConnectionId> &lhs,
const std::shared_ptr<ConnectionId> &rhs) const {
return userEquals(lhs->user(), rhs->user()) && lhs->host() == rhs->host() &&
- lhs->port() == rhs->port();
+ lhs->port() == rhs->port() && lhs->service_name() == rhs->service_name();
}
private:
@@ -78,6 +82,7 @@ struct ConnectionIdHash {
boost::hash_combine(h, ci->user() == nullptr ? 0 : ci->user()->user_name());
boost::hash_combine(h, ci->host());
boost::hash_combine(h, ci->port());
+ boost::hash_combine(h, ci->service_name());
return h;
}
};
diff --git a/hbase-native-client/connection/connection-pool-test.cc b/hbase-native-client/connection/connection-pool-test.cc
index 04ec7f1..63f774b 100644
--- a/hbase-native-client/connection/connection-pool-test.cc
+++ b/hbase-native-client/connection/connection-pool-test.cc
@@ -101,3 +101,29 @@ TEST(TestConnectionPool, TestOnlyCreateMultipleDispose) {
auto remote_id2 = std::make_shared<ConnectionId>(hostname_two, port);
auto result_two = cp.GetConnection(remote_id2);
}
+
+TEST(TestConnectionPool, TestCreateOneConnectionForOneService) {
+ std::string hostname{"hostname"};
+ uint32_t port{999};
+ std::string service1{"service1"};
+ std::string service2{"service2"};
+
+ auto mock_boot = std::make_shared<MockBootstrap>();
+ auto mock_service = std::make_shared<MockService>();
+ auto mock_cf = std::make_shared<MockConnectionFactory>();
+
+ EXPECT_CALL((*mock_cf), Connect(_, _, _)).Times(2).WillRepeatedly(Return(mock_service));
+ EXPECT_CALL((*mock_cf), MakeBootstrap()).Times(2).WillRepeatedly(Return(mock_boot));
+ ConnectionPool cp{mock_cf};
+
+ {
+ auto remote_id = std::make_shared<ConnectionId>(hostname, port, service1);
+ auto result_one = cp.GetConnection(remote_id);
+ auto remote_id2 = std::make_shared<ConnectionId>(hostname, port, service2);
+ auto result_two = cp.GetConnection(remote_id2);
+ }
+ auto remote_id = std::make_shared<ConnectionId>(hostname, port, service1);
+ auto result_one = cp.GetConnection(remote_id);
+ auto remote_id2 = std::make_shared<ConnectionId>(hostname, port, service2);
+ auto result_two = cp.GetConnection(remote_id2);
+}