Repository: hadoop Updated Branches: refs/heads/YARN-5881 95a819343 -> 8cc00b7f7 (forced update)
HDFS-12606. When using native decoder, DFSStripedStream.close crashes JVM after being called multiple times. (Lei (Eddy) Xu) Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/46644319 Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/46644319 Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/46644319 Branch: refs/heads/YARN-5881 Commit: 46644319e1b3295ddbc7597c060956bf46487d11 Parents: 6d6ca4c Author: Lei Xu <[email protected]> Authored: Mon Oct 9 10:08:30 2017 -0700 Committer: Lei Xu <[email protected]> Committed: Mon Oct 9 10:08:30 2017 -0700 ---------------------------------------------------------------------- .../org/apache/hadoop/hdfs/DFSStripedInputStream.java | 7 +++++-- .../apache/hadoop/hdfs/TestDFSStripedInputStream.java | 13 +++++++++++++ 2 files changed, 18 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hadoop/blob/46644319/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/DFSStripedInputStream.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/DFSStripedInputStream.java b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/DFSStripedInputStream.java index d4d0646..e7d90ed 100644 --- a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/DFSStripedInputStream.java +++ b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/DFSStripedInputStream.java @@ -68,7 +68,7 @@ public class DFSStripedInputStream extends DFSInputStream { private ByteBuffer curStripeBuf; private ByteBuffer parityBuf; private final ErasureCodingPolicy ecPolicy; - private final RawErasureDecoder decoder; + private RawErasureDecoder decoder; /** * Indicate the start/end offset of the current buffered stripe in the @@ -188,7 +188,10 @@ public class DFSStripedInputStream extends DFSInputStream { BUFFER_POOL.putBuffer(parityBuf); parityBuf = null; } - decoder.release(); + if (decoder != null) { + decoder.release(); + decoder = null; + } } } http://git-wip-us.apache.org/repos/asf/hadoop/blob/46644319/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestDFSStripedInputStream.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestDFSStripedInputStream.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestDFSStripedInputStream.java index f94b7ab..de276a9 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestDFSStripedInputStream.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestDFSStripedInputStream.java @@ -491,4 +491,17 @@ public class TestDFSStripedInputStream { assertEquals(readSize, done); assertArrayEquals(expected, readBuffer); } + + @Test + public void testIdempotentClose() throws Exception { + final int numBlocks = 2; + DFSTestUtil.createStripedFile(cluster, filePath, null, numBlocks, + stripesPerBlock, false, ecPolicy); + + try (DFSInputStream in = fs.getClient().open(filePath.toString())) { + assertTrue(in instanceof DFSStripedInputStream); + // Close twice + in.close(); + } + } } --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
