[ 
https://issues.apache.org/jira/browse/PHOENIX-7115?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17799561#comment-17799561
 ] 

ASF GitHub Bot commented on PHOENIX-7115:
-----------------------------------------

jpisaac commented on code in PR #1748:
URL: https://github.com/apache/phoenix/pull/1748#discussion_r1434485333


##########
phoenix-core/src/main/java/org/apache/phoenix/query/ConnectionQueryServicesImpl.java:
##########
@@ -544,32 +548,51 @@ public ConnectionQueryServicesImpl(QueryServices 
services, ConnectionInfo connec
 
     }
 
-    private void openConnection() throws SQLException {
+    private Connection openConnection(Configuration conf) throws SQLException {
+        Connection localConnection;
         try {
-            this.connection = 
HBaseFactoryProvider.getHConnectionFactory().createConnection(this.config);
+            localConnection = 
HBaseFactoryProvider.getHConnectionFactory().createConnection(conf);
             GLOBAL_HCONNECTIONS_COUNTER.increment();
             LOGGER.info("HConnection established. Stacktrace for informational 
purposes: "
-                    + connection + " " +  LogUtil.getCallerStackTrace());
+                    + localConnection + " " +  LogUtil.getCallerStackTrace());
         } catch (IOException e) {
             throw new 
SQLExceptionInfo.Builder(SQLExceptionCode.CANNOT_ESTABLISH_CONNECTION)
             .setRootCause(e).build().buildException();
         }
-        if (this.connection.isClosed()) { // TODO: why the heck doesn't this 
throw above?
+        if (localConnection.isClosed()) { // TODO: why the heck doesn't this 
throw above?
             throw new 
SQLExceptionInfo.Builder(SQLExceptionCode.CANNOT_ESTABLISH_CONNECTION).build().buildException();
         }
+        return localConnection;
+    }
+
+    /*
+    We create a long-lived hbase connection to run invalidate cache RPCs. We 
override
+    CUSTOM_CONTROLLER_CONF_KEY to instantiate 
InvalidateMetadataCacheController which has
+    a special priority for invalidate metadata cache operations.
+     */
+    public Connection getInvalidateMetadataCacheConnection() throws 
SQLException {

Review Comment:
   Thanks @shahrs87 for pointing out the need for overriding the 
CUSTOM_CONTROLLER_CONF_KEY.  Since we are going to late binding, may make sense 
to provide some synchronization, as it probably will be invoked via multiple 
threads and then we may have some leaky hConnections.





> Create separate handler thread pool for invalidating server metadata cache
> --------------------------------------------------------------------------
>
>                 Key: PHOENIX-7115
>                 URL: https://issues.apache.org/jira/browse/PHOENIX-7115
>             Project: Phoenix
>          Issue Type: Sub-task
>            Reporter: Rushabh Shah
>            Assignee: Rushabh Shah
>            Priority: Major
>
> MutableIndexFailureIT#testIndexWriteFailure is failing. See 
> [this|https://ci-hadoop.apache.org/job/Phoenix/job/Phoenix-PreCommit-GitHub-PR/job/PR-1726/9/#showFailuresLink]
>  build for reference.
> Currently all the invalidateServerMetadataCache invocations are handled by 
> default RPC handler threads. We have 5 default handler threads configured in 
> tests. 
> This test makes sure that write to index table fails and since 
> disableIndexOnWriteFailure is set to true, it will disable the index. We use 
> around 10 different threads on the client side to write to base table and  
> index table, so we use all the 5 handler threads to serve writes.
> Since writes to index fails, within the handler threads it will try to update 
> the index state to  DISABLE. 
> On receiving the updateIndexState rpc, MetadataEndpointImpl will try to 
> invalidate the server metadata cache on all the regionservers. The 
> regionserver hosting index table doesn't have any available handler threads 
> to serve invalidateServerMetadataCache requests. Hence the test fails.
> The root cause is all the read/write operations and invalidate server 
> metadata cache operations share the same RPC handler pool. We need to have 
> separate thread pool for 
> invalidate server metadata cache operations



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to