Browse Source

ZOOKEEPER-973. bind() could fail on Leader because it does not setReuseAddress on its ServerSocket (Harsh J via phunt)

git-svn-id: https://svn.apache.org/repos/asf/zookeeper/trunk@1234974 13f79535-47bb-0310-9956-ffa450edef68
Patrick D. Hunt 13 years ago
parent
commit
568940921e
2 changed files with 7 additions and 1 deletions
  1. 3 0
      CHANGES.txt
  2. 4 1
      src/java/main/org/apache/zookeeper/server/quorum/Leader.java

+ 3 - 0
CHANGES.txt

@@ -101,6 +101,9 @@ BUGFIXES:
   doesn't sleep by checking that the latency of this call is less than 10sec (Alex Shraer via camille)
 
   ZOOKEEPER-1351. invalid test verification in MultiTransactionTest (phunt via camille) 
+
+  ZOOKEEPER-973. bind() could fail on Leader because it does not
+  setReuseAddress on its ServerSocket (Harsh J via phunt)
   
 IMPROVEMENTS:
 

+ 4 - 1
src/java/main/org/apache/zookeeper/server/quorum/Leader.java

@@ -21,6 +21,7 @@ package org.apache.zookeeper.server.quorum;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.net.BindException;
+import java.net.InetSocketAddress;
 import java.net.ServerSocket;
 import java.net.Socket;
 import java.net.SocketAddress;
@@ -131,7 +132,9 @@ public class Leader {
     Leader(QuorumPeer self,LeaderZooKeeperServer zk) throws IOException {
         this.self = self;
         try {
-            ss = new ServerSocket(self.getQuorumAddress().getPort());
+            ss = new ServerSocket();
+            ss.setReuseAddress(true);
+            ss.bind(new InetSocketAddress(self.getQuorumAddress().getPort()));
         } catch (BindException e) {
             LOG.error("Couldn't bind to port "
                     + self.getQuorumAddress().getPort(), e);