You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ta...@apache.org on 2017/04/04 22:05:41 UTC

qpid-jms git commit: QPIDJMS-283 In-doubt state on JmsTransactionInfo should be volatile

Repository: qpid-jms
Updated Branches:
  refs/heads/master f096ac071 -> c1d7e7461


QPIDJMS-283 In-doubt state on JmsTransactionInfo should be volatile

The in-doubt state on the transaction info should be volatile as it may
be modified on connection recovery without a lock when a commit or
rollback request is pending on the failover transport.  Add some
additional test support features from ActiveMQ to let the integration
tests run in repoest cycles.  

Project: http://git-wip-us.apache.org/repos/asf/qpid-jms/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-jms/commit/c1d7e746
Tree: http://git-wip-us.apache.org/repos/asf/qpid-jms/tree/c1d7e746
Diff: http://git-wip-us.apache.org/repos/asf/qpid-jms/diff/c1d7e746

Branch: refs/heads/master
Commit: c1d7e7461ec93d6714c1fb3ce24ab23fd948aabf
Parents: f096ac0
Author: Timothy Bish <ta...@gmail.com>
Authored: Tue Apr 4 18:05:27 2017 -0400
Committer: Timothy Bish <ta...@gmail.com>
Committed: Tue Apr 4 18:05:27 2017 -0400

----------------------------------------------------------------------
 pom.xml                                                        | 2 +-
 .../java/org/apache/qpid/jms/JmsLocalTransactionContext.java   | 5 +++++
 .../main/java/org/apache/qpid/jms/meta/JmsTransactionInfo.java | 2 +-
 qpid-jms-interop-tests/qpid-jms-activemq-tests/pom.xml         | 6 ++++++
 .../apache/qpid/jms/failover/JmsTxProducerFailoverTest.java    | 5 +++++
 5 files changed, 18 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/c1d7e746/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 7a00d6f..0ca8e9d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -48,7 +48,7 @@
     <slf4j-version>1.7.25</slf4j-version>
     <geronimo.jms.2.spec.version>1.0-alpha-2</geronimo.jms.2.spec.version>
     <!-- Test Dependency Versions for this Project -->
-    <activemq-version>5.14.3</activemq-version>
+    <activemq-version>5.14.4</activemq-version>
     <junit-version>4.12</junit-version>
     <fuse-joram-tests-version>1.0</fuse-joram-tests-version>
     <jetty-version>9.2.13.v20150730</jetty-version>

http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/c1d7e746/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsLocalTransactionContext.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsLocalTransactionContext.java b/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsLocalTransactionContext.java
index 854e170..e9a49ed 100644
--- a/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsLocalTransactionContext.java
+++ b/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsLocalTransactionContext.java
@@ -348,12 +348,17 @@ public class JmsLocalTransactionContext implements JmsTransactionContext {
                         transactionInfo.setInDoubt(true);
                     }
                 });
+
+                LOG.trace("Transaction recovery creating new TX:{} after failover.", transactionInfo.getId());
+
                 provider.create(transactionInfo, request);
                 request.sync();
             } finally {
                 lock.writeLock().unlock();
             }
         } else {
+            LOG.trace("Transaction recovery marking current TX:{} as in-doubt.", transactionInfo.getId());
+
             // We did not get the lock so there is an operation in progress and our only
             // option is to mark the state as failed so a commit will roll back.
             transactionInfo.setInDoubt(true);

http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/c1d7e746/qpid-jms-client/src/main/java/org/apache/qpid/jms/meta/JmsTransactionInfo.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/main/java/org/apache/qpid/jms/meta/JmsTransactionInfo.java b/qpid-jms-client/src/main/java/org/apache/qpid/jms/meta/JmsTransactionInfo.java
index 0f32b16..0e45254 100644
--- a/qpid-jms-client/src/main/java/org/apache/qpid/jms/meta/JmsTransactionInfo.java
+++ b/qpid-jms-client/src/main/java/org/apache/qpid/jms/meta/JmsTransactionInfo.java
@@ -20,7 +20,7 @@ public final class JmsTransactionInfo extends JmsAbstractResource implements Com
 
     private final JmsSessionId sessionId;
     private final JmsTransactionId transactionId;
-    private boolean inDoubt;
+    private volatile boolean inDoubt;
 
     public JmsTransactionInfo(JmsSessionId sessionId, JmsTransactionId transactionId) {
         if (sessionId == null) {

http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/c1d7e746/qpid-jms-interop-tests/qpid-jms-activemq-tests/pom.xml
----------------------------------------------------------------------
diff --git a/qpid-jms-interop-tests/qpid-jms-activemq-tests/pom.xml b/qpid-jms-interop-tests/qpid-jms-activemq-tests/pom.xml
index 961c37c..5302a39 100644
--- a/qpid-jms-interop-tests/qpid-jms-activemq-tests/pom.xml
+++ b/qpid-jms-interop-tests/qpid-jms-activemq-tests/pom.xml
@@ -129,6 +129,12 @@
       <version>${activemq-version}</version>
       <scope>test</scope>
     </dependency>
+    <dependency>
+      <groupId>org.apache.activemq.tooling</groupId>
+      <artifactId>activemq-junit</artifactId>
+      <version>${activemq-version}</version>
+      <scope>test</scope>
+    </dependency>
   </dependencies>
 
   <build>

http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/c1d7e746/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/failover/JmsTxProducerFailoverTest.java
----------------------------------------------------------------------
diff --git a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/failover/JmsTxProducerFailoverTest.java b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/failover/JmsTxProducerFailoverTest.java
index d9d56bb..29670a8 100644
--- a/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/failover/JmsTxProducerFailoverTest.java
+++ b/qpid-jms-interop-tests/qpid-jms-activemq-tests/src/test/java/org/apache/qpid/jms/failover/JmsTxProducerFailoverTest.java
@@ -31,14 +31,18 @@ import javax.jms.Session;
 import javax.jms.TransactionRolledBackException;
 
 import org.apache.activemq.broker.jmx.QueueViewMBean;
+import org.apache.activemq.junit.ActiveMQTestRunner;
+import org.apache.activemq.junit.Repeat;
 import org.apache.qpid.jms.JmsConnection;
 import org.apache.qpid.jms.support.AmqpTestSupport;
 import org.apache.qpid.jms.support.Wait;
 import org.junit.Test;
+import org.junit.runner.RunWith;
 
 /**
  * Test MessageProducer behavior when in a TX and failover occurs.
  */
+@RunWith(ActiveMQTestRunner.class)
 public class JmsTxProducerFailoverTest extends AmqpTestSupport {
 
     @Override
@@ -193,6 +197,7 @@ public class JmsTxProducerFailoverTest extends AmqpTestSupport {
      * sends the commit will fail and no messages are left on the broker.
      */
     @Test(timeout=60000)
+    @Repeat(repetitions = 1)
     public void testTxProducerSendWorksButCommitFails() throws Exception {
         URI brokerURI = new URI(getAmqpFailoverURI());
 


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org