]
Scott Marlow closed JBAS-5943.
------------------------------
Resolution: Done
JRMPInvokerProxyHA should not failover if PooledInvokerProxy.invoke()
throws java.rmi.ConnectException with cause of java.io.EOFException
-----------------------------------------------------------------------------------------------------------------------------------------
Key: JBAS-5943
URL:
https://jira.jboss.org/jira/browse/JBAS-5943
Project: JBoss Application Server
Issue Type: Bug
Security Level: Public(Everyone can see)
Components: Clustering
Affects Versions: JBossAS-4.0.5.GA, JBossAS-5.0.0.CR1, JBossAS-4.2.3.GA
Reporter: Scott Marlow
Assignee: Scott Marlow
Priority: Minor
In a five node cluster {01, 02, 03, 04, 05}, the 01 node was running as the master (all
singleton services are running here). The 02 node was making a stateless session bean
invocation to the 01 (singleton) node via the PooledInvokerHA transport. Some type of
transient failure occurred on the pooled socket connection. The java.io.EOFException
occurred while waiting to read the response from the singleton node. The
PooledInvokerProxy.invoke wraps all Exceptions as java.rmi.ConnectException which is
caught by JRMPInvokerProxyHA. JRMPInvokerProxyHA currently will treat all
java.rmi.ConnectException as a reason to fail-over to a different node, however, that is
wrong for the case of EOFException (only the socket connection is broken, not the 01
node). As part of the failover handling, the 01 node is removed from the 02 nodes
familyClusterInfo which means that the singleton node will no longer be accessible to this
singleton session bean on the 02 node.
I was able to recreate this with an application test running on my laptop (with two
instances of as running) but haven't reproduced the failure with a unit test yet.
Exception stacktrace:
java.rmi.ConnectException: Failed to communicate; nested exception is:
java.io.EOFException
at
org.jboss.invocation.pooled.interfaces.PooledInvokerProxy.invoke(PooledInvokerProxy.java:628)
at
org.jboss.invocation.jrmp.interfaces.JRMPInvokerProxyHA.invoke(JRMPInvokerProxyHA.java:200)
at
org.jboss.invocation.InvokerInterceptor.invokeInvoker(InvokerInterceptor.java:331)
at org.jboss.invocation.InvokerInterceptor.invoke(InvokerInterceptor.java:194)
at org.jboss.proxy.ejb.RetryInterceptor.invoke(RetryInterceptor.java:176)
... [more]
Caused by: java.io.EOFException
at
java.io.ObjectInputStream$BlockDataInputStream.peekByte(ObjectInputStream.java:2498)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1273)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:348)
at
org.jboss.invocation.pooled.interfaces.PooledInvokerProxy.invoke(PooledInvokerProxy.java:611)
... 102 more
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: