Author: brandonli Date: Tue Sep 24 04:11:15 2013 New Revision: 1525770 URL: http://svn.apache.org/r1525770 Log: HDFS-5249. Fix dumper thread which may die silently. Contributed by Brandon Li
Modified: hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs-nfs/src/main/java/org/apache/hadoop/hdfs/nfs/nfs3/OpenFileCtx.java hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt Modified: hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs-nfs/src/main/java/org/apache/hadoop/hdfs/nfs/nfs3/OpenFileCtx.java URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs-nfs/src/main/java/org/apache/hadoop/hdfs/nfs/nfs3/OpenFileCtx.java?rev=1525770&r1=1525769&r2=1525770&view=diff ============================================================================== --- hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs-nfs/src/main/java/org/apache/hadoop/hdfs/nfs/nfs3/OpenFileCtx.java (original) +++ hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs-nfs/src/main/java/org/apache/hadoop/hdfs/nfs/nfs3/OpenFileCtx.java Tue Sep 24 04:11:15 2013 @@ -199,9 +199,9 @@ class OpenFileCtx { try { synchronized (this) { // check if alive again - Preconditions.checkState(dumpFile.createNewFile(), - "The dump file should not exist: %s", dumpFilePath); - dumpOut = new FileOutputStream(dumpFile); + Preconditions.checkState(dumpFile.createNewFile(), + "The dump file should not exist: %s", dumpFilePath); + dumpOut = new FileOutputStream(dumpFile); } } catch (IOException e) { LOG.error("Got failure when creating dump stream " + dumpFilePath, e); @@ -239,6 +239,10 @@ class OpenFileCtx { && nonSequentialWriteInMemory.get() > 0) { OffsetRange key = it.next(); WriteCtx writeCtx = pendingWrites.get(key); + if (writeCtx == null) { + // This write was just deleted + continue; + } try { long dumpedDataSize = writeCtx.dumpData(dumpOut, raf); if (dumpedDataSize > 0) { @@ -262,16 +266,30 @@ class OpenFileCtx { @Override public void run() { while (activeState && enabledDump) { - if (nonSequentialWriteInMemory.get() >= DUMP_WRITE_WATER_MARK) { - dump(); - } - synchronized (OpenFileCtx.this) { - if (nonSequentialWriteInMemory.get() < DUMP_WRITE_WATER_MARK) { - try { - OpenFileCtx.this.wait(); - } catch (InterruptedException e) { + try { + if (nonSequentialWriteInMemory.get() >= DUMP_WRITE_WATER_MARK) { + dump(); + } + synchronized (OpenFileCtx.this) { + if (nonSequentialWriteInMemory.get() < DUMP_WRITE_WATER_MARK) { + try { + OpenFileCtx.this.wait(); + if (LOG.isDebugEnabled()) { + LOG.debug("Dumper woke up"); + } + } catch (InterruptedException e) { + LOG.info("Dumper is interrupted, dumpFilePath= " + + OpenFileCtx.this.dumpFilePath); + } } } + if (LOG.isDebugEnabled()) { + LOG.debug("Dumper checking OpenFileCtx activeState: " + activeState + + " enabledDump: " + enabledDump); + } + } catch (Throwable t) { + LOG.info("Dumper get Throwable: " + t + ". dumpFilePath: " + + OpenFileCtx.this.dumpFilePath); } } } Modified: hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt?rev=1525770&r1=1525769&r2=1525770&view=diff ============================================================================== --- hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt (original) +++ hadoop/common/trunk/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt Tue Sep 24 04:11:15 2013 @@ -494,6 +494,8 @@ Release 2.1.1-beta - 2013-09-23 HDFS-5231. Fix broken links in the document of HDFS Federation. (Haohui Mai via jing9) + HDFS-5249. Fix dumper thread which may die silently. (brandonli) + Release 2.1.0-beta - 2013-08-22 INCOMPATIBLE CHANGES