[
https://issues.apache.org/jira/browse/HBASE-18359?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16256704#comment-16256704
]
Samarth Jain commented on HBASE-18359:
--------------------------------------
We have been cloning config to make sure the changes we are making do not
introduce side effects on other regions of the region server. Something like
this:
{code}
/*
* We need to create a copy of region's configuration since we don't want any
side effect of
* setting the RpcControllerFactory.
*/
clonedConfig = PropertiesUtil.cloneConfig(e.getConfiguration());
{code}
On this clonedConfig we also set the various timeout and retry related configs
that [~jamestaylor] mentioned. This clonedConfig is then to our
CoprocessorHConnectionTableFactory that makes sure that the HConnection used by
the HTables generated from this factory use this cloned config. The HConnection
is today created by doing this:
{code}
new CoprocessorHConnection(clonedConfig, server)
{code}
So we would need a way of creating this "short circuit optimized" HConnection
by having it take a configuration object.
> CoprocessorHConnection#getConnectionForEnvironment should read config from
> CoprocessorEnvironment
> -------------------------------------------------------------------------------------------------
>
> Key: HBASE-18359
> URL: https://issues.apache.org/jira/browse/HBASE-18359
> Project: HBase
> Issue Type: Bug
> Reporter: Samarth Jain
> Fix For: 2.0.0
>
>
> It seems like the method getConnectionForEnvironment isn't doing the right
> thing when it is creating a CoprocessorHConnection by reading the config from
> HRegionServer and not from the env passed in.
> If coprocessors want to use a CoprocessorHConnection with some custom config
> settings, then they have no option but to configure it in the hbase-site.xml
> of the region servers. This isn't ideal as a lot of times these "global"
> level configs can have side effects. See PHOENIX-3974 as an example where
> configuring ServerRpcControllerFactory (a Phoenix implementation of
> RpcControllerFactory) could result in deadlocks. Or PHOENIX-3983 where
> presence of this global config causes our index rebuild code to incorrectly
> use handlers it shouldn't.
> If the CoprocessorHConnection created through getConnectionForEnvironment API
> used the CoprocessorEnvironment config, then it would allow co-processors to
> pass in their own config without needing to configure them in hbase-site.xml.
> The change would be simple. Basically change the below
> {code}
> if (services instanceof HRegionServer) {
> return new CoprocessorHConnection((HRegionServer) services);
> }
> {code}
> to
> {code}
> if (services instanceof HRegionServer) {
> return new CoprocessorHConnection(env.getConfiguration(),
> (HRegionServer) services);
> }
> {code}
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)