You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by st...@apache.org on 2013/04/13 19:07:15 UTC

svn commit: r1467662 - in /hbase/trunk/hbase-server/src: main/java/org/apache/hadoop/hbase/replication/regionserver/ test/java/org/apache/hadoop/hbase/replication/

Author: stack
Date: Sat Apr 13 17:07:14 2013
New Revision: 1467662

URL: http://svn.apache.org/r1467662
Log:
HBASE-8096 [replication] NPE while replicating a log that is acquiring a new block from HDFS

Modified:
    hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/replication/regionserver/ReplicationHLogReaderManager.java
    hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.java
    hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/replication/TestReplicationSmallTests.java

Modified: hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/replication/regionserver/ReplicationHLogReaderManager.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/replication/regionserver/ReplicationHLogReaderManager.java?rev=1467662&r1=1467661&r2=1467662&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/replication/regionserver/ReplicationHLogReaderManager.java (original)
+++ hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/replication/regionserver/ReplicationHLogReaderManager.java Sat Apr 13 17:07:14 2013
@@ -68,7 +68,11 @@ public class ReplicationHLogReaderManage
       this.reader = HLogFactory.createReader(this.fs, path, this.conf);
       this.lastPath = path;
     } else {
-      this.reader.reset();
+      try {
+        this.reader.reset();
+      } catch (NullPointerException npe) {
+        throw new IOException("NPE resetting reader, likely HDFS-4380", npe);
+      }
     }
     return this.reader;
   }

Modified: hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.java?rev=1467662&r1=1467661&r2=1467662&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.java (original)
+++ hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.java Sat Apr 13 17:07:14 2013
@@ -622,9 +622,14 @@ public class ReplicationSource extends T
     } catch (IOException ioe) {
       LOG.warn(peerClusterZnode + " Got: ", ioe);
       this.reader = null;
-      // TODO Need a better way to determinate if a file is really gone but
-      // TODO without scanning all logs dir
-      if (sleepMultiplier == this.maxRetriesMultiplier) {
+      if (ioe.getCause() instanceof NullPointerException) {
+        // Workaround for race condition in HDFS-4380
+        // which throws a NPE if we open a file before any data node has the most recent block
+        // Just sleep and retry. Will require re-reading compressed HLogs for compressionContext.
+        LOG.warn("Got NPE opening reader, will retry.");
+      } else if (sleepMultiplier == this.maxRetriesMultiplier) {
+        // TODO Need a better way to determine if a file is really gone but
+        // TODO without scanning all logs dir
         LOG.warn("Waited too long for this file, considering dumping");
         return !processEndOfFile();
       }

Modified: hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/replication/TestReplicationSmallTests.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/replication/TestReplicationSmallTests.java?rev=1467662&r1=1467661&r2=1467662&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/replication/TestReplicationSmallTests.java (original)
+++ hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/replication/TestReplicationSmallTests.java Sat Apr 13 17:07:14 2013
@@ -428,7 +428,7 @@ public class TestReplicationSmallTests e
     Result[] res = scanner.next(NB_ROWS_IN_BIG_BATCH);
     scanner.close();
 
-    assertEquals(NB_ROWS_IN_BATCH *10, res.length);
+    assertEquals(NB_ROWS_IN_BIG_BATCH, res.length);
 
     scan = new Scan();