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)

Reply via email to