[jboss-remoting-issues] [JBoss JIRA] Commented: (JBREM-1040) Sometimes ClientSocketWrapper.checkConnection() doesn't detect closed connection in JBoss Remoting 1.4.3.GA

Ron Sigal (JIRA) jira-events at lists.jboss.org
Wed Dec 24 19:12:54 EST 2008


    [ https://jira.jboss.org/jira/browse/JBREM-1040?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12444131#action_12444131 ] 

Ron Sigal commented on JBREM-1040:
----------------------------------

>From support case #192039:  

Remoting client tries to use a pooled connection which has timed out on the server side.

Client: uses jbossall-client.jar from AS 4.0.5 (jboss-remoting.jar version 1.4.3)
Server: AS 4.3.0 (jboss-remoting 2.2.x).

Stacktrace:

    [java] java.rmi.MarshalException: Failed to communicate.  Problem during marshalling/unmarshalling; nested exception is:
    [java] java.net.SocketException: Software caused connection abort: socket write error
    [java] at org.jboss.remoting.transport.socket.SocketClientInvoker.transport(SocketClientInvoker.java:306)
    [java] at org.jboss.remoting.RemoteClientInvoker.invoke(RemoteClientInvoker.java:143)
    [java] at org.jboss.remoting.Client.invoke(Client.java:525)
    [java] at org.jboss.remoting.Client.invoke(Client.java:488)
    [java] at org.jboss.invocation.unified.interfaces.UnifiedInvokerProxy.invoke(UnifiedInvokerProxy.java:175)
    [java] at org.jboss.invocation.InvokerInterceptor.invokeInvoker(InvokerInterceptor.java:365)
    [java] at org.jboss.invocation.MarshallingInvokerInterceptor.invoke(MarshallingInvokerInterceptor.java:63)
    [java] at org.jboss.proxy.TransactionInterceptor.invoke(TransactionInterceptor.java:61)
    [java] at org.jboss.proxy.SecurityInterceptor.invoke(SecurityInterceptor.java:70)
    [java] at org.jboss.proxy.ejb.StatelessSessionInterceptor.invoke(StatelessSessionInterceptor.java:112)
    [java] at org.jboss.proxy.ClientContainer.invoke(ClientContainer.java:100)
    [java] at $Proxy1.remove(Unknown Source)
    [java] at test.jboss.TestClient.main(TestClient.java:150)
    [java] Caused by: java.net.SocketException: Software caused connection abort: socket write error
    [java] at java.net.SocketOutputStream.socketWrite0(Native Method)
    [java] at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
    [java] at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
    [java] at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:69)
    [java] at java.io.BufferedOutputStream.write(BufferedOutputStream.java:113)
    [java] at java.io.ObjectOutputStream$BlockDataOutputStream.drain(ObjectOutputStream.java:1637)
    [java] at java.io.ObjectOutputStream$BlockDataOutputStream.setBlockDataMode(ObjectOutputStream.java:1546)
    [java] at java.io.ObjectOutputStream.writeFatalException(ObjectOutputStream.java:1350)
    [java] at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:281)
    [java] at org.jboss.remoting.serialization.impl.java.JavaSerializationManager.sendObject(JavaSerializationManager.java:81)
    [java] at org.jboss.remoting.marshal.serializable.SerializableMarshaller.write(SerializableMarshaller.java:84)
    [java] at org.jboss.invocation.unified.marshall.InvocationMarshaller.write(InvocationMarshaller.java:66)
    [java] at org.jboss.remoting.transport.socket.SocketClientInvoker.transport(SocketClientInvoker.java:273)
    [java] ... 12 more
    [java] Exception in thread "main"

Explanation:

The reason the connection check mechanism isn't working on the client side is that we introduced a faster mechanism in Remoting 2.  When ServerSocketWrapper.close() is called, it writes two 254 bytes before closing the socket.  This is the only time the server writes anything that wasn't solicited by the client, so, if the client sees bytes on the input stream, it concludes that the server side closed the connection.  But then ClientSocketWrapper.checkConnection() (which, by default, doesn't run in Remoting 2) doesn't throw an EOFException, so it looks like the connection is usable.  I've attached a jboss-remoting.jar in  which ClientSocketWrapper.checkConnection() throws EOFException if it reads 254.  It will identify itself as JBossRemoting Version 1.4.7.GA-preview (Wormer).


> Sometimes ClientSocketWrapper.checkConnection() doesn't detect closed connection in JBoss Remoting 1.4.3.GA
> -----------------------------------------------------------------------------------------------------------
>
>                 Key: JBREM-1040
>                 URL: https://jira.jboss.org/jira/browse/JBREM-1040
>             Project: JBoss Remoting
>          Issue Type: Bug
>      Security Level: Public(Everyone can see) 
>    Affects Versions: 1.4.6.GA
>            Reporter: Takayoshi Kimura
>            Assignee: Takayoshi Kimura
>
> In a same test described in JBREM-1017, the client sometimes doesn't detect closed connection. After read a CLOSED byte (254), the client gets IOException: Broken pipe when try to write an invocation.
> This issue is environment specific or timing issue, so doesn't always happen.

-- 
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