From 360a4e5f0344d09a5e30bc0389888568de768caf Mon Sep 17 00:00:00 2001 From: Brandon Li Date: Tue, 24 Sep 2013 04:19:22 +0000 Subject: [PATCH] HDFS-5249. Merging change r1525770 from trunk git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/branches/branch-2@1525771 13f79535-47bb-0310-9956-ffa450edef68 --- .../hadoop/hdfs/nfs/nfs3/OpenFileCtx.java | 40 ++++++++++++++----- hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt | 2 + 2 files changed, 31 insertions(+), 11 deletions(-) diff --git a/hadoop-hdfs-project/hadoop-hdfs-nfs/src/main/java/org/apache/hadoop/hdfs/nfs/nfs3/OpenFileCtx.java b/hadoop-hdfs-project/hadoop-hdfs-nfs/src/main/java/org/apache/hadoop/hdfs/nfs/nfs3/OpenFileCtx.java index fe725b675e9..a1fd8afdf01 100644 --- a/hadoop-hdfs-project/hadoop-hdfs-nfs/src/main/java/org/apache/hadoop/hdfs/nfs/nfs3/OpenFileCtx.java +++ b/hadoop-hdfs-project/hadoop-hdfs-nfs/src/main/java/org/apache/hadoop/hdfs/nfs/nfs3/OpenFileCtx.java @@ -201,9 +201,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); @@ -241,6 +241,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) { @@ -264,16 +268,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); } } } diff --git a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt index 8d25cddf9eb..15aa5efd41e 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt +++ b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt @@ -256,6 +256,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