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

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

bq. at the moment we only use the offline flag for split/merge. and the regions 
may be back if we rollback.
Yeah, the offline flag is only used by split region. But for split region, the 
split flag need be true, too.  The splited region need two flag, offline and 
split. So I thought the disabled region can use the offline flag.
bq. our code has lots of assumptions and changing things from 
TableNotEnabledException to RegionOfflineException feels scary to me.
This can be changed back to TableNotEnabledException. This issue's goal is fail 
fast when found table is disabled. And don't check table state for any retry 
request. Thanks.

> Throw RegionOfflineException directly when request for a disabled table
> -----------------------------------------------------------------------
>
>                 Key: HBASE-17140
>                 URL: https://issues.apache.org/jira/browse/HBASE-17140
>             Project: HBase
>          Issue Type: Improvement
>          Components: Client
>            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. Then throw the 
> RegionOfflineException when get region location.
> Review board: https://reviews.apache.org/r/54071/



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

Reply via email to