This is an automated email from the ASF dual-hosted git repository.
stoty pushed a commit to branch 5.1
in repository https://gitbox.apache.org/repos/asf/phoenix.git
The following commit(s) were added to refs/heads/5.1 by this push:
new 10b810a790 PHOENIX-7191 Connectionless CQSs don't work with non-ZK
registries
10b810a790 is described below
commit 10b810a79025414589131f7ad6e1713cbe4654b4
Author: Istvan Toth <[email protected]>
AuthorDate: Wed Jan 31 09:40:05 2024 +0100
PHOENIX-7191 Connectionless CQSs don't work with non-ZK registries
---
.../phoenix/end2end/ConfigurableCacheIT.java | 3 ++-
.../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 ++++++++++------
6 files changed, 64 insertions(+), 21 deletions(-)
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/main/java/org/apache/phoenix/jdbc/AbstractRPCConnectionInfo.java
b/phoenix-core/src/main/java/org/apache/phoenix/jdbc/AbstractRPCConnectionInfo.java
index d362a86714..d193a911eb 100644
---
a/phoenix-core/src/main/java/org/apache/phoenix/jdbc/AbstractRPCConnectionInfo.java
+++
b/phoenix-core/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;
/**
@@ -198,9 +199,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/src/main/java/org/apache/phoenix/jdbc/ConnectionInfo.java
b/phoenix-core/src/main/java/org/apache/phoenix/jdbc/ConnectionInfo.java
index 0347b1dfb4..641e12c19e 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/jdbc/ConnectionInfo.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/jdbc/ConnectionInfo.java
@@ -160,11 +160,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
*
@@ -534,5 +536,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/src/main/java/org/apache/phoenix/jdbc/MasterConnectionInfo.java
b/phoenix-core/src/main/java/org/apache/phoenix/jdbc/MasterConnectionInfo.java
index cece24eed3..f01295c907 100644
---
a/phoenix-core/src/main/java/org/apache/phoenix/jdbc/MasterConnectionInfo.java
+++
b/phoenix-core/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,
+ bootstrapServers);
}
/**
@@ -98,5 +99,11 @@ public class MasterConnectionInfo extends
AbstractRPCConnectionInfo {
protected ConnectionInfo build() {
return new MasterConnectionInfo(isConnectionless, principal,
keytab, user, 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/src/main/java/org/apache/phoenix/jdbc/RPCConnectionInfo.java
b/phoenix-core/src/main/java/org/apache/phoenix/jdbc/RPCConnectionInfo.java
index b235565870..0837bc362e 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/jdbc/RPCConnectionInfo.java
+++ b/phoenix-core/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,
+ 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 {
@@ -183,5 +184,11 @@ public class RPCConnectionInfo extends
AbstractRPCConnectionInfo {
protected ConnectionInfo build() {
return new RPCConnectionInfo(isConnectionless, principal, keytab,
user, 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/src/main/java/org/apache/phoenix/jdbc/ZKConnectionInfo.java
b/phoenix-core/src/main/java/org/apache/phoenix/jdbc/ZKConnectionInfo.java
index 4460082f64..1570fcd447 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/jdbc/ZKConnectionInfo.java
+++ b/phoenix-core/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;
@@ -151,6 +151,12 @@ public class ZKConnectionInfo extends ConnectionInfo {
+ toString();
}
+ @Override
+ public ConnectionInfo withPrincipal(String principal) {
+ return new ZKConnectionInfo(isConnectionless, principal, keytab, user,
+ 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));
+ }
}
+
}