[jboss-jira] [JBoss JIRA] Updated: (JBMESSAGING-1280) Messaging client hangs forever with ClusteredConnectionFactory failover by socket hang
Takayoshi Kimura (JIRA)
jira-events at lists.jboss.org
Tue Apr 29 15:07:11 EDT 2008
[ http://jira.jboss.com/jira/browse/JBMESSAGING-1280?page=all ]
Takayoshi Kimura updated JBMESSAGING-1280:
------------------------------------------
Attachment: client.log
> Messaging client hangs forever with ClusteredConnectionFactory failover by socket hang
> --------------------------------------------------------------------------------------
>
> Key: JBMESSAGING-1280
> URL: http://jira.jboss.com/jira/browse/JBMESSAGING-1280
> Project: JBoss Messaging
> Issue Type: Bug
> Affects Versions: 1.4.0.SP3.CP02, 1.4.0.SP3_CP01
> Reporter: Takayoshi Kimura
> Assigned To: Tim Fox
> Attachments: client.console, client.log
>
>
> Tested with a QueueSession.commit() method call.
> Taking a look at client thread dump, it seems there is a deadlock on FailoverValve2. The ConnectionValidator thread is waiting the messaging client thread leaving FailoverValve2, but it won't happen because the client thread is entering the FailoverValve2 and reading dead tcp socket.
> To reproduce this problem:
> 1. Apply the following patch to JBossMessaging_1_4_0_SP3_CP02:
> Index: src/main/org/jboss/jms/server/endpoint/ServerConnectionEndpoint.java
> ===================================================================
> --- src/main/org/jboss/jms/server/endpoint/ServerConnectionEndpoint.java (revision 4127)
> +++ src/main/org/jboss/jms/server/endpoint/ServerConnectionEndpoint.java (working copy)
> @@ -484,7 +484,10 @@
> if (request.getRequestType() == TransactionRequest.ONE_PHASE_COMMIT_REQUEST)
> {
> if (trace) { log.trace(this + " received ONE_PHASE_COMMIT request"); }
> + System.out.println("********** Sleep 10 sec");
>
> + Thread.sleep(10000);
> +
> Transaction tx = tr.createTransaction();
> processTransaction(request.getState(), tx, checkForDuplicates);
> tx.commit();
> Or use debugger to suspend thread at the ServerConnectionEndpoint.sendTransaction() method.
> 2. Call QueueSession.commit() method on the client side
> 3. Disconnect the network cable from the server machine
> Or use a firewall. For example, iptables on the server side:
> iptables -A INPUT -s CLIENT_IPADDRESS/32 -j DROP
> iptables -A OUTPUT -d CLIENT_IPADDRESS/32 -j DROP
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://jira.jboss.com/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
More information about the jboss-jira
mailing list