[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