[ 
https://issues.apache.org/jira/browse/CURATOR-694?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Zili Chen resolved CURATOR-694.
-------------------------------
    Fix Version/s: 5.6.0
                       (was: awaiting-response)
         Assignee: Zili Chen
       Resolution: Fixed

master via e949731759f18f7d747651f6228ed24110367369

> Improve test reliability by resolving nondeterministic order by sorting
> -----------------------------------------------------------------------
>
>                 Key: CURATOR-694
>                 URL: https://issues.apache.org/jira/browse/CURATOR-694
>             Project: Apache Curator
>          Issue Type: Improvement
>          Components: Framework
>    Affects Versions: 5.5.0
>         Environment: # Reproduce
> This error can be reproduced with the 
> [NondexTool](https://github.com/TestingResearchIllinois/NonDex) with the 
> following command (you can try that without modifying the pom, but feel free 
> to use the plugin to protect your project and make it safer 😊 ), and this 
> kind problem is widely documented in [International Dataset of Flaky Tests 
> (IDoFT)](https://github.com/TestingResearchIllinois/idoft)
> ```
> mvn edu.illinois:nondex-maven-plugin:2.1.7-SNAPSHOT:nondex -pl 
> /curator-framework -Dsurefire.useFile=false 
> -Dtest=org.apache.curator.framework.imps.TestReconfiguration#[methodName]
> ```
> Let's make the curator more reliable together 👩🏻‍🔧
>            Reporter: huiyang chi
>            Assignee: Zili Chen
>            Priority: Major
>              Labels: fixed
>             Fix For: 5.6.0
>
>
> h2. {color:#172b4d}The related PR has been opened :{color} 
> [https://github.com/apache/curator/pull/491]
>  
>  # Problem
> For these tests:
> [INFO] org.apache.curator.framework.imps.TestReconfiguration#testAdd
> [INFO] 
> org.apache.curator.framework.imps.TestReconfiguration#testNewMembersWithEmptyList
> [INFO] org.apache.curator.framework.imps.TestReconfiguration#testAddAsync
> [INFO] org.apache.curator.framework.imps.TestReconfiguration#testAddAndRemove
> [INFO] 
> org.apache.curator.framework.imps.TestReconfiguration#testAddAndRemoveWithEmptyList
> [INFO] 
> org.apache.curator.framework.imps.TestReconfiguration#testBasicGetConfig
> [INFO] 
> org.apache.curator.framework.imps.TestReconfiguration#testRemoveWithChroot
> They assume the order of the QuorumServer was same, but this is not necessary 
> the case because QuorumMaj aggressively use Map to store it's data
> ```
>     private Map<Long, QuorumPeer.QuorumServer> allMembers = new HashMap();
>     private HashMap<Long, QuorumPeer.QuorumServer> votingMembers = new 
> HashMap();
>     private HashMap<Long, QuorumPeer.QuorumServer> observingMembers = new 
> HashMap();
> ```
> so because the order of the Map is indeterministic according to the [Oracle's 
> official 
> document]([https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html#:~:text=This%20class%20makes%20no%20guarantees%20as%20to%20the%20order%20of%20the%20map]),
>  so this might trigger error message in different environments:
> ```
> [ERROR] org.apache.curator.framework.imps.TestReconfiguration.testAdd  Time 
> elapsed: 0.641 s  <<< FAILURE!
> org.opentest4j.AssertionFailedError: expected: 
> <127.0.0.1:55254,127.0.0.1:55251,127.0.0.1:55248,0.0.0.0:55268> but was: 
> <0.0.0.0:55268,127.0.0.1:55251,127.0.0.1:55248,127.0.0.1:55254>
>         at 
> org.apache.curator.framework.imps.TestReconfiguration.testAdd(TestReconfiguration.java:281)
> ```
>  # Solution
> So the most precise way to deal with that would be change the 
> configToConnectionString method to make sure when we serialize the 
> configurations, we always get the same result, so that the tests will be safe 
> in different environment (because the order of the map is undefined)



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to