HBASE-17587 Do not Rethrow DoNotRetryIOException as UnknownScannerException
Signed-off-by: Andrew Purtell <apurt...@apache.org> Project: http://git-wip-us.apache.org/repos/asf/hbase/repo Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/a07b9687 Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/a07b9687 Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/a07b9687 Branch: refs/heads/branch-1.2 Commit: a07b9687d21ebbd963a7aea28edd7850daf79411 Parents: 9bd7642 Author: Zach York <zy...@amazon.com> Authored: Thu Feb 2 02:44:58 2017 -0800 Committer: Enis Soztutar <e...@apache.org> Committed: Mon Feb 6 16:11:53 2017 -0800 ---------------------------------------------------------------------- .../apache/hadoop/hbase/regionserver/RSRpcServices.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hbase/blob/a07b9687/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RSRpcServices.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RSRpcServices.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RSRpcServices.java index f28e726..46a8120 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RSRpcServices.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RSRpcServices.java @@ -18,6 +18,7 @@ */ package org.apache.hadoop.hbase.regionserver; +import java.io.FileNotFoundException; import java.io.IOException; import java.io.InterruptedIOException; import java.net.BindException; @@ -2662,6 +2663,17 @@ public class RSRpcServices implements HBaseRPCErrorHandler, // row that the client has last seen. closeScanner(region, scanner, scannerName); + // rethrow DoNotRetryIOException. This can avoid the retry in ClientScanner. + if (e instanceof DoNotRetryIOException) { + throw e; + } + + // If it is a FileNotFoundException, wrap as a + // DoNotRetryIOException. This can avoid the retry in ClientScanner. + if (e instanceof FileNotFoundException) { + throw new DoNotRetryIOException(e); + } + // We closed the scanner already. Instead of throwing the IOException, and client // retrying with the same scannerId only to get USE on the next RPC, we directly throw // a special exception to save an RPC.