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