You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by cl...@apache.org on 2017/05/03 20:41:49 UTC
[1/2] activemq-artemis git commit: ARTEMIS-1140 Avoid lock on queue
for message counts
Repository: activemq-artemis
Updated Branches:
refs/heads/1.x 6f0babb36 -> 468b8a954
ARTEMIS-1140 Avoid lock on queue for message counts
(cherry picked from commit 33f2ad65c915a8fa2c3606271f106bf5703ace83)
Project: http://git-wip-us.apache.org/repos/asf/activemq-artemis/repo
Commit: http://git-wip-us.apache.org/repos/asf/activemq-artemis/commit/534fd809
Tree: http://git-wip-us.apache.org/repos/asf/activemq-artemis/tree/534fd809
Diff: http://git-wip-us.apache.org/repos/asf/activemq-artemis/diff/534fd809
Branch: refs/heads/1.x
Commit: 534fd8093d4bff4b0f883af1a0fbb3df2d701546
Parents: 6f0babb
Author: Clebert Suconic <cl...@apache.org>
Authored: Wed May 3 12:10:59 2017 -0400
Committer: Clebert Suconic <cl...@apache.org>
Committed: Wed May 3 16:41:31 2017 -0400
----------------------------------------------------------------------
.../artemis/core/server/impl/QueueImpl.java | 32 +++++++++++---------
1 file changed, 18 insertions(+), 14 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/534fd809/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/QueueImpl.java
----------------------------------------------------------------------
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/QueueImpl.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/QueueImpl.java
index d0d1f10..040a996 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/QueueImpl.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/QueueImpl.java
@@ -208,6 +208,8 @@ public class QueueImpl implements Queue {
// We cache the consumers here since we don't want to include the redistributor
+ private final AtomicInteger consumersCount = new AtomicInteger();
+
private final Set<Consumer> consumerSet = new HashSet<>();
private final Map<SimpleString, Consumer> groups = new HashMap<>();
@@ -717,7 +719,9 @@ public class QueueImpl implements Queue {
consumerList.add(new ConsumerHolder(consumer));
- consumerSet.add(consumer);
+ if (consumerSet.add(consumer)) {
+ consumersCount.incrementAndGet();
+ }
if (refCountForConsumers != null) {
refCountForConsumers.increment();
@@ -745,7 +749,9 @@ public class QueueImpl implements Queue {
pos = consumerList.size() - 1;
}
- consumerSet.remove(consumer);
+ if (consumerSet.remove(consumer)) {
+ consumersCount.decrementAndGet();
+ }
LinkedList<SimpleString> groupsToRemove = null;
@@ -830,8 +836,8 @@ public class QueueImpl implements Queue {
}
@Override
- public synchronized int getConsumerCount() {
- return consumerSet.size();
+ public int getConsumerCount() {
+ return consumersCount.get();
}
@Override
@@ -917,16 +923,14 @@ public class QueueImpl implements Queue {
@Override
public long getMessageCount() {
- synchronized (this) {
- if (pageSubscription != null) {
- // messageReferences will have depaged messages which we need to discount from the counter as they are
- // counted on the pageSubscription as well
- return messageReferences.size() + getScheduledCount() +
- deliveringCount.get() +
- pageSubscription.getMessageCount();
- } else {
- return messageReferences.size() + getScheduledCount() + deliveringCount.get();
- }
+ if (pageSubscription != null) {
+ // messageReferences will have depaged messages which we need to discount from the counter as they are
+ // counted on the pageSubscription as well
+ return messageReferences.size() + getScheduledCount() +
+ deliveringCount.get() +
+ pageSubscription.getMessageCount();
+ } else {
+ return messageReferences.size() + getScheduledCount() + deliveringCount.get();
}
}
[2/2] activemq-artemis git commit: ARTEMIS-1140: Trivial test fix
Posted by cl...@apache.org.
ARTEMIS-1140: Trivial test fix
(cherry picked from commit 0146109d6a06f9702f245034a43c49dffc5779bd)
Project: http://git-wip-us.apache.org/repos/asf/activemq-artemis/repo
Commit: http://git-wip-us.apache.org/repos/asf/activemq-artemis/commit/468b8a95
Tree: http://git-wip-us.apache.org/repos/asf/activemq-artemis/tree/468b8a95
Diff: http://git-wip-us.apache.org/repos/asf/activemq-artemis/diff/468b8a95
Branch: refs/heads/1.x
Commit: 468b8a954bb4d2a163908fb8edb7a284b7b32b86
Parents: 534fd80
Author: Clebert Suconic <cl...@apache.org>
Authored: Wed May 3 16:12:01 2017 -0400
Committer: Clebert Suconic <cl...@apache.org>
Committed: Wed May 3 16:41:42 2017 -0400
----------------------------------------------------------------------
.../artemis/jms/tests/ActiveMQServerTestCase.java | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/468b8a95/tests/jms-tests/src/test/java/org/apache/activemq/artemis/jms/tests/ActiveMQServerTestCase.java
----------------------------------------------------------------------
diff --git a/tests/jms-tests/src/test/java/org/apache/activemq/artemis/jms/tests/ActiveMQServerTestCase.java b/tests/jms-tests/src/test/java/org/apache/activemq/artemis/jms/tests/ActiveMQServerTestCase.java
index 42d6ea5..c65f0cd 100644
--- a/tests/jms-tests/src/test/java/org/apache/activemq/artemis/jms/tests/ActiveMQServerTestCase.java
+++ b/tests/jms-tests/src/test/java/org/apache/activemq/artemis/jms/tests/ActiveMQServerTestCase.java
@@ -371,7 +371,15 @@ public abstract class ActiveMQServerTestCase {
if (binding != null && binding instanceof LocalQueueBinding) {
((LocalQueueBinding) binding).getQueue().flushExecutor();
}
- Long messageCount = ActiveMQServerTestCase.servers.get(0).getMessageCountForQueue(queueName);
+ Long messageCount = null;
+ for (int i = 0; i < 10; i++) {
+ messageCount = servers.get(0).getMessageCountForQueue(queueName);
+ if (messageCount.longValue() == expected) {
+ break;
+ } else {
+ Thread.sleep(100);
+ }
+ }
ProxyAssertSupport.assertEquals(expected, messageCount.intValue());
return expected == messageCount.intValue();