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