This is an automated email from the ASF dual-hosted git repository. stoty 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 3d2e0e4288 PHOENIX-7191 Connectionless CQSs don't work with non-ZK registries 3d2e0e4288 is described below commit 3d2e0e42882aa93be6fad2209d2ecef5b825a721 Author: Istvan Toth <st...@apache.org> AuthorDate: Wed Jan 31 09:40:05 2024 +0100 PHOENIX-7191 Connectionless CQSs don't work with non-ZK registries --- .../phoenix/jdbc/AbstractRPCConnectionInfo.java | 6 ++++-- .../org/apache/phoenix/jdbc/ConnectionInfo.java | 25 +++++++++++++++++++--- .../apache/phoenix/jdbc/MasterConnectionInfo.java | 15 +++++++++---- .../org/apache/phoenix/jdbc/RPCConnectionInfo.java | 17 ++++++++++----- .../org/apache/phoenix/jdbc/ZKConnectionInfo.java | 19 ++++++++++------ .../phoenix/end2end/ConfigurableCacheIT.java | 3 ++- .../end2end/transform/TransformMonitorIT.java | 3 ++- .../ConnectionQueryServicesMetricsIT.java | 6 ++++-- 8 files changed, 70 insertions(+), 24 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 869f40d2d5..0e4920c4c9 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 @@ -26,6 +26,7 @@ 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; import org.apache.phoenix.util.ReadOnlyProps; /** @@ -199,9 +200,10 @@ public abstract class AbstractRPCConnectionInfo extends ConnectionInfo { } // At this point, masterPort is guaranteed not to be 0 + isConnectionless = PhoenixRuntime.CONNECTIONLESS.equals(hostsList); + if (isConnectionless) { - // We probably don't create connectionless MasterConnectionInfo objects - if (hostsList != null || port != null) { + if (port != null) { throw getMalFormedUrlException(url); } else { return; 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 b982b1d6a1..3acdfa8f6a 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 @@ -152,11 +152,11 @@ public abstract class ConnectionInfo { builder = new RPCConnectionInfo.Builder(url, configuration, props, info); } else if (url.toLowerCase().startsWith(PhoenixRuntime.JDBC_PROTOCOL)) { // The generic protocol was specified. Try to Determine the protocol from the config - if (MasterConnectionInfo.isMaster(configuration)) { + if (MasterConnectionInfo.Builder.isMaster(configuration, props, info)) { builder = new MasterConnectionInfo.Builder(url, configuration, props, info); - } else if (RPCConnectionInfo.isRPC(configuration)) { + } else if (RPCConnectionInfo.Builder.isRPC(configuration, props, info)) { builder = new RPCConnectionInfo.Builder(url, configuration, props, info); - } else if (ZKConnectionInfo.isZK(configuration)) { + } else if (ZKConnectionInfo.Builder.isZK(configuration, props, info)) { builder = new ZKConnectionInfo.Builder(url, configuration, props, info); } else { // No registry class set in config. Use version-dependent default @@ -354,6 +354,8 @@ public abstract class ConnectionInfo { return false; } + public abstract ConnectionInfo withPrincipal(String principal); + /** * Parent of the Builder classes for the immutable ConnectionInfo classes * @@ -541,5 +543,22 @@ public abstract class ConnectionInfo { } return tokenizer; } + + protected static String get(String key, Configuration config, ReadOnlyProps props, + Properties info) { + String result = null; + if (info != null) { + result = info.getProperty(key); + } + if (result == null) { + if (props != null) { + result = props.get(key); + } + if (result == null) { + result = config.get(key, null); + } + } + return result; + } } } 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 eef75e3402..9b74a265a8 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 @@ -67,10 +67,11 @@ public class MasterConnectionInfo extends AbstractRPCConnectionInfo { + toString(); } - public static boolean isMaster(Configuration config) { - // Default is handled by the caller - return config != null && MASTER_REGISTRY_CLASS_NAME - .equals(config.get(CLIENT_CONNECTION_REGISTRY_IMPL_CONF_KEY)); + + @Override + public ConnectionInfo withPrincipal(String principal) { + return new MasterConnectionInfo(isConnectionless, principal, keytab, user, + haGroup, bootstrapServers); } /** @@ -99,5 +100,11 @@ public class MasterConnectionInfo extends AbstractRPCConnectionInfo { return new MasterConnectionInfo(isConnectionless, principal, keytab, user, haGroup, hostsList); } + + public static boolean isMaster(Configuration config, ReadOnlyProps props, Properties info) { + // Default is handled by the caller + return config != null && MASTER_REGISTRY_CLASS_NAME + .equals(get(CLIENT_CONNECTION_REGISTRY_IMPL_CONF_KEY, config, props, 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 ef04d5609f..80d7269ac3 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 @@ -98,10 +98,10 @@ public class RPCConnectionInfo extends AbstractRPCConnectionInfo { + toString(); } - public static boolean isRPC(Configuration config) { - // Default is handled by the caller - return config != null && RPC_REGISTRY_CLASS_NAME - .equals(config.get(CLIENT_CONNECTION_REGISTRY_IMPL_CONF_KEY)); + @Override + public ConnectionInfo withPrincipal(String principal) { + return new RPCConnectionInfo(isConnectionless, principal, keytab, user, + haGroup, bootstrapServers); } /** @@ -142,6 +142,8 @@ public class RPCConnectionInfo extends AbstractRPCConnectionInfo { hostsList = hostsList.replaceAll("=", ":"); } + isConnectionless = PhoenixRuntime.CONNECTIONLESS.equals(hostsList); + if (portString != null) { try { port = Integer.parseInt(portString); @@ -154,7 +156,6 @@ public class RPCConnectionInfo extends AbstractRPCConnectionInfo { } if (isConnectionless) { - // We probably don't create connectionless MasterConnectionInfo objects if (port != null) { throw getMalFormedUrlException(url); } else { @@ -184,5 +185,11 @@ public class RPCConnectionInfo extends AbstractRPCConnectionInfo { return new RPCConnectionInfo(isConnectionless, principal, keytab, user, haGroup, hostsList); } + + public static boolean isRPC(Configuration config, ReadOnlyProps props, Properties info) { + // Default is handled by the caller + return config != null && RPC_REGISTRY_CLASS_NAME + .equals(get(CLIENT_CONNECTION_REGISTRY_IMPL_CONF_KEY, config, props, 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 28743ba5ee..3d9f5f3c62 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 @@ -35,7 +35,7 @@ import org.apache.phoenix.util.ReadOnlyProps; */ public class ZKConnectionInfo extends ConnectionInfo { - private static final String ZK_REGISTRY_NAME = + public static final String ZK_REGISTRY_NAME = "org.apache.hadoop.hbase.client.ZKConnectionRegistry"; private final Integer zkPort; @@ -150,6 +150,12 @@ public class ZKConnectionInfo extends ConnectionInfo { + toString(); } + @Override + public ConnectionInfo withPrincipal(String principal) { + return new ZKConnectionInfo(isConnectionless, principal, keytab, user, + haGroup, zkHosts, zkPort, zkRootNode); + } + /** * Builder helper class for ZKConnectionInfo * @@ -331,11 +337,12 @@ public class ZKConnectionInfo extends ConnectionInfo { HConstants.DEFAULT_ZOOKEEPER_ZNODE_PARENT); } } - } - public static boolean isZK(Configuration config) { - // Default is handled by the caller - return config != null - && ZK_REGISTRY_NAME.equals(config.get(CLIENT_CONNECTION_REGISTRY_IMPL_CONF_KEY)); + public static boolean isZK(Configuration config, ReadOnlyProps props, Properties info) { + // Default is handled by the caller + return config != null && ZK_REGISTRY_NAME + .equals(get(CLIENT_CONNECTION_REGISTRY_IMPL_CONF_KEY, config, props, info)); + } } + } diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/ConfigurableCacheIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/ConfigurableCacheIT.java index 96fae49061..eca73ce50b 100644 --- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/ConfigurableCacheIT.java +++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/ConfigurableCacheIT.java @@ -18,6 +18,7 @@ import java.sql.Connection; import java.sql.DriverManager; import java.util.Properties; +import org.apache.phoenix.jdbc.ConnectionInfo; import org.apache.phoenix.query.ITGuidePostsCacheFactory; import org.apache.phoenix.query.QueryServices; import org.apache.phoenix.util.PhoenixRuntime; @@ -70,7 +71,7 @@ public class ConfigurableCacheIT extends ParallelStatsEnabledIT { // As there is a map of connections in the phoenix driver need to differentiate the url to // pick different QueryServices - url = url + PhoenixRuntime.JDBC_PROTOCOL_SEPARATOR + principal; + url = ConnectionInfo.create(url, null, null).withPrincipal(principal).toUrl(); // Load defaults from QueryServicesTestImpl Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES); diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/transform/TransformMonitorIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/transform/TransformMonitorIT.java index d5ac60dea2..86b5fc6890 100644 --- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/transform/TransformMonitorIT.java +++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/transform/TransformMonitorIT.java @@ -26,6 +26,7 @@ import org.apache.phoenix.coprocessor.TaskRegionObserver; import org.apache.phoenix.coprocessor.tasks.TransformMonitorTask; import org.apache.phoenix.end2end.ParallelStatsDisabledIT; import org.apache.phoenix.end2end.index.SingleCellIndexIT; +import org.apache.phoenix.jdbc.ConnectionInfo; import org.apache.phoenix.jdbc.PhoenixConnection; import org.apache.phoenix.jdbc.PhoenixDatabaseMetaData; import org.apache.phoenix.query.ConnectionQueryServices; @@ -545,7 +546,7 @@ public class TransformMonitorIT extends ParallelStatsDisabledIT { int numOfRows = 1; TransformToolIT.createTableAndUpsertRows(conn1, dataTableName, numOfRows, isImmutable ? " IMMUTABLE_ROWS=true" : ""); - String url2 = url + PhoenixRuntime.JDBC_PROTOCOL_SEPARATOR + "LongRunningQueries"; + String url2 = ConnectionInfo.create(url, null, null).withPrincipal("LongRunningQueries").toUrl(); try (Connection conn2 = DriverManager.getConnection(url2, PropertiesUtil.deepCopy(TEST_PROPERTIES))) { conn2.setAutoCommit(true); TransformToolIT.upsertRows(conn2, dataTableName, 2, 1); diff --git a/phoenix-core/src/it/java/org/apache/phoenix/monitoring/connectionqueryservice/ConnectionQueryServicesMetricsIT.java b/phoenix-core/src/it/java/org/apache/phoenix/monitoring/connectionqueryservice/ConnectionQueryServicesMetricsIT.java index f7d065ec93..454662b28a 100644 --- a/phoenix-core/src/it/java/org/apache/phoenix/monitoring/connectionqueryservice/ConnectionQueryServicesMetricsIT.java +++ b/phoenix-core/src/it/java/org/apache/phoenix/monitoring/connectionqueryservice/ConnectionQueryServicesMetricsIT.java @@ -21,6 +21,7 @@ import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.HBaseTestingUtility; import org.apache.phoenix.end2end.NeedsOwnMiniClusterTest; +import org.apache.phoenix.jdbc.ConnectionInfo; import org.apache.phoenix.jdbc.PhoenixConnection; import org.apache.phoenix.jdbc.PhoenixDriver; import org.apache.phoenix.monitoring.ConnectionQueryServicesMetric; @@ -45,6 +46,7 @@ import org.slf4j.LoggerFactory; import java.sql.Connection; import java.sql.DriverManager; +import java.sql.SQLException; import java.sql.Statement; import java.util.List; import java.util.Map; @@ -139,8 +141,8 @@ public class ConnectionQueryServicesMetricsIT extends BaseTest { clearAllConnectionQueryServiceMetrics(); } - private String connUrlWithPrincipal(String principalName) { - return url + (principalName == null ? "" : PhoenixRuntime.JDBC_PROTOCOL_SEPARATOR + principalName); + private String connUrlWithPrincipal(String principalName) throws SQLException { + return ConnectionInfo.create(url, null, null).withPrincipal(principalName).toUrl(); } @Test