HBASE-18377 Error handling for FileNotFoundException should consider 
RemoteException in openReader()


Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/0c2915b4
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/0c2915b4
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/0c2915b4

Branch: refs/heads/HBASE-18147
Commit: 0c2915b48e157724cefee9f0dbe069ce3f04d0d4
Parents: c423dc7
Author: tedyu <yuzhih...@gmail.com>
Authored: Mon Jul 17 20:24:29 2017 -0700
Committer: tedyu <yuzhih...@gmail.com>
Committed: Mon Jul 17 20:24:29 2017 -0700

----------------------------------------------------------------------
 .../regionserver/WALEntryStream.java            | 22 +++++++++++++-------
 1 file changed, 15 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/0c2915b4/hbase-server/src/main/java/org/apache/hadoop/hbase/replication/regionserver/WALEntryStream.java
----------------------------------------------------------------------
diff --git 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/replication/regionserver/WALEntryStream.java
 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/replication/regionserver/WALEntryStream.java
index c4d552c..4f49955 100644
--- 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/replication/regionserver/WALEntryStream.java
+++ 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/replication/regionserver/WALEntryStream.java
@@ -41,6 +41,7 @@ import 
org.apache.hadoop.hbase.util.LeaseNotRecoveredException;
 import org.apache.hadoop.hbase.wal.WAL.Entry;
 import org.apache.hadoop.hbase.wal.WAL.Reader;
 import org.apache.hadoop.hbase.wal.WALFactory;
+import org.apache.hadoop.ipc.RemoteException;
 
 /**
  * Streaming access to WAL entries. This class is given a queue of WAL {@link 
Path}, and continually
@@ -316,6 +317,15 @@ public class WALEntryStream implements Iterator<Entry>, 
Closeable, Iterable<Entr
     }
   }
 
+  private void handleFileNotFound(Path path, FileNotFoundException fnfe) 
throws IOException {
+    // If the log was archived, continue reading from there
+    Path archivedLog = getArchivedLog(path);
+    if (!path.equals(archivedLog)) {
+      openReader(archivedLog);
+    } else {
+      throw fnfe;
+    }
+  }
   private void openReader(Path path) throws IOException {
     try {
       // Detect if this is a new file, if so get a new reader else
@@ -329,13 +339,11 @@ public class WALEntryStream implements Iterator<Entry>, 
Closeable, Iterable<Entr
         resetReader();
       }
     } catch (FileNotFoundException fnfe) {
-      // If the log was archived, continue reading from there
-      Path archivedLog = getArchivedLog(path);
-      if (!path.equals(archivedLog)) {
-        openReader(archivedLog);
-      } else {
-        throw fnfe;
-      }
+      handleFileNotFound(path, fnfe);
+    }  catch (RemoteException re) {
+      IOException ioe = re.unwrapRemoteException(FileNotFoundException.class);
+      if (!(ioe instanceof FileNotFoundException)) throw ioe;
+      handleFileNotFound(path, (FileNotFoundException)ioe);
     } catch (LeaseNotRecoveredException lnre) {
       // HBASE-15019 the WAL was not closed due to some hiccup.
       LOG.warn("Try to recover the WAL lease " + currentPath, lnre);

Reply via email to