[
https://issues.jboss.org/browse/JBMESSAGING-1940?page=com.atlassian.jira....
]
Yong Hao Gao commented on JBMESSAGING-1940:
-------------------------------------------
The cause:
When a queue is deployed in one node only, and its messages are included in a transaction.
If the node crashes when the transaction is prepared but not committed, the failover node
will merge this transaction over and try to recover it. However the transaction's
messages are not in the failover node (the queue is not deployed in this node), so the
recover will fail.
The fix:
When failover happens, it checks each prepared transaction, if the transaction has
messages whose queue is not deployed in the failover node, the server won't merge this
transaction. Such transactions should only be recovered at the node where the queue is
deployed.
java.lang.IllegalStateException: Cannot find binding for channel id
-------------------------------------------------------------------
Key: JBMESSAGING-1940
URL:
https://issues.jboss.org/browse/JBMESSAGING-1940
Project: JBoss Messaging
Issue Type: Bug
Components: Messaging Core
Affects Versions: 1.4.8.SP5
Environment: JBoss EAP 5.1.2.
Reporter: Tom Ross
Assignee: Yong Hao Gao
When using a none clustered queue in a EAP 5.x cluster it is possible that after one of
the nodes crashes the following warning may been seen in the log file:
{noformat}
2012-10-24 09:54:23,266 WARN [org.jboss.messaging.core.impl.tx.TransactionRepository]
Failed to replay transaction (XID: MessagingXid (1035313129
bq:45.55.53.50.56.97.56.102.102.58.56.52.48.53.58.53.48.55.51.101.50.99.57.58.54.55.97.52
formatID:131075
gtxid:49.45.45.55.53.50.56.97.56.102.102.58.56.52.48.53.58.53.48.55.51.101.50.99.57.58.54.55.56.102,
LocalID: 41557468488500098) during recovery.
java.lang.IllegalStateException: Cannot find binding for channel id 36
at
org.jboss.messaging.core.impl.tx.TransactionRepository.handleReferences(TransactionRepository.java:318)
at org.jboss.messaging.core.impl.tx.Transaction.loadState(Transaction.java:405)
at
org.jboss.messaging.core.impl.tx.TransactionRepository.recoverPreparedTransactions(TransactionRepository.java:149)
at
org.jboss.jms.server.endpoint.ServerConnectionEndpoint.getPreparedTransactions(ServerConnectionEndpoint.java:567)
at
org.jboss.jms.server.endpoint.advised.ConnectionAdvised.org$jboss$jms$server$endpoint$advised$ConnectionAdvised$getPreparedTransactions$aop(ConnectionAdvised.java:111)
at
org.jboss.jms.server.endpoint.advised.ConnectionAdvised$getPreparedTransactions_8083036720366990761.invokeTarget(ConnectionAdvised$getPreparedTransactions_8083036720366990761.java)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:111)
at
org.jboss.jms.server.container.ServerLogInterceptor.invoke(ServerLogInterceptor.java:105)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
at
org.jboss.jms.server.endpoint.advised.ConnectionAdvised.getPreparedTransactions(ConnectionAdvised.java)
at
org.jboss.jms.wireformat.ConnectionGetPreparedTransactionsRequest.serverInvoke(ConnectionGetPreparedTransactionsRequest.java:67)
at
org.jboss.jms.server.remoting.JMSServerInvocationHandler.invoke(JMSServerInvocationHandler.java:165)
at org.jboss.remoting.ServerInvoker.invoke(ServerInvoker.java:967)
at
org.jboss.remoting.transport.local.LocalClientInvoker.invoke(LocalClientInvoker.java:106)
at org.jboss.remoting.Client.invoke(Client.java:2070)
at org.jboss.remoting.Client.invoke(Client.java:879)
at org.jboss.remoting.Client.invoke(Client.java:867)
at org.jboss.jms.client.delegate.DelegateSupport.doInvoke(DelegateSupport.java:189)
at org.jboss.jms.client.delegate.DelegateSupport.doInvoke(DelegateSupport.java:160)
at
org.jboss.jms.client.delegate.ClientConnectionDelegate.org$jboss$jms$client$delegate$ClientConnectionDelegate$getPreparedTransactions$aop(ClientConnectionDelegate.java:285)
at
org.jboss.jms.client.delegate.ClientConnectionDelegate$getPreparedTransactions_8083036720366990761.invokeTarget(ClientConnectionDelegate$getPreparedTransactions_8083036720366990761.java)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:111)
at
org.jboss.jms.client.container.FailoverValveInterceptor.invoke(FailoverValveInterceptor.java:92)
at org.jboss.aop.advice.PerInstanceInterceptor.invoke(PerInstanceInterceptor.java:86)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
at org.jboss.jms.client.container.ClosedInterceptor.invoke(ClosedInterceptor.java:172)
at org.jboss.aop.advice.PerInstanceInterceptor.invoke(PerInstanceInterceptor.java:86)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
at
org.jboss.jms.client.delegate.ClientConnectionDelegate.getPreparedTransactions(ClientConnectionDelegate.java)
at org.jboss.jms.tx.ResourceManager.recover(ResourceManager.java:619)
at org.jboss.jms.tx.MessagingXAResource.recover(MessagingXAResource.java:281)
at
org.jboss.jms.server.recovery.MessagingXAResourceWrapper.recover(MessagingXAResourceWrapper.java:112)
at
com.arjuna.ats.internal.jta.recovery.arjunacore.XARecoveryModule.xaRecovery(XARecoveryModule.java:773)
at
com.arjuna.ats.internal.jta.recovery.arjunacore.XARecoveryModule.resourceInitiatedRecovery(XARecoveryModule.java:665)
at
com.arjuna.ats.internal.jta.recovery.arjunacore.XARecoveryModule.periodicWorkSecondPass(XARecoveryModule.java:200)
at
com.arjuna.ats.internal.arjuna.recovery.PeriodicRecovery.doWorkInternal(PeriodicRecovery.java:799)
at
com.arjuna.ats.internal.arjuna.recovery.PeriodicRecovery.run(PeriodicRecovery.java:412)
{noformat}
This is caused by the transaction recovery process that is trying to recover a
transaction that failed over to a node in the cluster on which the none cluster queue is
not defined.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see:
http://www.atlassian.com/software/jira