Skip to content

Commit 6ca38f8

Browse files
committed
HADOOP-18355. Update previous index properly while validating overlapping ranges.
part of HADOOP-18103.
1 parent c92ff0b commit 6ca38f8

File tree

2 files changed

+33
-0
lines changed

2 files changed

+33
-0
lines changed

hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/VectoredReadUtils.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -210,6 +210,7 @@ public static List<? extends FileRange> validateNonOverlappingAndReturnSortedRan
210210
if (sortedRanges[i].getOffset() < prev.getOffset() + prev.getLength()) {
211211
throw new UnsupportedOperationException("Overlapping ranges are not supported");
212212
}
213+
prev = sortedRanges[i];
213214
}
214215
return Arrays.asList(sortedRanges);
215216
}

hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/TestVectoredReadUtils.java

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@
3535
import org.apache.hadoop.test.HadoopTestBase;
3636

3737
import static org.apache.hadoop.fs.VectoredReadUtils.sortRanges;
38+
import static org.apache.hadoop.fs.VectoredReadUtils.validateNonOverlappingAndReturnSortedRanges;
39+
import static org.apache.hadoop.test.LambdaTestUtils.intercept;
3840
import static org.apache.hadoop.test.MoreAsserts.assertFutureCompletedSuccessfully;
3941
import static org.apache.hadoop.test.MoreAsserts.assertFutureFailedExceptionally;
4042

@@ -231,6 +233,36 @@ public void testSortAndMergeMoreCases() throws Exception {
231233

232234
}
233235

236+
@Test
237+
public void testValidateOverlappingRanges() throws Exception {
238+
List<FileRange> input = Arrays.asList(
239+
FileRange.createFileRange(100, 100),
240+
FileRange.createFileRange(200, 100),
241+
FileRange.createFileRange(250, 100)
242+
);
243+
244+
intercept(UnsupportedOperationException.class,
245+
() -> validateNonOverlappingAndReturnSortedRanges(input));
246+
247+
List<FileRange> input1 = Arrays.asList(
248+
FileRange.createFileRange(100, 100),
249+
FileRange.createFileRange(500, 100),
250+
FileRange.createFileRange(1000, 100),
251+
FileRange.createFileRange(1000, 100)
252+
);
253+
254+
intercept(UnsupportedOperationException.class,
255+
() -> validateNonOverlappingAndReturnSortedRanges(input1));
256+
257+
List<FileRange> input2 = Arrays.asList(
258+
FileRange.createFileRange(100, 100),
259+
FileRange.createFileRange(200, 100),
260+
FileRange.createFileRange(300, 100)
261+
);
262+
// consecutive ranges should pass.
263+
validateNonOverlappingAndReturnSortedRanges(input2);
264+
}
265+
234266
@Test
235267
public void testMaxSizeZeroDisablesMering() throws Exception {
236268
List<FileRange> randomRanges = Arrays.asList(

0 commit comments

Comments
 (0)