[ https://issues.apache.org/jira/browse/HBASE-18359?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16255405#comment-16255405 ]
Anoop Sam John commented on HBASE-18359: ---------------------------------------- bq.We should make the Configuration returned out of the Env be read-only? Seems yes. This will avoid the misuse. For this particular issue (and I see how Phoenix having a workaround for this), there is no way to achieve in HBase 2.0. Because there only one cluster connection already created in HRS and Env.getConnection() returns that. Here seems we should give a getConnection() API with param Conf and that may have to recreate the connection (Short circuited). May be phoenix should take care of caching this connection and reuse? > 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 > > 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)