[
https://issues.apache.org/jira/browse/HBASE-17140?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15692366#comment-15692366
]
Guanghao Zhang edited comment on HBASE-17140 at 11/24/16 6:37 AM:
------------------------------------------------------------------
Now the RegionReplicaReplicationEndpoint will skip wal edits for disabled and
dropped table. There are a cache for disabled and dropped tables that have a
default expiry of 5 sec. So I add Thread.sleep(10000) in
TestRegionReplicaFailover. [~enis] I thought this doesn't need cache the
disabled tables. It will miss some edits if we disable a table and immediately
enable it again...
was (Author: zghaobac):
Now the RegionReplicaReplicationEndpoint will skip wal edits for disabled and
dropped table. There are a cache for disabled and dropped tables that have a
default expiry of 5 sec. So I add Thread.sleep(10000) in
TestRegionReplicaFailover. [~enis] I thought this didn't need cache the
disabled tables. It will miss some edits if we disable a table and immediately
enable it again...
> 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
>
>
> 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.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)