[ 
https://issues.apache.org/jira/browse/HBASE-3766?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13018591#comment-13018591
 ] 

Jean-Daniel Cryans commented on HBASE-3766:
-------------------------------------------

Ah I see, sorry I thought you were adding the reference counting in HCM, but I 
see it's in HCI (which does make a lot more sense). That works yeah.

So two other things:

This is dangerous because you are closing the connections to all the regions 
servers and the master, you want to pass false:

{quote}
+        HConnectionManager.deleteConnection(this.configuration, true);
{quote}

Then I'd like to see some unit testing.

Also I'm not sure we want this in 0.90.3, targeting 0.92 would be better.

> Manage Connections Through Reference Counts
> -------------------------------------------
>
>                 Key: HBASE-3766
>                 URL: https://issues.apache.org/jira/browse/HBASE-3766
>             Project: HBase
>          Issue Type: Improvement
>          Components: client
>    Affects Versions: 0.90.2
>            Reporter: Karthick Sankarachary
>            Assignee: Karthick Sankarachary
>            Priority: Minor
>             Fix For: 0.90.3
>
>         Attachments: HBASE-3766.patch, HBASE-3766.patch
>
>   Original Estimate: 1h
>  Remaining Estimate: 1h
>
> As of now, the onus is on the developer to explicitly close connections once 
> they're done using them. Furthermore, since connections are managed based on 
> the identity of the {{Configuration}} object, one is forced to clone the 
> configuration object in order to be able to clean it up safely (for a case in 
> point, see {{HTablePool's}} constructor). As a matter of fact, this issue has 
> been well-documented in the HConnectionManager class:
> {quote}
> But sharing connections makes clean up of {{HConnection}} instances a little 
> awkward.  Currently, clients cleanup by calling 
> {{#deleteConnection(Configuration, boolean)}}.  This will shutdown the 
> zookeeper connection the {{HConnection}} was using and clean up all 
> {{HConnection}} resources as well as stopping proxies to servers out on the 
> cluster. Not running the cleanup will not end the world; it'll just stall the 
> closeup some and spew some zookeeper connection failed messages into the log. 
>  Running the cleanup on a {{HConnection}} that is subsequently used by 
> another will cause breakage so be careful running cleanup. To create a 
> {{HConnection}} that is not shared by others, you can create a new 
> {{Configuration}} instance, pass this new instance to 
> {{#getConnection(Configuration)}}, and then when done, close it up by doing 
> something like the following:
> {code}
>  Configuration newConfig = new Configuration(originalConf);
>  HConnection connection = HConnectionManager.getConnection(newConfig);
>  // Use the connection to your hearts' delight and then when done...
>  HConnectionManager.deleteConnection(newConfig, true);
> {code}
> {quote}
> Here, we propose a reference-count based mechanism for managing connections 
> that will allow {{HTables}} to clean up after themselves. In particular, we 
> extend the {{HConnectionInterface}} interface so as to facilitate reference 
> counting, where, typically, a reference indicates that it is being used by a 
> {{HTable}}, although there could be other sources. 
> To elaborate, when a HTable is constructed, it increments the reference count 
> on the connection given to it. Similarly, when it is closed, that reference 
> count is decremented. In the event there are no more references to that 
> connection, {{HTable#close}} takes it upon itself to delete the connection, 
> thereby sparing the developer from doing so.

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to