[
https://issues.apache.org/jira/browse/FLINK-25094?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Jinzhong Li updated FLINK-25094:
--------------------------------
Description:
In LatencyTrackingMapStateTest,
iterator()/entries().iterator()/keys().iterator()/values().iterator() will be
invoke before verifyIterator method is invoked, this is,
iterator()/... will be invode before putting the test data into
latencyTrackingMapState. So the verify code is not actually executed since
"iterator.hasNext()" is always false.
{code:java}
private <E> void verifyIterator(
LatencyTrackingMapState<Integer, VoidNamespace, Long, Double>
latencyTrackingState,
LatencyTrackingMapState.MapStateLatencyMetrics
latencyTrackingStateMetric,
Iterator<E> iterator,
boolean removeIterator)
throws Exception {
ThreadLocalRandom random = ThreadLocalRandom.current();
for (int index = 1; index <= SAMPLE_INTERVAL; index++) {
latencyTrackingState.put((long) index, random.nextDouble());
}
int count = 1;
while (iterator.hasNext()) {
int expectedResult = count == SAMPLE_INTERVAL ? 0 : count;
assertEquals(expectedResult,
latencyTrackingStateMetric.getIteratorHasNextCount());
iterator.next();
assertEquals(expectedResult,
latencyTrackingStateMetric.getIteratorNextCount());
if (removeIterator) {
iterator.remove();
assertEquals(expectedResult,
latencyTrackingStateMetric.getIteratorRemoveCount());
}
count += 1;
}
// as we call #hasNext on more time than #next, to avoid complex check,
just reset hasNext
// counter in the end.
latencyTrackingStateMetric.resetIteratorHasNextCount();
latencyTrackingState.clear();
} {code}
was:
In LatencyTrackingMapStateTest,
iterator()/entries().iterator()/keys().iterator()/values().iterator() will be
invoke before verifyIterator method is invoked, this is,
iterator()/... will be invode before putting the test data into
latencyTrackingMapState. So the verify code is not actually executed becase
"iterator.hasNext()" is always false.
{code:java}
private <E> void verifyIterator(
LatencyTrackingMapState<Integer, VoidNamespace, Long, Double>
latencyTrackingState,
LatencyTrackingMapState.MapStateLatencyMetrics
latencyTrackingStateMetric,
Iterator<E> iterator,
boolean removeIterator)
throws Exception {
ThreadLocalRandom random = ThreadLocalRandom.current();
for (int index = 1; index <= SAMPLE_INTERVAL; index++) {
latencyTrackingState.put((long) index, random.nextDouble());
}
int count = 1;
while (iterator.hasNext()) {
int expectedResult = count == SAMPLE_INTERVAL ? 0 : count;
assertEquals(expectedResult,
latencyTrackingStateMetric.getIteratorHasNextCount());
iterator.next();
assertEquals(expectedResult,
latencyTrackingStateMetric.getIteratorNextCount());
if (removeIterator) {
iterator.remove();
assertEquals(expectedResult,
latencyTrackingStateMetric.getIteratorRemoveCount());
}
count += 1;
}
// as we call #hasNext on more time than #next, to avoid complex check,
just reset hasNext
// counter in the end.
latencyTrackingStateMetric.resetIteratorHasNextCount();
latencyTrackingState.clear();
} {code}
> The verify code in LatencyTrackingMapStateTest#verifyIterator is not actually
> executed
> --------------------------------------------------------------------------------------
>
> Key: FLINK-25094
> URL: https://issues.apache.org/jira/browse/FLINK-25094
> Project: Flink
> Issue Type: Bug
> Components: Runtime / State Backends, Tests
> Reporter: Jinzhong Li
> Priority: Minor
>
> In LatencyTrackingMapStateTest,
> iterator()/entries().iterator()/keys().iterator()/values().iterator() will be
> invoke before verifyIterator method is invoked, this is,
> iterator()/... will be invode before putting the test data into
> latencyTrackingMapState. So the verify code is not actually executed since
> "iterator.hasNext()" is always false.
> {code:java}
> private <E> void verifyIterator(
> LatencyTrackingMapState<Integer, VoidNamespace, Long, Double>
> latencyTrackingState,
> LatencyTrackingMapState.MapStateLatencyMetrics
> latencyTrackingStateMetric,
> Iterator<E> iterator,
> boolean removeIterator)
> throws Exception {
> ThreadLocalRandom random = ThreadLocalRandom.current();
> for (int index = 1; index <= SAMPLE_INTERVAL; index++) {
> latencyTrackingState.put((long) index, random.nextDouble());
> }
> int count = 1;
> while (iterator.hasNext()) {
> int expectedResult = count == SAMPLE_INTERVAL ? 0 : count;
> assertEquals(expectedResult,
> latencyTrackingStateMetric.getIteratorHasNextCount());
> iterator.next();
> assertEquals(expectedResult,
> latencyTrackingStateMetric.getIteratorNextCount());
> if (removeIterator) {
> iterator.remove();
> assertEquals(expectedResult,
> latencyTrackingStateMetric.getIteratorRemoveCount());
> }
> count += 1;
> }
> // as we call #hasNext on more time than #next, to avoid complex check,
> just reset hasNext
> // counter in the end.
> latencyTrackingStateMetric.resetIteratorHasNextCount();
> latencyTrackingState.clear();
> } {code}
--
This message was sent by Atlassian Jira
(v8.20.1#820001)