This is an automated email from the ASF dual-hosted git repository.

lokiore pushed a commit to branch 5.2
in repository https://gitbox.apache.org/repos/asf/phoenix.git


The following commit(s) were added to refs/heads/5.2 by this push:
     new ea1d71dfae PHOENIX-7464 :- Performance Regression in Connection 
Initialization due to Configuration Handling in ConnInfo (#2027) (#2032)
ea1d71dfae is described below

commit ea1d71dfaef04667204c747e6d3fb93d3931f9aa
Author: Lokesh Khurana <[email protected]>
AuthorDate: Tue Dec 3 07:50:38 2024 -0800

    PHOENIX-7464 :- Performance Regression in Connection Initialization due to 
Configuration Handling in ConnInfo (#2027) (#2032)
    
    Co-authored-by: lokesh-khurana <[email protected]>
---
 .../org/apache/phoenix/jdbc/ConnectionInfo.java    | 54 +++++++++++++++++-----
 1 file changed, 42 insertions(+), 12 deletions(-)

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..418e7d3be7 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
@@ -58,6 +58,19 @@ public abstract class ConnectionInfo {
     protected static final boolean HAS_MASTER_REGISTRY;
     protected static final boolean HAS_RPC_REGISTRY;
 
+    private static volatile Configuration configuration;
+
+    public static Configuration getCachedConfiguration() {
+        if (configuration == null) {
+            synchronized (ConnectionInfo.class) {
+                if (configuration == null) {
+                    configuration = 
HBaseFactoryProvider.getConfigurationFactory().getConfiguration();
+                }
+            }
+        }
+        return configuration;
+    }
+
     static {
         String version = VersionInfo.getVersion();
         if (VersionInfo.getMajorVersion(version) >= 3) {
@@ -104,14 +117,12 @@ public abstract class ConnectionInfo {
 
     public static ConnectionInfo createNoLogin(String url, ReadOnlyProps 
props, Properties info)
             throws SQLException {
-        Configuration conf = 
HBaseFactoryProvider.getConfigurationFactory().getConfiguration();
-        return create(url, conf, props, info, true);
+        return create(url, getCachedConfiguration(), props, info, true);
     }
 
     public static ConnectionInfo create(String url, ReadOnlyProps props, 
Properties info)
             throws SQLException {
-        Configuration conf = 
HBaseFactoryProvider.getConfigurationFactory().getConfiguration();
-        return create(url, conf, props, info);
+        return create(url, getCachedConfiguration(), props, info);
     }
 
     public static ConnectionInfo createNoLogin(String url, Configuration 
configuration,
@@ -470,15 +481,10 @@ public abstract class ConnectionInfo {
                                 LOGGER.info("Trying to connect to a secure 
cluster as {} "
                                         + "with keytab {}",
                                     principal, keytab);
+                                final Configuration newConfig = 
getConfiguration(principal, keytab);
                                 // We are intentionally changing the passed in 
Configuration object
-                                if (null != principal) {
-                                    
config.set(QueryServices.HBASE_CLIENT_PRINCIPAL, principal);
-                                }
-                                if (null != keytab) {
-                                    
config.set(QueryServices.HBASE_CLIENT_KEYTAB, keytab);
-                                }
-                                UserGroupInformation.setConfiguration(config);
-                                User.login(config, 
QueryServices.HBASE_CLIENT_KEYTAB,
+                                
UserGroupInformation.setConfiguration(newConfig);
+                                User.login(newConfig, 
QueryServices.HBASE_CLIENT_KEYTAB,
                                     QueryServices.HBASE_CLIENT_PRINCIPAL, 
null);
                                 user = User.getCurrent();
                                 LOGGER.info("Successful login to secure 
cluster");
@@ -498,6 +504,30 @@ public abstract class ConnectionInfo {
             }
         }
 
+        private Configuration getConfiguration( String principal, String 
keytab) {
+            final Configuration config = 
HBaseFactoryProvider.getConfigurationFactory().getConfiguration();
+            // Add QueryServices properties
+            if (props != null) {
+                for (Entry<String,String> entry : props) {
+                    config.set(entry.getKey(), entry.getValue());
+                }
+            }
+            // Add any user-provided properties (via DriverManager)
+            if (info != null) {
+                for (Object key : info.keySet()) {
+                    config.set((String) key, info.getProperty((String) key));
+                }
+            }
+            // Set the principal and keytab if provided from the URL 
(overriding those provided in Properties)
+            if (null != principal) {
+                config.set(QueryServices.HBASE_CLIENT_PRINCIPAL, principal);
+            }
+            if (null != keytab) {
+                config.set(QueryServices.HBASE_CLIENT_KEYTAB, keytab);
+            }
+            return config;
+        }
+
         protected String normalizeHostsList(String quorum, Integer defaultPort)
                 throws SQLException {
             // The input host:port separator char is "=" (after unescaping)

Reply via email to