You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@zookeeper.apache.org by ra...@apache.org on 2016/10/26 02:35:58 UTC
zookeeper git commit: ZOOKEEPER-2442: Socket leak in QuorumCnxManager
connectOne (Michael Han via rakeshr)
Repository: zookeeper
Updated Branches:
refs/heads/branch-3.5 4eeb90dd1 -> 6bd38e3d8
ZOOKEEPER-2442: Socket leak in QuorumCnxManager connectOne
(Michael Han via rakeshr)
Project: http://git-wip-us.apache.org/repos/asf/zookeeper/repo
Commit: http://git-wip-us.apache.org/repos/asf/zookeeper/commit/6bd38e3d
Tree: http://git-wip-us.apache.org/repos/asf/zookeeper/tree/6bd38e3d
Diff: http://git-wip-us.apache.org/repos/asf/zookeeper/diff/6bd38e3d
Branch: refs/heads/branch-3.5
Commit: 6bd38e3d89ecc03285459be3e511d32f487ced0c
Parents: 4eeb90d
Author: Rakesh Radhakrishnan <ra...@apache.org>
Authored: Wed Oct 26 08:02:54 2016 +0530
Committer: Rakesh Radhakrishnan <ra...@apache.org>
Committed: Wed Oct 26 08:02:54 2016 +0530
----------------------------------------------------------------------
CHANGES.txt | 3 ++
.../server/quorum/QuorumCnxManager.java | 42 +++++++++-----------
2 files changed, 22 insertions(+), 23 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/zookeeper/blob/6bd38e3d/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 9dd5729..6e05bfa 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -74,6 +74,9 @@ BUGFIXES:
ZOOKEEPER-2606: SaslServerCallbackHandler#handleAuthorizeCallback() should log
the exception (Ted Yu via fpj)
+ ZOOKEEPER-2442: Socket leak in QuorumCnxManager connectOne
+ (Michael Han via rakeshr)
+
IMPROVEMENTS:
ZOOKEEPER-2505: Use shared library instead of static library in C
http://git-wip-us.apache.org/repos/asf/zookeeper/blob/6bd38e3d/src/java/main/org/apache/zookeeper/server/quorum/QuorumCnxManager.java
----------------------------------------------------------------------
diff --git a/src/java/main/org/apache/zookeeper/server/quorum/QuorumCnxManager.java b/src/java/main/org/apache/zookeeper/server/quorum/QuorumCnxManager.java
index a06dde8..58c159b 100644
--- a/src/java/main/org/apache/zookeeper/server/quorum/QuorumCnxManager.java
+++ b/src/java/main/org/apache/zookeeper/server/quorum/QuorumCnxManager.java
@@ -237,9 +237,7 @@ public class QuorumCnxManager {
* @param sid
*/
public void testInitiateConnection(long sid) throws Exception {
- if (LOG.isDebugEnabled()) {
- LOG.debug("Opening channel to server " + sid);
- }
+ LOG.debug("Opening channel to server " + sid);
Socket sock = new Socket();
setSockOpts(sock);
sock.connect(self.getVotingView().get(sid).electionAddr, cnxTO);
@@ -434,17 +432,14 @@ public class QuorumCnxManager {
LOG.debug("There is a connection already for server " + sid);
return true;
}
- try {
- if (LOG.isDebugEnabled()) {
- LOG.debug("Opening channel to server " + sid);
- }
- Socket sock = new Socket();
+ Socket sock = null;
+ try {
+ LOG.debug("Opening channel to server " + sid);
+ sock = new Socket();
setSockOpts(sock);
sock.connect(electionAddr, cnxTO);
- if (LOG.isDebugEnabled()) {
- LOG.debug("Connected to server " + sid);
- }
+ LOG.debug("Connected to server " + sid);
initiateConnection(sock, sid);
return true;
} catch (UnresolvedAddressException e) {
@@ -454,11 +449,13 @@ public class QuorumCnxManager {
// detail.
LOG.warn("Cannot open channel to " + sid
+ " at election address " + electionAddr, e);
+ closeSocket(sock);
throw e;
} catch (IOException e) {
LOG.warn("Cannot open channel to " + sid
+ " at election address " + electionAddr,
e);
+ closeSocket(sock);
return false;
}
@@ -574,6 +571,10 @@ public class QuorumCnxManager {
* Reference to socket
*/
private void closeSocket(Socket sock) {
+ if (sock == null) {
+ return;
+ }
+
try {
sock.close();
} catch (IOException ie) {
@@ -614,7 +615,7 @@ public class QuorumCnxManager {
public void run() {
int numRetries = 0;
InetSocketAddress addr;
-
+ Socket client = null;
while((!shutdown) && (numRetries < 3)){
try {
ss = new ServerSocket();
@@ -632,7 +633,7 @@ public class QuorumCnxManager {
setName(addr.toString());
ss.bind(addr);
while (!shutdown) {
- Socket client = ss.accept();
+ client = ss.accept();
setSockOpts(client);
LOG.info("Received connection request "
+ client.getRemoteSocketAddress());
@@ -654,6 +655,7 @@ public class QuorumCnxManager {
LOG.error("Interrupted while sleeping. " +
"Ignoring exception", ie);
}
+ closeSocket(client);
}
}
LOG.info("Leaving listener");
@@ -739,9 +741,7 @@ public class QuorumCnxManager {
}
synchronized boolean finish() {
- if (LOG.isDebugEnabled()) {
- LOG.debug("Calling finish for " + sid);
- }
+ LOG.debug("Calling finish for " + sid);
if(!running){
/*
@@ -752,16 +752,14 @@ public class QuorumCnxManager {
running = false;
closeSocket(sock);
- // channel = null;
this.interrupt();
if (recvWorker != null) {
recvWorker.finish();
}
- if (LOG.isDebugEnabled()) {
- LOG.debug("Removing entry from senderWorkerMap sid=" + sid);
- }
+ LOG.debug("Removing entry from senderWorkerMap sid=" + sid);
+
senderWorkerMap.remove(sid, this);
threadCnt.decrementAndGet();
return running;
@@ -919,9 +917,7 @@ public class QuorumCnxManager {
} finally {
LOG.warn("Interrupting SendWorker");
sw.finish();
- if (sock != null) {
- closeSocket(sock);
- }
+ closeSocket(sock);
}
}
}