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

ASF GitHub Bot commented on ZOOKEEPER-2784:
-------------------------------------------

Github user eribeiro commented on a diff in the pull request:

    https://github.com/apache/zookeeper/pull/257#discussion_r117527100
  
    --- Diff: src/java/test/org/apache/zookeeper/test/CnxManagerTest.java ---
    @@ -351,15 +351,55 @@ public void testSocketTimeout() throws Exception {
             LOG.info("Election port: " + port);
             Thread.sleep(1000);
     
    -        Socket sock = new Socket();
    -        sock.connect(peers.get(1L).electionAddr, 5000);
    -        long begin = Time.currentElapsedTime();
    -        // Read without sending data. Verify timeout.
    -        cnxManager.receiveConnection(sock);
    -        long end = Time.currentElapsedTime();
    -        if((end - begin) > ((peer.getSyncLimit() * peer.getTickTime()) + 
500)) Assert.fail("Waited more than necessary");
    -        cnxManager.halt();
    -        Assert.assertFalse(cnxManager.listener.isAlive());
    +        try (Socket sock = new Socket()) {
    +            sock.connect(peers.get(1L).electionAddr, 5000);
    +            long begin = Time.currentElapsedTime();
    +            // Read without sending data. Verify timeout.
    +            cnxManager.receiveConnection(sock);
    +            long end = Time.currentElapsedTime();
    +            if ((end - begin) > ((peer.getSyncLimit() * 
peer.getTickTime()) + 500))
    +                Assert.fail("Waited more than necessary");
    +            cnxManager.halt();
    +            Assert.assertFalse(cnxManager.listener.isAlive());
    +        }
    +    }
    +
    +    /*
    +     * Test if a duplicate SID appears in the cluster
    +     */
    +    @Test
    +    public void testSameSID() throws Exception {
    +        QuorumPeer peer = new QuorumPeer(peers, peerTmpdir[2], 
peerTmpdir[2], peerClientPort[2], 3, 2, 2000, 2, 2);
    +        QuorumCnxManager cnxManager = new QuorumCnxManager(peer);
    +        QuorumCnxManager.Listener listener = cnxManager.listener;
    +        if (listener != null) {
    +            Thread.UncaughtExceptionHandler handler = new 
Thread.UncaughtExceptionHandler() {
    +                @Override
    +                public void uncaughtException(Thread th, Throwable ex) {
    +                    if (ex instanceof RuntimeException) {
    +                        String msg = ex.getMessage();
    +                        LOG.error(msg);
    +                        
Assert.assertEquals("org.apache.zookeeper.server.quorum.QuorumPeerConfig$ConfigException:"
 +
    +                                " Appearing duplicate SID: 2", msg);
    +                    }
    +                }
    +            };
    +            listener.setUncaughtExceptionHandler(handler);
    +            listener.start();
    +        } else {
    +            LOG.error("Null listener when initializing cnx manager");
    +        }
    +        try (Socket sock = new Socket()) {
    +            InetSocketAddress electionAddr = 
peers.get(peer.getId()).electionAddr;
    +            LOG.info("Creating socket connection, host: {}, port: {}",
    +                    electionAddr.getHostString(), electionAddr.getPort());
    +            sock.connect(electionAddr, 30000);
    --- End diff --
    
    The timeout here is way to big (30000 ms) with relation to the other tests 
(5000 ms).


> Add some limitations on code level for `SID` to avoid configuration problem
> ---------------------------------------------------------------------------
>
>                 Key: ZOOKEEPER-2784
>                 URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2784
>             Project: ZooKeeper
>          Issue Type: Improvement
>          Components: quorum
>    Affects Versions: 3.5.2
>            Reporter: Benedict Jin
>             Fix For: 3.6.0
>
>   Original Estimate: 168h
>  Remaining Estimate: 168h
>
> As so far, `QuorumCnxManager#receiveConnection` cannot find out the same 
> `SID` problem, then the Zookeeper cluster will start successfully. But the 
> cluster is not health, and it will throw some problem like `not 
> synchronized`. So, i thought we should add some limitations on code level for 
> `SID` to find those configuration problem more early.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Reply via email to