[ 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)