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

Kannan Muthukkaruppan commented on HBASE-3229:
----------------------------------------------

Two additional observations:

1) The HBaseAdmin.java:createTableAsync() (this is from 0.89), the function 
doesn't actually seem be doing anything async. The master.createTable() appears 
to be a blocking call.

{code}
public void createTableAsync(HTableDescriptor desc, byte [][] splitKeys)
  throws IOException {
    if (this.master == null) {
      throw new MasterNotRunningException("master has been shut down");
    }
    HTableDescriptor.isLegalTableName(desc.getName());
    try {
      this.master.createTable(desc, splitKeys);
    } catch (RemoteException e) {
      throw RemoteExceptionHandler.decodeRemoteException(e);
    }
  }
{code}

2) When creating a table with pre-splits, HBaseAdmin.java:createTable() waits 
only for the first region/split to be online. 

{code}
 public void createTable(HTableDescriptor desc, byte [][] splitKeys)
  throws IOException {
   
    ...

    createTableAsync(desc, splitKeys);
    for (int tries = 0; tries < numRetries; tries++) {
      try {
        // Wait for new table to come on-line
        connection.locateRegion(desc.getName(), HConstants.EMPTY_START_ROW);

    ...
{code}


> Table creation, though using "async" call to master, can actually run for a 
> while and cause RPC timeout
> -------------------------------------------------------------------------------------------------------
>
>                 Key: HBASE-3229
>                 URL: https://issues.apache.org/jira/browse/HBASE-3229
>             Project: HBase
>          Issue Type: Bug
>          Components: client, master
>    Affects Versions: 0.90.0
>            Reporter: Jonathan Gray
>            Priority: Critical
>             Fix For: 0.92.0
>
>
> Our create table methods in HBaseAdmin are synchronous from client POV.  
> However, underneath, we're using an "async" create and then looping waiting 
> for table availability.  Because the create is async and we loop instead of 
> block on RPC, we don't expect RPC timeouts.
> However, when creating a table with lots of initial regions, the "async" 
> create can actually take a long time (more than 30 seconds in this case) 
> which causes the client to timeout and gives impression something failed.
> We should make the create truly async so that this can't happen.  And rather 
> than doing one-off, inline assignment as it is today, we should reuse the 
> fancy enable/disable code stack just added to make this faster and more 
> optimal.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to