[jboss-cvs] JBossRemoting/src/main/org/jboss/remoting/transport/socket ...
Ron Sigal
ron_sigal at yahoo.com
Fri Feb 16 00:25:29 EST 2007
User: rsigal
Date: 07/02/16 00:25:29
Modified: src/main/org/jboss/remoting/transport/socket
MicroSocketClientInvoker.java
Log:
BREM-657: (1) Changed getConnection() so that there is no i/o in synchronized block. (2) Synchronized access to usedPool. (3) In clearpools() remove pools from list.
Revision Changes Path
1.22 +85 -52 JBossRemoting/src/main/org/jboss/remoting/transport/socket/MicroSocketClientInvoker.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: MicroSocketClientInvoker.java
===================================================================
RCS file: /cvsroot/jboss/JBossRemoting/src/main/org/jboss/remoting/transport/socket/MicroSocketClientInvoker.java,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -b -r1.21 -r1.22
--- MicroSocketClientInvoker.java 3 Feb 2007 05:12:21 -0000 1.21
+++ MicroSocketClientInvoker.java 16 Feb 2007 05:25:29 -0000 1.22
@@ -20,6 +20,7 @@
import java.net.InetAddress;
import java.net.Socket;
import java.net.SocketException;
+import java.net.InetSocketAddress;
import java.rmi.MarshalException;
import java.util.HashMap;
import java.util.Iterator;
@@ -35,7 +36,7 @@
* @author <a href="mailto:telrod at e2technologies.net">Tom Elrod</a>
* @author <a href="mailto:ovidiu at jboss.org">Ovidiu Feodorov</a>
*
- * @version $Revision: 1.21 $
+ * @version $Revision: 1.22 $
*/
public class MicroSocketClientInvoker extends RemoteClientInvoker
{
@@ -155,6 +156,7 @@
if (trace) { log.trace("clearing pool for " + sa); }
clearPool(sa);
+ i.remove();
}
}
}
@@ -578,8 +580,11 @@
try
{
socketWrapper.close();
+ synchronized (usedPoolLock)
+ {
usedPooled--;
}
+ }
catch (Exception ex)
{
if (trace) { log.trace(this + " couldn't successfully close its socketWrapper", ex); }
@@ -605,8 +610,11 @@
try
{
socketWrapper.close();
+ synchronized (usedPoolLock)
+ {
usedPooled--;
}
+ }
catch (Exception ignored)
{
}
@@ -677,7 +685,11 @@
{
pool = new LinkedList();
connectionPools.put(address, pool);
- log.debug(this + " added new pool as " + address);
+ log.debug(this + " added new pool (" + pool + ") as " + address);
+ }
+ else
+ {
+ log.debug(this + " using pool (" + pool + ") already defined for " + address);
}
}
}
@@ -709,18 +721,38 @@
if (pool.size() > 0)
{
pooled = getPooledConnection();
+ if (trace) log.trace(this + " reusing pooled connection: " + pooled);
}
}
+ boolean retry = false;
synchronized(usedPoolLock)
{
if (pooled != null)
{
usedPooled++;
+ if (trace) log.trace(this + " got a socket, usedPooled: " + usedPooled);
break;
}
- else if (usedPooled < maxPoolSize)
+ if (usedPooled < maxPoolSize)
+ {
+ // Try to get a socket.
+ usedPooled++;
+ if (trace) log.trace(this + " getting a socket, usedPooled: " + usedPooled);
+ }
+ else
+ {
+ retry = true;
+ if (trace) log.trace(this + " will try again to get a socket");
+ }
+ }
+
+ if (retry)
{
+ Thread.sleep(1000);
+ continue;
+ }
+
// If no connection in pool and all pooled connections not in use, then need create
// a new connection which will be latered returned to the pool (thus filling out the
// pool, since starts out empty).
@@ -731,12 +763,17 @@
{
if (trace) { log.trace(this + " creating socket " + (counter++) + ", attempt " + (i + 1)); }
socket = createSocket(address.address, address.port);
+ if (trace) log.trace(this + " created socket: " + socket);
}
catch (Exception ex)
{
log.debug(this + " got Exception " + ex + ", creation attempt took " +
(System.currentTimeMillis() - timestamp) + " ms");
+ synchronized(usedPoolLock)
+ {
+ usedPooled--;
+ }
if (i + 1 < numberOfRetries)
{
Thread.sleep(1);
@@ -745,7 +782,6 @@
throw ex;
}
socket.setTcpNoDelay(address.enableTcpNoDelay);
- socket.setReuseAddress(reuseAddress);
Map metadata = getLocator().getParameters();
if (metadata == null)
@@ -761,15 +797,8 @@
metadata.put(SocketWrapper.TEMP_TIMEOUT, new Integer(tempTimeout));
pooled = createClientSocket(socket, address.timeout, metadata);
- usedPooled++;
break;
}
- }
-
- // Waiting 1 second (numberOfRetries along with 1 second wait determines timeout on getting
- // pooled connection)
- Thread.sleep(1000);
- }
if (pooled == null)
{
@@ -806,7 +835,11 @@
protected Socket createSocket(String address, int port) throws IOException
{
- return new Socket(address, port);
+ Socket s = new Socket();
+ s.setReuseAddress(getReuseAddress());
+ InetSocketAddress inetAddr = new InetSocketAddress(address, port);
+ s.connect(inetAddr);
+ return s;
}
protected SocketWrapper getPooledConnection()
More information about the jboss-cvs-commits
mailing list