[
https://issues.apache.org/jira/browse/FLINK-20908?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17262145#comment-17262145
]
Danny Cranmer commented on FLINK-20908:
---------------------------------------
This test captures the current timestamp and checks that a timestamp generated
later is >= now. The failed assertion is comparing an initial {{Instant.now()}}
created
[here|https://github.com/apache/flink/blob/0350bf105c41e92599fc64952610187d2385eb28/flink-connectors/flink-connector-kinesis/src/test/java/org/apache/flink/streaming/connectors/kinesis/internals/ShardConsumerFanOutTest.java#L61]
with a subsequent {{new Date()}} created
[here|https://github.com/apache/flink/blob/0350bf105c41e92599fc64952610187d2385eb28/flink-connectors/flink-connector-kinesis/src/main/java/org/apache/flink/streaming/connectors/kinesis/util/AWSUtil.java#L323]
and converted to an {{Instant}}
[here|https://github.com/apache/flink/blob/0350bf105c41e92599fc64952610187d2385eb28/flink-connectors/flink-connector-kinesis/src/main/java/org/apache/flink/streaming/connectors/kinesis/internals/publisher/fanout/FanOutRecordPublisher.java#L263].
{{new Date()}} delegates to
[System.currentTimeMillis()|https://docs.oracle.com/javase/8/docs/api/java/util/Date.html#Date--]
and {{Instant.now()}} will use {{System.currentTimeMillis()}} or [a higher
resolution clock if
available|https://docs.oracle.com/javase/8/docs/api/java/time/Instant.html#now--].
Since both timestamps are created sequentially in the same thread and this
test usually passes, it could be one of the following problems:
1. System clock change: If the system clock changes between invocations, for
example due to NTC sync, then the test could fail. To mitigate this we could
relax or remove the failing assertion. Since the test is already testing that
the starting position has been transformed on the [preceding
line|https://github.com/apache/flink/blob/0350bf105c41e92599fc64952610187d2385eb28/flink-connectors/flink-connector-kinesis/src/test/java/org/apache/flink/streaming/connectors/kinesis/internals/ShardConsumerFanOutTest.java#L70],
removing the assertion is an option
2. {{Instant.now()}} could be delegating to a higher resolution clock with a
different accuracy. To mitigate this we can change the test to generate the
timestamp using the same mechanism as the real code. Switch {{Instant.now()}}
to {{new Date().toInstant()}}.
In any case, updating the assertion message is a good idea.
Feedback appreciated and I will raise a PR. I am inclined to implement option 2
and keep an eye on the test for stability.
> ShardConsumerFanOutTest.testStartFromLatestIsTranslatedToTimestamp test
> failed with AssertionError
> --------------------------------------------------------------------------------------------------
>
> Key: FLINK-20908
> URL: https://issues.apache.org/jira/browse/FLINK-20908
> Project: Flink
> Issue Type: Bug
> Components: Connectors / Kinesis
> Affects Versions: 1.12.0
> Reporter: Huang Xingbo
> Priority: Major
> Labels: test-stability
>
> [https://dev.azure.com/apache-flink/apache-flink/_build/results?buildId=11848&view=logs&j=e9af9cde-9a65-5281-a58e-2c8511d36983&t=b6c4efed-9c7d-55ea-03a9-9bd7d5b08e4c]
> {code:java}
> 2021-01-09T23:18:51.2867479Z [ERROR] Tests run: 10, Failures: 1, Errors: 0,
> Skipped: 0, Time elapsed: 1.28 s <<< FAILURE! - in
> org.apache.flink.streaming.connectors.kinesis.internals.ShardConsumerFanOutTest
> 2021-01-09T23:18:51.2868484Z [ERROR]
> testStartFromLatestIsTranslatedToTimestamp(org.apache.flink.streaming.connectors.kinesis.internals.ShardConsumerFanOutTest)
> Time elapsed: 0.011 s <<< FAILURE!
> 2021-01-09T23:18:51.2869144Z java.lang.AssertionError
> 2021-01-09T23:18:51.2869443Z at org.junit.Assert.fail(Assert.java:86)
> 2021-01-09T23:18:51.2869767Z at org.junit.Assert.assertTrue(Assert.java:41)
> 2021-01-09T23:18:51.2870094Z at org.junit.Assert.assertTrue(Assert.java:52)
> 2021-01-09T23:18:51.2870610Z at
> org.apache.flink.streaming.connectors.kinesis.internals.ShardConsumerFanOutTest.testStartFromLatestIsTranslatedToTimestamp(ShardConsumerFanOutTest.java:71)
> 2021-01-09T23:18:51.2871179Z at
> java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 2021-01-09T23:18:51.2871933Z at
> java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
> 2021-01-09T23:18:51.2872454Z at
> java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> 2021-01-09T23:18:51.2872919Z at
> java.base/java.lang.reflect.Method.invoke(Method.java:566)
> 2021-01-09T23:18:51.2873344Z at
> org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
> 2021-01-09T23:18:51.2873810Z at
> org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
> 2021-01-09T23:18:51.2874600Z at
> org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
> 2021-01-09T23:18:51.2875239Z at
> org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
> 2021-01-09T23:18:51.2875656Z at
> org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
> 2021-01-09T23:18:51.2876089Z at
> org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
> 2021-01-09T23:18:51.2876561Z at
> org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
> 2021-01-09T23:18:51.2876965Z at
> org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
> 2021-01-09T23:18:51.2877408Z at
> org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
> 2021-01-09T23:18:51.2877813Z at
> org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
> 2021-01-09T23:18:51.2878208Z at
> org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
> 2021-01-09T23:18:51.2878682Z at
> org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
> 2021-01-09T23:18:51.2879070Z at
> org.junit.runners.ParentRunner.run(ParentRunner.java:363)
> 2021-01-09T23:18:51.2879473Z at
> org.junit.runners.Suite.runChild(Suite.java:128)
> 2021-01-09T23:18:51.2879818Z at
> org.junit.runners.Suite.runChild(Suite.java:27)
> 2021-01-09T23:18:51.2880186Z at
> org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
> 2021-01-09T23:18:51.2880561Z at
> org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
> 2021-01-09T23:18:51.2880977Z at
> org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
> 2021-01-09T23:18:51.2881381Z at
> org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
> 2021-01-09T23:18:51.2881762Z at
> org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
> 2021-01-09T23:18:51.2882155Z at
> org.junit.runners.ParentRunner.run(ParentRunner.java:363)
> 2021-01-09T23:18:51.2882690Z at
> org.apache.maven.surefire.junitcore.JUnitCore.run(JUnitCore.java:55)
> 2021-01-09T23:18:51.2883178Z at
> org.apache.maven.surefire.junitcore.JUnitCoreWrapper.createRequestAndRun(JUnitCoreWrapper.java:137)
> 2021-01-09T23:18:51.2883704Z at
> org.apache.maven.surefire.junitcore.JUnitCoreWrapper.executeLazy(JUnitCoreWrapper.java:119)
> 2021-01-09T23:18:51.2884186Z at
> org.apache.maven.surefire.junitcore.JUnitCoreWrapper.execute(JUnitCoreWrapper.java:87)
> 2021-01-09T23:18:51.2884774Z at
> org.apache.maven.surefire.junitcore.JUnitCoreWrapper.execute(JUnitCoreWrapper.java:75)
> 2021-01-09T23:18:51.2885431Z at
> org.apache.maven.surefire.junitcore.JUnitCoreProvider.invoke(JUnitCoreProvider.java:158)
> 2021-01-09T23:18:51.2886077Z at
> org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:384)
> 2021-01-09T23:18:51.2886597Z at
> org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:345)
> 2021-01-09T23:18:51.2887072Z at
> org.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:126)
> 2021-01-09T23:18:51.2887533Z at
> org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:418)
> {code}
--
This message was sent by Atlassian Jira
(v8.3.4#803005)