[
https://issues.apache.org/jira/browse/PHOENIX-7115?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17797324#comment-17797324
]
ASF GitHub Bot commented on PHOENIX-7115:
-----------------------------------------
jpisaac commented on code in PR #1748:
URL: https://github.com/apache/phoenix/pull/1748#discussion_r1428541478
##########
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:
nit: Refactoring suggestions -
Maybe the initialization of the invalidateMetadataCacheConnection can be
done in CQSI init itself, since these are one time actions. Instead of late
binding/initialization. You may be able to simplify the connection creation
without cloning the config and overriding the CUSTOM_CONTROLLER_CONF_KEY. See
ServerSideRPCControllerFactory usage for eg
> 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)