https://issues.apache.org/jira/browse/AMQ-4656 - first stab at improving keepDurableSubsActive feature, by not stoping/starting cursor on subscription (de)activating

git-svn-id: https://svn.apache.org/repos/asf/activemq/trunk@1511333 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Bosanac Dejan 2013-08-07 14:36:40 +00:00
parent 45c399d810
commit a7533ba922
7 changed files with 33 additions and 17 deletions

View File

@ -162,17 +162,19 @@ public class DurableTopicSubscription extends PrefetchSubscription implements Us
} }
synchronized (pendingLock) { synchronized (pendingLock) {
pending.setSystemUsage(memoryManager); if (!((StoreDurableSubscriberCursor) pending).isStarted() || !keepDurableSubsActive) {
pending.setMemoryUsageHighWaterMark(getCursorMemoryHighWaterMark()); pending.setSystemUsage(memoryManager);
pending.setMaxAuditDepth(getMaxAuditDepth()); pending.setMemoryUsageHighWaterMark(getCursorMemoryHighWaterMark());
pending.setMaxProducersToAudit(getMaxProducersToAudit()); pending.setMaxAuditDepth(getMaxAuditDepth());
pending.start(); pending.setMaxProducersToAudit(getMaxProducersToAudit());
// If nothing was in the persistent store, then try to use the pending.start();
// recovery policy. // If nothing was in the persistent store, then try to use the
if (pending.isEmpty()) { // recovery policy.
for (Destination destination : durableDestinations.values()) { if (pending.isEmpty()) {
Topic topic = (Topic) destination; for (Destination destination : durableDestinations.values()) {
topic.recoverRetroactiveMessages(context, this); Topic topic = (Topic) destination;
topic.recoverRetroactiveMessages(context, this);
}
} }
} }
} }
@ -195,7 +197,9 @@ public class DurableTopicSubscription extends PrefetchSubscription implements Us
List<MessageReference> savedDispateched = null; List<MessageReference> savedDispateched = null;
synchronized (pendingLock) { synchronized (pendingLock) {
pending.stop(); if (!keepDurableSubsActive) {
pending.stop();
}
synchronized (dispatchLock) { synchronized (dispatchLock) {
for (Destination destination : durableDestinations.values()) { for (Destination destination : durableDestinations.values()) {

View File

@ -309,7 +309,7 @@ public abstract class AbstractPendingMessageCursor implements PendingMessageCurs
} }
} }
protected synchronized boolean isStarted() { public synchronized boolean isStarted() {
return started; return started;
} }

View File

@ -211,7 +211,7 @@ public abstract class AbstractStoreCursor extends AbstractPendingMessageCursor i
} }
public final synchronized void addMessageFirst(MessageReference node) throws Exception { public synchronized void addMessageFirst(MessageReference node) throws Exception {
setCacheEnabled(false); setCacheEnabled(false);
size++; size++;
} }

View File

@ -16,6 +16,7 @@
*/ */
package org.apache.activemq.broker.region.cursors; package org.apache.activemq.broker.region.cursors;
import org.apache.activemq.broker.region.MessageReference;
import org.apache.activemq.broker.region.Subscription; import org.apache.activemq.broker.region.Subscription;
import org.apache.activemq.broker.region.Topic; import org.apache.activemq.broker.region.Topic;
import org.apache.activemq.command.Message; import org.apache.activemq.command.Message;
@ -60,6 +61,11 @@ class TopicStorePrefetch extends AbstractStoreCursor {
throw new RuntimeException("Not supported"); throw new RuntimeException("Not supported");
} }
public synchronized void addMessageFirst(MessageReference node) throws Exception {
batchList.addMessageFirst(node);
size++;
}
@Override @Override
public synchronized boolean recoverMessage(Message message, boolean cached) throws Exception { public synchronized boolean recoverMessage(Message message, boolean cached) throws Exception {

View File

@ -213,6 +213,7 @@ public class DurableConsumerTest extends CombinationTestSupport{
public void testConcurrentDurableConsumer() throws Exception{ public void testConcurrentDurableConsumer() throws Exception{
broker.start(); broker.start();
broker.waitUntilStarted();
factory = createConnectionFactory(); factory = createConnectionFactory();
final String topicName = getName(); final String topicName = getName();
@ -408,6 +409,7 @@ public class DurableConsumerTest extends CombinationTestSupport{
super.tearDown(); super.tearDown();
if (broker != null) { if (broker != null) {
broker.stop(); broker.stop();
broker.waitUntilStopped();
broker = null; broker = null;
} }
} }

View File

@ -225,8 +225,10 @@ public class DurableSubSelectorDelayWithRestartTest {
} while (true); } while (true);
} finally { } finally {
sess.close(); try {
con.close(); sess.close();
con.close();
} catch (Exception e) {}
LOG.info(toString() + " OFFLINE."); LOG.info(toString() + " OFFLINE.");
} }

View File

@ -130,6 +130,7 @@ public class DurableSubscriptionOfflineTest extends org.apache.activemq.TestSupp
((KahaDBPersistenceAdapter)broker.getPersistenceAdapter()).setJournalMaxFileLength(journalMaxFileLength); ((KahaDBPersistenceAdapter)broker.getPersistenceAdapter()).setJournalMaxFileLength(journalMaxFileLength);
} }
broker.start(); broker.start();
broker.waitUntilStarted();
} }
private void destroyBroker() throws Exception { private void destroyBroker() throws Exception {
@ -1120,6 +1121,7 @@ public class DurableSubscriptionOfflineTest extends org.apache.activemq.TestSupp
LOG.info("Iteration: " + i); LOG.info("Iteration: " + i);
doTestOrderOnActivateDeactivate(); doTestOrderOnActivateDeactivate();
broker.stop(); broker.stop();
broker.waitUntilStopped();
createBroker(true /*deleteAllMessages*/); createBroker(true /*deleteAllMessages*/);
} }
} }