From 3bd9ea63df769345a9d02a404cfb61323a4cd7e3 Mon Sep 17 00:00:00 2001 From: Lei Xu Date: Tue, 16 Jan 2018 15:15:11 -0800 Subject: [PATCH] HDFS-13004. TestLeaseRecoveryStriped.testLeaseRecovery is failing when safeLength is 0MB or larger than the test file. (Zsolt Venczel via lei) --- .../org/apache/hadoop/hdfs/StripedFileTestUtil.java | 7 ++++--- .../apache/hadoop/hdfs/TestLeaseRecoveryStriped.java | 11 +++++++---- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/StripedFileTestUtil.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/StripedFileTestUtil.java index 08bf20a3cc..13ca39026d 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/StripedFileTestUtil.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/StripedFileTestUtil.java @@ -363,11 +363,12 @@ static void checkData(DistributedFileSystem dfs, Path srcPath, int length, List> blockGroupList = new ArrayList<>(); LocatedBlocks lbs = dfs.getClient().getLocatedBlocks(srcPath.toString(), 0L, Long.MAX_VALUE); - int expectedNumGroup = 0; + if (length > 0) { - expectedNumGroup = (length - 1) / blkGroupSize + 1; + int expectedNumGroup = (length - 1) / blkGroupSize + 1; + + assertEquals(expectedNumGroup, lbs.getLocatedBlocks().size()); } - assertEquals(expectedNumGroup, lbs.getLocatedBlocks().size()); final ErasureCodingPolicy ecPolicy = dfs.getErasureCodingPolicy(srcPath); final int cellSize = ecPolicy.getCellSize(); diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestLeaseRecoveryStriped.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestLeaseRecoveryStriped.java index 36ac8b3f96..d74f1938ad 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestLeaseRecoveryStriped.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestLeaseRecoveryStriped.java @@ -85,6 +85,7 @@ public class TestLeaseRecoveryStriped { private Configuration conf; private final Path dir = new Path("/" + this.getClass().getSimpleName()); final Path p = new Path(dir, "testfile"); + private final int testFileLength = (stripesPerBlock - 1) * stripeSize; @Before public void setup() throws IOException { @@ -191,17 +192,20 @@ public void testLeaseRecovery() throws Exception { private void runTest(int[] blockLengths, long safeLength) throws Exception { writePartialBlocks(blockLengths); + + int checkDataLength = Math.min(testFileLength, (int)safeLength); + recoverLease(); List oldGS = new ArrayList<>(); oldGS.add(1001L); - StripedFileTestUtil.checkData(dfs, p, (int)safeLength, + StripedFileTestUtil.checkData(dfs, p, checkDataLength, new ArrayList(), oldGS, blockGroupSize); // After recovery, storages are reported by primary DN. we should verify // storages reported by blockReport. cluster.restartNameNode(true); cluster.waitFirstBRCompleted(0, 10000); - StripedFileTestUtil.checkData(dfs, p, (int)safeLength, + StripedFileTestUtil.checkData(dfs, p, checkDataLength, new ArrayList(), oldGS, blockGroupSize); } @@ -219,12 +223,11 @@ private void writePartialBlocks(int[] blockLengths) throws Exception { final FSDataOutputStream out = dfs.create(p); final DFSStripedOutputStream stripedOut = (DFSStripedOutputStream) out .getWrappedStream(); - int length = (stripesPerBlock - 1) * stripeSize; int[] posToKill = getPosToKill(blockLengths); int checkingPos = nextCheckingPos(posToKill, 0); Set stoppedStreamerIndexes = new HashSet<>(); try { - for (int pos = 0; pos < length; pos++) { + for (int pos = 0; pos < testFileLength; pos++) { out.write(StripedFileTestUtil.getByte(pos)); if (pos == checkingPos) { for (int index : getIndexToStop(posToKill, pos)) {