Hi,
We are working on REST-AT solution, while everything seems to work in simple manuel testing.
We have encountered some problems while doing some load testing.
We have tested the scenario with Jboss EAP 7.4.0 (Narayana-5.11.3), WildFly 26 (5.13.1) and Wildfly 35(Narayana-7.1.0)
Before investivating the issue further, we want to make sure we are not doing anything wrong with test scenario and the api usage.
We have a few quick questions;
1)TxSupport class seems deprecated, is there an alternative?
2)Is SRA annonation absolutely necessary? Or using @Transactional (jakarta) is fine on participants' end?
As far as I understand this should be fine from the docs but not sure since there are some problems.
Trace logs shows some potentials problems; (participant end, tracing only done with EAP version)
suggesting that some threadlocals are not cleared. (tracelog-1)
And also it suggests that once a thread is "corrupted", it does not recover and causes others tasks failed in the manner of transaction integrity.
When we trace this particular thread, there are some other exceptions, honestly it is hard to guess which one is the root cause where some internals/threadlocals are not cleared.
So before diving too deep, we wanted to make sure we are not doing something wrong on our part.
tracelog-1:
2025-01-15 14:49:37,766 TRACE [org.jboss.narayana.rest.integration.ParticipantResource] (default task-150) PUT request on ParticipantResource. ParticipantId: 0:ffff0ad79245:60fc5db7:67879a84:43530, content: txstatus=TransactionCommitted
2025-01-15 14:49:37,784 TRACE [org.jboss.narayana.rest.bridge.inbound.InboundBridgeParticipant] (default task-150) InboundBridgeParticipant.commit: xid=< 131081, 29, 64, 0000000000-1-110-41-1106996-493-73103-121-102-12404534449, 0000000000000000000000000000000000000000000000000000000000000000 >
2025-01-15 14:49:37,784 TRACE [org.jboss.narayana.rest.bridge.inbound.InboundBridgeManager] (default task-150) InboundBridgeManager.getInboundBridge: xid=< 131081, 29, 64, 0000000000-1-110-41-1106996-493-73103-121-102-12404534449, 0000000000000000000000000000000000000000000000000000000000000000 >
2025-01-15 14:49:37,784 TRACE [org.jboss.narayana.rest.bridge.inbound.InboundBridge] (default task-150) InboundBridge.start <InboundBridge: xid=< 131081, 29, 64, 0000000000-1-110-41-1106996-493-73103-121-102-12404534449, 0000000000000000000000000000000000000000000000000000000000000000 >, enlistmentUrl=
http://localhost:8080/rest-at-coordinator/tx/transaction-manager/0_ffff0ad79245_65dfa452_67879a97_16735>
2025-01-15 14:49:37,784 TRACE [com.arjuna.ats.jta] (default task-150) TransactionImple.getStatus: javax.transaction.Status.STATUS_UNKNOWN
2025-01-15 14:49:37,784 TRACE [com.arjuna.ats.jta] (default task-150) TransactionImpleManager.resume
2025-01-15 14:49:37,784 TRACE [com.arjuna.ats.jta] (default task-150) TransactionImple.getStatus: javax.transaction.Status.STATUS_MARKED_ROLLBACK
2025-01-15 14:49:37,784 WARN [org.jboss.jbossts.star.logging] (default task-150) AT027003: Failed to start the bridge. 'BaseTransaction.checkTransactionState - ARJUNA016051: thread is already associated with a transaction!': java.lang.IllegalStateException: BaseTransaction.checkTransactionState - ARJUNA016051: thread is already associated with a transaction!
at org.jboss.jts//com.arjuna.ats.internal.jta.transaction.arjunacore.BaseTransaction.checkTransactionState(BaseTransaction.java:266)
at org.jboss.jts//com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionManagerImple.resume(TransactionManagerImple.java:96)
at org.jboss.jts.integration//com.arjuna.ats.jbossatx.BaseTransactionManagerDelegate.resume(BaseTransactionManagerDelegate.java:127)
at org.jboss.n...@5.11.3.Final-redhat-00001//org.jboss.narayana.rest.bridge.inbound.InboundBridge.start(InboundBridge.java:106)
at org.jboss.n...@5.11.3.Final-redhat-00001//org.jboss.narayana.rest.bridge.inbound.InboundBridgeParticipant.startBridge(InboundBridgeParticipant.java:137)
at org.jboss.n...@5.11.3.Final-redhat-00001//org.jboss.narayana.rest.bridge.inbound.InboundBridgeParticipant.commit(InboundBridgeParticipant.java:85)
at org.jboss.n...@5.11.3.Final-redhat-00001//org.jboss.narayana.rest.integration.ParticipantResource.commit(ParticipantResource.java:213)
at org.jboss.n...@5.11.3.Final-redhat-00001//org.jboss.narayana.rest.integration.ParticipantResource.terminate(ParticipantResource.java:119)
at jdk.internal.reflect.GeneratedMethodAccessor15.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at org.jboss.restea...@3.15.1.Final-redhat-00001//org.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:138)
at org.jboss.restea...@3.15.1.Final-redhat-00001//org.jboss.resteasy.core.ResourceMethodInvoker.internalInvokeOnTarget(ResourceMethodInvoker.java:546)
at org.jboss.restea...@3.15.1.Final-redhat-00001//org.jboss.resteasy.core.ResourceMethodInvoker.invokeOnTargetAfterFilter(ResourceMethodInvoker.java:435)
at org.jboss.restea...@3.15.1.Final-redhat-00001//org.jboss.resteasy.core.ResourceMethodInvoker.lambda$invokeOnTarget$0(ResourceMethodInvoker.java:396)
at org.jboss.restea...@3.15.1.Final-redhat-00001//org.jboss.resteasy.core.interception.PreMatchContainerRequestContext.filter(PreMatchContainerRequestContext.java:358)
at org.jboss.restea...@3.15.1.Final-redhat-00001//org.jboss.resteasy.core.ResourceMethodInvoker.invokeOnTarget(ResourceMethodInvoker.java:398)
at org.jboss.restea...@3.15.1.Final-redhat-00001//org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:365)
at org.jboss.restea...@3.15.1.Final-redhat-00001//org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:338)
at org.jboss.restea...@3.15.1.Final-redhat-00001//org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:440)
at org.jboss.restea...@3.15.1.Final-redhat-00001//org.jboss.resteasy.core.SynchronousDispatcher.lambda$invoke$4(SynchronousDispatcher.java:229)
at org.jboss.restea...@3.15.1.Final-redhat-00001//org.jboss.resteasy.core.SynchronousDispatcher.lambda$preprocess$0(SynchronousDispatcher.java:135)
at org.jboss.restea...@3.15.1.Final-redhat-00001//org.jboss.resteasy.core.interception.PreMatchContainerRequestContext.filter(PreMatchContainerRequestContext.java:358)
at org.jboss.restea...@3.15.1.Final-redhat-00001//org.jboss.resteasy.core.SynchronousDispatcher.preprocess(SynchronousDispatcher.java:138)
at org.jboss.restea...@3.15.1.Final-redhat-00001//org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:215)
at org.jboss.restea...@3.15.1.Final-redhat-00001//org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:245)
at org.jboss.restea...@3.15.1.Final-redhat-00001//org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:61)
at org.jboss.restea...@3.15.1.Final-redhat-00001//org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:56)
at javax.se...@2.0.0.Final-redhat-00001//javax.servlet.http.HttpServlet.service(HttpServlet.java:590)
at io.undert...@2.2.5.Final-redhat-00001//io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:74)
at io.undert...@2.2.5.Final-redhat-00001//io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62)
at io.undert...@2.2.5.Final-redhat-00001//io.undertow.servlet.handlers.ServletChain$1.handleRequest(ServletChain.java:68)
at io.undert...@2.2.5.Final-redhat-00001//io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)
at io.undert...@2.2.5.Final-redhat-00001//io.undertow.servlet.handlers.RedirectDirHandler.handleRequest(RedirectDirHandler.java:68)
at io.undert...@2.2.5.Final-redhat-00001//io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:117)
at io.undert...@2.2.5.Final-redhat-00001//io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57)
at io.under...@2.2.5.Final-redhat-00001//io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
at io.under...@2.2.5.Final-redhat-00001//io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46)
at io.undert...@2.2.5.Final-redhat-00001//io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64)
at io.under...@2.2.5.Final-redhat-00001//io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60)
at io.undert...@2.2.5.Final-redhat-00001//io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77)
at io.under...@2.2.5.Final-redhat-00001//io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43)
at io.under...@2.2.5.Final-redhat-00001//io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
at io.undert...@2.2.5.Final-redhat-00001//io.undertow.servlet.handlers.SendErrorPageHandler.handleRequest(SendErrorPageHandler.java:52)
at io.under...@2.2.5.Final-redhat-00001//io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
at io.undert...@2.2.5.Final-redhat-00001//io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:269)
at io.undert...@2.2.5.Final-redhat-00001//io.undertow.servlet.handlers.ServletInitialHandler.access$100(ServletInitialHandler.java:78)
at io.undert...@2.2.5.Final-redhat-00001//io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:133)
at io.undert...@2.2.5.Final-redhat-00001//io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:130)
at io.undert...@2.2.5.Final-redhat-00001//io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48)
at io.undert...@2.2.5.Final-redhat-00001//io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43)
at io.undert...@2.2.5.Final-redhat-00001//io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:249)
at io.undert...@2.2.5.Final-redhat-00001//io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:78)
at io.undert...@2.2.5.Final-redhat-00001//io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:99)
at io.under...@2.2.5.Final-redhat-00001//io.undertow.server.Connectors.executeRootHandler(Connectors.java:387)
at io.under...@2.2.5.Final-redhat-00001//io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:841)
at org.jbos...@2.4.0.Final-redhat-00001//org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
at org.jbos...@2.4.0.Final-redhat-00001//org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1990)
at org.jbos...@2.4.0.Final-redhat-00001//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1486)
at org.jbos...@2.4.0.Final-redhat-00001//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1377)
at org.jbo...@3.8.4.Final-redhat-00001//org.xnio.XnioWorker$WorkerThreadFactory$1$1.run(XnioWorker.java:1280)
at java.base/java.lang.Thread.run(Thread.java:833)