aromanenko-dev commented on a change in pull request #11090: [BEAM-9470]
:sdks:java:io:kinesis:test is flaky
URL: https://github.com/apache/beam/pull/11090#discussion_r391779556
##########
File path:
sdks/java/io/kinesis/src/test/java/org/apache/beam/sdk/io/kinesis/ShardReadersPoolTest.java
##########
@@ -324,10 +325,15 @@ public void shouldCallRateLimitPolicy()
}
}
+ ArgumentCaptor<List<KinesisRecord>> recordsCaptor =
ArgumentCaptor.forClass(List.class);
+ verify(customRateLimitPolicy,
atLeastOnce()).onSuccess(recordsCaptor.capture());
+ List<List<KinesisRecord>> capturedRecords = recordsCaptor.getAllValues();
+ assertThat(capturedRecords).contains(
+ ImmutableList.of(a, b),
+ singletonList(c),
+ singletonList(d),
+ Collections.emptyList()
+ );
verify(customRateLimitPolicy).onThrottle(same(e));
- verify(customRateLimitPolicy).onSuccess(eq(ImmutableList.of(a, b)));
- verify(customRateLimitPolicy).onSuccess(eq(singletonList(c)));
- verify(customRateLimitPolicy).onSuccess(eq(singletonList(d)));
Review comment:
I did some testing on my side and I think that the problem is with using the
same mock of `RateLimitPolicy` for both `ShardRecordsIterator`s. For example,
when failed assertion says that "d" record is absent in `capturedRecords`,
actually I see (using debug output) that it was read with
`shardRecordsIterator.readNextBatch()` in `readLoop()`.
Since, in case of using real `RateLimitPolicy` they will be created per
`readLoop()` thread (right?), then we need to test it in the same way with mock
policies.
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]
With regards,
Apache Git Services