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

Reply via email to