Samarth Jain created HBASE-18359:
------------------------------------
Summary: CoprocessorHConnection#getConnectionForEnvironment should
read config from CoprocessorEnvironment from CoporcessorEnvironment
Key: HBASE-18359
URL: https://issues.apache.org/jira/browse/HBASE-18359
Project: HBase
Issue Type: Bug
Reporter: Samarth Jain
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)