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 2016/09/01 18:30:12 UTC

qpid-jms git commit: QPIDJMS-204 Fix intermittent test failure

Repository: qpid-jms
Updated Branches:
  refs/heads/master ae12a5a73 -> c676404d8


QPIDJMS-204 Fix intermittent test failure

The remote close occurs so close to the open that it showed a small race
where the session did not yet know about the producer and as such the
remote close event could not be propagated to it.  Consumer code has the
same issue and is fixed here as well. 

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

Branch: refs/heads/master
Commit: c676404d8e2aa49a2ed1811e9ba3dc53a3eed5b2
Parents: ae12a5a
Author: Timothy Bish <ta...@gmail.com>
Authored: Thu Sep 1 14:29:52 2016 -0400
Committer: Timothy Bish <ta...@gmail.com>
Committed: Thu Sep 1 14:29:59 2016 -0400

----------------------------------------------------------------------
 .../main/java/org/apache/qpid/jms/JmsMessageConsumer.java   | 9 +++++++--
 .../main/java/org/apache/qpid/jms/JmsMessageProducer.java   | 8 +++++++-
 .../src/main/java/org/apache/qpid/jms/JmsSession.java       | 3 ---
 .../qpid/jms/integration/ProducerIntegrationTest.java       | 7 +++----
 4 files changed, 17 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/c676404d/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsMessageConsumer.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsMessageConsumer.java b/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsMessageConsumer.java
index 893a576..de7ef63 100644
--- a/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsMessageConsumer.java
+++ b/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsMessageConsumer.java
@@ -106,11 +106,16 @@ public class JmsMessageConsumer implements AutoCloseable, MessageConsumer, JmsMe
         consumerInfo.setPresettle(session.getPresettlePolicy().isConsumerPresttled(session, destination));
         consumerInfo.setDeserializationPolicy(deserializationPolicy);
 
-        session.getConnection().createResource(consumerInfo);
+        session.add(this);
+        try {
+            session.getConnection().createResource(consumerInfo);
+        } catch (JMSException jmse) {
+            session.remove(this);
+            throw jmse;
+        }
     }
 
     public void init() throws JMSException {
-        session.add(this);
         startConsumerResource();
     }
 

http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/c676404d/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsMessageProducer.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsMessageProducer.java b/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsMessageProducer.java
index e040068..a1bbe38 100644
--- a/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsMessageProducer.java
+++ b/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsMessageProducer.java
@@ -64,7 +64,13 @@ public class JmsMessageProducer implements AutoCloseable, MessageProducer {
         this.producerInfo.setDestination(destination);
         this.producerInfo.setPresettle(session.getPresettlePolicy().isProducerPresttled(session, destination));
 
-        session.getConnection().createResource(producerInfo);
+        session.add(this);
+        try {
+            session.getConnection().createResource(producerInfo);
+        } catch (JMSException jmse) {
+            session.remove(this);
+            throw jmse;
+        }
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/c676404d/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsSession.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsSession.java b/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsSession.java
index b8aded8..4644267 100644
--- a/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsSession.java
+++ b/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsSession.java
@@ -469,7 +469,6 @@ public class JmsSession implements AutoCloseable, Session, QueueSession, TopicSe
         checkClosed();
         JmsDestination dest = JmsMessageTransformation.transformDestination(connection, destination);
         JmsMessageProducer result = new JmsMessageProducer(getNextProducerId(), this, dest);
-        add(result);
         return result;
     }
 
@@ -481,7 +480,6 @@ public class JmsSession implements AutoCloseable, Session, QueueSession, TopicSe
         checkClosed();
         JmsDestination dest = JmsMessageTransformation.transformDestination(connection, queue);
         JmsQueueSender result = new JmsQueueSender(getNextProducerId(), this, dest);
-        add(result);
         return result;
     }
 
@@ -493,7 +491,6 @@ public class JmsSession implements AutoCloseable, Session, QueueSession, TopicSe
         checkClosed();
         JmsDestination dest = JmsMessageTransformation.transformDestination(connection, topic);
         JmsTopicPublisher result = new JmsTopicPublisher(getNextProducerId(), this, dest);
-        add(result);
         return result;
     }
 

http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/c676404d/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/ProducerIntegrationTest.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/ProducerIntegrationTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/ProducerIntegrationTest.java
index c334be0..6c53398 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/ProducerIntegrationTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/ProducerIntegrationTest.java
@@ -40,7 +40,6 @@ import java.util.Set;
 import java.util.UUID;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
-import java.util.concurrent.atomic.AtomicBoolean;
 
 import javax.jms.Connection;
 import javax.jms.DeliveryMode;
@@ -866,12 +865,12 @@ public class ProducerIntegrationTest extends QpidJmsTestCase {
         final String BREAD_CRUMB = "ErrorMessageBreadCrumb";
 
         try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
-            final AtomicBoolean producerClosed = new AtomicBoolean();
+            final CountDownLatch producerClosed = new CountDownLatch(1);
             JmsConnection connection = (JmsConnection) testFixture.establishConnecton(testPeer);
             connection.addConnectionListener(new JmsDefaultConnectionListener() {
                 @Override
                 public void onProducerClosed(MessageProducer producer, Exception exception) {
-                    producerClosed.set(true);
+                    producerClosed.countDown();
                 }
             });
 
@@ -908,7 +907,7 @@ public class ProducerIntegrationTest extends QpidJmsTestCase {
                 }
             }, 10000, 10));
 
-            assertTrue("Producer closed callback didn't trigger", producerClosed.get());
+            assertTrue("Producer closed callback didn't trigger", producerClosed.await(10, TimeUnit.SECONDS));
 
             // Try closing it explicitly, should effectively no-op in client.
             // The test peer will throw during close if it sends anything.


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