[ 
https://issues.apache.org/jira/browse/FLINK-16387?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17051945#comment-17051945
 ] 

Stephan Ewen commented on FLINK-16387:
--------------------------------------

This is the wrong approach. There should be no production code changes to fix 
tests determinism.

> Use LinkedHashMap for deterministic order in HeapMapState.java
> --------------------------------------------------------------
>
>                 Key: FLINK-16387
>                 URL: https://issues.apache.org/jira/browse/FLINK-16387
>             Project: Flink
>          Issue Type: Bug
>            Reporter: cpugputpu
>            Priority: Minor
>              Labels: pull-request-available
>          Time Spent: 20m
>  Remaining Estimate: 0h
>
> The tests in 
> _org.apache.flink.table.runtime.operators.join.RowTimeBoundedStreamJoinTest#testRowTimeInnerJoinWithCommonBounds_
>  and 
> _org.apache.flink.table.runtime.operators.join.ProcTimeBoundedStreamJoinTest#testProcTimeInnerJoinWithCommonBounds_
>  fail due to a different iteration order of a HashMap. The failure is 
> presented as follows.
> org.junit.internal.ArrayComparisonFailure: output wrong: arrays first 
> differed at element [0]; 
>  expected:<(+|1,1a1,1,1b3)> 
>  but was:<(+|1,1a3,1,1b3)>
>  at 
> org.apache.flink.table.runtime.operators.join.ProcTimeBoundedStreamJoinTest.testProcTimeInnerJoinWithCommonBounds(ProcTimeBoundedStreamJoinTest.java:101_
>  
> The root cause of this failure lies in a HashMap's iterator, which makes no 
> guarantee about the iteration order. A brief stack trace is for your 
> reference:
> ava.util.HashMap$EntrySet.iterator(HashMap.java:1014)
>  
> org.apache.flink.runtime.state.heap.HeapMapState.iterator(HeapMapState.java:161)
>  
> org.apache.flink.runtime.state.UserFacingMapState.iterator(UserFacingMapState.java:95)
>  
> org.apache.flink.table.runtime.operators.join.TimeBoundedStreamJoin.processElement2(TimeBoundedStreamJoin.java:246)
>  
> org.apache.flink.table.runtime.operators.join.ProcTimeBoundedStreamJoin.processElement2(ProcTimeBoundedStreamJoin.java:29)
>  
> org.apache.flink.table.runtime.operators.join.TimeBoundedStreamJoin.processElement2(TimeBoundedStreamJoin.java:52)
>  
> org.apache.flink.streaming.api.operators.co.LegacyKeyedCoProcessOperator.processElement2(LegacyKeyedCoProcessOperator.java:89)
>  
> org.apache.flink.streaming.util.TwoInputStreamOperatorTestHarness.processElement2(TwoInputStreamOperatorTestHarness.java:57)
>  
> org.apache.flink.table.runtime.operators.join.ProcTimeBoundedStreamJoinTest.testProcTimeInnerJoinWithCommonBounds(ProcTimeBoundedStreamJoinTest.java:70)
> The specification about HashMap says that "this class makes no guarantees as 
> to the order of the map; in particular, it does not guarantee that the order 
> will remain constant over time". The documentation is here for your 
> reference: [https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html]
>  
> The fix is to use LinkedHashMap instead of HashMap. In this way, the test 
> will not suffer from failure any more and the code will be more stable, free 
> of this non-deterministic behaviour.
>  



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to