From 6ca38f8db737dc8bc0927c4d1fd6b536493751b1 Mon Sep 17 00:00:00 2001 From: Mukund Thakur Date: Wed, 27 Jul 2022 16:27:02 -0500 Subject: [PATCH 1/2] HADOOP-18355. Update previous index properly while validating overlapping ranges. part of HADOOP-18103. --- .../apache/hadoop/fs/VectoredReadUtils.java | 1 + .../hadoop/fs/TestVectoredReadUtils.java | 32 +++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/VectoredReadUtils.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/VectoredReadUtils.java index 64107f1a18f89..9e1551e8a9000 100644 --- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/VectoredReadUtils.java +++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/VectoredReadUtils.java @@ -210,6 +210,7 @@ public static List validateNonOverlappingAndReturnSortedRan if (sortedRanges[i].getOffset() < prev.getOffset() + prev.getLength()) { throw new UnsupportedOperationException("Overlapping ranges are not supported"); } + prev = sortedRanges[i]; } return Arrays.asList(sortedRanges); } diff --git a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/TestVectoredReadUtils.java b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/TestVectoredReadUtils.java index 5d08b02e113d5..6bec41786c37b 100644 --- a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/TestVectoredReadUtils.java +++ b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/TestVectoredReadUtils.java @@ -35,6 +35,8 @@ import org.apache.hadoop.test.HadoopTestBase; import static org.apache.hadoop.fs.VectoredReadUtils.sortRanges; +import static org.apache.hadoop.fs.VectoredReadUtils.validateNonOverlappingAndReturnSortedRanges; +import static org.apache.hadoop.test.LambdaTestUtils.intercept; import static org.apache.hadoop.test.MoreAsserts.assertFutureCompletedSuccessfully; import static org.apache.hadoop.test.MoreAsserts.assertFutureFailedExceptionally; @@ -231,6 +233,36 @@ public void testSortAndMergeMoreCases() throws Exception { } + @Test + public void testValidateOverlappingRanges() throws Exception { + List input = Arrays.asList( + FileRange.createFileRange(100, 100), + FileRange.createFileRange(200, 100), + FileRange.createFileRange(250, 100) + ); + + intercept(UnsupportedOperationException.class, + () -> validateNonOverlappingAndReturnSortedRanges(input)); + + List input1 = Arrays.asList( + FileRange.createFileRange(100, 100), + FileRange.createFileRange(500, 100), + FileRange.createFileRange(1000, 100), + FileRange.createFileRange(1000, 100) + ); + + intercept(UnsupportedOperationException.class, + () -> validateNonOverlappingAndReturnSortedRanges(input1)); + + List input2 = Arrays.asList( + FileRange.createFileRange(100, 100), + FileRange.createFileRange(200, 100), + FileRange.createFileRange(300, 100) + ); + // consecutive ranges should pass. + validateNonOverlappingAndReturnSortedRanges(input2); + } + @Test public void testMaxSizeZeroDisablesMering() throws Exception { List randomRanges = Arrays.asList( From 5f1b5192a795edc7c2dd470617d092c91a21db11 Mon Sep 17 00:00:00 2001 From: Mukund Thakur Date: Tue, 2 Aug 2022 15:36:56 -0500 Subject: [PATCH 2/2] Checkstyle --- .../test/java/org/apache/hadoop/fs/TestVectoredReadUtils.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/TestVectoredReadUtils.java b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/TestVectoredReadUtils.java index 6bec41786c37b..f473036d7e757 100644 --- a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/TestVectoredReadUtils.java +++ b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/TestVectoredReadUtils.java @@ -242,7 +242,7 @@ public void testValidateOverlappingRanges() throws Exception { ); intercept(UnsupportedOperationException.class, - () -> validateNonOverlappingAndReturnSortedRanges(input)); + () -> validateNonOverlappingAndReturnSortedRanges(input)); List input1 = Arrays.asList( FileRange.createFileRange(100, 100), @@ -252,7 +252,7 @@ public void testValidateOverlappingRanges() throws Exception { ); intercept(UnsupportedOperationException.class, - () -> validateNonOverlappingAndReturnSortedRanges(input1)); + () -> validateNonOverlappingAndReturnSortedRanges(input1)); List input2 = Arrays.asList( FileRange.createFileRange(100, 100),