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)
   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-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:
 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.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.IOException;
 import java.net.BindException;
 import java.net.BindException;
+import java.net.InetSocketAddress;
 import java.net.ServerSocket;
 import java.net.ServerSocket;
 import java.net.Socket;
 import java.net.Socket;
 import java.net.SocketAddress;
 import java.net.SocketAddress;
@@ -131,7 +132,9 @@ public class Leader {
     Leader(QuorumPeer self,LeaderZooKeeperServer zk) throws IOException {
     Leader(QuorumPeer self,LeaderZooKeeperServer zk) throws IOException {
         this.self = self;
         this.self = self;
         try {
         try {
-            ss = new ServerSocket(self.getQuorumAddress().getPort());
+            ss = new ServerSocket();
+            ss.setReuseAddress(true);
+            ss.bind(new InetSocketAddress(self.getQuorumAddress().getPort()));
         } catch (BindException e) {
         } catch (BindException e) {
             LOG.error("Couldn't bind to port "
             LOG.error("Couldn't bind to port "
                     + self.getQuorumAddress().getPort(), e);
                     + self.getQuorumAddress().getPort(), e);