[jbossts-issues] [JBoss JIRA] (JBTM-3001) MBean representing a transaction should consider state when is to be removed

Ondra Chaloupka (JIRA) issues at jboss.org
Tue Mar 20 11:11:00 EDT 2018


     [ https://issues.jboss.org/browse/JBTM-3001?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Issue was automatically transitioned when Ondra Chaloupka created pull request #1295 in GitHub
----------------------------------------------------------------------------------------------
    Status: Pull Request Sent  (was: Open)


> MBean representing a transaction should consider state when is to be removed
> ----------------------------------------------------------------------------
>
>                 Key: JBTM-3001
>                 URL: https://issues.jboss.org/browse/JBTM-3001
>             Project: JBoss Transaction Manager
>          Issue Type: Bug
>          Components: Tooling
>    Affects Versions: 5.8.0.Final
>            Reporter: Ondra Chaloupka
>            Assignee: Ondra Chaloupka
>         Attachments: data-subordinate.zip, data-tooling.zip, standalone-full.xml
>
>
> When transaction mbean is to be removed by tooling - there is a transaction available in the object store and recovery does not catch it for deletion (the reason could be various - either the transaction is set with heuristic outcome, or transaction was subordinate and recovery waits for the outer player to finish transaction but there is nobody coming, or there is record in txn log store but the RA already forgot about transaction and we want to clean the transaction manager log store) - then currently the transaction manager just tries to call [XAResource.forget|https://docs.oracle.com/javaee/7/api/javax/transaction/xa/XAResource.html#forget-javax.transaction.xa.Xid-]. But the forget call is available (correct by the XA specification) only when the participant finished with in the heuristic state.
> But deleting transaction by the tooling (even that should be only the tool of the last resort as normally recovery manager handles this automatically) should cause the transaction and all participants are correctly finished (forget or rolled-back) even the transaction is in prepared state (not in heuristic one).
> When {{forget}} is called on prepared transaction branch then (e.g. for Artemis ActiveMQ) the {{XAException.XAER_NOTA}} is thrown[1].
> * The mbean should consider the state of the participant and choose if to rollback ({{prepared}} state) or if to forget ({{heuristic}} state).
> * The mbean should consider to check {{XAException}} error code as when {{XAResource.forget}} returns {{XAER_NOTA}} (pubs.opengroup.org/onlinepubs/009680699/toc.pdf, {{The specified XID is not known by the resource manager as a heuristically completed XID.}}) then the branch is in incorrect state - probably it's prepared thus rollback could be run.
> {code}
> 2018-03-20 11:06:06,614 TRACE [com.arjuna.ats.jta] (management-handler-thread - 1) XAResourceRecord.forget for XAResourceRecord < resource:org.jboss.activemq.artemis.wildfly.integration.WildFlyActiveMQXAResourceWrapper at 25091a7a, txid:< formatId=131077, gtrid_length=29, bqual_length=36, tx_uid=0:ffff0a2805b6:-19805d73:5ab0d062:1c, node_name=1, branch_uid=0:ffff0a2805b6:-19805d73:5ab0d062:23, subordinatenodename=null, eis_name=forgot eis name for: 1 >, heuristic: TwoPhaseOutcome.FINISH_OK, product: ActiveMQ Artemis/2.0, jndiName: java:/JmsXA NodeId:c07b7f00-2c1e-11e8-9014-54e1ad661a0b com.arjuna.ats.internal.jta.resources.arjunacore.XAResourceRecord at 69af92f1 >
> 2018-03-20 11:06:06,636 WARN  [com.arjuna.ats.jta] (management-handler-thread - 1) ARJUNA016006: XAResourceRecord forget failed: - forget threw exception: javax.transaction.xa.XAException
>   at org.apache.activemq.artemis.core.protocol.core.impl.ActiveMQSessionContext.xaForget(ActiveMQSessionContext.java:490)
>   at org.apache.activemq.artemis.core.client.impl.ClientSessionImpl.forget(ClientSessionImpl.java:1196)
>   at org.apache.activemq.artemis.service.extensions.xa.recovery.ActiveMQXAResourceWrapper.forget(ActiveMQXAResourceWrapper.java:123)
>   at org.apache.activemq.artemis.service.extensions.xa.ActiveMQXAResourceWrapperImpl.forget(ActiveMQXAResourceWrapperImpl.java:86)
>   at com.arjuna.ats.internal.jta.resources.arjunacore.XAResourceRecord.forget(XAResourceRecord.java:806)
>   at com.arjuna.ats.internal.jta.resources.arjunacore.XAResourceRecord.forgetHeuristic(XAResourceRecord.java:792)
>   at com.arjuna.ats.arjuna.tools.osb.mbean.LogRecordWrapper.removeFromList(LogRecordWrapper.java:238)
>   at com.arjuna.ats.arjuna.tools.osb.mbean.ActionBean$GenericAtomicActionWrapper.remove(ActionBean.java:463)
>   at com.arjuna.ats.arjuna.tools.osb.mbean.ActionBean.remove(ActionBean.java:327)
>   at com.arjuna.ats.arjuna.tools.osb.mbean.LogRecordWrapper.remove(LogRecordWrapper.java:218)
>   at com.arjuna.ats.arjuna.tools.osb.mbean.ActionBean.remove(ActionBean.java:149)
>   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>   at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
>   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>   at java.lang.reflect.Method.invoke(Method.java:498)
>   at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:71)
>   at sun.reflect.GeneratedMethodAccessor2.invoke(Unknown Source)
>   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>   at java.lang.reflect.Method.invoke(Method.java:498)
>   at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:275)
>   at com.sun.jmx.mbeanserver.StandardMBeanIntrospector.invokeM2(StandardMBeanIntrospector.java:112)
>   at com.sun.jmx.mbeanserver.StandardMBeanIntrospector.invokeM2(StandardMBeanIntrospector.java:46)
>   at com.sun.jmx.mbeanserver.MBeanIntrospector.invokeM(MBeanIntrospector.java:237)
>   at com.sun.jmx.mbeanserver.PerInterface.invoke(PerInterface.java:138)
>   at com.sun.jmx.mbeanserver.MBeanSupport.invoke(MBeanSupport.java:252)
>   at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)
>   at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)
>   at org.jboss.as.jmx.PluggableMBeanServerImpl$TcclMBeanServer.invoke(PluggableMBeanServerImpl.java:1475)
>   at org.jboss.as.jmx.PluggableMBeanServerImpl.invoke(PluggableMBeanServerImpl.java:724)
>   at org.jboss.as.txn.subsystem.LogStoreTransactionDeleteHandler.execute(LogStoreTransactionDeleteHandler.java:59)
>   at org.jboss.as.controller.AbstractOperationContext.executeStep(AbstractOperationContext.java:982)
>   at org.jboss.as.controller.AbstractOperationContext.processStages(AbstractOperationContext.java:726)
>   at org.jboss.as.controller.AbstractOperationContext.executeOperation(AbstractOperationContext.java:450)
>   at org.jboss.as.controller.OperationContextImpl.executeOperation(OperationContextImpl.java:1408)
>   at org.jboss.as.controller.ModelControllerImpl.internalExecute(ModelControllerImpl.java:423)
>   at org.jboss.as.controller.ModelControllerImpl.lambda$execute$1(ModelControllerImpl.java:243)
>   at org.wildfly.security.auth.server.SecurityIdentity.runAs(SecurityIdentity.java:263)
>   at org.wildfly.security.auth.server.SecurityIdentity.runAs(SecurityIdentity.java:229)
>   at org.jboss.as.controller.ModelControllerImpl.execute(ModelControllerImpl.java:243)
>   at org.jboss.as.controller.remote.ModelControllerClientOperationHandler$ExecuteRequestHandler.doExecute(ModelControllerClientOperationHandler.java:240)
>   at org.jboss.as.controller.remote.ModelControllerClientOperationHandler$ExecuteRequestHandler.access$400(ModelControllerClientOperationHandler.java:138)
>   at org.jboss.as.controller.remote.ModelControllerClientOperationHandler$ExecuteRequestHandler$1$1.run(ModelControllerClientOperationHandler.java:162)
>   at org.jboss.as.controller.remote.ModelControllerClientOperationHandler$ExecuteRequestHandler$1$1.run(ModelControllerClientOperationHandler.java:158)
>   at org.wildfly.security.auth.server.SecurityIdentity.runAs(SecurityIdentity.java:287)
>   at org.wildfly.security.auth.server.SecurityIdentity.runAs(SecurityIdentity.java:244)
>   at org.jboss.as.controller.AccessAuditContext.doAs(AccessAuditContext.java:254)
>   at org.jboss.as.controller.AccessAuditContext.doAs(AccessAuditContext.java:225)
>   at org.jboss.as.controller.remote.ModelControllerClientOperationHandler$ExecuteRequestHandler$1.execute(ModelControllerClientOperationHandler.java:158)
>   at org.jboss.as.protocol.mgmt.ManagementRequestContextImpl$1.doExecute(ManagementRequestContextImpl.java:70)
>   at org.jboss.as.protocol.mgmt.ManagementRequestContextImpl$AsyncTaskRunner.run(ManagementRequestContextImpl.java:160)
>   at org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
>   at org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1985)
>   at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1487)
>   at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1378)
>   at java.lang.Thread.run(Thread.java:748)
>   at org.jboss.threads.JBossThread.run(JBossThread.java:485)
> {code}



--
This message was sent by Atlassian JIRA
(v7.5.0#75005)


More information about the jbossts-issues mailing list