[jboss-remoting-issues] [JBoss JIRA] Closed: (JBREM-1188) Socket transport doesn't set "timeout" to default value

Ron Sigal (JIRA) jira-events at lists.jboss.org
Sat Feb 20 11:10:10 EST 2010


     [ https://jira.jboss.org/jira/browse/JBREM-1188?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Ron Sigal closed JBREM-1188.
----------------------------

    Resolution: Done


Tests passing in hudson.

> Socket transport doesn't set "timeout" to default value
> -------------------------------------------------------
>
>                 Key: JBREM-1188
>                 URL: https://jira.jboss.org/jira/browse/JBREM-1188
>             Project: JBoss Remoting
>          Issue Type: Bug
>      Security Level: Public(Everyone can see) 
>    Affects Versions: 2.2.3.SP1, 2.5.2.SP2 (Flounder)
>            Reporter: Ron Sigal
>            Assignee: Ron Sigal
>             Fix For: 2.2.3.SP2, 2.5.2.SP3 (Flounder)
>
>         Attachments: jboss-remoting.jar
>
>
> From Jaikiran Pai:
> Bug, bug, bug  ;)
> There's some Java initialization trick going on with that piece of code (only relevant code has been pasted below):
> public class SocketClientInvoker extends MicroSocketClientInvoker
> {
>   /**
>    * Default value for socket timeout is 30 minutes.
>    */
>   public static final int SO_TIMEOUT_DEFAULT = 1800000;
>   protected int timeout = SO_TIMEOUT_DEFAULT;
>   ...
>   public SocketClientInvoker(InvokerLocator locator)
>   {
>      this(locator, null);
>   }
>   public SocketClientInvoker(InvokerLocator locator, Map configuration)
>   {
>      super(locator, configuration);
>      configureParameters();
>   }
>   protected ServerAddress createServerAddress(InetAddress addr, int port)
>   {
>      return new ServerAddress(addr.getHostAddress(), port, enableTcpNoDelay, timeout, maxPoolSize);
>   }
> ...
> }
> public class MicroSocketClientInvoker ...
> {
>   public MicroSocketClientInvoker(InvokerLocator locator, Map configuration)
>   {
>      ...
>      try
>      {
>         setup();
>      }
>      ...
>      log.debug(this + " constructed");
>   }
>   protected void setup() throws Exception
>   {
>      ...
>         address = createServerAddress(addr, port);
>      }
> ...
> }
> 1) SocketClientInvoker extends MicroSocketClientInvoker
> 2) When someone constructs SocketClientInvoker through it's constructor, JVM first constructs MicroSocketClientInvoker.
> 3) This includes MicroSocketClientInvoker's object field initialization and then the code execution in MicroSocketClientInvoker's constructor.
> 4) MicroSocketClientInvoker's constructor invokes setup() on itself which then invokes the (overridden) createServerAddress() on SocketClientInvoker
> 5) Note that, at this point the object field initialization of SocketClientInvoker has *not* yet been done. So the
> protected int timeout = SO_TIMEOUT_DEFAULT;
> in SocketClientInvoker hasn't yet been executed. Effectively, when SocketClientInvoker.createServerAddress() is invoked, the timeout value is 0. As a result, SocketClientInvoker.createServerAddress() ends up creating a ServerAddress with timeout = 0 (infinite timeout).
> (Rest of the flow is irrelevant, but let's just outline it here for the sake of completeness)
> 6) After completion of SocketClientInvoker.createServerAddress() method invoked in step#4, the MicroSocketClientInvoker.setup too completes and ultimately the code execution in the MicroSocketClientInvoker's constructor too is completed.
> 7) After step#6, the object field initialization of SocketClientInvoker starts and it's at this point where the timeout field value gets set to 1800000, but by now it's too late.
> And here are the logs (only a part of the entire log file) from remoting which prove that the timeout is being set to 0:
> 2010-02-19 16:32:29,104 DEBUG [org.jboss.remoting.Client] Client[16278782:3j001-51zxod-g5uvg99p-1-g5uvg99q-2].connect(null)
> 2010-02-19 16:32:29,104 TRACE [org.jboss.remoting.Client] Client[16278782:3j001-51zxod-g5uvg99p-1-g5uvg99q-2]: metadata = null
> 2010-02-19 16:32:29,172 DEBUG [org.jboss.remoting.transport.socket.MicroSocketClientInvoker] SocketClientInvoker[879860, socket://localhost.localdomain:3873] constructed
> 2010-02-19 16:32:29,172 DEBUG [org.jboss.remoting.MicroRemoteClientInvoker] SocketClientInvoker[879860, socket://localhost.localdomain:3873] connecting
> 2010-02-19 16:32:29,173 DEBUG [org.jboss.remoting.transport.socket.MicroSocketClientInvoker] Creating semaphore with size 50
> 2010-02-19 16:32:29,173 TRACE [org.jboss.remoting.transport.socket.MicroSocketClientInvoker] SocketClientInvoker[879860, socket://localhost.localdomain:3873] added new pool ([]) as ServerAddress[127.0.0.1:3873, NO enableTcpNoDelay timeout 0 ms, maxPoolSize=50]
> ....
> 2010-02-19 16:32:29,185 TRACE [org.jboss.remoting.transport.socket.MicroSocketClientInvoker] SocketClientInvoker[879860, socket://localhost.localdomain:3873] retryCount: 0
> 2010-02-19 16:32:29,185 TRACE [org.jboss.remoting.transport.socket.MicroSocketClientInvoker] SocketClientInvoker[879860, socket://localhost.localdomain:3873] obtained semaphore: 49
> 2010-02-19 16:32:29,185 TRACE [org.jboss.remoting.transport.socket.MicroSocketClientInvoker] SocketClientInvoker[879860, socket://localhost.localdomain:3873] creating socket
> 2010-02-19 16:32:29,186 TRACE [org.jboss.remoting.transport.socket.MicroSocketClientInvoker] SocketClientInvoker[879860, socket://localhost.localdomain:3873] created socket: Socket[addr=/127.0.0.1,port=3873,localport=39135]
> 2010-02-19 16:32:29,187 TRACE [org.jboss.remoting.transport.socket.SocketWrapper] constructing org.jboss.remoting.transport.socket.ClientSocketWrapper instance for Socket[addr=/127.0.0.1,port=3873,localport=39135], using timeout 0
> 2010-02-19 16:32:29,187 TRACE [org.jboss.remoting.transport.socket.SocketWrapper] ClientSocketWrapper[Socket[addr=/127.0.0.1,port=3873,localport=39135].6c5482] setting timeout to 0
> ...
> regards,
> -Jaikiran

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: https://jira.jboss.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        


More information about the jboss-remoting-issues mailing list