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

Guanghao Zhang commented on HBASE-17140:
----------------------------------------

Thanks for your reply.

bq. In the case of (2), the HRI for parent region is saved with split=true, 
offline=true (similar for merge).
If I am not wrong, when merge A and B to a new region, the region info of A and 
B are deleted directly? So split=true, offline=true means a split parent 
region. And offline=true means a region of disabled table.

bq. When the table is re-enabled again, we do not want to bring back the old 
parents.
When enable a table, it need to get the table regions first and the split 
parent region will be filtered in this step. So I thought it can't bring back?


> Reduce meta request number by skipping table state check
> --------------------------------------------------------
>
>                 Key: HBASE-17140
>                 URL: https://issues.apache.org/jira/browse/HBASE-17140
>             Project: HBase
>          Issue Type: Improvement
>          Components: Client
>    Affects Versions: 2.0.0
>            Reporter: Guanghao Zhang
>            Assignee: Guanghao Zhang
>         Attachments: HBASE-17140-v1.patch, HBASE-17140-v2.patch, 
> HBASE-17140-v3.patch, HBASE-17140-v4.patch, HBASE-17140-v5.patch
>
>
> Now when request for a disabled table, it need 3 rpc calls before fail.
> 1. get region location
> 2. send call to rs and get NotServeRegionException
> 3. retry and check the table state, then throw TableNotEnabledException
> The table state check is added for disabled table. But now the prepare method 
> in RegionServerCallable shows that all retry request will get table state 
> first.
> {code}
> public void prepare(final boolean reload) throws IOException {
>     // check table state if this is a retry
>     if (reload && !tableName.equals(TableName.META_TABLE_NAME) &&
>         getConnection().isTableDisabled(tableName)) {
>       throw new TableNotEnabledException(tableName.getNameAsString() + " is 
> disabled.");
>     }
>     try (RegionLocator regionLocator = 
> connection.getRegionLocator(tableName)) {
>       this.location = regionLocator.getRegionLocation(row);
>     }
>     if (this.location == null) {
>       throw new IOException("Failed to find location, tableName=" + tableName 
> +
>           ", row=" + Bytes.toString(row) + ", reload=" + reload);
>     }
>     setStubByServiceName(this.location.getServerName());
> }
> {code}
> An improvement is set the region offline in HRegionInfo and throw the 
> RegionOfflineException when get region location. Then we don't need check 
> table state for any retry request.
> Review board: https://reviews.apache.org/r/54071/



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to