[jboss-jira] [JBoss JIRA] (JBMESSAGING-1940) java.lang.IllegalStateException: Cannot find binding for channel id
Yong Hao Gao (JIRA)
jira-events at lists.jboss.org
Fri Jan 11 07:23:08 EST 2013
[ https://issues.jboss.org/browse/JBMESSAGING-1940?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12745282#comment-12745282 ]
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
More information about the jboss-jira
mailing list