From 2eee19cd1d8e16f0631d78474e387ca4c526f47e Mon Sep 17 00:00:00 2001 From: Zhe Zhang Date: Fri, 5 Jun 2015 13:39:37 -0700 Subject: [PATCH] HDFS-8460. Erasure Coding: stateful read result doesn't match data occasionally because of flawed test. Contributed by Walter Su. --- hadoop-hdfs-project/hadoop-hdfs/CHANGES-HDFS-EC-7285.txt | 3 +++ .../src/test/java/org/apache/hadoop/hdfs/DFSTestUtil.java | 2 ++ .../org/apache/hadoop/hdfs/TestDFSStripedInputStream.java | 5 +++++ 3 files changed, 10 insertions(+) diff --git a/hadoop-hdfs-project/hadoop-hdfs/CHANGES-HDFS-EC-7285.txt b/hadoop-hdfs-project/hadoop-hdfs/CHANGES-HDFS-EC-7285.txt index 9b05d2bc701..61d7a763af5 100755 --- a/hadoop-hdfs-project/hadoop-hdfs/CHANGES-HDFS-EC-7285.txt +++ b/hadoop-hdfs-project/hadoop-hdfs/CHANGES-HDFS-EC-7285.txt @@ -286,3 +286,6 @@ HDFS-8319. Erasure Coding: support decoding for stateful read. (Jing Zhao via zhz) + + HDFS-8460. Erasure Coding: stateful read result doesn't match data + occasionally because of flawed test. (Walter Su via zhz) diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/DFSTestUtil.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/DFSTestUtil.java index db230e32664..b9ded80ac92 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/DFSTestUtil.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/DFSTestUtil.java @@ -1859,6 +1859,7 @@ public class DFSTestUtil { /** * Creates the metadata of a file in striped layout. This method only * manipulates the NameNode state without injecting data to DataNode. + * You should disable periodical heartbeat before use this. * @param file Path of the file to create * @param dir Parent path of the file * @param numBlocks Number of striped block groups to add to the file @@ -1908,6 +1909,7 @@ public class DFSTestUtil { * Adds a striped block group to a file. This method only manipulates NameNode * states of the file and the block without injecting data to DataNode. * It does mimic block reports. + * You should disable periodical heartbeat before use this. * @param dataNodes List DataNodes to host the striped block group * @param previous Previous block in the file * @param numStripes Number of stripes in each block group 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 de43441d671..b53983bc5a8 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 @@ -32,6 +32,8 @@ import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; +import org.apache.hadoop.hdfs.server.datanode.DataNode; +import org.apache.hadoop.hdfs.server.datanode.DataNodeTestUtils; import org.apache.hadoop.hdfs.server.datanode.SimulatedFSDataset; import org.apache.hadoop.hdfs.server.namenode.ErasureCodingSchemaManager; import org.apache.hadoop.hdfs.util.StripedBlockUtil; @@ -71,6 +73,9 @@ public class TestDFSStripedInputStream { cluster = new MiniDFSCluster.Builder(conf).numDataNodes( DATA_BLK_NUM + PARITY_BLK_NUM).build(); cluster.waitActive(); + for (DataNode dn : cluster.getDataNodes()) { + DataNodeTestUtils.setHeartbeatsDisabledForTests(dn, true); + } fs = cluster.getFileSystem(); fs.mkdirs(dirPath); fs.getClient().createErasureCodingZone(dirPath.toString(), null, CELLSIZE);