[jira] [Updated] (HBASE-10396) The constructor of HBaseAdmin may close the shared HConnection

2014-01-26 Thread cuijianwei (JIRA)

 [ 
https://issues.apache.org/jira/browse/HBASE-10396?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

cuijianwei updated HBASE-10396:
---

Attachment: HBASE-10396-0.94-v2.patch

Backport trunk code for constructors of HBaseAdmin

> The constructor of HBaseAdmin may close the shared HConnection 
> ---
>
> Key: HBASE-10396
> URL: https://issues.apache.org/jira/browse/HBASE-10396
> Project: HBase
>  Issue Type: Bug
>  Components: Admin, Client
>Affects Versions: 0.94.16
>Reporter: cuijianwei
> Attachments: HBASE-10396-0.94-v1.patch, HBASE-10396-0.94-v2.patch
>
>
> HBaseAdmin has the constructor:
> {code}
>   public HBaseAdmin(Configuration c)
>   throws MasterNotRunningException, ZooKeeperConnectionException {
> this.conf = HBaseConfiguration.create(c);
> this.connection = HConnectionManager.getConnection(this.conf);
> ...
> {code}
> As shown in above code, HBaseAdmin will get a cached HConnection or create a 
> new HConnection and use this HConnection to connect to Master. Then, 
> HBaseAdmin will delete the HConnection when connecting to master fail as 
> follows:
> {code}
> while ( true ){
>   try {
> this.connection.getMaster();
> return;
>   } catch (MasterNotRunningException mnre) {
> HConnectionManager.deleteStaleConnection(this.connection);
> this.connection = HConnectionManager.getConnection(this.conf);
>   }
> {code} 
> The above code will invoke HConnectionManager#deleteStaleConnection to delete 
> the HConnection from global HConnection cache. The risk is that the deleted 
> HConnection might be sharing by other threads, such as HTable or HTablePool. 
> Then, these threads which sharing the deleted HConnection will get closed 
> HConnection exception:
> {code}
> org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation@61bc59aa
>  closed
> {code}
> If users use HTablePool, the situation will become worse because closing 
> HTable will only return HTable to HTablePool which won't reduce the reference 
> count of the closed HConnection. Then, the closed HConnection will always be 
> used before clearing HTablePool. In 0.94, some modules such as Rest server 
> are using HTablePool, therefore may suffer from this problem. 



--
This message was sent by Atlassian JIRA
(v6.1.5#6160)


[jira] [Updated] (HBASE-10396) The constructor of HBaseAdmin may close the shared HConnection

2014-01-26 Thread cuijianwei (JIRA)

 [ 
https://issues.apache.org/jira/browse/HBASE-10396?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

cuijianwei updated HBASE-10396:
---

Attachment: HBASE-10396-0.94-v1.patch

will not delete as stale HConnection when connecting master fail 

> The constructor of HBaseAdmin may close the shared HConnection 
> ---
>
> Key: HBASE-10396
> URL: https://issues.apache.org/jira/browse/HBASE-10396
> Project: HBase
>  Issue Type: Bug
>  Components: Admin, Client
>Affects Versions: 0.94.16
>Reporter: cuijianwei
> Attachments: HBASE-10396-0.94-v1.patch
>
>
> HBaseAdmin has the constructor:
> {code}
>   public HBaseAdmin(Configuration c)
>   throws MasterNotRunningException, ZooKeeperConnectionException {
> this.conf = HBaseConfiguration.create(c);
> this.connection = HConnectionManager.getConnection(this.conf);
> ...
> {code}
> As shown in above code, HBaseAdmin will get a cached HConnection or create a 
> new HConnection and use this HConnection to connect to Master. Then, 
> HBaseAdmin will delete the HConnection when connecting to master fail as 
> follows:
> {code}
> while ( true ){
>   try {
> this.connection.getMaster();
> return;
>   } catch (MasterNotRunningException mnre) {
> HConnectionManager.deleteStaleConnection(this.connection);
> this.connection = HConnectionManager.getConnection(this.conf);
>   }
> {code} 
> The above code will invoke HConnectionManager#deleteStaleConnection to delete 
> the HConnection from global HConnection cache. The risk is that the deleted 
> HConnection might be sharing by other threads, such as HTable or HTablePool. 
> Then, these threads which sharing the deleted HConnection will get closed 
> HConnection exception:
> {code}
> org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation@61bc59aa
>  closed
> {code}
> If users use HTablePool, the situation will become worse because closing 
> HTable will only return HTable to HTablePool which won't reduce the reference 
> count of the closed HConnection. Then, the closed HConnection will always be 
> used before clearing HTablePool. In 0.94, some modules such as Rest server 
> are using HTablePool, therefore may suffer from this problem. 



--
This message was sent by Atlassian JIRA
(v6.1.5#6160)


[jira] [Updated] (HBASE-10396) The constructor of HBaseAdmin may close the shared HConnection

2014-01-22 Thread cuijianwei (JIRA)

 [ 
https://issues.apache.org/jira/browse/HBASE-10396?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

cuijianwei updated HBASE-10396:
---

Description: 
HBaseAdmin has the constructor:
{code}
  public HBaseAdmin(Configuration c)
  throws MasterNotRunningException, ZooKeeperConnectionException {
this.conf = HBaseConfiguration.create(c);
this.connection = HConnectionManager.getConnection(this.conf);
...
{code}
As shown in above code, HBaseAdmin will get a cached HConnection or create a 
new HConnection and use this HConnection to connect to Master. Then, HBaseAdmin 
will delete the HConnection when connecting to master fail as follows:
{code}
while ( true ){
  try {
this.connection.getMaster();
return;
  } catch (MasterNotRunningException mnre) {
HConnectionManager.deleteStaleConnection(this.connection);
this.connection = HConnectionManager.getConnection(this.conf);
  }
{code} 
The above code will invoke HConnectionManager#deleteStaleConnection to delete 
the HConnection from global HConnection cache. The risk is that the deleted 
HConnection might be sharing by other threads, such as HTable or HTablePool. 
Then, these threads which sharing the deleted HConnection will get closed 
HConnection exception:
{code}
org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation@61bc59aa
 closed
{code}
If users use HTablePool, the situation will become worse because closing HTable 
will only return HTable to HTablePool which won't reduce the reference count of 
the closed HConnection. Then, the closed HConnection will always be used before 
clearing HTablePool. In 0.94, some modules such as Rest server are using 
HTablePool, therefore may suffer from this problem. 

  was:
HBaseAdmin has the constructor:
{code}
  public HBaseAdmin(Configuration c)
  throws MasterNotRunningException, ZooKeeperConnectionException {
this.conf = HBaseConfiguration.create(c);
this.connection = HConnectionManager.getConnection(this.conf);
...
{code}
As shown in above code, HBaseAdmin will get a cached HConnection or create a 
new HConnection and use this HConnection to connect to Master. Then, HBaseAdmin 
will delete the HConnection when connecting to master fail as follows:
{code}
while ( true ){
  try {
this.connection.getMaster();
return;
  } catch (MasterNotRunningException mnre) {
HConnectionManager.deleteStaleConnection(this.connection);
this.connection = HConnectionManager.getConnection(this.conf);
  }
{code} 
The above code will invoke HConnectionManager#deleteStaleConnection to delete 
the HConnection from global HConnection cache. The risk is that the deleted 
HConnection might be sharing by other threads, such as HTable or HTablePool. 
Then, these threads which sharing the deleted HConnection will get closed 
HConnection exception:
{code}
org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation@61bc59aa
 closed
{code}
If users use HTablePool, the situation will become worse because closing HTable 
will only return HTable into HTablePool which won't reduce the reference count 
of the closed HConnection. Then, the closed HConnection will always be used 
before clearing HTablePool. In 0.94, some modules such as Rest server are using 
HTablePool, therefore may suffer from this problem. 


> The constructor of HBaseAdmin may close the shared HConnection 
> ---
>
> Key: HBASE-10396
> URL: https://issues.apache.org/jira/browse/HBASE-10396
> Project: HBase
>  Issue Type: Bug
>  Components: Admin, Client
>Affects Versions: 0.94.16
>Reporter: cuijianwei
>
> HBaseAdmin has the constructor:
> {code}
>   public HBaseAdmin(Configuration c)
>   throws MasterNotRunningException, ZooKeeperConnectionException {
> this.conf = HBaseConfiguration.create(c);
> this.connection = HConnectionManager.getConnection(this.conf);
> ...
> {code}
> As shown in above code, HBaseAdmin will get a cached HConnection or create a 
> new HConnection and use this HConnection to connect to Master. Then, 
> HBaseAdmin will delete the HConnection when connecting to master fail as 
> follows:
> {code}
> while ( true ){
>   try {
> this.connection.getMaster();
> return;
>   } catch (MasterNotRunningException mnre) {
> HConnectionManager.deleteStaleConnection(this.connection);
> this.connection = HConnectionManager.getConnection(this.conf);
>   }
> {code} 
> The above code will invoke HConnectionManager#deleteStaleConnection to delete 
> the HConnection from global HConnection cache. The risk is that the deleted 
> HConnection might be sharing by other threads, such as HTable or HTablePool. 
> Then, these threads which sharing the deleted HConnection will get closed 
> HCo