You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@phoenix.apache.org by sh...@apache.org on 2024/03/07 19:11:55 UTC
(phoenix) branch master updated: PHOENIX-7243 : Add connectionType property to ConnectionInfo (#1839)
This is an automated email from the ASF dual-hosted git repository.
shahrs87 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/phoenix.git
The following commit(s) were added to refs/heads/master by this push:
new 22b0b346e6 PHOENIX-7243 : Add connectionType property to ConnectionInfo (#1839)
22b0b346e6 is described below
commit 22b0b346e6de3f78997ad030eb88306d5c75be1d
Author: palash <pa...@gmail.com>
AuthorDate: Thu Mar 7 11:11:49 2024 -0800
PHOENIX-7243 : Add connectionType property to ConnectionInfo (#1839)
---
.../phoenix/jdbc/AbstractRPCConnectionInfo.java | 4 ++--
.../java/org/apache/phoenix/jdbc/ConnectionInfo.java | 19 ++++++++++++++++++-
.../org/apache/phoenix/jdbc/MasterConnectionInfo.java | 8 ++++----
.../org/apache/phoenix/jdbc/RPCConnectionInfo.java | 9 ++++-----
.../org/apache/phoenix/jdbc/ZKConnectionInfo.java | 9 +++++----
.../org/apache/phoenix/end2end/PhoenixDriverIT.java | 17 ++++++++++++++++-
.../org/apache/phoenix/jdbc/PhoenixTestDriverIT.java | 19 +++++++++++++++++++
7 files changed, 68 insertions(+), 17 deletions(-)
diff --git a/phoenix-core-client/src/main/java/org/apache/phoenix/jdbc/AbstractRPCConnectionInfo.java b/phoenix-core-client/src/main/java/org/apache/phoenix/jdbc/AbstractRPCConnectionInfo.java
index 0e4920c4c9..1a62c69fbb 100644
--- a/phoenix-core-client/src/main/java/org/apache/phoenix/jdbc/AbstractRPCConnectionInfo.java
+++ b/phoenix-core-client/src/main/java/org/apache/phoenix/jdbc/AbstractRPCConnectionInfo.java
@@ -45,8 +45,8 @@ public abstract class AbstractRPCConnectionInfo extends ConnectionInfo {
}
protected AbstractRPCConnectionInfo(boolean isConnectionless, String principal, String keytab,
- User user, String haGroup) {
- super(isConnectionless, principal, keytab, user, haGroup);
+ User user, String haGroup, ConnectionType connectionType) {
+ super(isConnectionless, principal, keytab, user, haGroup, connectionType);
}
@Override
diff --git a/phoenix-core-client/src/main/java/org/apache/phoenix/jdbc/ConnectionInfo.java b/phoenix-core-client/src/main/java/org/apache/phoenix/jdbc/ConnectionInfo.java
index 3acdfa8f6a..945060c153 100644
--- a/phoenix-core-client/src/main/java/org/apache/phoenix/jdbc/ConnectionInfo.java
+++ b/phoenix-core-client/src/main/java/org/apache/phoenix/jdbc/ConnectionInfo.java
@@ -36,6 +36,7 @@ import org.apache.phoenix.exception.SQLExceptionInfo;
import org.apache.phoenix.query.HBaseFactoryProvider;
import org.apache.phoenix.query.QueryServices;
import org.apache.phoenix.util.PhoenixRuntime;
+import org.apache.phoenix.util.QueryUtil;
import org.apache.phoenix.util.ReadOnlyProps;
import org.slf4j.LoggerFactory;
@@ -87,15 +88,17 @@ public abstract class ConnectionInfo {
protected final String keytab;
protected final User user;
protected final String haGroup;
+ protected final ConnectionType connectionType;
protected ConnectionInfo(boolean isConnectionless, String principal, String keytab, User user,
- String haGroup) {
+ String haGroup, ConnectionType connectionType) {
super();
this.isConnectionless = isConnectionless;
this.principal = principal;
this.keytab = keytab;
this.user = user;
this.haGroup = haGroup;
+ this.connectionType = connectionType;
}
protected static String unescape(String escaped) {
@@ -330,6 +333,9 @@ public abstract class ConnectionInfo {
if (haGroup == null) {
if (other.haGroup != null) return false;
} else if (!haGroup.equals(other.haGroup)) return false;
+ if (!connectionType.equals(other.connectionType)) {
+ return false;
+ }
return true;
}
@@ -342,6 +348,7 @@ public abstract class ConnectionInfo {
result = prime * result + ((haGroup == null) ? 0 : haGroup.hashCode());
// `user` is guaranteed to be non-null
result = prime * result + user.hashCode();
+ result = prime * result + connectionType.hashCode();
return result;
}
@@ -369,6 +376,7 @@ public abstract class ConnectionInfo {
protected User user;
protected String haGroup;
protected boolean doNotLogin = false;
+ protected ConnectionType connectionType;
// Only used for building, not part of ConnectionInfo
protected final String url;
@@ -381,6 +389,10 @@ public abstract class ConnectionInfo {
this.url = url;
this.props = props;
this.info = info;
+ this.connectionType = ConnectionType.CLIENT;
+ if (info != null && Boolean.valueOf(info.getProperty(QueryUtil.IS_SERVER_CONNECTION))) {
+ this.connectionType = ConnectionType.SERVER;
+ }
}
protected abstract ConnectionInfo create() throws SQLException;
@@ -561,4 +573,9 @@ public abstract class ConnectionInfo {
return result;
}
}
+
+ public enum ConnectionType {
+ CLIENT,
+ SERVER
+ }
}
diff --git a/phoenix-core-client/src/main/java/org/apache/phoenix/jdbc/MasterConnectionInfo.java b/phoenix-core-client/src/main/java/org/apache/phoenix/jdbc/MasterConnectionInfo.java
index 9b74a265a8..aaf409819d 100644
--- a/phoenix-core-client/src/main/java/org/apache/phoenix/jdbc/MasterConnectionInfo.java
+++ b/phoenix-core-client/src/main/java/org/apache/phoenix/jdbc/MasterConnectionInfo.java
@@ -37,8 +37,8 @@ public class MasterConnectionInfo extends AbstractRPCConnectionInfo {
"org.apache.hadoop.hbase.client.MasterRegistry";
protected MasterConnectionInfo(boolean isConnectionless, String principal, String keytab,
- User user, String haGroup, String bootstrapServers) {
- super(isConnectionless, principal, keytab, user, haGroup);
+ User user, String haGroup, String bootstrapServers, ConnectionType connectionType) {
+ super(isConnectionless, principal, keytab, user, haGroup, connectionType);
this.bootstrapServers = bootstrapServers;
}
@@ -71,7 +71,7 @@ public class MasterConnectionInfo extends AbstractRPCConnectionInfo {
@Override
public ConnectionInfo withPrincipal(String principal) {
return new MasterConnectionInfo(isConnectionless, principal, keytab, user,
- haGroup, bootstrapServers);
+ haGroup, bootstrapServers, connectionType);
}
/**
@@ -98,7 +98,7 @@ public class MasterConnectionInfo extends AbstractRPCConnectionInfo {
@Override
protected ConnectionInfo build() {
return new MasterConnectionInfo(isConnectionless, principal, keytab, user, haGroup,
- hostsList);
+ hostsList, connectionType);
}
public static boolean isMaster(Configuration config, ReadOnlyProps props, Properties info) {
diff --git a/phoenix-core-client/src/main/java/org/apache/phoenix/jdbc/RPCConnectionInfo.java b/phoenix-core-client/src/main/java/org/apache/phoenix/jdbc/RPCConnectionInfo.java
index 80d7269ac3..1744fbfd92 100644
--- a/phoenix-core-client/src/main/java/org/apache/phoenix/jdbc/RPCConnectionInfo.java
+++ b/phoenix-core-client/src/main/java/org/apache/phoenix/jdbc/RPCConnectionInfo.java
@@ -22,7 +22,6 @@ import java.util.Map;
import java.util.Properties;
import org.apache.hadoop.conf.Configuration;
-import org.apache.hadoop.hbase.HConstants;
import org.apache.hadoop.hbase.security.User;
import org.apache.hbase.thirdparty.com.google.common.base.Strings;
import org.apache.phoenix.util.PhoenixRuntime;
@@ -41,8 +40,8 @@ public class RPCConnectionInfo extends AbstractRPCConnectionInfo {
"org.apache.hadoop.hbase.client.RpcConnectionRegistry";
protected RPCConnectionInfo(boolean isConnectionless, String principal, String keytab,
- User user, String haGroup, String bootstrapServers) {
- super(isConnectionless, principal, keytab, user, haGroup);
+ User user, String haGroup, String bootstrapServers, ConnectionType connectionType) {
+ super(isConnectionless, principal, keytab, user, haGroup, connectionType);
this.bootstrapServers = bootstrapServers;
}
@@ -101,7 +100,7 @@ public class RPCConnectionInfo extends AbstractRPCConnectionInfo {
@Override
public ConnectionInfo withPrincipal(String principal) {
return new RPCConnectionInfo(isConnectionless, principal, keytab, user,
- haGroup, bootstrapServers);
+ haGroup, bootstrapServers, connectionType);
}
/**
@@ -183,7 +182,7 @@ public class RPCConnectionInfo extends AbstractRPCConnectionInfo {
@Override
protected ConnectionInfo build() {
return new RPCConnectionInfo(isConnectionless, principal, keytab, user, haGroup,
- hostsList);
+ hostsList, connectionType);
}
public static boolean isRPC(Configuration config, ReadOnlyProps props, Properties info) {
diff --git a/phoenix-core-client/src/main/java/org/apache/phoenix/jdbc/ZKConnectionInfo.java b/phoenix-core-client/src/main/java/org/apache/phoenix/jdbc/ZKConnectionInfo.java
index 3d9f5f3c62..2ebdee7185 100644
--- a/phoenix-core-client/src/main/java/org/apache/phoenix/jdbc/ZKConnectionInfo.java
+++ b/phoenix-core-client/src/main/java/org/apache/phoenix/jdbc/ZKConnectionInfo.java
@@ -43,8 +43,9 @@ public class ZKConnectionInfo extends ConnectionInfo {
private final String zkHosts;
private ZKConnectionInfo(boolean isConnectionless, String principal, String keytab, User user,
- String haGroup, String zkHosts, Integer zkPort, String zkRootNode) {
- super(isConnectionless, principal, keytab, user, haGroup);
+ String haGroup, String zkHosts, Integer zkPort, String zkRootNode,
+ ConnectionType connectionType) {
+ super(isConnectionless, principal, keytab, user, haGroup, connectionType);
this.zkPort = zkPort;
this.zkRootNode = zkRootNode;
this.zkHosts = zkHosts;
@@ -153,7 +154,7 @@ public class ZKConnectionInfo extends ConnectionInfo {
@Override
public ConnectionInfo withPrincipal(String principal) {
return new ZKConnectionInfo(isConnectionless, principal, keytab, user,
- haGroup, zkHosts, zkPort, zkRootNode);
+ haGroup, zkHosts, zkPort, zkRootNode, connectionType);
}
/**
@@ -277,7 +278,7 @@ public class ZKConnectionInfo extends ConnectionInfo {
protected ConnectionInfo build() {
return new ZKConnectionInfo(isConnectionless, principal, keytab, user, haGroup, zkHosts,
- zkPort, zkRootNode);
+ zkPort, zkRootNode, connectionType);
}
@Override
diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/PhoenixDriverIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/PhoenixDriverIT.java
index 71d30eac5e..d85df7e68b 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/PhoenixDriverIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/PhoenixDriverIT.java
@@ -25,6 +25,7 @@ import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.TABLE_SCHEM;
import static org.apache.phoenix.jdbc.PhoenixDatabaseMetaData.TENANT_ID;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotSame;
import static org.junit.Assert.assertTrue;
import java.io.IOException;
@@ -43,12 +44,14 @@ import org.apache.phoenix.jdbc.PhoenixConnection;
import org.apache.phoenix.jdbc.PhoenixDriver;
import org.apache.phoenix.jdbc.PhoenixStatement;
import org.apache.phoenix.query.BaseTest;
+import org.apache.phoenix.query.ConnectionQueryServices;
import org.apache.phoenix.query.QueryConstants;
import org.apache.phoenix.query.QueryServices;
import org.apache.phoenix.query.QueryServicesOptions;
import org.apache.phoenix.schema.PTable;
import org.apache.phoenix.schema.PTable.LinkType;
import org.apache.phoenix.util.PhoenixRuntime;
+import org.apache.phoenix.util.QueryUtil;
import org.apache.phoenix.util.SchemaUtil;
import org.apache.phoenix.util.UpgradeUtil;
import org.junit.BeforeClass;
@@ -60,10 +63,12 @@ public class PhoenixDriverIT extends BaseTest {
private static HBaseTestingUtility hbaseTestUtil;
private static String zkQuorum;
+
+ private static Configuration conf;
@BeforeClass
public static synchronized void setUp() throws Exception {
- Configuration conf = HBaseConfiguration.create();
+ conf = HBaseConfiguration.create();
hbaseTestUtil = new HBaseTestingUtility(conf);
setUpConfigForMiniCluster(conf);
conf.set(QueryServices.EXTRA_JDBC_ARGUMENTS_ATTRIB, QueryServicesOptions.DEFAULT_EXTRA_JDBC_ARGUMENTS);
@@ -234,4 +239,14 @@ public class PhoenixDriverIT extends BaseTest {
assertFalse(rs.next());
return physicalTableName;
}
+
+ @Test
+ public void testDifferentQueryServiceForServerConnection() throws Exception {
+ Properties props = new Properties();
+ Connection conn = DriverManager.getConnection(QueryUtil.getConnectionUrl(props, conf), props);
+ Connection serverConn = QueryUtil.getConnectionOnServer(props, conf);
+ ConnectionQueryServices cqs = conn.unwrap(PhoenixConnection.class).getQueryServices();
+ ConnectionQueryServices serverCqs = serverConn.unwrap(PhoenixConnection.class).getQueryServices();
+ assertNotSame(cqs, serverCqs);
+ }
}
diff --git a/phoenix-core/src/it/java/org/apache/phoenix/jdbc/PhoenixTestDriverIT.java b/phoenix-core/src/it/java/org/apache/phoenix/jdbc/PhoenixTestDriverIT.java
index 9dd0d741d9..18052e3549 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/jdbc/PhoenixTestDriverIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/jdbc/PhoenixTestDriverIT.java
@@ -17,6 +17,7 @@
*/
package org.apache.phoenix.jdbc;
+import org.apache.phoenix.end2end.ConnectionQueryServicesTestImpl;
import org.apache.phoenix.end2end.NeedsOwnMiniClusterTest;
import org.apache.phoenix.query.BaseTest;
import org.apache.phoenix.query.ConnectionQueryServices;
@@ -121,4 +122,22 @@ public class PhoenixTestDriverIT extends BaseTest {
// expected since this connection was created using a different CQSI.
}
}
+
+ /**
+ * Create 2 connections with same url and properties but one is a server connection.
+ * Verify that the connections are from different CQS objects.
+ */
+ @Test
+ public void testDifferentCQSForServerConnection() throws Exception {
+ Properties props = PropertiesUtil.deepCopy(TestUtil.TEST_PROPERTIES);
+ String url = QueryUtil.getConnectionUrl(props, config);
+ try (Connection conn1 = DriverManager.getConnection(url);
+ Connection conn2 = QueryUtil.getConnectionOnServer(props, config)) {
+ ConnectionQueryServices cqs1 = conn1.unwrap(PhoenixConnection.class).getQueryServices();
+ ConnectionQueryServices cqs2 = conn2.unwrap(PhoenixConnection.class).getQueryServices();
+ Assert.assertTrue(cqs1 instanceof ConnectionQueryServicesTestImpl);
+ Assert.assertTrue(cqs2 instanceof ConnectionQueryServicesTestImpl);
+ Assert.assertNotEquals("Server connection should have a different CQS.", cqs1, cqs2);
+ }
+ }
}