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:06:40 UTC
svn commit: r1467661 - in /hbase/branches/0.95/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:06:40 2013
New Revision: 1467661
URL: http://svn.apache.org/r1467661
Log:
HBASE-8096 [replication] NPE while replicating a log that is acquiring a new block from HDFS
Modified:
hbase/branches/0.95/hbase-server/src/main/java/org/apache/hadoop/hbase/replication/regionserver/ReplicationHLogReaderManager.java
hbase/branches/0.95/hbase-server/src/main/java/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.java
hbase/branches/0.95/hbase-server/src/test/java/org/apache/hadoop/hbase/replication/TestReplicationSmallTests.java
Modified: hbase/branches/0.95/hbase-server/src/main/java/org/apache/hadoop/hbase/replication/regionserver/ReplicationHLogReaderManager.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.95/hbase-server/src/main/java/org/apache/hadoop/hbase/replication/regionserver/ReplicationHLogReaderManager.java?rev=1467661&r1=1467660&r2=1467661&view=diff
==============================================================================
--- hbase/branches/0.95/hbase-server/src/main/java/org/apache/hadoop/hbase/replication/regionserver/ReplicationHLogReaderManager.java (original)
+++ hbase/branches/0.95/hbase-server/src/main/java/org/apache/hadoop/hbase/replication/regionserver/ReplicationHLogReaderManager.java Sat Apr 13 17:06:40 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/branches/0.95/hbase-server/src/main/java/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.95/hbase-server/src/main/java/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.java?rev=1467661&r1=1467660&r2=1467661&view=diff
==============================================================================
--- hbase/branches/0.95/hbase-server/src/main/java/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.java (original)
+++ hbase/branches/0.95/hbase-server/src/main/java/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.java Sat Apr 13 17:06:40 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/branches/0.95/hbase-server/src/test/java/org/apache/hadoop/hbase/replication/TestReplicationSmallTests.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.95/hbase-server/src/test/java/org/apache/hadoop/hbase/replication/TestReplicationSmallTests.java?rev=1467661&r1=1467660&r2=1467661&view=diff
==============================================================================
--- hbase/branches/0.95/hbase-server/src/test/java/org/apache/hadoop/hbase/replication/TestReplicationSmallTests.java (original)
+++ hbase/branches/0.95/hbase-server/src/test/java/org/apache/hadoop/hbase/replication/TestReplicationSmallTests.java Sat Apr 13 17:06:40 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();