Yifan Cai created CASSANALYTICS-180:
---------------------------------------
Summary: TokenPartitioner fails to detect range gap in reader
Key: CASSANALYTICS-180
URL: https://issues.apache.org/jira/browse/CASSANALYTICS-180
Project: Apache Cassandra Analytics
Issue Type: Bug
Components: Reader
Reporter: Yifan Cai
Found the minor bug when inspecting the code. The implementation filters out
the non-empty ranges wrongly when detecting gaps in the range split.
Below is the test to prove the bug.
It is a minor bug because no correctness is affected; the range split step is
mathematically gap-free today.
It is still worth fixing because the check itself is broken and won't catch any
future regression that reintroduces a coverage gap.
{code:java}
@Test
public void testValidateCompleteRangeCoverageFailsToDetectGap()
{
Partitioner partitioner = Partitioner.Murmur3Partitioner;
List<Range<BigInteger>> subRangesWithGap = Arrays.asList(
Range.openClosed(partitioner.minToken(),
partitioner.minToken().add(BigInteger.ONE)),
Range.openClosed(partitioner.minToken().add(BigInteger.ONE).add(BigInteger.TEN),
partitioner.maxToken()));
// leaves (minToken()+1, minToken()+11] uncovered -- a real, non-empty gap
RangeSet<BigInteger> missingRangeSet = TreeRangeSet.create();
missingRangeSet.add(Range.closed(partitioner.minToken(),
partitioner.maxToken()));
subRangesWithGap.forEach(missingRangeSet::remove);
// This mirrors TokenPartitioner#validateCompleteRangeCoverage exactly
List<Range<BigInteger>> missingRanges = missingRangeSet.asRanges().stream()
.filter(Range::isEmpty)
.collect(Collectors.toList());
// BUG: missingRanges is empty here even though a real gap exists,
// because the filter keeps only degenerate zero-width ranges instead of
dropping them.
assertThat(missingRanges).isEmpty(); // passes -- but it should have caught
the gap and failed
}
{code}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]