This is an automated email from the ASF dual-hosted git repository.

clebertsuconic pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/activemq-artemis.git


The following commit(s) were added to refs/heads/master by this push:
     new 506c03a  ARTEMIS-2559 Clear Transaction out of ResourceManager in case 
of failure
     new c2c0890  This closes #2900
506c03a is described below

commit 506c03a884bf7e5560f58b3f125e3d9976dcadfb
Author: Clebert Suconic <[email protected]>
AuthorDate: Fri Nov 22 10:30:29 2019 -0500

    ARTEMIS-2559 Clear Transaction out of ResourceManager in case of failure
---
 .../apache/activemq/artemis/core/server/impl/ServerSessionImpl.java | 6 ++++++
 .../apache/activemq/artemis/core/transaction/ResourceManager.java   | 2 ++
 .../activemq/artemis/core/transaction/impl/ResourceManagerImpl.java | 5 +++++
 .../activemq/artemis/tests/integration/xa/SessionFailureXATest.java | 2 ++
 4 files changed, 15 insertions(+)

diff --git 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ServerSessionImpl.java
 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ServerSessionImpl.java
index 7b385ce..34393c7 100644
--- 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ServerSessionImpl.java
+++ 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ServerSessionImpl.java
@@ -392,12 +392,18 @@ public class ServerSessionImpl implements ServerSession, 
FailureListener {
 
             Transaction txToRollback = tx;
             if (txToRollback != null) {
+               if (txToRollback.getXid() != null) {
+                  resourceManager.removeTransaction(txToRollback.getXid());
+               }
                txToRollback.rollbackIfPossible();
             }
 
             txToRollback = pendingTX;
 
             if (txToRollback != null) {
+               if (txToRollback.getXid() != null) {
+                  resourceManager.removeTransaction(txToRollback.getXid());
+               }
                txToRollback.rollbackIfPossible();
             }
 
diff --git 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/transaction/ResourceManager.java
 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/transaction/ResourceManager.java
index 20bdb5b..630092b 100644
--- 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/transaction/ResourceManager.java
+++ 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/transaction/ResourceManager.java
@@ -46,4 +46,6 @@ public interface ResourceManager extends ActiveMQComponent {
 
    List<Xid> getInDoubtTransactions();
 
+   int size();
+
 }
diff --git 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/transaction/impl/ResourceManagerImpl.java
 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/transaction/impl/ResourceManagerImpl.java
index 068cd4e..cb49584 100644
--- 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/transaction/impl/ResourceManagerImpl.java
+++ 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/transaction/impl/ResourceManagerImpl.java
@@ -62,6 +62,11 @@ public class ResourceManagerImpl implements ResourceManager {
    // ActiveMQComponent implementation
 
    @Override
+   public int size() {
+      return transactions.size();
+   }
+
+   @Override
    public void start() throws Exception {
       if (started) {
          return;
diff --git 
a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/xa/SessionFailureXATest.java
 
b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/xa/SessionFailureXATest.java
index 73ecc47..300d8ab 100644
--- 
a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/xa/SessionFailureXATest.java
+++ 
b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/xa/SessionFailureXATest.java
@@ -167,6 +167,8 @@ public class SessionFailureXATest extends ActiveMQTestBase {
 
       Wait.assertEquals(0, () -> messagingService.getSessions().size());
 
+      Wait.assertEquals(0, messagingService.getResourceManager()::size);
+
       locator = createInVMNonHALocator();
       sessionFactory = createSessionFactory(locator);
       clientSession = addClientSession(sessionFactory.createSession(true, 
false, false));

Reply via email to