[jboss-cvs] JBoss Messaging SVN: r5884 - in trunk: src/main/org/jboss/messaging/core/client/impl and 22 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Tue Feb 17 14:52:52 EST 2009
Author: timfox
Date: 2009-02-17 14:52:51 -0500 (Tue, 17 Feb 2009)
New Revision: 5884
Added:
trunk/src/main/org/jboss/messaging/core/server/cluster/impl/Redistributor.java
trunk/tests/src/org/jboss/messaging/tests/integration/cluster/distribution/MessageRedistributionTest.java
Modified:
trunk/.classpath
trunk/src/main/org/jboss/messaging/core/client/impl/ClientSessionImpl.java
trunk/src/main/org/jboss/messaging/core/client/impl/ConnectionManagerImpl.java
trunk/src/main/org/jboss/messaging/core/deployers/impl/AddressSettingsDeployer.java
trunk/src/main/org/jboss/messaging/core/management/impl/ManagementServiceImpl.java
trunk/src/main/org/jboss/messaging/core/management/impl/QueueControl.java
trunk/src/main/org/jboss/messaging/core/postoffice/Bindings.java
trunk/src/main/org/jboss/messaging/core/postoffice/PostOffice.java
trunk/src/main/org/jboss/messaging/core/postoffice/impl/BindingsImpl.java
trunk/src/main/org/jboss/messaging/core/postoffice/impl/LocalQueueBinding.java
trunk/src/main/org/jboss/messaging/core/postoffice/impl/PostOfficeImpl.java
trunk/src/main/org/jboss/messaging/core/remoting/impl/RemotingConnectionImpl.java
trunk/src/main/org/jboss/messaging/core/security/impl/SecurityStoreImpl.java
trunk/src/main/org/jboss/messaging/core/server/Queue.java
trunk/src/main/org/jboss/messaging/core/server/cluster/ClusterManager.java
trunk/src/main/org/jboss/messaging/core/server/cluster/impl/BridgeImpl.java
trunk/src/main/org/jboss/messaging/core/server/cluster/impl/ClusterConnectionImpl.java
trunk/src/main/org/jboss/messaging/core/server/cluster/impl/ClusterManagerImpl.java
trunk/src/main/org/jboss/messaging/core/server/impl/MessagingServerImpl.java
trunk/src/main/org/jboss/messaging/core/server/impl/QueueFactoryImpl.java
trunk/src/main/org/jboss/messaging/core/server/impl/QueueImpl.java
trunk/src/main/org/jboss/messaging/core/server/impl/ServerConsumerImpl.java
trunk/src/main/org/jboss/messaging/core/server/impl/ServerSessionImpl.java
trunk/src/main/org/jboss/messaging/core/settings/impl/AddressSettings.java
trunk/tests/src/org/jboss/messaging/tests/integration/cluster/distribution/ClusterTestBase.java
trunk/tests/src/org/jboss/messaging/tests/integration/cluster/distribution/OneWayChainClusterTest.java
trunk/tests/src/org/jboss/messaging/tests/integration/cluster/distribution/OnewayTwoNodeClusterTest.java
trunk/tests/src/org/jboss/messaging/tests/integration/cluster/distribution/SymmetricClusterTest.java
trunk/tests/src/org/jboss/messaging/tests/integration/cluster/failover/MultiThreadRandomFailoverTestBase.java
trunk/tests/src/org/jboss/messaging/tests/integration/cluster/failover/RandomFailoverTest.java
trunk/tests/src/org/jboss/messaging/tests/integration/paging/PageCrashTest.java
trunk/tests/src/org/jboss/messaging/tests/performance/persistence/FakePostOffice.java
trunk/tests/src/org/jboss/messaging/tests/stress/failover/LargeMessageMultiThreadFailoverStressTest.java
trunk/tests/src/org/jboss/messaging/tests/stress/failover/MultiThreadRandomFailoverStressTest.java
trunk/tests/src/org/jboss/messaging/tests/stress/failover/RandomFailoverStressTest.java
trunk/tests/src/org/jboss/messaging/tests/timing/core/server/impl/QueueImplTest.java
trunk/tests/src/org/jboss/messaging/tests/unit/core/deployers/impl/AddressSettingsDeployerTest.java
trunk/tests/src/org/jboss/messaging/tests/unit/core/journal/impl/JournalImplTestUnit.java
trunk/tests/src/org/jboss/messaging/tests/unit/core/management/impl/QueueControlTest.java
trunk/tests/src/org/jboss/messaging/tests/unit/core/server/impl/QueueFactoryImplTest.java
trunk/tests/src/org/jboss/messaging/tests/unit/core/server/impl/QueueImplTest.java
trunk/tests/src/org/jboss/messaging/tests/unit/core/settings/impl/AddressSettingsTest.java
Log:
Redistribution fixes etc
Modified: trunk/.classpath
===================================================================
--- trunk/.classpath 2009-02-17 17:18:39 UTC (rev 5883)
+++ trunk/.classpath 2009-02-17 19:52:51 UTC (rev 5884)
@@ -64,6 +64,6 @@
<classpathentry kind="lib" path="thirdparty/netty/lib/netty-3.1.0.ALPHA2.jar" sourcepath="thirdparty/netty/lib/netty-3.1.0.ALPHA2-sources.jar"/>
<classpathentry kind="lib" path="thirdparty/apache-mina/lib/mina-core-2.0.0-M4.jar"/>
<classpathentry kind="lib" path="thirdparty/slf4j/log4j/lib/slf4j-log4j12-1.5.2.jar"/>
- <classpathentry kind="lib" path="thirdparty/slf4j/api/lib/slf4j-api-1.5.2.jar"/>
+ <classpathentry kind="lib" path="thirdparty/slf4j/api/lib/slf4j-api-1.4.3.jar"/>
<classpathentry kind="output" path="eclipse-output"/>
</classpath>
Modified: trunk/src/main/org/jboss/messaging/core/client/impl/ClientSessionImpl.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/client/impl/ClientSessionImpl.java 2009-02-17 17:18:39 UTC (rev 5883)
+++ trunk/src/main/org/jboss/messaging/core/client/impl/ClientSessionImpl.java 2009-02-17 19:52:51 UTC (rev 5884)
@@ -175,6 +175,8 @@
private volatile boolean started;
private SendAcknowledgementHandler sendAckHandler;
+
+ private volatile boolean inClose;
// Constructors ----------------------------------------------------------------------------
@@ -747,7 +749,7 @@
consumer.handleLargeMessageContinuation(continuation);
}
}
-
+
public void close() throws MessagingException
{
if (closed)
@@ -759,12 +761,18 @@
{
closeChildren();
- channel.sendBlocking(new SessionCloseMessage());
+ inClose = true;
+
+ channel.sendBlocking(new SessionCloseMessage());
}
catch (Throwable ignore)
{
// Session close should always return without exception
}
+ finally
+ {
+ inClose = false;
+ }
doCleanup();
}
@@ -823,10 +831,24 @@
ok = true;
}
else
- {
- // There may be a close session call blocking - the response will never come because the session has been
- // closed on the server so we need to interrupt it
- channel.returnBlocking();
+ {
+ if (inClose)
+ {
+ // a session re-attach may fail, if the session close was sent before failover started, hit the server,
+ // processed, then before the response was received back, failover occurred, re-attach was attempted. in
+ // this case it's ok - we don't want to call any failure listeners and we don't want to halt the rest of
+ // the failover process.
+ //
+ // however if session re-attach fails and the session was not in a call to close, then we DO want to call
+ // the session listeners so we return false
+ ok = true;
+ }
+ else
+ {
+ log.warn("Session not found on server when attempting to re-attach");
+ }
+
+ channel.returnBlocking();
}
}
catch (Throwable t)
Modified: trunk/src/main/org/jboss/messaging/core/client/impl/ConnectionManagerImpl.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/client/impl/ConnectionManagerImpl.java 2009-02-17 17:18:39 UTC (rev 5883)
+++ trunk/src/main/org/jboss/messaging/core/client/impl/ConnectionManagerImpl.java 2009-02-17 19:52:51 UTC (rev 5884)
@@ -511,7 +511,7 @@
// Forcing return all channels won't guarantee that any blocked thread will return immediately
// So we need to wait for it
forceReturnAllChannel1s();
-
+
// Now we need to make sure that the thread has actually exited and returned it's connections
// before failover occurs
@@ -608,6 +608,7 @@
Map<RemotingConnection, List<ClientSessionInternal>> sessionsPerConnection = new HashMap<RemotingConnection, List<ClientSessionInternal>>();
+
for (Map.Entry<ClientSessionInternal, RemotingConnection> entry : sessions.entrySet())
{
ClientSessionInternal session = entry.getKey();
@@ -674,11 +675,13 @@
// If all connections got ok, then handle failover
for (Map.Entry<ClientSessionInternal, RemotingConnection> entry : sessions.entrySet())
{
- ok = entry.getKey().handleFailover(entry.getValue());
-
- if (!ok)
+ boolean b = entry.getKey().handleFailover(entry.getValue());
+
+ if (!b)
{
- break;
+ //If a session fails to re-attach we doom the lot, but we make sure we try all sessions and don't exit early
+ //or connections might be left lying around
+ ok = false;
}
}
}
Modified: trunk/src/main/org/jboss/messaging/core/deployers/impl/AddressSettingsDeployer.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/deployers/impl/AddressSettingsDeployer.java 2009-02-17 17:18:39 UTC (rev 5883)
+++ trunk/src/main/org/jboss/messaging/core/deployers/impl/AddressSettingsDeployer.java 2009-02-17 19:52:51 UTC (rev 5884)
@@ -18,7 +18,7 @@
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
+ */
package org.jboss.messaging.core.deployers.impl;
@@ -35,42 +35,41 @@
* @author <a href="ataylor at redhat.com">Andy Taylor</a>
*/
public class AddressSettingsDeployer extends XmlDeployer
-{
- private static final String CLUSTERED_NODE_NAME = "clustered";
-
+{
private static final String DEAD_LETTER_ADDRESS_NODE_NAME = "dead-letter-address";
-
+
private static final String EXPIRY_ADDRESS_NODE_NAME = "expiry-address";
-
+
private static final String REDELIVERY_DELAY_NODE_NAME = "redelivery-delay";
-
+
private static final String MAX_SIZE_BYTES_NODE_NAME = "max-size-bytes";
-
+
private static final String DROP_MESSAGES_WHEN_FULL_NODE_NAME = "drop-messages-when-full";
-
+
private static final String PAGE_SIZE_BYTES_NODE_NAME = "page-size-bytes";
-
+
private static final String DISTRIBUTION_POLICY_CLASS_NODE_NAME = "distribution-policy-class";
-
+
private static final String MESSAGE_COUNTER_HISTORY_DAY_LIMIT_NODE_NAME = "message-counter-history-day-limit";
private static final String SOLO_MESSAGE_NODE_NAME = "solo-queue";
private final HierarchicalRepository<AddressSettings> addressSettingsRepository;
- public AddressSettingsDeployer(final DeploymentManager deploymentManager, final HierarchicalRepository<AddressSettings> addressSettingsRepository)
+ public AddressSettingsDeployer(final DeploymentManager deploymentManager,
+ final HierarchicalRepository<AddressSettings> addressSettingsRepository)
{
- super(deploymentManager);
+ super(deploymentManager);
this.addressSettingsRepository = addressSettingsRepository;
}
-
+
/**
* the names of the elements to deploy
* @return the names of the elements todeploy
*/
public String[] getElementTagName()
{
- return new String[]{"address-settings"};
+ return new String[] { "address-settings" };
}
@Override
@@ -79,9 +78,10 @@
if ("deployment".equals(rootNode.getNodeName()))
{
XMLUtil.validate(rootNode, "jbm-configuration.xsd");
- } else
+ }
+ else
{
- XMLUtil.validate(rootNode, "jbm-queues.xsd");
+ XMLUtil.validate(rootNode, "jbm-queues.xsd");
}
}
@@ -93,27 +93,23 @@
public void deploy(Node node) throws Exception
{
String match = node.getAttributes().getNamedItem(getKeyAttribute()).getNodeValue();
-
+
NodeList children = node.getChildNodes();
-
+
AddressSettings addressSettings = new AddressSettings();
-
+
for (int i = 0; i < children.getLength(); i++)
{
Node child = children.item(i);
-
- if (CLUSTERED_NODE_NAME.equalsIgnoreCase(child.getNodeName()))
+
+ if (DEAD_LETTER_ADDRESS_NODE_NAME.equalsIgnoreCase(child.getNodeName()))
{
- addressSettings.setClustered(Boolean.valueOf(child.getTextContent()));
- }
- else if (DEAD_LETTER_ADDRESS_NODE_NAME.equalsIgnoreCase(child.getNodeName()))
- {
SimpleString queueName = new SimpleString(child.getTextContent());
addressSettings.setDeadLetterAddress(queueName);
}
else if (EXPIRY_ADDRESS_NODE_NAME.equalsIgnoreCase(child.getNodeName()))
{
- SimpleString queueName = new SimpleString(child.getTextContent());
+ SimpleString queueName = new SimpleString(child.getTextContent());
addressSettings.setExpiryAddress(queueName);
}
else if (REDELIVERY_DELAY_NODE_NAME.equalsIgnoreCase(child.getNodeName()))
@@ -145,13 +141,13 @@
addressSettings.setSoloQueue(Boolean.valueOf(child.getTextContent().trim()));
}
}
-
+
addressSettingsRepository.addMatch(match, addressSettings);
}
public String[] getConfigFileNames()
{
- return new String[] {"jbm-configuration", "jbm-queues.xml"};
+ return new String[] { "jbm-configuration", "jbm-queues.xml" };
}
/**
@@ -162,7 +158,7 @@
public void undeploy(Node node) throws Exception
{
String match = node.getAttributes().getNamedItem(getKeyAttribute()).getNodeValue();
-
+
addressSettingsRepository.removeMatch(match);
}
Modified: trunk/src/main/org/jboss/messaging/core/management/impl/ManagementServiceImpl.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/management/impl/ManagementServiceImpl.java 2009-02-17 17:18:39 UTC (rev 5883)
+++ trunk/src/main/org/jboss/messaging/core/management/impl/ManagementServiceImpl.java 2009-02-17 19:52:51 UTC (rev 5884)
@@ -240,7 +240,7 @@
messageCounterManager.getMaxDayCount());
messageCounterManager.registerMessageCounter(queue.getName().toString(), counter);
ObjectName objectName = ObjectNames.getQueueObjectName(address, queue.getName());
- QueueControl queueControl = new QueueControl(queue, storageManager, postOffice, addressSettingsRepository, counter);
+ QueueControl queueControl = new QueueControl(queue, postOffice, addressSettingsRepository, counter);
registerInJMX(objectName, new ReplicationAwareQueueControlWrapper(objectName,
queueControl,
managementClusterPassword,
Modified: trunk/src/main/org/jboss/messaging/core/management/impl/QueueControl.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/management/impl/QueueControl.java 2009-02-17 17:18:39 UTC (rev 5883)
+++ trunk/src/main/org/jboss/messaging/core/management/impl/QueueControl.java 2009-02-17 19:52:51 UTC (rev 5884)
@@ -39,7 +39,6 @@
import org.jboss.messaging.core.messagecounter.MessageCounter;
import org.jboss.messaging.core.messagecounter.MessageCounter.DayCounter;
import org.jboss.messaging.core.messagecounter.impl.MessageCounterHelper;
-import org.jboss.messaging.core.persistence.StorageManager;
import org.jboss.messaging.core.postoffice.Binding;
import org.jboss.messaging.core.postoffice.PostOffice;
import org.jboss.messaging.core.server.MessageReference;
@@ -64,8 +63,6 @@
private final Queue queue;
- private final StorageManager storageManager;
-
private final PostOffice postOffice;
private final HierarchicalRepository<AddressSettings> addressSettingsRepository;
@@ -77,13 +74,11 @@
// Constructors --------------------------------------------------
public QueueControl(final Queue queue,
- final StorageManager storageManager,
final PostOffice postOffice,
final HierarchicalRepository<AddressSettings> addressSettingsRepository,
final MessageCounter counter)
{
this.queue = queue;
- this.storageManager = storageManager;
this.postOffice = postOffice;
this.addressSettingsRepository = addressSettingsRepository;
this.counter = counter;
Modified: trunk/src/main/org/jboss/messaging/core/postoffice/Bindings.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/postoffice/Bindings.java 2009-02-17 17:18:39 UTC (rev 5883)
+++ trunk/src/main/org/jboss/messaging/core/postoffice/Bindings.java 2009-02-17 19:52:51 UTC (rev 5884)
@@ -26,6 +26,7 @@
import org.jboss.messaging.core.server.ServerMessage;
import org.jboss.messaging.core.transaction.Transaction;
+import org.jboss.messaging.util.SimpleString;
/**
* A Bindings
@@ -39,12 +40,14 @@
public interface Bindings
{
Collection<Binding> getBindings();
-
+
void route(ServerMessage message, Transaction tx) throws Exception;
-
+
void addBinding(Binding binding);
-
+
void removeBinding(Binding binding);
-
+
void setRouteWhenNoConsumers(boolean takePriorityIntoAccount);
+
+ boolean redistribute(ServerMessage message, SimpleString routingName, Transaction tx) throws Exception;
}
Modified: trunk/src/main/org/jboss/messaging/core/postoffice/PostOffice.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/postoffice/PostOffice.java 2009-02-17 17:18:39 UTC (rev 5883)
+++ trunk/src/main/org/jboss/messaging/core/postoffice/PostOffice.java 2009-02-17 19:52:51 UTC (rev 5884)
@@ -70,6 +70,8 @@
void route(ServerMessage message) throws Exception;
void route(ServerMessage message, Transaction tx) throws Exception;
+
+ boolean redistribute(ServerMessage message, SimpleString routingName, Transaction tx) throws Exception;
Set<SimpleString> listAllDestinations();
Modified: trunk/src/main/org/jboss/messaging/core/postoffice/impl/BindingsImpl.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/postoffice/impl/BindingsImpl.java 2009-02-17 17:18:39 UTC (rev 5883)
+++ trunk/src/main/org/jboss/messaging/core/postoffice/impl/BindingsImpl.java 2009-02-17 19:52:51 UTC (rev 5884)
@@ -133,8 +133,6 @@
private void routeFromCluster(final ServerMessage message, final Transaction tx) throws Exception
{
- // log.info(System.identityHashCode(this) + " routing from cluster");
-
byte[] ids = (byte[])message.getProperty(MessageImpl.HDR_ROUTE_TO_IDS);
ByteBuffer buff = ByteBuffer.wrap(ids);
@@ -158,8 +156,6 @@
binding.willRoute(message);
chosen.add(binding.getBindable());
-
- // log.info("routing to " + binding.getType() + " : " + binding.getRoutingName());
}
for (Bindable bindable : chosen)
@@ -172,11 +168,95 @@
bindable.route(message, tx);
}
}
+
+ public boolean redistribute(final ServerMessage message, final SimpleString routingName, final Transaction tx) throws Exception
+ {
+ if (routeWhenNoConsumers)
+ {
+ return false;
+ }
+
+ List<Binding> bindings = routingNameBindingMap.get(routingName);
+ if (bindings == null)
+ {
+ // The value can become null if it's concurrently removed while we're iterating - this is expected
+ // ConcurrentHashMap behaviour!
+ return false;
+ }
+
+ Integer ipos = routingNamePositions.get(routingName);
+
+ int pos = ipos != null ? ipos.intValue() : 0;
+
+ int length = bindings.size();
+
+ int startPos = pos;
+
+ Binding theBinding = null;
+
+ //TODO - combine this with similar logic in route()
+ while (true)
+ {
+ Binding binding;
+ try
+ {
+ binding = bindings.get(pos);
+ }
+ catch (IndexOutOfBoundsException e)
+ {
+ // This can occur if binding is removed while in route
+ if (!bindings.isEmpty())
+ {
+ pos = 0;
+
+ continue;
+ }
+ else
+ {
+ break;
+ }
+ }
+
+ pos = incrementPos(pos, length);
+
+ Filter filter = binding.getFilter();
+
+ boolean highPrior = binding.isHighAcceptPriority(message);
+
+ if (highPrior && (filter == null || filter.match(message)))
+ {
+ theBinding = binding;
+
+ break;
+ }
+
+ if (pos == startPos)
+ {
+ break;
+ }
+ }
+
+ routingNamePositions.put(routingName, pos);
+
+ if (theBinding != null)
+ {
+ theBinding.willRoute(message);
+
+ theBinding.getBindable().preroute(message, tx);
+
+ theBinding.getBindable().route(message, tx);
+
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+ }
+
public void route(final ServerMessage message, final Transaction tx) throws Exception
{
- //log.info(System.identityHashCode(this) + " routing " + message.getDestination());
-
if (!exclusiveBindings.isEmpty())
{
for (Binding binding : exclusiveBindings)
@@ -303,8 +383,6 @@
{
theBinding.willRoute(message);
- //log.info("routing to " + theBinding.getType() + " : " + theBinding.getRoutingName());
-
chosen.add(theBinding.getBindable());
}
Modified: trunk/src/main/org/jboss/messaging/core/postoffice/impl/LocalQueueBinding.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/postoffice/impl/LocalQueueBinding.java 2009-02-17 17:18:39 UTC (rev 5883)
+++ trunk/src/main/org/jboss/messaging/core/postoffice/impl/LocalQueueBinding.java 2009-02-17 19:52:51 UTC (rev 5884)
@@ -23,7 +23,7 @@
package org.jboss.messaging.core.postoffice.impl;
-import java.util.List;
+import java.util.Set;
import org.jboss.messaging.core.filter.Filter;
import org.jboss.messaging.core.logging.Logger;
@@ -33,6 +33,7 @@
import org.jboss.messaging.core.server.Consumer;
import org.jboss.messaging.core.server.Queue;
import org.jboss.messaging.core.server.ServerMessage;
+import org.jboss.messaging.core.server.cluster.impl.Redistributor;
import org.jboss.messaging.util.SimpleString;
/**
@@ -132,10 +133,15 @@
{
//It's a high accept priority if the queue has at least one matching consumer
- List<Consumer> consumers = queue.getConsumers();
+ Set<Consumer> consumers = queue.getConsumers();
for (Consumer consumer: consumers)
{
+ if (consumer instanceof Redistributor)
+ {
+ continue;
+ }
+
Filter filter = consumer.getFilter();
if (filter == null)
Modified: trunk/src/main/org/jboss/messaging/core/postoffice/impl/PostOfficeImpl.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/postoffice/impl/PostOfficeImpl.java 2009-02-17 17:18:39 UTC (rev 5883)
+++ trunk/src/main/org/jboss/messaging/core/postoffice/impl/PostOfficeImpl.java 2009-02-17 19:52:51 UTC (rev 5884)
@@ -24,7 +24,6 @@
import java.nio.ByteBuffer;
import java.util.ArrayList;
-import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
@@ -63,14 +62,16 @@
import org.jboss.messaging.core.server.QueueFactory;
import org.jboss.messaging.core.server.SendLock;
import org.jboss.messaging.core.server.ServerMessage;
-import org.jboss.messaging.core.server.cluster.RemoteQueueBinding;
import org.jboss.messaging.core.server.impl.SendLockImpl;
import org.jboss.messaging.core.server.impl.ServerMessageImpl;
+import org.jboss.messaging.core.settings.HierarchicalRepository;
+import org.jboss.messaging.core.settings.impl.AddressSettings;
import org.jboss.messaging.core.transaction.Transaction;
import org.jboss.messaging.core.transaction.TransactionOperation;
import org.jboss.messaging.core.transaction.TransactionPropertyIndexes;
import org.jboss.messaging.core.transaction.Transaction.State;
import org.jboss.messaging.core.transaction.impl.TransactionImpl;
+import org.jboss.messaging.util.ExecutorFactory;
import org.jboss.messaging.util.JBMThreadFactory;
import org.jboss.messaging.util.SimpleString;
import org.jboss.messaging.util.TypedProperties;
@@ -88,8 +89,6 @@
public static final SimpleString HDR_RESET_QUEUE_DATA = new SimpleString("_JBM_RESET_QUEUE_DATA");
- private static final List<MessageReference> emptyList = Collections.<MessageReference> emptyList();
-
private final AddressManager addressManager;
private final QueueFactory queueFactory;
@@ -134,6 +133,12 @@
private final Object notificationLock = new Object();
+ private final ExecutorFactory redistributorExecutorFactory;
+
+ private final HierarchicalRepository<AddressSettings> addressSettingsRepository;
+
+ private final String nodeID;
+
public PostOfficeImpl(final StorageManager storageManager,
final PagingManager pagingManager,
final QueueFactory bindableFactory,
@@ -144,7 +149,11 @@
final boolean enableWildCardRouting,
final boolean backup,
final int idCacheSize,
- final boolean persistIDCache)
+ final boolean persistIDCache,
+ final ExecutorFactory orderedExecutorFactory,
+ HierarchicalRepository<AddressSettings> addressSettingsRepository,
+ final String nodeID)
+
{
this.storageManager = storageManager;
@@ -174,6 +183,13 @@
this.idCacheSize = idCacheSize;
this.persistIDCache = persistIDCache;
+
+ this.redistributorExecutorFactory = orderedExecutorFactory;
+
+ this.addressSettingsRepository = addressSettingsRepository;
+
+ this.nodeID = nodeID;
+
}
// MessagingComponent implementation ---------------------------------------
@@ -239,57 +255,57 @@
synchronized (notificationLock)
{
NotificationType type = notification.getType();
-
+
switch (type.toInt())
{
case NotificationType.BINDING_ADDED_INDEX:
{
TypedProperties props = notification.getProperties();
-
+
Integer bindingType = (Integer)props.getProperty(ManagementHelper.HDR_BINDING_TYPE);
-
+
if (bindingType == null)
{
throw new IllegalArgumentException("Binding type not specified");
}
-
+
if (bindingType == BindingType.DIVERT_INDEX)
{
// We don't propagate diverts
return;
}
-
+
SimpleString routingName = (SimpleString)props.getProperty(ManagementHelper.HDR_ROUTING_NAME);
-
+
SimpleString clusterName = (SimpleString)props.getProperty(ManagementHelper.HDR_CLUSTER_NAME);
-
+
SimpleString address = (SimpleString)props.getProperty(ManagementHelper.HDR_ADDRESS);
-
+
Integer transientID = (Integer)props.getProperty(ManagementHelper.HDR_BINDING_ID);
-
+
SimpleString filterString = (SimpleString)props.getProperty(ManagementHelper.HDR_FILTERSTRING);
-
+
Integer distance = (Integer)props.getProperty(ManagementHelper.HDR_DISTANCE);
-
+
QueueInfo info = new QueueInfo(routingName, clusterName, address, filterString, transientID, distance);
-
+
queueInfos.put(clusterName, info);
break;
- }
+ }
case NotificationType.BINDING_REMOVED_INDEX:
{
TypedProperties props = notification.getProperties();
-
+
SimpleString clusterName = (SimpleString)props.getProperty(ManagementHelper.HDR_CLUSTER_NAME);
-
+
if (clusterName == null)
{
throw new IllegalStateException("No cluster name");
}
-
+
QueueInfo info = queueInfos.remove(clusterName);
-
+
if (info == null)
{
throw new IllegalStateException("Cannot find queue info for queue " + clusterName);
@@ -298,99 +314,155 @@
break;
}
case NotificationType.CONSUMER_CREATED_INDEX:
- {
+ {
TypedProperties props = notification.getProperties();
-
+
SimpleString clusterName = (SimpleString)props.getProperty(ManagementHelper.HDR_CLUSTER_NAME);
-
+
if (clusterName == null)
{
throw new IllegalStateException("No cluster name");
}
-
+
SimpleString filterString = (SimpleString)props.getProperty(ManagementHelper.HDR_FILTERSTRING);
-
+
QueueInfo info = queueInfos.get(clusterName);
-
+
if (info == null)
{
throw new IllegalStateException("Cannot find queue info for queue " + clusterName);
}
-
+
info.incrementConsumers();
-
+
if (filterString != null)
{
List<SimpleString> filterStrings = info.getFilterStrings();
-
+
if (filterStrings == null)
{
filterStrings = new ArrayList<SimpleString>();
-
+
info.setFilterStrings(filterStrings);
}
+
+ filterStrings.add(filterString);
}
-
+
+ Integer distance = (Integer)props.getProperty(ManagementHelper.HDR_DISTANCE);
+
+ if (distance == null)
+ {
+ throw new IllegalStateException("No distance");
+ }
+
+ if (distance > 0)
+ {
+ SimpleString queueName = (SimpleString)props.getProperty(ManagementHelper.HDR_ROUTING_NAME);
+
+ if (queueName == null)
+ {
+ throw new IllegalStateException("No queue name");
+ }
+
+ Binding binding = getBinding(queueName);
+
+ if (binding != null)
+ {
+ // We have a local queue
+ Queue queue = (Queue)binding.getBindable();
+
+ AddressSettings addressSettings = addressSettingsRepository.getMatch(binding.getAddress()
+ .toString());
+
+ long redistributionDelay = addressSettings.getRedistributionDelay();
+
+ if (redistributionDelay != -1)
+ {
+ queue.addRedistributor(redistributionDelay, redistributorExecutorFactory.getExecutor());
+ }
+ }
+ }
+
break;
}
case NotificationType.CONSUMER_CLOSED_INDEX:
- {
+ {
TypedProperties props = notification.getProperties();
-
+
SimpleString clusterName = (SimpleString)props.getProperty(ManagementHelper.HDR_CLUSTER_NAME);
-
+
if (clusterName == null)
{
- throw new IllegalStateException("No cluster name");
+ throw new IllegalStateException("No distance");
}
-
+
SimpleString filterString = (SimpleString)props.getProperty(ManagementHelper.HDR_FILTERSTRING);
-
+
QueueInfo info = queueInfos.get(clusterName);
-
+
if (info == null)
{
throw new IllegalStateException("Cannot find queue info for queue " + clusterName);
}
info.decrementConsumers();
-
+
if (filterString != null)
{
List<SimpleString> filterStrings = info.getFilterStrings();
-
+
filterStrings.remove(filterString);
}
+
+ if (info.getNumberOfConsumers() == 0)
+ {
+ Integer distance = (Integer)props.getProperty(ManagementHelper.HDR_DISTANCE);
+
+ if (distance == null)
+ {
+ throw new IllegalStateException("No cluster name");
+ }
+
+ if (distance == 0)
+ {
+ SimpleString queueName = (SimpleString)props.getProperty(ManagementHelper.HDR_ROUTING_NAME);
+
+ if (queueName == null)
+ {
+ throw new IllegalStateException("No queue name");
+ }
+
+ Binding binding = getBinding(queueName);
+
+ if (binding == null)
+ {
+ throw new IllegalStateException("No queue " + queueName);
+ }
+
+ Queue queue = (Queue)binding.getBindable();
+
+ AddressSettings addressSettings = addressSettingsRepository.getMatch(binding.getAddress()
+ .toString());
+
+ long redistributionDelay = addressSettings.getRedistributionDelay();
+
+ if (redistributionDelay != -1)
+ {
+ queue.addRedistributor(redistributionDelay, redistributorExecutorFactory.getExecutor());
+ }
+ }
+ }
+
-// if (redistributeMessages)
-// {
-// int distance = (Integer)props.getProperty(ManagementHelper.HDR_DISTANCE);
-//
-// if (distance == 0)
-// {
-// if (info.getNumberOfConsumers() == 0)
-// {
-// Bindings bindings = getBindingsForAddress(info.getAddress());
-//
-// Collection<Binding> theBindings = bindings.getBindings();
-//
-// for (Binding binding: theBindings)
-// {
-// if (binding.getFilter() != null && !binding.getFilter().match(message) ?????????????
-// }
-// }
-// }
-// }
-
-
+
break;
}
+
}
}
}
- private boolean redistributeMessages;
-
// PostOffice implementation -----------------------------------------------
public synchronized boolean addDestination(final SimpleString address, final boolean durable) throws Exception
@@ -464,7 +536,7 @@
props.putIntProperty(ManagementHelper.HDR_DISTANCE, binding.getDistance());
Filter filter = binding.getFilter();
-
+
if (filter != null)
{
props.putStringProperty(ManagementHelper.HDR_FILTERSTRING, filter.getFilterString());
@@ -517,7 +589,7 @@
public void route(final ServerMessage message, Transaction tx) throws Exception
{
SimpleString address = message.getDestination();
-
+
if (checkAllowable)
{
if (!addressManager.containsDestination(address))
@@ -528,7 +600,7 @@
}
byte[] duplicateID = (byte[])message.getProperty(MessageImpl.HDR_DUPLICATE_DETECTION_ID);
-
+
DuplicateIDCache cache = null;
if (duplicateID != null)
@@ -607,6 +679,20 @@
route(message, null);
}
+ public boolean redistribute(final ServerMessage message, final SimpleString routingName, final Transaction tx) throws Exception
+ {
+ Bindings bindings = addressManager.getBindings(message.getDestination());
+
+ if (bindings != null)
+ {
+ return bindings.redistribute(message, routingName, tx);
+ }
+ else
+ {
+ return false;
+ }
+ }
+
public PagingManager getPagingManager()
{
return pagingManager;
@@ -704,7 +790,7 @@
if (info.getAddress().startsWith(address))
{
message = createQueueInfoMessage(NotificationType.BINDING_ADDED, queueName);
-
+
message.putStringProperty(ManagementHelper.HDR_ADDRESS, info.getAddress());
message.putStringProperty(ManagementHelper.HDR_CLUSTER_NAME, info.getClusterName());
message.putStringProperty(ManagementHelper.HDR_ROUTING_NAME, info.getRoutingName());
@@ -722,8 +808,9 @@
message.putStringProperty(ManagementHelper.HDR_ADDRESS, info.getAddress());
message.putStringProperty(ManagementHelper.HDR_CLUSTER_NAME, info.getClusterName());
+ message.putStringProperty(ManagementHelper.HDR_ROUTING_NAME, info.getRoutingName());
message.putIntProperty(ManagementHelper.HDR_DISTANCE, info.getDistance());
-
+
routeDirect(queue, message);
}
@@ -735,9 +822,10 @@
message.putStringProperty(ManagementHelper.HDR_ADDRESS, info.getAddress());
message.putStringProperty(ManagementHelper.HDR_CLUSTER_NAME, info.getClusterName());
+ message.putStringProperty(ManagementHelper.HDR_ROUTING_NAME, info.getRoutingName());
message.putStringProperty(ManagementHelper.HDR_FILTERSTRING, filterString);
message.putIntProperty(ManagementHelper.HDR_DISTANCE, info.getDistance());
-
+
routeDirect(queue, message);
}
}
@@ -994,4 +1082,6 @@
}
+
+
}
Modified: trunk/src/main/org/jboss/messaging/core/remoting/impl/RemotingConnectionImpl.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/remoting/impl/RemotingConnectionImpl.java 2009-02-17 17:18:39 UTC (rev 5883)
+++ trunk/src/main/org/jboss/messaging/core/remoting/impl/RemotingConnectionImpl.java 2009-02-17 19:52:51 UTC (rev 5884)
@@ -1130,7 +1130,7 @@
}
connection.transportConnection.write(buffer);
-
+
long toWait = connection.blockingCallTimeout;
long start = System.currentTimeMillis();
Modified: trunk/src/main/org/jboss/messaging/core/security/impl/SecurityStoreImpl.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/security/impl/SecurityStoreImpl.java 2009-02-17 17:18:39 UTC (rev 5883)
+++ trunk/src/main/org/jboss/messaging/core/security/impl/SecurityStoreImpl.java 2009-02-17 19:52:51 UTC (rev 5884)
@@ -263,7 +263,7 @@
// Sanity check
if (DEFAULT_MANAGEMENT_CLUSTER_PASSWORD.equals(password))
{
- log.warn("WARNING! POTENTIAL SECURITY RISK. It has been detected that the cluster admin password which is used to " +
+ log.warn("It has been detected that the cluster admin password which is used to " +
"replicate management operation from one node to the other has not had its password changed from the installation default. " +
"Please see the JBoss Messaging user guide for instructions on how to do this.");
}
Modified: trunk/src/main/org/jboss/messaging/core/server/Queue.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/server/Queue.java 2009-02-17 17:18:39 UTC (rev 5883)
+++ trunk/src/main/org/jboss/messaging/core/server/Queue.java 2009-02-17 19:52:51 UTC (rev 5884)
@@ -23,6 +23,7 @@
package org.jboss.messaging.core.server;
import java.util.List;
+import java.util.Set;
import java.util.concurrent.Executor;
import org.jboss.messaging.core.filter.Filter;
@@ -47,21 +48,21 @@
long getPersistenceID();
void setPersistenceID(long id);
-
+
Filter getFilter();
boolean isDurable();
boolean isTemporary();
- void addConsumer(Consumer consumer);
+ void addConsumer(Consumer consumer) throws Exception;
boolean removeConsumer(Consumer consumer) throws Exception;
int getConsumerCount();
-
- List<Consumer> getConsumers();
+ Set<Consumer> getConsumers();
+
void addLast(MessageReference ref);
void addFirst(MessageReference ref);
@@ -69,11 +70,11 @@
void acknowledge(MessageReference ref) throws Exception;
void acknowledge(Transaction tx, MessageReference ref) throws Exception;
-
+
void reacknowledge(Transaction tx, MessageReference ref) throws Exception;
void cancel(Transaction tx, MessageReference ref) throws Exception;
-
+
void cancel(MessageReference reference) throws Exception;
void deliverAsync(Executor executor);
@@ -98,9 +99,6 @@
MessageReference removeReferenceWithID(long id) throws Exception;
- /** Remove message from queue, add it to the scheduled delivery list without affect reference counting */
- //void rescheduleDelivery(long id, long scheduledDeliveryTime);
-
MessageReference getReference(long id);
int deleteAllReferences() throws Exception;
@@ -138,6 +136,10 @@
boolean consumerFailedOver();
+ void addRedistributor(long delay, Executor executor);
+
+ void cancelRedistributor() throws Exception;
+
// Only used in testing
void deliverNow();
}
Modified: trunk/src/main/org/jboss/messaging/core/server/cluster/ClusterManager.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/server/cluster/ClusterManager.java 2009-02-17 17:18:39 UTC (rev 5883)
+++ trunk/src/main/org/jboss/messaging/core/server/cluster/ClusterManager.java 2009-02-17 19:52:51 UTC (rev 5884)
@@ -23,6 +23,7 @@
package org.jboss.messaging.core.server.cluster;
import java.util.Map;
+import java.util.Set;
import org.jboss.messaging.core.server.MessagingComponent;
@@ -37,4 +38,6 @@
public interface ClusterManager extends MessagingComponent
{
Map<String, Bridge> getBridges();
+
+ Set<ClusterConnection> getClusterConnections();
}
Modified: trunk/src/main/org/jboss/messaging/core/server/cluster/impl/BridgeImpl.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/server/cluster/impl/BridgeImpl.java 2009-02-17 17:18:39 UTC (rev 5883)
+++ trunk/src/main/org/jboss/messaging/core/server/cluster/impl/BridgeImpl.java 2009-02-17 19:52:51 UTC (rev 5884)
@@ -27,6 +27,7 @@
import static org.jboss.messaging.core.client.impl.ClientSessionFactoryImpl.DEFAULT_BLOCK_ON_ACKNOWLEDGE;
import static org.jboss.messaging.core.client.impl.ClientSessionFactoryImpl.DEFAULT_BLOCK_ON_NON_PERSISTENT_SEND;
import static org.jboss.messaging.core.client.impl.ClientSessionFactoryImpl.DEFAULT_BLOCK_ON_PERSISTENT_SEND;
+import static org.jboss.messaging.core.client.impl.ClientSessionFactoryImpl.DEFAULT_CALL_TIMEOUT;
import static org.jboss.messaging.core.client.impl.ClientSessionFactoryImpl.DEFAULT_CONNECTION_LOAD_BALANCING_POLICY_CLASS_NAME;
import static org.jboss.messaging.core.client.impl.ClientSessionFactoryImpl.DEFAULT_CONNECTION_TTL;
import static org.jboss.messaging.core.client.impl.ClientSessionFactoryImpl.DEFAULT_CONSUMER_MAX_RATE;
@@ -162,8 +163,8 @@
final double retryIntervalMultiplier,
final int maxRetriesBeforeFailover,
final int maxRetriesAfterFailover,
- final boolean useDuplicateDetection,
- final SimpleString managementAddress,
+ final boolean useDuplicateDetection,
+ final SimpleString managementAddress,
final SimpleString managementNotificationAddress,
final String clusterPassword) throws Exception
{
@@ -199,7 +200,7 @@
final int maxRetriesBeforeFailover,
final int maxRetriesAfterFailover,
final boolean useDuplicateDetection,
- final SimpleString managementAddress,
+ final SimpleString managementAddress,
final SimpleString managementNotificationAddress,
final String clusterPassword,
final MessageFlowRecord flowRecord) throws Exception
@@ -240,11 +241,11 @@
this.idsHeaderName = MessageImpl.HDR_ROUTE_TO_IDS.concat(name);
this.managementAddress = managementAddress;
-
+
this.managementNotificationAddres = managementNotificationAddress;
-
+
this.clusterPassword = clusterPassword;
-
+
this.flowRecord = flowRecord;
}
@@ -282,16 +283,17 @@
{
if (started)
{
- //We need to stop the csf here otherwise the stop runnable never runs since the createobjectsrunnable is trying to connect to the target
- //server which isn't up in an infinite loop
+ // We need to stop the csf here otherwise the stop runnable never runs since the createobjectsrunnable is
+ // trying to connect to the target
+ // server which isn't up in an infinite loop
if (csf != null)
{
csf.close();
}
}
-
+
executor.execute(new StopRunnable());
-
+
this.waitForRunnablesToComplete();
}
@@ -309,8 +311,8 @@
}
if (session != null)
- {
- session.close();
+ {
+ session.close();
}
started = false;
@@ -321,7 +323,7 @@
queue.removeConsumer(BridgeImpl.this);
- cancelRefs();
+ cancelRefs();
}
catch (Exception e)
{
@@ -352,7 +354,7 @@
log.error("Failed to reset", e);
}
}
-
+
active = false;
}
@@ -374,7 +376,7 @@
if (!createObjects())
{
started = false;
- }
+ }
}
}
@@ -407,7 +409,7 @@
{
return false;
}
-
+
try
{
queue.addConsumer(BridgeImpl.this);
@@ -417,7 +419,7 @@
DEFAULT_CONNECTION_LOAD_BALANCING_POLICY_CLASS_NAME,
DEFAULT_PING_PERIOD,
DEFAULT_CONNECTION_TTL,
- 2000,
+ 5000,
DEFAULT_CONSUMER_WINDOW_SIZE,
DEFAULT_CONSUMER_MAX_RATE,
DEFAULT_SEND_WINDOW_SIZE,
@@ -435,7 +437,13 @@
maxRetriesBeforeFailover,
maxRetriesAfterFailover);
- session = (ClientSessionInternal)csf.createSession(SecurityStoreImpl.CLUSTER_ADMIN_USER, clusterPassword, false, true, true, false, 1);
+ session = (ClientSessionInternal)csf.createSession(SecurityStoreImpl.CLUSTER_ADMIN_USER,
+ clusterPassword,
+ false,
+ true,
+ true,
+ false,
+ 1);
if (session == null)
{
@@ -507,8 +515,6 @@
queue.deliverAsync(executor);
- log.info("Bridge " + name + " connected successfully");
-
return true;
}
catch (Exception e)
@@ -697,7 +703,7 @@
if (!createObjects())
{
active = false;
-
+
started = false;
}
}
Modified: trunk/src/main/org/jboss/messaging/core/server/cluster/impl/ClusterConnectionImpl.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/server/cluster/impl/ClusterConnectionImpl.java 2009-02-17 17:18:39 UTC (rev 5883)
+++ trunk/src/main/org/jboss/messaging/core/server/cluster/impl/ClusterConnectionImpl.java 2009-02-17 19:52:51 UTC (rev 5884)
@@ -547,7 +547,7 @@
postOffice.addBinding(binding);
Bindings theBindings = postOffice.getBindingsForAddress(queueAddress);
-
+
theBindings.setRouteWhenNoConsumers(routeWhenNoConsumers);
break;
@@ -627,7 +627,7 @@
Notification notification = new Notification(ntype, message.getProperties());
managementService.sendNotification(notification);
-
+
break;
}
}
Modified: trunk/src/main/org/jboss/messaging/core/server/cluster/impl/ClusterManagerImpl.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/server/cluster/impl/ClusterManagerImpl.java 2009-02-17 17:18:39 UTC (rev 5883)
+++ trunk/src/main/org/jboss/messaging/core/server/cluster/impl/ClusterManagerImpl.java 2009-02-17 19:52:51 UTC (rev 5884)
@@ -27,8 +27,10 @@
import java.net.InetAddress;
import java.util.ArrayList;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
@@ -200,6 +202,11 @@
{
return new HashMap<String, Bridge>(bridges);
}
+
+ public Set<ClusterConnection> getClusterConnections()
+ {
+ return new HashSet<ClusterConnection>(clusters.values());
+ }
private synchronized void deployBroadcastGroup(final BroadcastGroupConfiguration config) throws Exception
{
Added: trunk/src/main/org/jboss/messaging/core/server/cluster/impl/Redistributor.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/server/cluster/impl/Redistributor.java (rev 0)
+++ trunk/src/main/org/jboss/messaging/core/server/cluster/impl/Redistributor.java 2009-02-17 19:52:51 UTC (rev 5884)
@@ -0,0 +1,177 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005-2009, Red Hat Middleware LLC, and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.jboss.messaging.core.server.cluster.impl;
+
+import java.util.concurrent.Executor;
+
+import org.jboss.messaging.core.filter.Filter;
+import org.jboss.messaging.core.logging.Logger;
+import org.jboss.messaging.core.persistence.StorageManager;
+import org.jboss.messaging.core.postoffice.PostOffice;
+import org.jboss.messaging.core.server.Consumer;
+import org.jboss.messaging.core.server.HandleStatus;
+import org.jboss.messaging.core.server.MessageReference;
+import org.jboss.messaging.core.server.Queue;
+import org.jboss.messaging.core.transaction.Transaction;
+import org.jboss.messaging.core.transaction.impl.TransactionImpl;
+import org.jboss.messaging.util.Future;
+
+/**
+ * A Redistributor
+ *
+ * @author <a href="mailto:tim.fox at jboss.com">Tim Fox</a>
+ *
+ * Created 8 Feb 2009 14:23:41
+ *
+ *
+ */
+public class Redistributor implements Consumer
+{
+ private static final Logger log = Logger.getLogger(Redistributor.class);
+
+ private boolean active;
+
+ private final StorageManager storageManager;
+
+ private final PostOffice postOffice;
+
+ private final Executor executor;
+
+ private final int batchSize;
+
+ private final Queue queue;
+
+ private int count;
+
+ public Redistributor(final Queue queue,
+ final StorageManager storageManager,
+ final PostOffice postOffice,
+ final Executor executor,
+ final int batchSize)
+ {
+ this.queue = queue;
+
+ this.storageManager = storageManager;
+
+ this.postOffice = postOffice;
+
+ this.executor = executor;
+
+ this.batchSize = batchSize;
+ }
+
+ public Filter getFilter()
+ {
+ return null;
+ }
+
+ public synchronized void start()
+ {
+ active = true;
+ }
+
+ public synchronized void stop() throws Exception
+ {
+ active = false;
+
+ Future future = new Future();
+
+ executor.execute(future);
+
+ boolean ok = future.await(10000);
+
+ if (!ok)
+ {
+ log.warn("Timed out waiting for tasks to complete");
+ }
+ }
+
+ public synchronized void close()
+ {
+ Future future = new Future();
+
+ executor.execute(future);
+
+ boolean ok = future.await(10000);
+
+ if (!ok)
+ {
+ throw new IllegalStateException("Timed out waiting for executor to complete");
+ }
+
+ active = false;
+ }
+
+ public synchronized HandleStatus handle(final MessageReference reference) throws Exception
+ {
+ if (!active)
+ {
+ return HandleStatus.BUSY;
+ }
+
+ Transaction tx = new TransactionImpl(storageManager);
+
+ boolean routed = postOffice.redistribute(reference.getMessage(), queue.getName(), tx);
+
+ if (routed)
+ {
+ queue.referenceHandled();
+
+ queue.acknowledge(tx, reference);
+
+ tx.commit();
+
+ count++;
+
+ if (count == batchSize)
+ {
+ // We continue the next batch on a different thread, so as not to keep the delivery thread busy for a very
+ // long time, in the case there are many messages in the queue
+ active = false;
+
+ executor.execute(new Prompter());
+
+ count = 0;
+ }
+
+ return HandleStatus.HANDLED;
+ }
+ else
+ {
+ return HandleStatus.BUSY;
+ }
+ }
+
+ private class Prompter implements Runnable
+ {
+ public void run()
+ {
+ synchronized (Redistributor.this)
+ {
+ active = true;
+
+ queue.deliverAsync(executor);
+ }
+ }
+ }
+}
Modified: trunk/src/main/org/jboss/messaging/core/server/impl/MessagingServerImpl.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/server/impl/MessagingServerImpl.java 2009-02-17 17:18:39 UTC (rev 5883)
+++ trunk/src/main/org/jboss/messaging/core/server/impl/MessagingServerImpl.java 2009-02-17 19:52:51 UTC (rev 5884)
@@ -245,7 +245,10 @@
configuration.isWildcardRoutingEnabled(),
configuration.isBackup(),
configuration.getIDCacheSize(),
- configuration.isPersistIDCache());
+ configuration.isPersistIDCache(),
+ executorFactory,
+ addressSettingsRepository,
+ nodeID.toString());
securityRepository = new HierarchicalObjectRepository<Set<Role>>();
securityRepository.setDefault(new HashSet<Role>());
@@ -260,7 +263,7 @@
managementService.setManagementNotificationAddress(configuration.getManagementNotificationAddress());
managementService.setClusterPassword(configuration.getManagementClusterPassword());
managementService.setManagementRequestTimeout(configuration.getManagementRequestTimeout());
-
+
serverManagement = managementService.registerServer(postOffice,
storageManager,
configuration,
@@ -723,7 +726,7 @@
listener);
listener.conn = replicatingConnection;
-
+
replicatingConnection.startPinger();
return replicatingConnection;
@@ -1010,32 +1013,32 @@
queue.activateNow(asyncDeliveryPool);
}
}
-
+
private class NoCacheConnectionLifeCycleListener implements ConnectionLifeCycleListener
{
private RemotingConnection conn;
-
+
public void connectionCreated(final Connection connection)
- {
+ {
}
public void connectionDestroyed(final Object connectionID)
- {
+ {
if (conn != null)
{
conn.destroy();
- }
+ }
}
public void connectionException(final Object connectionID, final MessagingException me)
- {
+ {
backupConnectorFactory = null;
-
+
if (conn != null)
{
conn.fail(me);
}
- }
+ }
}
}
Modified: trunk/src/main/org/jboss/messaging/core/server/impl/QueueFactoryImpl.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/server/impl/QueueFactoryImpl.java 2009-02-17 17:18:39 UTC (rev 5883)
+++ trunk/src/main/org/jboss/messaging/core/server/impl/QueueFactoryImpl.java 2009-02-17 19:52:51 UTC (rev 5884)
@@ -51,7 +51,7 @@
private PostOffice postOffice;
private final StorageManager storageManager;
-
+
public QueueFactoryImpl(final ScheduledExecutorService scheduledExecutor,
final HierarchicalRepository<AddressSettings> addressSettingsRepository,
final StorageManager storageManager)
@@ -76,32 +76,35 @@
final boolean temporary)
{
AddressSettings addressSettings = addressSettingsRepository.getMatch(address.toString());
-
+
Queue queue;
- if(addressSettings.isSoloQueue())
+ if (addressSettings.isSoloQueue())
{
- queue = new SoloQueueImpl(persistenceID,address, name,
- filter,
- durable,
- temporary,
- scheduledExecutor,
- postOffice,
- storageManager,
- addressSettingsRepository);
+ queue = new SoloQueueImpl(persistenceID,
+ address,
+ name,
+ filter,
+ durable,
+ temporary,
+ scheduledExecutor,
+ postOffice,
+ storageManager,
+ addressSettingsRepository);
}
else
{
- queue = new QueueImpl(persistenceID, address,name,
- filter,
- durable,
- temporary,
- scheduledExecutor,
- postOffice,
- storageManager,
- addressSettingsRepository);
+ queue = new QueueImpl(persistenceID,
+ address,
+ name,
+ filter,
+ durable,
+ temporary,
+ scheduledExecutor,
+ postOffice,
+ storageManager,
+ addressSettingsRepository);
}
-
queue.setDistributionPolicy(addressSettings.getDistributionPolicy());
return queue;
Modified: trunk/src/main/org/jboss/messaging/core/server/impl/QueueImpl.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/server/impl/QueueImpl.java 2009-02-17 17:18:39 UTC (rev 5883)
+++ trunk/src/main/org/jboss/messaging/core/server/impl/QueueImpl.java 2009-02-17 19:52:51 UTC (rev 5884)
@@ -26,6 +26,8 @@
import java.util.Set;
import java.util.concurrent.Executor;
import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.ScheduledFuture;
+import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
@@ -46,6 +48,7 @@
import org.jboss.messaging.core.server.Queue;
import org.jboss.messaging.core.server.ScheduledDeliveryHandler;
import org.jboss.messaging.core.server.ServerMessage;
+import org.jboss.messaging.core.server.cluster.impl.Redistributor;
import org.jboss.messaging.core.settings.HierarchicalRepository;
import org.jboss.messaging.core.settings.impl.AddressSettings;
import org.jboss.messaging.core.transaction.Transaction;
@@ -68,6 +71,8 @@
{
private static final Logger log = Logger.getLogger(QueueImpl.class);
+ public static final int REDISTRIBUTOR_BATCH_SIZE = 100;
+
private static final boolean trace = log.isTraceEnabled();
public static final int NUM_PRIORITIES = 10;
@@ -111,13 +116,25 @@
private final StorageManager storageManager;
private final HierarchicalRepository<AddressSettings> addressSettingsRepository;
+
+ private final ScheduledExecutorService scheduledExecutor;
private volatile boolean backup;
private int consumersToFailover = -1;
private SimpleString address;
+
+ private Redistributor redistributor;
+ private final Set<ScheduledFuture<?>> futures = new ConcurrentHashSet<ScheduledFuture<?>>();
+
+ private ScheduledFuture<?> future;
+
+ //We cache the consumers here since we don't want to include the redistributor
+
+ private final Set<Consumer> consumers = new HashSet<Consumer>();
+
public QueueImpl(final long persistenceID,
final SimpleString address,
final SimpleString name,
@@ -131,7 +148,7 @@
{
this.persistenceID = persistenceID;
- this.address = address;
+ this.address = address;
this.name = name;
@@ -146,6 +163,8 @@
this.storageManager = storageManager;
this.addressSettingsRepository = addressSettingsRepository;
+
+ this.scheduledExecutor = scheduledExecutor;
if (postOffice == null)
{
@@ -208,7 +227,7 @@
store.addSize(ref.getMemoryEstimate());
- Long scheduledDeliveryTime = (Long) message.getProperty(MessageImpl.HDR_SCHEDULED_DELIVERY_TIME);
+ Long scheduledDeliveryTime = (Long)message.getProperty(MessageImpl.HDR_SCHEDULED_DELIVERY_TIME);
if (scheduledDeliveryTime != null)
{
@@ -233,7 +252,7 @@
{
storageManager.updateScheduledDeliveryTime(ref);
}
-
+
addLast(ref);
}
else
@@ -285,7 +304,7 @@
message.incrementDurableRefCount();
}
- Long scheduledDeliveryTime = (Long) message.getProperty(MessageImpl.HDR_SCHEDULED_DELIVERY_TIME);
+ Long scheduledDeliveryTime = (Long)message.getProperty(MessageImpl.HDR_SCHEDULED_DELIVERY_TIME);
if (scheduledDeliveryTime != null)
{
@@ -364,9 +383,13 @@
deliver();
}
- public void addConsumer(final Consumer consumer)
+ public synchronized void addConsumer(final Consumer consumer) throws Exception
{
+ cancelRedistributor();
+
distributionPolicy.addConsumer(consumer);
+
+ consumers.add(consumer);
}
public synchronized boolean removeConsumer(final Consumer consumer) throws Exception
@@ -377,18 +400,66 @@
{
promptDelivery = false;
}
+
+ consumers.remove(consumer);
return removed;
}
+ public synchronized void addRedistributor(final long delay, final Executor executor)
+ {
+ if (future != null)
+ {
+ future.cancel(false);
+
+ futures.remove(future);
+ }
+
+ if (redistributor != null)
+ {
+ //Just prompt delivery
+ deliverAsync(executor);
+ }
+
+ if (delay > 0)
+ {
+ DelayedAddRedistributor dar = new DelayedAddRedistributor(executor);
+
+ future = scheduledExecutor.schedule(dar, delay, TimeUnit.MILLISECONDS);
+
+ futures.add(future);
+ }
+ else
+ {
+ internalAddRedistributor(executor);
+ }
+ }
+
+ public synchronized void cancelRedistributor() throws Exception
+ {
+ if (redistributor != null)
+ {
+ redistributor.stop();
+
+ redistributor = null;
+ }
+
+ if (future != null)
+ {
+ future.cancel(false);
+
+ future = null;
+ }
+ }
+
public synchronized int getConsumerCount()
{
- return distributionPolicy.getConsumerCount();
+ return consumers.size();
}
- public synchronized List<Consumer> getConsumers()
+ public synchronized Set<Consumer> getConsumers()
{
- return new ArrayList<Consumer>(distributionPolicy.getConsumers());
+ return consumers;
}
public synchronized List<MessageReference> list(final Filter filter)
@@ -465,7 +536,15 @@
{
int count = messageReferences.size() + getScheduledCount() + getDeliveringCount();
- // log.info(System.identityHashCode(this) + " message count is " + count + " ( mr:" + messageReferences.size() + " sc:" + getScheduledCount() + " dc:" + getDeliveringCount() + ")");
+// log.info(System.identityHashCode(this) + " message count is " +
+// count +
+// " ( mr:" +
+// messageReferences.size() +
+// " sc:" +
+// getScheduledCount() +
+// " dc:" +
+// getDeliveringCount() +
+// ")");
return count;
}
@@ -529,7 +608,7 @@
final RefsOperation getRefsOperation(final Transaction tx)
{
- RefsOperation oper = (RefsOperation) tx.getProperty(TransactionPropertyIndexes.REFS_OPERATION);
+ RefsOperation oper = (RefsOperation)tx.getProperty(TransactionPropertyIndexes.REFS_OPERATION);
if (oper == null)
{
@@ -547,7 +626,7 @@
{
getRefsOperation(tx).addAck(reference);
}
-
+
public void cancel(final MessageReference reference) throws Exception
{
if (checkDLQ(reference))
@@ -558,7 +637,7 @@
}
}
}
-
+
public void expire(final MessageReference ref) throws Exception
{
SimpleString expiryAddress = addressSettingsRepository.getMatch(address.toString()).getExpiryAddress();
@@ -834,7 +913,7 @@
public synchronized boolean activate()
{
- consumersToFailover = distributionPolicy.getConsumerCount();
+ consumersToFailover = consumers.size();
if (consumersToFailover == 0)
{
@@ -908,6 +987,21 @@
// Private
// ------------------------------------------------------------------------------
+ private void internalAddRedistributor(final Executor executor)
+ {
+ if (consumers.size() == 0 && messageReferences.size() > 0)
+ {
+ redistributor = new Redistributor(this, storageManager, postOffice, executor, REDISTRIBUTOR_BATCH_SIZE);
+
+ distributionPolicy.addConsumer(redistributor);
+
+ redistributor.start();
+
+ deliverAsync(executor);
+ }
+ }
+
+
private boolean checkDLQ(final MessageReference reference) throws Exception
{
ServerMessage message = reference.getMessage();
@@ -945,7 +1039,7 @@
return true;
}
}
-
+
private void move(final SimpleString toAddress, final MessageReference ref) throws Exception
{
move(toAddress, ref, false);
@@ -1065,8 +1159,6 @@
tx.commit();
}
-
-
/*
* Attempt to deliver all the messages in the queue
*/
@@ -1076,7 +1168,7 @@
// because it's async and could get out of step
// with the live node. Instead, when we replicate the delivery we remove
// the ref from the queue
-
+
if (backup)
{
return;
@@ -1085,7 +1177,7 @@
MessageReference reference;
Iterator<MessageReference> iterator = null;
-
+
while (true)
{
if (iterator == null)
@@ -1186,7 +1278,7 @@
if (direct && !backup)
{
// Deliver directly
-
+
HandleStatus status = deliver(ref);
if (status == HandleStatus.HANDLED)
@@ -1265,7 +1357,7 @@
{
ServerMessage message = ref.getMessage();
- QueueImpl queue = (QueueImpl) ref.getQueue();
+ QueueImpl queue = (QueueImpl)ref.getQueue();
boolean durableRef = message.isDurable() && queue.durable;
@@ -1312,7 +1404,7 @@
}
void postRollback(LinkedList<MessageReference> refs) throws Exception
- {
+ {
synchronized (this)
{
for (MessageReference ref : refs)
@@ -1328,6 +1420,7 @@
deliver();
}
}
+
// Inner classes
// --------------------------------------------------------------------------
@@ -1383,7 +1476,7 @@
{
toCancel = new LinkedList<MessageReference>();
- queueMap.put((QueueImpl) ref.getQueue(), toCancel);
+ queueMap.put((QueueImpl)ref.getQueue(), toCancel);
}
toCancel.addFirst(ref);
@@ -1442,4 +1535,24 @@
}
}
}
+
+ private class DelayedAddRedistributor implements Runnable
+ {
+ private final Executor executor;
+
+ DelayedAddRedistributor(final Executor executor)
+ {
+ this.executor = executor;
+ }
+
+ public void run()
+ {
+ synchronized (QueueImpl.this)
+ {
+ internalAddRedistributor(executor);
+
+ futures.remove(this);
+ }
+ }
+ }
}
Modified: trunk/src/main/org/jboss/messaging/core/server/impl/ServerConsumerImpl.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/server/impl/ServerConsumerImpl.java 2009-02-17 17:18:39 UTC (rev 5883)
+++ trunk/src/main/org/jboss/messaging/core/server/impl/ServerConsumerImpl.java 2009-02-17 19:52:51 UTC (rev 5884)
@@ -150,7 +150,7 @@
final Channel channel,
final boolean preAcknowledge,
final Executor executor,
- final ManagementService managementService)
+ final ManagementService managementService) throws Exception
{
this.id = id;
@@ -283,7 +283,6 @@
{
MessageReference ref = iter.next();
- // ref.cancel(tx, storageManager, postOffice, addressSettingsRepository);
ref.getQueue().cancel(tx, ref);
}
@@ -296,6 +295,8 @@
props.putStringProperty(ManagementHelper.HDR_ADDRESS, binding.getAddress());
props.putStringProperty(ManagementHelper.HDR_CLUSTER_NAME, binding.getClusterName());
+
+ props.putStringProperty(ManagementHelper.HDR_ROUTING_NAME, binding.getRoutingName());
props.putStringProperty(ManagementHelper.HDR_FILTERSTRING,
filter == null ? null : filter.getFilterString());
Modified: trunk/src/main/org/jboss/messaging/core/server/impl/ServerSessionImpl.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/server/impl/ServerSessionImpl.java 2009-02-17 17:18:39 UTC (rev 5883)
+++ trunk/src/main/org/jboss/messaging/core/server/impl/ServerSessionImpl.java 2009-02-17 19:52:51 UTC (rev 5884)
@@ -92,8 +92,6 @@
import org.jboss.messaging.core.server.ServerConsumer;
import org.jboss.messaging.core.server.ServerMessage;
import org.jboss.messaging.core.server.ServerSession;
-import org.jboss.messaging.core.settings.HierarchicalRepository;
-import org.jboss.messaging.core.settings.impl.AddressSettings;
import org.jboss.messaging.core.transaction.ResourceManager;
import org.jboss.messaging.core.transaction.Transaction;
import org.jboss.messaging.core.transaction.impl.TransactionImpl;
@@ -1427,6 +1425,8 @@
props.putStringProperty(ManagementHelper.HDR_CLUSTER_NAME, binding.getClusterName());
+ props.putStringProperty(ManagementHelper.HDR_ROUTING_NAME, binding.getRoutingName());
+
props.putIntProperty(ManagementHelper.HDR_DISTANCE, binding.getDistance());
if (filterString != null)
Modified: trunk/src/main/org/jboss/messaging/core/settings/impl/AddressSettings.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/settings/impl/AddressSettings.java 2009-02-17 17:18:39 UTC (rev 5883)
+++ trunk/src/main/org/jboss/messaging/core/settings/impl/AddressSettings.java 2009-02-17 19:52:51 UTC (rev 5884)
@@ -43,8 +43,6 @@
*/
public static final Class<?> DEFAULT_DISTRIBUTION_POLICY_CLASS = new RoundRobinDistributor().getClass();
- public static final Boolean DEFAULT_CLUSTERED = false;
-
public static final Integer DEFAULT_MAX_SIZE_BYTES = -1;
public static final Boolean DEFAULT_DROP_MESSAGES_WHEN_FULL = Boolean.FALSE;
@@ -56,9 +54,9 @@
public static final Long DEFAULT_REDELIVER_DELAY = 0L;
public static final Boolean DEFAULT_SOLOQUEUE = false;
+
+ public static final Long DEFAULT_REDISTRIBUTION_DELAY = -1L;
- private Boolean clustered = null;
-
private Integer maxSizeBytes = null;
private Integer pageSizeBytes = null;
@@ -75,9 +73,11 @@
private SimpleString deadLetterAddress = null;
- private SimpleString ExpiryAddress = null;
+ private SimpleString expiryAddress = null;
private Boolean soloQueue = null;
+
+ private Long redistributionDelay = null;
public Boolean isSoloQueue()
{
@@ -89,16 +89,6 @@
this.soloQueue = soloQueue;
}
- public Boolean isClustered()
- {
- return clustered != null ? clustered : DEFAULT_CLUSTERED;
- }
-
- public void setClustered(Boolean clustered)
- {
- this.clustered = clustered;
- }
-
public Integer getPageSizeBytes()
{
return pageSizeBytes;
@@ -182,12 +172,12 @@
public SimpleString getExpiryAddress()
{
- return ExpiryAddress;
+ return expiryAddress;
}
public void setExpiryAddress(SimpleString expiryAddress)
{
- ExpiryAddress = expiryAddress;
+ this.expiryAddress = expiryAddress;
}
public Distributor getDistributionPolicy()
@@ -208,6 +198,16 @@
throw new IllegalArgumentException("Error instantiating distribution policy '" + e + " '");
}
}
+
+ public Long getRedistributionDelay()
+ {
+ return redistributionDelay != null ? redistributionDelay : DEFAULT_REDISTRIBUTION_DELAY;
+ }
+
+ public void setRedistributionDelay(final Long redistributionDelay)
+ {
+ this.redistributionDelay = redistributionDelay;
+ }
/**
* merge 2 objects in to 1
@@ -215,10 +215,6 @@
*/
public void merge(AddressSettings merged)
{
- if (clustered == null)
- {
- clustered = merged.clustered;
- }
if (maxDeliveryAttempts == null)
{
maxDeliveryAttempts = merged.maxDeliveryAttempts;
@@ -251,10 +247,14 @@
{
deadLetterAddress = merged.deadLetterAddress;
}
- if (ExpiryAddress == null)
+ if (expiryAddress == null)
{
- ExpiryAddress = merged.ExpiryAddress;
+ expiryAddress = merged.expiryAddress;
}
+ if (redistributionDelay == null)
+ {
+ this.redistributionDelay = merged.redistributionDelay;
+ }
}
}
Modified: trunk/tests/src/org/jboss/messaging/tests/integration/cluster/distribution/ClusterTestBase.java
===================================================================
--- trunk/tests/src/org/jboss/messaging/tests/integration/cluster/distribution/ClusterTestBase.java 2009-02-17 17:18:39 UTC (rev 5883)
+++ trunk/tests/src/org/jboss/messaging/tests/integration/cluster/distribution/ClusterTestBase.java 2009-02-17 19:52:51 UTC (rev 5884)
@@ -27,6 +27,7 @@
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
+import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -51,6 +52,7 @@
import org.jboss.messaging.core.postoffice.impl.LocalQueueBinding;
import org.jboss.messaging.core.server.Messaging;
import org.jboss.messaging.core.server.MessagingService;
+import org.jboss.messaging.core.server.cluster.ClusterConnection;
import org.jboss.messaging.core.server.cluster.RemoteQueueBinding;
import org.jboss.messaging.tests.util.ServiceTestBase;
import org.jboss.messaging.util.Pair;
@@ -121,15 +123,15 @@
final int consumerCount,
final boolean local) throws Exception
{
-// log.info("waiting for bindings on node " + node +
-// " address " +
-// address +
-// " count " +
-// count +
-// " consumerCount " +
-// consumerCount +
-// " local " +
-// local);
+// log.info("waiting for bindings on node " + node +
+// " address " +
+// address +
+// " count " +
+// count +
+// " consumerCount " +
+// consumerCount +
+// " local " +
+// local);
MessagingService service = this.services[node];
if (service == null)
@@ -305,7 +307,7 @@
sfs[node] = null;
}
- protected void send(int node, String address, int numMessages, boolean durable, String filterVal) throws Exception
+ protected void sendInRange(int node, String address, int msgStart, int msgEnd, boolean durable, String filterVal) throws Exception
{
ClientSessionFactory sf = this.sfs[node];
@@ -318,7 +320,7 @@
ClientProducer producer = session.createProducer(address);
- for (int i = 0; i < numMessages; i++)
+ for (int i = msgStart; i < msgEnd; i++)
{
ClientMessage message = session.createClientMessage(durable);
@@ -335,8 +337,18 @@
session.close();
}
- protected void verifyReceiveAll(int numMessages, int... consumerIDs) throws Exception
+ protected void send(int node, String address, int numMessages, boolean durable, String filterVal) throws Exception
{
+ sendInRange(node, address, 0, numMessages, durable, filterVal);
+ }
+
+ protected void verifyReceiveAllInRange(int msgStart, int msgEnd, int... consumerIDs) throws Exception
+ {
+ verifyReceiveAllInRangeNotBefore(-1, msgStart, msgEnd, consumerIDs);
+ }
+
+ protected void verifyReceiveAllInRangeNotBefore(long firstReceiveTime, int msgStart, int msgEnd, int... consumerIDs) throws Exception
+ {
for (int i = 0; i < consumerIDs.length; i++)
{
ConsumerHolder holder = consumers[consumerIDs[i]];
@@ -346,17 +358,32 @@
throw new IllegalArgumentException("No consumer at " + consumerIDs[i]);
}
- for (int j = 0; j < numMessages; j++)
+ for (int j = msgStart; j < msgEnd; j++)
{
- ClientMessage message = holder.consumer.receive(500);
-
+ ClientMessage message = holder.consumer.receive(2000);
+
assertNotNull("consumer " + consumerIDs[i] + " did not receive message " + j, message);
+
+ if (firstReceiveTime != -1)
+ {
+ assertTrue("Message received too soon", System.currentTimeMillis() >= firstReceiveTime);
+ }
assertEquals(j, message.getProperty(COUNT_PROP));
}
}
}
+ protected void verifyReceiveAll(int numMessages, int... consumerIDs) throws Exception
+ {
+ verifyReceiveAllInRange(0, numMessages, consumerIDs);
+ }
+
+ protected void verifyReceiveAllNotBefore(long firstReceiveTime, int numMessages, int... consumerIDs) throws Exception
+ {
+ verifyReceiveAllInRangeNotBefore(firstReceiveTime, 0, numMessages, consumerIDs);
+ }
+
protected void checkReceive(int... consumerIDs) throws Exception
{
for (int i = 0; i < consumerIDs.length; i++)
@@ -472,11 +499,141 @@
}
}
+ protected void verifyReceiveRoundRobinInSomeOrderWithCounts(boolean ack, int[] messageCounts, int... consumerIDs) throws Exception
+ {
+ List<LinkedList<Integer>> receivedCounts = new ArrayList<LinkedList<Integer>>();
+
+ Set<Integer> counts = new HashSet<Integer>();
+
+ for (int i = 0; i < consumerIDs.length; i++)
+ {
+ ConsumerHolder holder = consumers[consumerIDs[i]];
+
+ if (holder == null)
+ {
+ throw new IllegalArgumentException("No consumer at " + consumerIDs[i]);
+ }
+
+ LinkedList<Integer> list = new LinkedList<Integer>();
+
+ receivedCounts.add(list);
+
+ ClientMessage message;
+ do
+ {
+ message = holder.consumer.receive(200);
+
+ if (message != null)
+ {
+ int count = (Integer)message.getProperty(COUNT_PROP);
+
+ //log.info("consumer " + consumerIDs[i] + " received message " + count);
+
+ assertFalse(counts.contains(count));
+
+ counts.add(count);
+
+ list.add(count);
+
+ if (ack)
+ {
+ message.acknowledge();
+ }
+ }
+ }
+ while (message != null);
+ }
+
+ for (int i = 0; i < messageCounts.length; i++)
+ {
+ assertTrue(counts.contains(messageCounts[i]));
+ }
+
+ LinkedList[] lists = new LinkedList[consumerIDs.length];
+
+ for (int i = 0; i < messageCounts.length; i++)
+ {
+ for (LinkedList<Integer> list : receivedCounts)
+ {
+ int elem = list.get(0);
+
+ if (elem == messageCounts[i])
+ {
+ lists[i] = list;
+
+ break;
+ }
+ }
+ }
+ int index = 0;
+
+ for (int i = 0; i < messageCounts.length; i++)
+ {
+ LinkedList list = lists[index];
+
+ assertNotNull(list);
+
+ int elem = (Integer)list.poll();
+
+ assertEquals(messageCounts[i], elem);
+
+ //log.info("got elem " + messageCounts[i] + " at pos " + index);
+
+ index++;
+
+ if (index == lists.length)
+ {
+ index = 0;
+ }
+ }
+
+ }
+
protected void verifyReceiveRoundRobinInSomeOrderNoAck(int numMessages, int... consumerIDs) throws Exception
{
verifyReceiveRoundRobinInSomeOrder(false, numMessages, consumerIDs);
}
+ protected int[] getReceivedOrder(int consumerID) throws Exception
+ {
+ ConsumerHolder consumer = this.consumers[consumerID];
+
+ if (consumer == null)
+ {
+ throw new IllegalArgumentException("No consumer at " + consumerID);
+ }
+
+ List<Integer> ints = new ArrayList<Integer>();
+
+ ClientMessage message = null;
+
+ do
+ {
+ message = consumer.consumer.receive(500);
+
+ if (message != null)
+ {
+ int count = (Integer)message.getProperty(COUNT_PROP);
+
+ //log.info("consumer " + consumerID + " received message " + count);
+
+ ints.add(count);
+ }
+ }
+ while (message != null);
+
+ int[] res = new int[ints.size()];
+
+ int j = 0;
+
+ for (Integer i : ints)
+ {
+ res[j++] = i;
+ }
+
+ return res;
+ }
+
protected void verifyNotReceive(int... consumerIDs) throws Exception
{
for (int i = 0; i < consumerIDs.length; i++)
@@ -520,6 +677,16 @@
sfs[node] = sf;
}
+ protected MessagingService getService(int node)
+ {
+ if (services[node] == null)
+ {
+ throw new IllegalArgumentException("No service at node " + node);
+ }
+
+ return services[node];
+ }
+
protected void setupServer(int node, boolean fileStorage, boolean netty)
{
if (services[node] != null)
@@ -829,7 +996,7 @@
ClusterConnectionConfiguration clusterConf = new ClusterConnectionConfiguration(name,
address,
- 100,
+ 250,
1d,
-1,
-1,
@@ -840,6 +1007,7 @@
serviceFrom.getServer().getConfiguration().getClusterConfigurations().add(clusterConf);
}
+
protected void setupDiscoveryClusterConnection(String name,
int node,
@@ -880,15 +1048,29 @@
services[nodes[i]].start();
}
}
+
+ protected void stopClusterConnections(int... nodes) throws Exception
+ {
+ for (int i = 0; i < nodes.length; i++)
+ {
+ if (services[nodes[i]].isStarted())
+ {
+ for (ClusterConnection cc: services[nodes[i]].getServer().getClusterManager().getClusterConnections())
+ {
+ cc.stop();
+ }
+ }
+ }
+ }
protected void stopServers(int... nodes) throws Exception
{
for (int i = 0; i < nodes.length; i++)
- {
+ {
if (services[nodes[i]].isStarted())
{
services[nodes[i]].stop();
- }
+ }
}
}
Added: trunk/tests/src/org/jboss/messaging/tests/integration/cluster/distribution/MessageRedistributionTest.java
===================================================================
--- trunk/tests/src/org/jboss/messaging/tests/integration/cluster/distribution/MessageRedistributionTest.java (rev 0)
+++ trunk/tests/src/org/jboss/messaging/tests/integration/cluster/distribution/MessageRedistributionTest.java 2009-02-17 19:52:51 UTC (rev 5884)
@@ -0,0 +1,615 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005-2009, Red Hat Middleware LLC, and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.jboss.messaging.tests.integration.cluster.distribution;
+
+import org.jboss.messaging.core.logging.Logger;
+import org.jboss.messaging.core.server.impl.QueueImpl;
+import org.jboss.messaging.core.settings.impl.AddressSettings;
+
+/**
+ * A MessageRedistributionTest
+ *
+ * @author <a href="mailto:tim.fox at jboss.com">Tim Fox</a>
+ *
+ * Created 10 Feb 2009 18:41:57
+ *
+ *
+ */
+public class MessageRedistributionTest extends ClusterTestBase
+{
+ private static final Logger log = Logger.getLogger(SymmetricClusterTest.class);
+
+ @Override
+ protected void setUp() throws Exception
+ {
+ super.setUp();
+
+ setupServers();
+
+ setRedistributionDelay(0);
+ }
+
+ @Override
+ protected void tearDown() throws Exception
+ {
+ stopServers();
+
+ super.tearDown();
+ }
+
+ protected boolean isNetty()
+ {
+ return false;
+ }
+
+ protected boolean isFileStorage()
+ {
+ return false;
+ }
+
+ public void testRedistributionWhenConsumerIsClosed() throws Exception
+ {
+ setupCluster(false);
+
+ startServers(0, 1, 2);
+
+ setupSessionFactory(0, isNetty());
+ setupSessionFactory(1, isNetty());
+ setupSessionFactory(2, isNetty());
+
+ createQueue(0, "queues.testaddress", "queue0", null, false);
+ createQueue(1, "queues.testaddress", "queue0", null, false);
+ createQueue(2, "queues.testaddress", "queue0", null, false);
+
+ addConsumer(0, 0, "queue0", null);
+ addConsumer(1, 1, "queue0", null);
+ addConsumer(2, 2, "queue0", null);
+
+ waitForBindings(0, "queues.testaddress", 1, 1, true);
+ waitForBindings(1, "queues.testaddress", 1, 1, true);
+ waitForBindings(2, "queues.testaddress", 1, 1, true);
+
+ waitForBindings(0, "queues.testaddress", 2, 2, false);
+ waitForBindings(1, "queues.testaddress", 2, 2, false);
+ waitForBindings(2, "queues.testaddress", 2, 2, false);
+
+ send(0, "queues.testaddress", 20, false, null);
+
+ getReceivedOrder(0);
+ int[] ids1 = getReceivedOrder(1);
+ getReceivedOrder(2);
+
+ removeConsumer(1);
+
+ verifyReceiveRoundRobinInSomeOrderWithCounts(false, ids1, 0, 2);
+ }
+
+ public void testRedistributionWhenConsumerIsClosedNotConsumersOnAllNodes() throws Exception
+ {
+ setupCluster(false);
+
+ startServers(0, 1, 2);
+
+ setupSessionFactory(0, isNetty());
+ setupSessionFactory(1, isNetty());
+ setupSessionFactory(2, isNetty());
+
+ createQueue(0, "queues.testaddress", "queue0", null, false);
+ createQueue(1, "queues.testaddress", "queue0", null, false);
+ createQueue(2, "queues.testaddress", "queue0", null, false);
+
+ addConsumer(1, 1, "queue0", null);
+ addConsumer(2, 2, "queue0", null);
+
+ waitForBindings(0, "queues.testaddress", 1, 0, true);
+ waitForBindings(1, "queues.testaddress", 1, 1, true);
+ waitForBindings(2, "queues.testaddress", 1, 1, true);
+
+ waitForBindings(0, "queues.testaddress", 2, 2, false);
+ waitForBindings(1, "queues.testaddress", 2, 1, false);
+ waitForBindings(2, "queues.testaddress", 2, 1, false);
+
+ send(0, "queues.testaddress", 20, false, null);
+
+ int[] ids1 = getReceivedOrder(1);
+ getReceivedOrder(2);
+
+ removeConsumer(1);
+
+ verifyReceiveRoundRobinInSomeOrderWithCounts(false, ids1, 2);
+ }
+
+ public void testNoRedistributionWhenConsumerIsClosedForwardWhenNoConsumersTrue() throws Exception
+ {
+ // x
+ setupCluster(true);
+
+ startServers(0, 1, 2);
+
+ setupSessionFactory(0, isNetty());
+ setupSessionFactory(1, isNetty());
+ setupSessionFactory(2, isNetty());
+
+ createQueue(0, "queues.testaddress", "queue0", null, false);
+ createQueue(1, "queues.testaddress", "queue0", null, false);
+ createQueue(2, "queues.testaddress", "queue0", null, false);
+
+ addConsumer(0, 0, "queue0", null);
+ addConsumer(1, 1, "queue0", null);
+ addConsumer(2, 2, "queue0", null);
+
+ waitForBindings(0, "queues.testaddress", 1, 1, true);
+ waitForBindings(1, "queues.testaddress", 1, 1, true);
+ waitForBindings(2, "queues.testaddress", 1, 1, true);
+
+ waitForBindings(0, "queues.testaddress", 2, 2, false);
+ waitForBindings(1, "queues.testaddress", 2, 2, false);
+ waitForBindings(2, "queues.testaddress", 2, 2, false);
+
+ send(0, "queues.testaddress", 20, false, null);
+
+ removeConsumer(1);
+
+ waitForBindings(0, "queues.testaddress", 1, 1, true);
+ waitForBindings(1, "queues.testaddress", 1, 0, true);
+ waitForBindings(2, "queues.testaddress", 1, 1, true);
+
+ waitForBindings(0, "queues.testaddress", 2, 1, false);
+ waitForBindings(1, "queues.testaddress", 2, 2, false);
+ waitForBindings(2, "queues.testaddress", 2, 1, false);
+
+ addConsumer(1, 1, "queue0", null);
+
+ waitForBindings(0, "queues.testaddress", 1, 1, true);
+ waitForBindings(1, "queues.testaddress", 1, 1, true);
+ waitForBindings(2, "queues.testaddress", 1, 1, true);
+
+ waitForBindings(0, "queues.testaddress", 2, 2, false);
+ waitForBindings(1, "queues.testaddress", 2, 2, false);
+ waitForBindings(2, "queues.testaddress", 2, 2, false);
+
+ verifyReceiveRoundRobinInSomeOrder(20, 0, 1, 2);
+ }
+
+ public void testNoRedistributionWhenConsumerIsClosedNoConsumersOnOtherNodes() throws Exception
+ {
+ setupCluster(false);
+
+ startServers(0, 1, 2);
+
+ setupSessionFactory(0, isNetty());
+ setupSessionFactory(1, isNetty());
+ setupSessionFactory(2, isNetty());
+
+ createQueue(0, "queues.testaddress", "queue0", null, false);
+ createQueue(1, "queues.testaddress", "queue0", null, false);
+ createQueue(2, "queues.testaddress", "queue0", null, false);
+
+ addConsumer(1, 1, "queue0", null);
+
+ waitForBindings(0, "queues.testaddress", 1, 0, true);
+ waitForBindings(1, "queues.testaddress", 1, 1, true);
+ waitForBindings(2, "queues.testaddress", 1, 0, true);
+
+ waitForBindings(0, "queues.testaddress", 2, 1, false);
+ waitForBindings(1, "queues.testaddress", 2, 0, false);
+ waitForBindings(2, "queues.testaddress", 2, 1, false);
+
+ send(0, "queues.testaddress", 20, false, null);
+
+ removeConsumer(1);
+
+ waitForBindings(0, "queues.testaddress", 1, 0, true);
+ waitForBindings(1, "queues.testaddress", 1, 0, true);
+ waitForBindings(2, "queues.testaddress", 1, 0, true);
+
+ waitForBindings(0, "queues.testaddress", 2, 0, false);
+ waitForBindings(1, "queues.testaddress", 2, 0, false);
+ waitForBindings(2, "queues.testaddress", 2, 0, false);
+
+ addConsumer(1, 1, "queue0", null);
+
+ waitForBindings(0, "queues.testaddress", 1, 0, true);
+ waitForBindings(1, "queues.testaddress", 1, 1, true);
+ waitForBindings(2, "queues.testaddress", 1, 0, true);
+
+ waitForBindings(0, "queues.testaddress", 2, 1, false);
+ waitForBindings(1, "queues.testaddress", 2, 0, false);
+ waitForBindings(2, "queues.testaddress", 2, 1, false);
+
+ verifyReceiveAll(20, 1);
+ }
+
+ public void testRedistributionWhenConsumerIsClosedQueuesWithFilters() throws Exception
+ {
+ setupCluster(false);
+
+ startServers(0, 1, 2);
+
+ setupSessionFactory(0, isNetty());
+ setupSessionFactory(1, isNetty());
+ setupSessionFactory(2, isNetty());
+
+ String filter1 = "giraffe";
+ String filter2 = "platypus";
+
+ createQueue(0, "queues.testaddress", "queue0", filter1, false);
+ createQueue(1, "queues.testaddress", "queue0", filter2, false);
+ createQueue(2, "queues.testaddress", "queue0", filter1, false);
+
+ addConsumer(0, 0, "queue0", null);
+ addConsumer(1, 1, "queue0", null);
+ addConsumer(2, 2, "queue0", null);
+
+ waitForBindings(0, "queues.testaddress", 1, 1, true);
+ waitForBindings(1, "queues.testaddress", 1, 1, true);
+ waitForBindings(2, "queues.testaddress", 1, 1, true);
+
+ waitForBindings(0, "queues.testaddress", 2, 2, false);
+ waitForBindings(1, "queues.testaddress", 2, 2, false);
+ waitForBindings(2, "queues.testaddress", 2, 2, false);
+
+ send(0, "queues.testaddress", 20, false, filter1);
+
+ int[] ids0 = getReceivedOrder(0);
+ getReceivedOrder(1);
+ getReceivedOrder(2);
+
+ removeConsumer(0);
+
+ verifyReceiveRoundRobinInSomeOrderWithCounts(false, ids0, 2);
+ }
+
+ public void testRedistributionWhenConsumerIsClosedConsumersWithFilters() throws Exception
+ {
+ setupCluster(false);
+
+ startServers(0, 1, 2);
+
+ setupSessionFactory(0, isNetty());
+ setupSessionFactory(1, isNetty());
+ setupSessionFactory(2, isNetty());
+
+ String filter1 = "giraffe";
+ String filter2 = "platypus";
+
+ createQueue(0, "queues.testaddress", "queue0", null, false);
+ createQueue(1, "queues.testaddress", "queue0", null, false);
+ createQueue(2, "queues.testaddress", "queue0", null, false);
+
+ addConsumer(0, 0, "queue0", filter1);
+ addConsumer(1, 1, "queue0", filter2);
+ addConsumer(2, 2, "queue0", filter1);
+
+ waitForBindings(0, "queues.testaddress", 1, 1, true);
+ waitForBindings(1, "queues.testaddress", 1, 1, true);
+ waitForBindings(2, "queues.testaddress", 1, 1, true);
+
+ waitForBindings(0, "queues.testaddress", 2, 2, false);
+ waitForBindings(1, "queues.testaddress", 2, 2, false);
+ waitForBindings(2, "queues.testaddress", 2, 2, false);
+
+ send(0, "queues.testaddress", 20, false, filter1);
+
+ int[] ids0 = getReceivedOrder(0);
+ getReceivedOrder(1);
+ getReceivedOrder(2);
+
+ removeConsumer(0);
+
+ verifyReceiveRoundRobinInSomeOrderWithCounts(false, ids0, 2);
+ }
+
+ public void testRedistributionWhenRemoteConsumerIsAdded() throws Exception
+ {
+ setupCluster(false);
+
+ startServers(0, 1, 2);
+
+ setupSessionFactory(0, isNetty());
+ setupSessionFactory(1, isNetty());
+ setupSessionFactory(2, isNetty());
+
+ createQueue(0, "queues.testaddress", "queue0", null, false);
+ createQueue(1, "queues.testaddress", "queue0", null, false);
+ createQueue(2, "queues.testaddress", "queue0", null, false);
+
+ addConsumer(0, 0, "queue0", null);
+
+ waitForBindings(0, "queues.testaddress", 1, 1, true);
+ waitForBindings(1, "queues.testaddress", 1, 0, true);
+ waitForBindings(2, "queues.testaddress", 1, 0, true);
+
+ waitForBindings(0, "queues.testaddress", 2, 0, false);
+ waitForBindings(1, "queues.testaddress", 2, 1, false);
+ waitForBindings(2, "queues.testaddress", 2, 1, false);
+
+ send(0, "queues.testaddress", 20, false, null);
+
+ removeConsumer(0);
+
+ addConsumer(1, 1, "queue0", null);
+
+ verifyReceiveAll(20, 1);
+ verifyNotReceive(1);
+ }
+
+ public void testBackAndForth() throws Exception
+ {
+ setupCluster(false);
+
+ startServers(0, 1, 2);
+
+ setupSessionFactory(0, isNetty());
+ setupSessionFactory(1, isNetty());
+ setupSessionFactory(2, isNetty());
+
+ createQueue(0, "queues.testaddress", "queue0", null, false);
+ createQueue(1, "queues.testaddress", "queue0", null, false);
+ createQueue(2, "queues.testaddress", "queue0", null, false);
+
+ addConsumer(0, 0, "queue0", null);
+
+ waitForBindings(0, "queues.testaddress", 1, 1, true);
+ waitForBindings(1, "queues.testaddress", 1, 0, true);
+ waitForBindings(2, "queues.testaddress", 1, 0, true);
+
+ waitForBindings(0, "queues.testaddress", 2, 0, false);
+ waitForBindings(1, "queues.testaddress", 2, 1, false);
+ waitForBindings(2, "queues.testaddress", 2, 1, false);
+
+ send(0, "queues.testaddress", 20, false, null);
+
+ removeConsumer(0);
+
+ waitForBindings(0, "queues.testaddress", 1, 0, true);
+ waitForBindings(1, "queues.testaddress", 1, 0, true);
+ waitForBindings(2, "queues.testaddress", 1, 0, true);
+
+ waitForBindings(0, "queues.testaddress", 2, 0, false);
+ waitForBindings(1, "queues.testaddress", 2, 0, false);
+ waitForBindings(2, "queues.testaddress", 2, 0, false);
+
+ addConsumer(1, 1, "queue0", null);
+
+ waitForBindings(0, "queues.testaddress", 1, 0, true);
+ waitForBindings(1, "queues.testaddress", 1, 1, true);
+ waitForBindings(2, "queues.testaddress", 1, 0, true);
+
+ waitForBindings(0, "queues.testaddress", 2, 1, false);
+ waitForBindings(1, "queues.testaddress", 2, 0, false);
+ waitForBindings(2, "queues.testaddress", 2, 1, false);
+
+ removeConsumer(1);
+
+ waitForBindings(0, "queues.testaddress", 1, 0, true);
+ waitForBindings(1, "queues.testaddress", 1, 0, true);
+ waitForBindings(2, "queues.testaddress", 1, 0, true);
+
+ waitForBindings(0, "queues.testaddress", 2, 0, false);
+ waitForBindings(1, "queues.testaddress", 2, 0, false);
+ waitForBindings(2, "queues.testaddress", 2, 0, false);
+
+ addConsumer(0, 0, "queue0", null);
+
+ waitForBindings(0, "queues.testaddress", 1, 1, true);
+ waitForBindings(1, "queues.testaddress", 1, 0, true);
+ waitForBindings(2, "queues.testaddress", 1, 0, true);
+
+ waitForBindings(0, "queues.testaddress", 2, 0, false);
+ waitForBindings(1, "queues.testaddress", 2, 1, false);
+ waitForBindings(2, "queues.testaddress", 2, 1, false);
+
+ verifyReceiveAll(20, 0);
+ verifyNotReceive(0);
+ }
+
+ public void testRedistributionToQueuesWhereNotAllMessagesMatch() throws Exception
+ {
+ setupCluster(false);
+
+ startServers(0, 1, 2);
+
+ setupSessionFactory(0, isNetty());
+ setupSessionFactory(1, isNetty());
+ setupSessionFactory(2, isNetty());
+
+ String filter1 = "giraffe";
+ String filter2 = "platypus";
+
+ createQueue(0, "queues.testaddress", "queue0", null, false);
+ createQueue(1, "queues.testaddress", "queue0", null, false);
+ createQueue(2, "queues.testaddress", "queue0", null, false);
+
+ addConsumer(0, 0, "queue0", null);
+
+ waitForBindings(0, "queues.testaddress", 1, 1, true);
+ waitForBindings(1, "queues.testaddress", 1, 0, true);
+ waitForBindings(2, "queues.testaddress", 1, 0, true);
+
+ waitForBindings(0, "queues.testaddress", 2, 0, false);
+ waitForBindings(1, "queues.testaddress", 2, 1, false);
+ waitForBindings(2, "queues.testaddress", 2, 1, false);
+
+ sendInRange(0, "queues.testaddress", 0, 10, false, filter1);
+ sendInRange(0, "queues.testaddress", 10, 20, false, filter2);
+
+ removeConsumer(0);
+ addConsumer(1, 1, "queue0", filter1);
+ addConsumer(2, 2, "queue0", filter2);
+
+ verifyReceiveAllInRange(0, 10, 1);
+ verifyReceiveAllInRange(10, 20, 2);
+ }
+
+ public void testDelayedRedistribution() throws Exception
+ {
+ final long delay = 1000;
+ setRedistributionDelay(delay);
+
+ setupCluster(false);
+
+ startServers(0, 1, 2);
+
+ setupSessionFactory(0, isNetty());
+ setupSessionFactory(1, isNetty());
+ setupSessionFactory(2, isNetty());
+
+ createQueue(0, "queues.testaddress", "queue0", null, false);
+ createQueue(1, "queues.testaddress", "queue0", null, false);
+ createQueue(2, "queues.testaddress", "queue0", null, false);
+
+ addConsumer(0, 0, "queue0", null);
+
+ waitForBindings(0, "queues.testaddress", 1, 1, true);
+ waitForBindings(1, "queues.testaddress", 1, 0, true);
+ waitForBindings(2, "queues.testaddress", 1, 0, true);
+
+ waitForBindings(0, "queues.testaddress", 2, 0, false);
+ waitForBindings(1, "queues.testaddress", 2, 1, false);
+ waitForBindings(2, "queues.testaddress", 2, 1, false);
+
+ send(0, "queues.testaddress", 20, false, null);
+
+ long start = System.currentTimeMillis();
+
+ removeConsumer(0);
+ addConsumer(1, 1, "queue0", null);
+
+ long minReceiveTime = start + delay;
+
+ verifyReceiveAllNotBefore(minReceiveTime, 20, 1);
+ }
+
+ public void testDelayedRedistributionCancelled() throws Exception
+ {
+ final long delay = 1000;
+ setRedistributionDelay(delay);
+
+ setupCluster(false);
+
+ startServers(0, 1, 2);
+
+ setupSessionFactory(0, isNetty());
+ setupSessionFactory(1, isNetty());
+ setupSessionFactory(2, isNetty());
+
+ createQueue(0, "queues.testaddress", "queue0", null, false);
+ createQueue(1, "queues.testaddress", "queue0", null, false);
+ createQueue(2, "queues.testaddress", "queue0", null, false);
+
+ addConsumer(0, 0, "queue0", null);
+
+ waitForBindings(0, "queues.testaddress", 1, 1, true);
+ waitForBindings(1, "queues.testaddress", 1, 0, true);
+ waitForBindings(2, "queues.testaddress", 1, 0, true);
+
+ waitForBindings(0, "queues.testaddress", 2, 0, false);
+ waitForBindings(1, "queues.testaddress", 2, 1, false);
+ waitForBindings(2, "queues.testaddress", 2, 1, false);
+
+ send(0, "queues.testaddress", 20, false, null);
+
+ removeConsumer(0);
+ addConsumer(1, 1, "queue0", null);
+
+ Thread.sleep(delay / 2);
+
+ //Add it back on the local queue - this should stop any redistributionm
+ addConsumer(0, 0, "queue0", null);
+
+ Thread.sleep(delay);
+
+ verifyReceiveAll(20, 0);
+ }
+
+ public void testRedistributionNumberOfMessagesGreaterThanBatchSize() throws Exception
+ {
+ setupCluster(false);
+
+ startServers(0, 1, 2);
+
+ setupSessionFactory(0, isNetty());
+ setupSessionFactory(1, isNetty());
+ setupSessionFactory(2, isNetty());
+
+ createQueue(0, "queues.testaddress", "queue0", null, false);
+ createQueue(1, "queues.testaddress", "queue0", null, false);
+ createQueue(2, "queues.testaddress", "queue0", null, false);
+
+ addConsumer(0, 0, "queue0", null);
+
+ waitForBindings(0, "queues.testaddress", 1, 1, true);
+ waitForBindings(1, "queues.testaddress", 1, 0, true);
+ waitForBindings(2, "queues.testaddress", 1, 0, true);
+
+ waitForBindings(0, "queues.testaddress", 2, 0, false);
+ waitForBindings(1, "queues.testaddress", 2, 1, false);
+ waitForBindings(2, "queues.testaddress", 2, 1, false);
+
+ send(0, "queues.testaddress", QueueImpl.REDISTRIBUTOR_BATCH_SIZE * 2, false, null);
+
+ removeConsumer(0);
+ addConsumer(1, 1, "queue0", null);
+
+ verifyReceiveAll(QueueImpl.REDISTRIBUTOR_BATCH_SIZE * 2, 1);
+ }
+
+ protected void setupCluster(final boolean forwardWhenNoConsumers) throws Exception
+ {
+ setupClusterConnection("cluster0", "queues", forwardWhenNoConsumers, 1, isNetty(), 0, 1, 2);
+
+ setupClusterConnection("cluster1", "queues", forwardWhenNoConsumers, 1, isNetty(), 1, 0, 2);
+
+ setupClusterConnection("cluster2", "queues", forwardWhenNoConsumers, 1, isNetty(), 2, 0, 1);
+ }
+
+ protected void setRedistributionDelay(final long delay)
+ {
+ AddressSettings as = new AddressSettings();
+ as.setRedistributionDelay(delay);
+
+ getService(0).getServer().getAddressSettingsRepository().addMatch("queues.*", as);
+ getService(1).getServer().getAddressSettingsRepository().addMatch("queues.*", as);
+ getService(2).getServer().getAddressSettingsRepository().addMatch("queues.*", as);
+ }
+
+ protected void setupServers() throws Exception
+ {
+ setupServer(0, isFileStorage(), isNetty());
+ setupServer(1, isFileStorage(), isNetty());
+ setupServer(2, isFileStorage(), isNetty());
+ }
+
+ protected void stopServers() throws Exception
+ {
+ closeAllConsumers();
+
+ closeAllSessionFactories();
+
+ stopClusterConnections(0, 1, 2);
+
+ stopServers(0, 1, 2);
+ }
+
+}
Modified: trunk/tests/src/org/jboss/messaging/tests/integration/cluster/distribution/OneWayChainClusterTest.java
===================================================================
--- trunk/tests/src/org/jboss/messaging/tests/integration/cluster/distribution/OneWayChainClusterTest.java 2009-02-17 17:18:39 UTC (rev 5883)
+++ trunk/tests/src/org/jboss/messaging/tests/integration/cluster/distribution/OneWayChainClusterTest.java 2009-02-17 19:52:51 UTC (rev 5884)
@@ -57,6 +57,8 @@
closeAllSessionFactories();
+ stopClusterConnections(0, 1, 2, 3, 4);
+
stopServers(0, 1, 2, 3, 4);
super.tearDown();
Modified: trunk/tests/src/org/jboss/messaging/tests/integration/cluster/distribution/OnewayTwoNodeClusterTest.java
===================================================================
--- trunk/tests/src/org/jboss/messaging/tests/integration/cluster/distribution/OnewayTwoNodeClusterTest.java 2009-02-17 17:18:39 UTC (rev 5883)
+++ trunk/tests/src/org/jboss/messaging/tests/integration/cluster/distribution/OnewayTwoNodeClusterTest.java 2009-02-17 19:52:51 UTC (rev 5884)
@@ -54,6 +54,8 @@
closeAllSessionFactories();
+ stopClusterConnections(0, 1);
+
stopServers(0, 1);
super.tearDown();
Modified: trunk/tests/src/org/jboss/messaging/tests/integration/cluster/distribution/SymmetricClusterTest.java
===================================================================
--- trunk/tests/src/org/jboss/messaging/tests/integration/cluster/distribution/SymmetricClusterTest.java 2009-02-17 17:18:39 UTC (rev 5883)
+++ trunk/tests/src/org/jboss/messaging/tests/integration/cluster/distribution/SymmetricClusterTest.java 2009-02-17 19:52:51 UTC (rev 5884)
@@ -42,11 +42,11 @@
@Override
protected void setUp() throws Exception
{
- super.setUp();
-
+ super.setUp();
+
setupServers();
}
-
+
@Override
protected void tearDown() throws Exception
{
@@ -64,7 +64,100 @@
{
return false;
}
+
+ public void testStopAllStartAll() throws Exception
+ {
+ setupCluster();
+ startServers(0, 1, 2, 3, 4);
+
+ setupSessionFactory(0, isNetty());
+ setupSessionFactory(1, isNetty());
+ setupSessionFactory(2, isNetty());
+ setupSessionFactory(3, isNetty());
+ setupSessionFactory(4, isNetty());
+
+ createQueue(0, "queues.testaddress", "queue0", null, false);
+ createQueue(1, "queues.testaddress", "queue0", null, false);
+ createQueue(2, "queues.testaddress", "queue0", null, false);
+ createQueue(3, "queues.testaddress", "queue0", null, false);
+ createQueue(4, "queues.testaddress", "queue0", null, false);
+
+ addConsumer(0, 0, "queue0", null);
+ addConsumer(1, 1, "queue0", null);
+ addConsumer(2, 2, "queue0", null);
+ addConsumer(3, 3, "queue0", null);
+ addConsumer(4, 4, "queue0", null);
+
+ waitForBindings(0, "queues.testaddress", 1, 1, true);
+ waitForBindings(1, "queues.testaddress", 1, 1, true);
+ waitForBindings(2, "queues.testaddress", 1, 1, true);
+ waitForBindings(3, "queues.testaddress", 1, 1, true);
+ waitForBindings(4, "queues.testaddress", 1, 1, true);
+
+ waitForBindings(0, "queues.testaddress", 4, 4, false);
+ waitForBindings(1, "queues.testaddress", 4, 4, false);
+ waitForBindings(2, "queues.testaddress", 4, 4, false);
+ waitForBindings(3, "queues.testaddress", 4, 4, false);
+ waitForBindings(4, "queues.testaddress", 4, 4, false);
+
+ send(0, "queues.testaddress", 10, false, null);
+
+ verifyReceiveRoundRobinInSomeOrder(10, 0, 1, 2, 3, 4);
+
+ this.verifyNotReceive(0, 1, 2, 3, 4);
+
+ this.removeConsumer(0);
+ this.removeConsumer(1);
+ this.removeConsumer(2);
+ this.removeConsumer(3);
+ this.removeConsumer(4);
+
+ this.closeAllSessionFactories();
+
+ stopServers(0, 1, 2, 3, 4);
+
+ startServers(0, 1, 2, 3, 4);
+
+ setupSessionFactory(0, isNetty());
+ setupSessionFactory(1, isNetty());
+ setupSessionFactory(2, isNetty());
+ setupSessionFactory(3, isNetty());
+ setupSessionFactory(4, isNetty());
+
+ createQueue(0, "queues.testaddress", "queue0", null, false);
+ createQueue(1, "queues.testaddress", "queue0", null, false);
+ createQueue(2, "queues.testaddress", "queue0", null, false);
+ createQueue(3, "queues.testaddress", "queue0", null, false);
+ createQueue(4, "queues.testaddress", "queue0", null, false);
+
+ addConsumer(0, 0, "queue0", null);
+ addConsumer(1, 1, "queue0", null);
+ addConsumer(2, 2, "queue0", null);
+ addConsumer(3, 3, "queue0", null);
+ addConsumer(4, 4, "queue0", null);
+
+ waitForBindings(0, "queues.testaddress", 1, 1, true);
+ waitForBindings(1, "queues.testaddress", 1, 1, true);
+ waitForBindings(2, "queues.testaddress", 1, 1, true);
+ waitForBindings(3, "queues.testaddress", 1, 1, true);
+ waitForBindings(4, "queues.testaddress", 1, 1, true);
+
+ waitForBindings(0, "queues.testaddress", 4, 4, false);
+ waitForBindings(1, "queues.testaddress", 4, 4, false);
+ waitForBindings(2, "queues.testaddress", 4, 4, false);
+ waitForBindings(3, "queues.testaddress", 4, 4, false);
+ waitForBindings(4, "queues.testaddress", 4, 4, false);
+
+ send(0, "queues.testaddress", 10, false, null);
+
+ verifyReceiveRoundRobinInSomeOrder(10, 0, 1, 2, 3, 4);
+
+ this.verifyNotReceive(0, 1, 2, 3, 4);
+
+ log.info("got here");
+ }
+
public void testBasicRoundRobin() throws Exception
{
setupCluster();
@@ -105,11 +198,11 @@
verifyReceiveRoundRobinInSomeOrder(10, 0, 1, 2, 3, 4);
- verifyNotReceive(0, 1, 2, 3, 4);
-
+ this.verifyNotReceive(0, 1, 2, 3, 4);
+
log.info("got here");
}
-
+
public void testRoundRobinMultipleQueues() throws Exception
{
setupCluster();
@@ -175,10 +268,8 @@
verifyReceiveRoundRobinInSomeOrder(10, 0, 1, 2, 3, 4);
verifyReceiveRoundRobinInSomeOrder(10, 5, 6, 7, 8, 9);
verifyReceiveRoundRobinInSomeOrder(10, 10, 11, 12, 13, 14);
+ }
- verifyNotReceive(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14);
- }
-
public void testMultipleNonLoadBalancedQueues() throws Exception
{
setupCluster();
@@ -242,10 +333,8 @@
send(0, "queues.testaddress", 10, false, null);
verifyReceiveAll(10, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14);
+ }
- verifyNotReceive(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14);
- }
-
public void testMixtureLoadBalancedAndNonLoadBalancedQueues() throws Exception
{
setupCluster();
@@ -275,25 +364,24 @@
createQueue(2, "queues.testaddress", "queue12", null, false);
createQueue(3, "queues.testaddress", "queue13", null, false);
createQueue(4, "queues.testaddress", "queue14", null, false);
-
- createQueue(0, "queues.testaddress", "queue15", null, false);
+
+ createQueue(0, "queues.testaddress", "queue15", null, false);
createQueue(1, "queues.testaddress", "queue15", null, false);
createQueue(2, "queues.testaddress", "queue15", null, false);
createQueue(3, "queues.testaddress", "queue15", null, false);
createQueue(4, "queues.testaddress", "queue15", null, false);
-
- createQueue(2, "queues.testaddress", "queue16", null, false);
+
+ createQueue(2, "queues.testaddress", "queue16", null, false);
createQueue(3, "queues.testaddress", "queue16", null, false);
createQueue(4, "queues.testaddress", "queue16", null, false);
-
- createQueue(0, "queues.testaddress", "queue17", null, false);
+
+ createQueue(0, "queues.testaddress", "queue17", null, false);
createQueue(1, "queues.testaddress", "queue17", null, false);
createQueue(4, "queues.testaddress", "queue17", null, false);
-
- createQueue(3, "queues.testaddress", "queue18", null, false);
+
+ createQueue(3, "queues.testaddress", "queue18", null, false);
createQueue(4, "queues.testaddress", "queue18", null, false);
-
-
+
addConsumer(0, 0, "queue0", null);
addConsumer(1, 1, "queue1", null);
addConsumer(2, 2, "queue2", null);
@@ -311,25 +399,24 @@
addConsumer(12, 2, "queue12", null);
addConsumer(13, 3, "queue13", null);
addConsumer(14, 4, "queue14", null);
-
+
addConsumer(15, 0, "queue15", null);
addConsumer(16, 1, "queue15", null);
addConsumer(17, 2, "queue15", null);
addConsumer(18, 3, "queue15", null);
addConsumer(19, 4, "queue15", null);
-
+
addConsumer(20, 2, "queue16", null);
addConsumer(21, 3, "queue16", null);
addConsumer(22, 4, "queue16", null);
-
+
addConsumer(23, 0, "queue17", null);
addConsumer(24, 1, "queue17", null);
addConsumer(25, 4, "queue17", null);
-
+
addConsumer(26, 3, "queue18", null);
addConsumer(27, 4, "queue18", null);
-
waitForBindings(0, "queues.testaddress", 5, 5, true);
waitForBindings(1, "queues.testaddress", 5, 5, true);
waitForBindings(2, "queues.testaddress", 5, 5, true);
@@ -345,18 +432,16 @@
send(0, "queues.testaddress", 10, false, null);
verifyReceiveAll(10, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14);
-
+
verifyReceiveRoundRobinInSomeOrder(10, 15, 16, 17, 18, 19);
-
+
verifyReceiveRoundRobinInSomeOrder(10, 20, 21, 22);
-
+
verifyReceiveRoundRobinInSomeOrder(10, 23, 24, 25);
-
+
verifyReceiveRoundRobinInSomeOrder(10, 26, 27);
+ }
- verifyNotReceive(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27);
- }
-
public void testMixtureLoadBalancedAndNonLoadBalancedQueuesRemoveSomeQueuesAndConsumers() throws Exception
{
setupCluster();
@@ -386,25 +471,24 @@
createQueue(2, "queues.testaddress", "queue12", null, false);
createQueue(3, "queues.testaddress", "queue13", null, false);
createQueue(4, "queues.testaddress", "queue14", null, false);
-
- createQueue(0, "queues.testaddress", "queue15", null, false);
+
+ createQueue(0, "queues.testaddress", "queue15", null, false);
createQueue(1, "queues.testaddress", "queue15", null, false);
createQueue(2, "queues.testaddress", "queue15", null, false);
createQueue(3, "queues.testaddress", "queue15", null, false);
createQueue(4, "queues.testaddress", "queue15", null, false);
-
- createQueue(2, "queues.testaddress", "queue16", null, false);
+
+ createQueue(2, "queues.testaddress", "queue16", null, false);
createQueue(3, "queues.testaddress", "queue16", null, false);
createQueue(4, "queues.testaddress", "queue16", null, false);
-
- createQueue(0, "queues.testaddress", "queue17", null, false);
+
+ createQueue(0, "queues.testaddress", "queue17", null, false);
createQueue(1, "queues.testaddress", "queue17", null, false);
createQueue(4, "queues.testaddress", "queue17", null, false);
-
- createQueue(3, "queues.testaddress", "queue18", null, false);
+
+ createQueue(3, "queues.testaddress", "queue18", null, false);
createQueue(4, "queues.testaddress", "queue18", null, false);
-
-
+
addConsumer(0, 0, "queue0", null);
addConsumer(1, 1, "queue1", null);
addConsumer(2, 2, "queue2", null);
@@ -422,25 +506,24 @@
addConsumer(12, 2, "queue12", null);
addConsumer(13, 3, "queue13", null);
addConsumer(14, 4, "queue14", null);
-
+
addConsumer(15, 0, "queue15", null);
addConsumer(16, 1, "queue15", null);
addConsumer(17, 2, "queue15", null);
addConsumer(18, 3, "queue15", null);
addConsumer(19, 4, "queue15", null);
-
+
addConsumer(20, 2, "queue16", null);
addConsumer(21, 3, "queue16", null);
addConsumer(22, 4, "queue16", null);
-
+
addConsumer(23, 0, "queue17", null);
addConsumer(24, 1, "queue17", null);
addConsumer(25, 4, "queue17", null);
-
+
addConsumer(26, 3, "queue18", null);
addConsumer(27, 4, "queue18", null);
-
waitForBindings(0, "queues.testaddress", 5, 5, true);
waitForBindings(1, "queues.testaddress", 5, 5, true);
waitForBindings(2, "queues.testaddress", 5, 5, true);
@@ -456,31 +539,29 @@
send(0, "queues.testaddress", 10, false, null);
verifyReceiveAll(10, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14);
-
+
verifyReceiveRoundRobinInSomeOrder(10, 15, 16, 17, 18, 19);
-
+
verifyReceiveRoundRobinInSomeOrder(10, 20, 21, 22);
-
+
verifyReceiveRoundRobinInSomeOrder(10, 23, 24, 25);
-
+
verifyReceiveRoundRobinInSomeOrder(10, 26, 27);
- verifyNotReceive(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27);
-
removeConsumer(16);
removeConsumer(18);
removeConsumer(21);
removeConsumer(22);
removeConsumer(26);
-
+
deleteQueue(1, "queue15");
deleteQueue(3, "queue15");
-
+
deleteQueue(3, "queue16");
deleteQueue(4, "queue16");
-
+
deleteQueue(3, "queue18");
-
+
waitForBindings(0, "queues.testaddress", 5, 5, true);
waitForBindings(1, "queues.testaddress", 4, 4, true);
waitForBindings(2, "queues.testaddress", 5, 5, true);
@@ -492,21 +573,16 @@
waitForBindings(2, "queues.testaddress", 18, 18, false);
waitForBindings(3, "queues.testaddress", 20, 20, false);
waitForBindings(4, "queues.testaddress", 17, 17, false);
-
+
send(0, "queues.testaddress", 10, false, null);
verifyReceiveAll(10, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 20, 27);
-
+
verifyReceiveRoundRobinInSomeOrder(10, 15, 17, 19);
-
- //this.checkReceive(23, 24, 25);
-
+
verifyReceiveRoundRobinInSomeOrder(10, 23, 24, 25);
-
- verifyNotReceive(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 17, 19, 20, 23, 24, 25, 27);
-
}
-
+
public void testMixtureLoadBalancedAndNonLoadBalancedQueuesAddQueuesAndConsumersBeforAllServersAreStarted() throws Exception
{
setupCluster();
@@ -518,86 +594,85 @@
createQueue(0, "queues.testaddress", "queue0", null, false);
createQueue(0, "queues.testaddress", "queue5", null, false);
createQueue(0, "queues.testaddress", "queue10", null, false);
- createQueue(0, "queues.testaddress", "queue15", null, false);
- createQueue(0, "queues.testaddress", "queue17", null, false);
-
+ createQueue(0, "queues.testaddress", "queue15", null, false);
+ createQueue(0, "queues.testaddress", "queue17", null, false);
+
addConsumer(0, 0, "queue0", null);
addConsumer(5, 0, "queue5", null);
-
+
startServers(1);
setupSessionFactory(1, isNetty());
-
+
createQueue(1, "queues.testaddress", "queue1", null, false);
createQueue(1, "queues.testaddress", "queue6", null, false);
createQueue(1, "queues.testaddress", "queue11", null, false);
createQueue(1, "queues.testaddress", "queue15", null, false);
createQueue(1, "queues.testaddress", "queue17", null, false);
-
+
addConsumer(1, 1, "queue1", null);
addConsumer(6, 1, "queue6", null);
addConsumer(11, 1, "queue11", null);
addConsumer(16, 1, "queue15", null);
-
+
startServers(2);
setupSessionFactory(2, isNetty());
-
+
createQueue(2, "queues.testaddress", "queue2", null, false);
createQueue(2, "queues.testaddress", "queue7", null, false);
createQueue(2, "queues.testaddress", "queue12", null, false);
createQueue(2, "queues.testaddress", "queue15", null, false);
- createQueue(2, "queues.testaddress", "queue16", null, false);
-
+ createQueue(2, "queues.testaddress", "queue16", null, false);
+
addConsumer(2, 2, "queue2", null);
addConsumer(7, 2, "queue7", null);
addConsumer(12, 2, "queue12", null);
addConsumer(17, 2, "queue15", null);
-
+
startServers(3);
setupSessionFactory(3, isNetty());
-
+
createQueue(3, "queues.testaddress", "queue3", null, false);
createQueue(3, "queues.testaddress", "queue8", null, false);
createQueue(3, "queues.testaddress", "queue13", null, false);
createQueue(3, "queues.testaddress", "queue15", null, false);
createQueue(3, "queues.testaddress", "queue16", null, false);
createQueue(3, "queues.testaddress", "queue18", null, false);
-
+
addConsumer(3, 3, "queue3", null);
addConsumer(8, 3, "queue8", null);
addConsumer(13, 3, "queue13", null);
addConsumer(18, 3, "queue15", null);
-
+
startServers(4);
setupSessionFactory(4, isNetty());
-
+
createQueue(4, "queues.testaddress", "queue4", null, false);
createQueue(4, "queues.testaddress", "queue9", null, false);
createQueue(4, "queues.testaddress", "queue14", null, false);
createQueue(4, "queues.testaddress", "queue15", null, false);
createQueue(4, "queues.testaddress", "queue16", null, false);
- createQueue(4, "queues.testaddress", "queue17", null, false);
+ createQueue(4, "queues.testaddress", "queue17", null, false);
createQueue(4, "queues.testaddress", "queue18", null, false);
-
+
addConsumer(4, 4, "queue4", null);
addConsumer(9, 4, "queue9", null);
addConsumer(10, 0, "queue10", null);
- addConsumer(14, 4, "queue14", null);
-
+ addConsumer(14, 4, "queue14", null);
+
addConsumer(15, 0, "queue15", null);
- addConsumer(19, 4, "queue15", null);
-
+ addConsumer(19, 4, "queue15", null);
+
addConsumer(20, 2, "queue16", null);
addConsumer(21, 3, "queue16", null);
addConsumer(22, 4, "queue16", null);
-
+
addConsumer(23, 0, "queue17", null);
addConsumer(24, 1, "queue17", null);
addConsumer(25, 4, "queue17", null);
-
+
addConsumer(26, 3, "queue18", null);
addConsumer(27, 4, "queue18", null);
-
waitForBindings(0, "queues.testaddress", 5, 5, true);
waitForBindings(1, "queues.testaddress", 5, 5, true);
waitForBindings(2, "queues.testaddress", 5, 5, true);
@@ -613,18 +688,16 @@
send(0, "queues.testaddress", 10, false, null);
verifyReceiveAll(10, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14);
-
+
verifyReceiveRoundRobinInSomeOrder(10, 15, 16, 17, 18, 19);
-
+
verifyReceiveRoundRobinInSomeOrder(10, 20, 21, 22);
-
+
verifyReceiveRoundRobinInSomeOrder(10, 23, 24, 25);
-
+
verifyReceiveRoundRobinInSomeOrder(10, 26, 27);
+ }
- verifyNotReceive(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27);
- }
-
public void testMixtureLoadBalancedAndNonLoadBalancedQueuesWithFilters() throws Exception
{
setupCluster();
@@ -636,8 +709,8 @@
setupSessionFactory(2, isNetty());
setupSessionFactory(3, isNetty());
setupSessionFactory(4, isNetty());
-
- String filter1 = "haggis";
+
+ String filter1 = "haggis";
String filter2 = "scotch-egg";
createQueue(0, "queues.testaddress", "queue0", null, false);
@@ -657,25 +730,24 @@
createQueue(2, "queues.testaddress", "queue12", null, false);
createQueue(3, "queues.testaddress", "queue13", null, false);
createQueue(4, "queues.testaddress", "queue14", filter1, false);
-
- createQueue(0, "queues.testaddress", "queue15", filter1, false);
+
+ createQueue(0, "queues.testaddress", "queue15", filter1, false);
createQueue(1, "queues.testaddress", "queue15", filter1, false);
createQueue(2, "queues.testaddress", "queue15", null, false);
createQueue(3, "queues.testaddress", "queue15", filter2, false);
createQueue(4, "queues.testaddress", "queue15", filter2, false);
-
- createQueue(2, "queues.testaddress", "queue16", filter1, false);
+
+ createQueue(2, "queues.testaddress", "queue16", filter1, false);
createQueue(3, "queues.testaddress", "queue16", null, false);
createQueue(4, "queues.testaddress", "queue16", null, false);
-
- createQueue(0, "queues.testaddress", "queue17", null, false);
+
+ createQueue(0, "queues.testaddress", "queue17", null, false);
createQueue(1, "queues.testaddress", "queue17", null, false);
createQueue(4, "queues.testaddress", "queue17", null, false);
-
- createQueue(3, "queues.testaddress", "queue18", filter2, false);
+
+ createQueue(3, "queues.testaddress", "queue18", filter2, false);
createQueue(4, "queues.testaddress", "queue18", null, false);
-
-
+
addConsumer(0, 0, "queue0", null);
addConsumer(1, 1, "queue1", null);
addConsumer(2, 2, "queue2", null);
@@ -693,25 +765,24 @@
addConsumer(12, 2, "queue12", null);
addConsumer(13, 3, "queue13", null);
addConsumer(14, 4, "queue14", null);
-
+
addConsumer(15, 0, "queue15", null);
addConsumer(16, 1, "queue15", null);
addConsumer(17, 2, "queue15", null);
addConsumer(18, 3, "queue15", null);
addConsumer(19, 4, "queue15", null);
-
+
addConsumer(20, 2, "queue16", null);
addConsumer(21, 3, "queue16", null);
addConsumer(22, 4, "queue16", null);
-
+
addConsumer(23, 0, "queue17", null);
addConsumer(24, 1, "queue17", null);
addConsumer(25, 4, "queue17", null);
-
+
addConsumer(26, 3, "queue18", null);
addConsumer(27, 4, "queue18", null);
-
waitForBindings(0, "queues.testaddress", 5, 5, true);
waitForBindings(1, "queues.testaddress", 5, 5, true);
waitForBindings(2, "queues.testaddress", 5, 5, true);
@@ -727,38 +798,32 @@
send(0, "queues.testaddress", 10, false, filter1);
verifyReceiveAll(10, 0, 1, 2, 4, 5, 6, 8, 9, 10, 12, 13, 14, 27);
-
+
verifyReceiveRoundRobinInSomeOrder(10, 15, 16, 17);
-
+
verifyReceiveRoundRobinInSomeOrder(10, 20, 21, 22);
-
+
verifyReceiveRoundRobinInSomeOrder(10, 23, 24, 25);
-
- verifyNotReceive(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27);
-
+
send(0, "queues.testaddress", 10, false, filter2);
-
+
verifyReceiveAll(10, 0, 2, 3, 4, 6, 7, 8, 10, 11, 12, 13);
-
+
verifyReceiveRoundRobinInSomeOrder(10, 17, 18, 19);
-
+
verifyReceiveRoundRobinInSomeOrder(10, 21, 22);
-
+
verifyReceiveRoundRobinInSomeOrder(10, 23, 24, 25);
-
+
verifyReceiveRoundRobinInSomeOrder(10, 26, 27);
- verifyNotReceive(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27);
-
send(0, "queues.testaddress", 10, false, null);
-
+
verifyReceiveAll(10, 0, 2, 4, 6, 8, 10, 12, 13, 17, 27);
-
+
verifyReceiveRoundRobinInSomeOrder(10, 21, 22);
-
+
verifyReceiveRoundRobinInSomeOrder(10, 23, 24, 25);
-
- verifyNotReceive(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27);
}
public void testMixtureLoadBalancedAndNonLoadBalancedQueuesWithConsumersWithFilters() throws Exception
@@ -772,8 +837,8 @@
setupSessionFactory(2, isNetty());
setupSessionFactory(3, isNetty());
setupSessionFactory(4, isNetty());
-
- String filter1 = "haggis";
+
+ String filter1 = "haggis";
String filter2 = "scotch-egg";
createQueue(0, "queues.testaddress", "queue0", null, false);
@@ -793,25 +858,24 @@
createQueue(2, "queues.testaddress", "queue12", null, false);
createQueue(3, "queues.testaddress", "queue13", null, false);
createQueue(4, "queues.testaddress", "queue14", null, false);
-
- createQueue(0, "queues.testaddress", "queue15", null, false);
+
+ createQueue(0, "queues.testaddress", "queue15", null, false);
createQueue(1, "queues.testaddress", "queue15", null, false);
createQueue(2, "queues.testaddress", "queue15", null, false);
createQueue(3, "queues.testaddress", "queue15", null, false);
createQueue(4, "queues.testaddress", "queue15", null, false);
-
- createQueue(2, "queues.testaddress", "queue16", null, false);
+
+ createQueue(2, "queues.testaddress", "queue16", null, false);
createQueue(3, "queues.testaddress", "queue16", null, false);
createQueue(4, "queues.testaddress", "queue16", null, false);
-
- createQueue(0, "queues.testaddress", "queue17", null, false);
+
+ createQueue(0, "queues.testaddress", "queue17", null, false);
createQueue(1, "queues.testaddress", "queue17", null, false);
createQueue(4, "queues.testaddress", "queue17", null, false);
-
- createQueue(3, "queues.testaddress", "queue18", filter2, false);
+
+ createQueue(3, "queues.testaddress", "queue18", filter2, false);
createQueue(4, "queues.testaddress", "queue18", null, false);
-
-
+
addConsumer(0, 0, "queue0", null);
addConsumer(1, 1, "queue1", filter1);
addConsumer(2, 2, "queue2", null);
@@ -829,25 +893,24 @@
addConsumer(12, 2, "queue12", null);
addConsumer(13, 3, "queue13", null);
addConsumer(14, 4, "queue14", filter1);
-
+
addConsumer(15, 0, "queue15", filter1);
addConsumer(16, 1, "queue15", filter1);
addConsumer(17, 2, "queue15", null);
addConsumer(18, 3, "queue15", filter2);
addConsumer(19, 4, "queue15", filter2);
-
+
addConsumer(20, 2, "queue16", filter1);
addConsumer(21, 3, "queue16", null);
addConsumer(22, 4, "queue16", null);
-
+
addConsumer(23, 0, "queue17", null);
addConsumer(24, 1, "queue17", null);
addConsumer(25, 4, "queue17", null);
-
+
addConsumer(26, 3, "queue18", filter2);
addConsumer(27, 4, "queue18", null);
-
waitForBindings(0, "queues.testaddress", 5, 5, true);
waitForBindings(1, "queues.testaddress", 5, 5, true);
waitForBindings(2, "queues.testaddress", 5, 5, true);
@@ -863,40 +926,34 @@
send(0, "queues.testaddress", 10, false, filter1);
verifyReceiveAll(10, 0, 1, 2, 4, 5, 6, 8, 9, 10, 12, 13, 14, 27);
-
+
verifyReceiveRoundRobinInSomeOrder(10, 15, 16, 17);
-
+
verifyReceiveRoundRobinInSomeOrder(10, 20, 21, 22);
-
+
verifyReceiveRoundRobinInSomeOrder(10, 23, 24, 25);
-
- verifyNotReceive(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27);
-
+
send(0, "queues.testaddress", 10, false, filter2);
-
+
verifyReceiveAll(10, 0, 2, 3, 4, 6, 7, 8, 10, 11, 12, 13);
-
+
verifyReceiveRoundRobinInSomeOrder(10, 17, 18, 19);
-
+
verifyReceiveRoundRobinInSomeOrder(10, 21, 22);
-
+
verifyReceiveRoundRobinInSomeOrder(10, 23, 24, 25);
-
+
verifyReceiveRoundRobinInSomeOrder(10, 26, 27);
- verifyNotReceive(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27);
-
send(0, "queues.testaddress", 10, false, null);
-
+
verifyReceiveAll(10, 0, 2, 4, 6, 8, 10, 12, 13, 17, 27);
-
+
verifyReceiveRoundRobinInSomeOrder(10, 21, 22);
-
+
verifyReceiveRoundRobinInSomeOrder(10, 23, 24, 25);
-
- verifyNotReceive(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27);
}
-
+
public void testRouteWhenNoConsumersTrueLoadBalancedQueues() throws Exception
{
setupCluster(true);
@@ -928,7 +985,7 @@
waitForBindings(4, "queues.testaddress", 4, 0, false);
send(0, "queues.testaddress", 10, false, null);
-
+
addConsumer(0, 0, "queue0", null);
addConsumer(1, 1, "queue0", null);
addConsumer(2, 2, "queue0", null);
@@ -948,10 +1005,8 @@
waitForBindings(4, "queues.testaddress", 4, 4, false);
verifyReceiveRoundRobinInSomeOrder(10, 0, 1, 2, 3, 4);
+ }
- verifyNotReceive(0, 1, 2, 3, 4);
- }
-
public void testRouteWhenNoConsumersFalseNoLocalConsumerLoadBalancedQueues() throws Exception
{
setupCluster(false);
@@ -983,7 +1038,7 @@
waitForBindings(4, "queues.testaddress", 4, 0, false);
send(0, "queues.testaddress", 10, false, null);
-
+
addConsumer(0, 0, "queue0", null);
addConsumer(1, 1, "queue0", null);
addConsumer(2, 2, "queue0", null);
@@ -1002,13 +1057,11 @@
waitForBindings(3, "queues.testaddress", 4, 4, false);
waitForBindings(4, "queues.testaddress", 4, 4, false);
- //Should still be round robined since no local consumer
-
+ // Should still be round robined since no local consumer
+
verifyReceiveRoundRobinInSomeOrder(10, 0, 1, 2, 3, 4);
+ }
- verifyNotReceive(0, 1, 2, 3, 4);
- }
-
public void testRouteWhenNoConsumersFalseLocalConsumerLoadBalancedQueues() throws Exception
{
setupCluster(false);
@@ -1026,7 +1079,7 @@
createQueue(2, "queues.testaddress", "queue0", null, false);
createQueue(3, "queues.testaddress", "queue0", null, false);
createQueue(4, "queues.testaddress", "queue0", null, false);
-
+
addConsumer(0, 0, "queue0", null);
waitForBindings(0, "queues.testaddress", 1, 1, true);
@@ -1042,7 +1095,7 @@
waitForBindings(4, "queues.testaddress", 4, 1, false);
send(0, "queues.testaddress", 10, false, null);
-
+
addConsumer(1, 1, "queue0", null);
addConsumer(2, 2, "queue0", null);
addConsumer(3, 3, "queue0", null);
@@ -1061,10 +1114,8 @@
waitForBindings(4, "queues.testaddress", 4, 4, false);
verifyReceiveAll(10, 0);
+ }
- verifyNotReceive(0, 1, 2, 3, 4);
- }
-
public void testRouteWhenNoConsumersFalseNonLoadBalancedQueues() throws Exception
{
setupCluster(false);
@@ -1096,7 +1147,7 @@
waitForBindings(4, "queues.testaddress", 4, 0, false);
send(0, "queues.testaddress", 10, false, null);
-
+
addConsumer(0, 0, "queue0", null);
addConsumer(1, 1, "queue1", null);
addConsumer(2, 2, "queue2", null);
@@ -1116,10 +1167,8 @@
waitForBindings(4, "queues.testaddress", 4, 4, false);
verifyReceiveAll(10, 0, 1, 2, 3, 4);
+ }
- verifyNotReceive(0, 1, 2, 3, 4);
- }
-
public void testRouteWhenNoConsumersTrueNonLoadBalancedQueues() throws Exception
{
setupCluster(true);
@@ -1151,7 +1200,7 @@
waitForBindings(4, "queues.testaddress", 4, 0, false);
send(0, "queues.testaddress", 10, false, null);
-
+
addConsumer(0, 0, "queue0", null);
addConsumer(1, 1, "queue1", null);
addConsumer(2, 2, "queue2", null);
@@ -1171,88 +1220,82 @@
waitForBindings(4, "queues.testaddress", 4, 4, false);
verifyReceiveAll(10, 0, 1, 2, 3, 4);
+ }
- verifyNotReceive(0, 1, 2, 3, 4);
- }
-
public void testNoLocalQueueNonLoadBalancedQueues() throws Exception
{
setupCluster(true);
startServers(0, 1, 2, 3, 4);
-
+
setupSessionFactory(0, isNetty());
setupSessionFactory(1, isNetty());
setupSessionFactory(2, isNetty());
setupSessionFactory(3, isNetty());
setupSessionFactory(4, isNetty());
-
+
createQueue(1, "queues.testaddress", "queue1", null, false);
createQueue(2, "queues.testaddress", "queue2", null, false);
createQueue(3, "queues.testaddress", "queue3", null, false);
createQueue(4, "queues.testaddress", "queue4", null, false);
-
+
addConsumer(1, 1, "queue1", null);
addConsumer(2, 2, "queue2", null);
addConsumer(3, 3, "queue3", null);
addConsumer(4, 4, "queue4", null);
-
+
waitForBindings(1, "queues.testaddress", 1, 1, true);
waitForBindings(2, "queues.testaddress", 1, 1, true);
waitForBindings(3, "queues.testaddress", 1, 1, true);
waitForBindings(4, "queues.testaddress", 1, 1, true);
-
+
waitForBindings(1, "queues.testaddress", 3, 3, false);
waitForBindings(2, "queues.testaddress", 3, 3, false);
waitForBindings(3, "queues.testaddress", 3, 3, false);
waitForBindings(4, "queues.testaddress", 3, 3, false);
send(0, "queues.testaddress", 10, false, null);
-
+
verifyReceiveAll(10, 1, 2, 3, 4);
+ }
- verifyNotReceive(1, 2, 3, 4);
- }
-
public void testNoLocalQueueLoadBalancedQueues() throws Exception
{
setupCluster(true);
startServers(0, 1, 2, 3, 4);
-
+
setupSessionFactory(0, isNetty());
setupSessionFactory(1, isNetty());
setupSessionFactory(2, isNetty());
setupSessionFactory(3, isNetty());
setupSessionFactory(4, isNetty());
-
+
createQueue(1, "queues.testaddress", "queue1", null, false);
createQueue(2, "queues.testaddress", "queue1", null, false);
createQueue(3, "queues.testaddress", "queue1", null, false);
createQueue(4, "queues.testaddress", "queue1", null, false);
-
+
addConsumer(1, 1, "queue1", null);
addConsumer(2, 2, "queue1", null);
addConsumer(3, 3, "queue1", null);
addConsumer(4, 4, "queue1", null);
-
+
waitForBindings(1, "queues.testaddress", 1, 1, true);
waitForBindings(2, "queues.testaddress", 1, 1, true);
waitForBindings(3, "queues.testaddress", 1, 1, true);
waitForBindings(4, "queues.testaddress", 1, 1, true);
-
+
waitForBindings(1, "queues.testaddress", 3, 3, false);
waitForBindings(2, "queues.testaddress", 3, 3, false);
waitForBindings(3, "queues.testaddress", 3, 3, false);
waitForBindings(4, "queues.testaddress", 3, 3, false);
send(0, "queues.testaddress", 10, false, null);
-
+
verifyReceiveRoundRobinInSomeOrder(10, 1, 2, 3, 4);
+ }
- verifyNotReceive(1, 2, 3, 4);
- }
-
public void testStartStopServers() throws Exception
{
setupCluster();
@@ -1282,25 +1325,24 @@
createQueue(2, "queues.testaddress", "queue12", null, false);
createQueue(3, "queues.testaddress", "queue13", null, false);
createQueue(4, "queues.testaddress", "queue14", null, false);
-
- createQueue(0, "queues.testaddress", "queue15", null, false);
+
+ createQueue(0, "queues.testaddress", "queue15", null, false);
createQueue(1, "queues.testaddress", "queue15", null, false);
createQueue(2, "queues.testaddress", "queue15", null, false);
createQueue(3, "queues.testaddress", "queue15", null, false);
createQueue(4, "queues.testaddress", "queue15", null, false);
-
- createQueue(2, "queues.testaddress", "queue16", null, false);
+
+ createQueue(2, "queues.testaddress", "queue16", null, false);
createQueue(3, "queues.testaddress", "queue16", null, false);
createQueue(4, "queues.testaddress", "queue16", null, false);
-
- createQueue(0, "queues.testaddress", "queue17", null, false);
+
+ createQueue(0, "queues.testaddress", "queue17", null, false);
createQueue(1, "queues.testaddress", "queue17", null, false);
createQueue(4, "queues.testaddress", "queue17", null, false);
-
- createQueue(3, "queues.testaddress", "queue18", null, false);
+
+ createQueue(3, "queues.testaddress", "queue18", null, false);
createQueue(4, "queues.testaddress", "queue18", null, false);
-
-
+
addConsumer(0, 0, "queue0", null);
addConsumer(1, 1, "queue1", null);
addConsumer(2, 2, "queue2", null);
@@ -1318,25 +1360,24 @@
addConsumer(12, 2, "queue12", null);
addConsumer(13, 3, "queue13", null);
addConsumer(14, 4, "queue14", null);
-
+
addConsumer(15, 0, "queue15", null);
addConsumer(16, 1, "queue15", null);
addConsumer(17, 2, "queue15", null);
addConsumer(18, 3, "queue15", null);
addConsumer(19, 4, "queue15", null);
-
+
addConsumer(20, 2, "queue16", null);
addConsumer(21, 3, "queue16", null);
addConsumer(22, 4, "queue16", null);
-
+
addConsumer(23, 0, "queue17", null);
addConsumer(24, 1, "queue17", null);
addConsumer(25, 4, "queue17", null);
-
+
addConsumer(26, 3, "queue18", null);
addConsumer(27, 4, "queue18", null);
-
waitForBindings(0, "queues.testaddress", 5, 5, true);
waitForBindings(1, "queues.testaddress", 5, 5, true);
waitForBindings(2, "queues.testaddress", 5, 5, true);
@@ -1352,17 +1393,15 @@
send(0, "queues.testaddress", 10, false, null);
verifyReceiveAll(10, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14);
-
+
verifyReceiveRoundRobinInSomeOrder(10, 15, 16, 17, 18, 19);
-
+
verifyReceiveRoundRobinInSomeOrder(10, 20, 21, 22);
-
+
verifyReceiveRoundRobinInSomeOrder(10, 23, 24, 25);
-
+
verifyReceiveRoundRobinInSomeOrder(10, 26, 27);
- verifyNotReceive(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27);
-
removeConsumer(0);
removeConsumer(5);
removeConsumer(10);
@@ -1374,54 +1413,53 @@
removeConsumer(18);
removeConsumer(21);
removeConsumer(26);
-
+
closeSessionFactory(0);
closeSessionFactory(3);
-
+
stopServers(0, 3);
-
+
startServers(3, 0);
-
+
setupSessionFactory(0, isNetty());
setupSessionFactory(3, isNetty());
-
- createQueue(0, "queues.testaddress", "queue0", null, false);
- createQueue(3, "queues.testaddress", "queue3", null, false);
- createQueue(0, "queues.testaddress", "queue5", null, false);
- createQueue(3, "queues.testaddress", "queue8", null, false);
+ createQueue(0, "queues.testaddress", "queue0", null, false);
+ createQueue(3, "queues.testaddress", "queue3", null, false);
- createQueue(0, "queues.testaddress", "queue10", null, false);
- createQueue(3, "queues.testaddress", "queue13", null, false);
-
- createQueue(0, "queues.testaddress", "queue15", null, false);
- createQueue(3, "queues.testaddress", "queue15", null, false);
-
- createQueue(3, "queues.testaddress", "queue16", null, false);
-
- createQueue(0, "queues.testaddress", "queue17", null, false);
-
- createQueue(3, "queues.testaddress", "queue18", null, false);
-
-
- addConsumer(0, 0, "queue0", null);
- addConsumer(3, 3, "queue3", null);
+ createQueue(0, "queues.testaddress", "queue5", null, false);
+ createQueue(3, "queues.testaddress", "queue8", null, false);
- addConsumer(5, 0, "queue5", null);
- addConsumer(8, 3, "queue8", null);
+ createQueue(0, "queues.testaddress", "queue10", null, false);
+ createQueue(3, "queues.testaddress", "queue13", null, false);
- addConsumer(10, 0, "queue10", null);
+ createQueue(0, "queues.testaddress", "queue15", null, false);
+ createQueue(3, "queues.testaddress", "queue15", null, false);
+
+ createQueue(3, "queues.testaddress", "queue16", null, false);
+
+ createQueue(0, "queues.testaddress", "queue17", null, false);
+
+ createQueue(3, "queues.testaddress", "queue18", null, false);
+
+ addConsumer(0, 0, "queue0", null);
+ addConsumer(3, 3, "queue3", null);
+
+ addConsumer(5, 0, "queue5", null);
+ addConsumer(8, 3, "queue8", null);
+
+ addConsumer(10, 0, "queue10", null);
addConsumer(13, 3, "queue13", null);
-
- addConsumer(15, 0, "queue15", null);
+
+ addConsumer(15, 0, "queue15", null);
addConsumer(18, 3, "queue15", null);
-
- addConsumer(21, 3, "queue16", null);
-
- addConsumer(23, 0, "queue17", null);
-
- addConsumer(26, 3, "queue18", null);
-
+
+ addConsumer(21, 3, "queue16", null);
+
+ addConsumer(23, 0, "queue17", null);
+
+ addConsumer(26, 3, "queue18", null);
+
waitForBindings(0, "queues.testaddress", 5, 5, true);
waitForBindings(1, "queues.testaddress", 5, 5, true);
waitForBindings(2, "queues.testaddress", 5, 5, true);
@@ -1437,23 +1475,21 @@
send(0, "queues.testaddress", 10, false, null);
verifyReceiveAll(10, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14);
-
+
verifyReceiveRoundRobinInSomeOrder(10, 15, 16, 17, 18, 19);
-
+
verifyReceiveRoundRobinInSomeOrder(10, 20, 21, 22);
-
+
verifyReceiveRoundRobinInSomeOrder(10, 23, 24, 25);
-
+
verifyReceiveRoundRobinInSomeOrder(10, 26, 27);
+ }
- verifyNotReceive(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27);
- }
-
protected void setupCluster() throws Exception
{
setupCluster(false);
}
-
+
protected void setupCluster(final boolean forwardWhenNoConsumers) throws Exception
{
setupClusterConnection("cluster0", "queues", forwardWhenNoConsumers, 1, isNetty(), 0, 1, 2, 3, 4);
@@ -1466,51 +1502,26 @@
setupClusterConnection("cluster4", "queues", forwardWhenNoConsumers, 1, isNetty(), 4, 0, 1, 2, 3);
}
-
+
protected void setupServers() throws Exception
{
setupServer(0, isFileStorage(), isNetty());
setupServer(1, isFileStorage(), isNetty());
setupServer(2, isFileStorage(), isNetty());
setupServer(3, isFileStorage(), isNetty());
- setupServer(4, isFileStorage(), isNetty());
+ setupServer(4, isFileStorage(), isNetty());
}
-
+
protected void stopServers() throws Exception
{
closeAllConsumers();
closeAllSessionFactories();
+ // We stop the cluster connections first since this makes server shutdown quicker
+ stopClusterConnections(0, 1, 2, 3, 4);
+
stopServers(0, 1, 2, 3, 4);
}
-
-// private void setupCluster(final boolean forwardWhenNoConsumers) throws Exception
-// {
-// setupClusterConnection("cluster0-1", 0, 1, "queues", forwardWhenNoConsumers, 1, isNetty());
-// setupClusterConnection("cluster0-2", 0, 2, "queues", forwardWhenNoConsumers, 1, isNetty());
-// setupClusterConnection("cluster0-3", 0, 3, "queues", forwardWhenNoConsumers, 1, isNetty());
-// setupClusterConnection("cluster0-4", 0, 4, "queues", forwardWhenNoConsumers, 1, isNetty());
-//
-// setupClusterConnection("cluster1-0", 1, 0, "queues", forwardWhenNoConsumers, 1, isNetty());
-// setupClusterConnection("cluster1-2", 1, 2, "queues", forwardWhenNoConsumers, 1, isNetty());
-// setupClusterConnection("cluster1-3", 1, 3, "queues", forwardWhenNoConsumers, 1, isNetty());
-// setupClusterConnection("cluster1-4", 1, 4, "queues", forwardWhenNoConsumers, 1, isNetty());
-//
-// setupClusterConnection("cluster2-0", 2, 0, "queues", forwardWhenNoConsumers, 1, isNetty());
-// setupClusterConnection("cluster2-1", 2, 1, "queues", forwardWhenNoConsumers, 1, isNetty());
-// setupClusterConnection("cluster2-3", 2, 3, "queues", forwardWhenNoConsumers, 1, isNetty());
-// setupClusterConnection("cluster2-4", 2, 4, "queues", forwardWhenNoConsumers, 1, isNetty());
-//
-// setupClusterConnection("cluster3-0", 3, 0, "queues", forwardWhenNoConsumers, 1, isNetty());
-// setupClusterConnection("cluster3-1", 3, 1, "queues", forwardWhenNoConsumers, 1, isNetty());
-// setupClusterConnection("cluster3-2", 3, 2, "queues", forwardWhenNoConsumers, 1, isNetty());
-// setupClusterConnection("cluster3-4", 3, 4, "queues", forwardWhenNoConsumers, 1, isNetty());
-//
-// setupClusterConnection("cluster4-0", 4, 0, "queues", forwardWhenNoConsumers, 1, isNetty());
-// setupClusterConnection("cluster4-1", 4, 1, "queues", forwardWhenNoConsumers, 1, isNetty());
-// setupClusterConnection("cluster4-2", 4, 2, "queues", forwardWhenNoConsumers, 1, isNetty());
-// setupClusterConnection("cluster4-3", 4, 3, "queues", forwardWhenNoConsumers, 1, isNetty());
-// }
-
+
}
Modified: trunk/tests/src/org/jboss/messaging/tests/integration/cluster/failover/MultiThreadRandomFailoverTestBase.java
===================================================================
--- trunk/tests/src/org/jboss/messaging/tests/integration/cluster/failover/MultiThreadRandomFailoverTestBase.java 2009-02-17 17:18:39 UTC (rev 5883)
+++ trunk/tests/src/org/jboss/messaging/tests/integration/cluster/failover/MultiThreadRandomFailoverTestBase.java 2009-02-17 19:52:51 UTC (rev 5884)
@@ -231,7 +231,7 @@
{
doTestL(sf);
}
- }, 1, false, true);
+ }, NUM_THREADS, false, true, 10);
}
// public void testM() throws Exception
@@ -1036,7 +1036,9 @@
message2.acknowledge();
+ log.info("** closing session");
sess.close();
+ log.info("** closed session");
sessCreate.deleteQueue(new SimpleString(threadNum + ADDRESS.toString()));
@@ -1068,21 +1070,16 @@
*/
protected void doTestL(final ClientSessionFactory sf) throws Exception
{
- ClientSessionFactoryInternal sf2 = createSessionFactory();
-
final int numSessions = 10;
for (int i = 0; i < numSessions; i++)
{
log.info("i " + i);
- ClientSession session = sf2.createSession(false, false, false);
+
+ ClientSession session = sf.createSession(false, false, false);
session.close();
-
- Thread.sleep(10);
- }
-
- sf2.close();
+ }
}
// Browsers
@@ -1289,6 +1286,11 @@
private void runTestMultipleThreads(final RunnableT runnable, final int numThreads, final boolean fileBased, final boolean failOnCreateConnection) throws Exception
{
+ this.runTestMultipleThreads(runnable, numThreads, fileBased, failOnCreateConnection, 1000);
+ }
+
+ private void runTestMultipleThreads(final RunnableT runnable, final int numThreads, final boolean fileBased, final boolean failOnCreateConnection, final long failDelay) throws Exception
+ {
final int numIts = getNumIterations();
for (int its = 0; its < numIts; its++)
@@ -1301,7 +1303,7 @@
ClientSession session = sf.createSession(false, false, false);
- Failer failer = startFailer(1000, session, failOnCreateConnection);
+ Failer failer = startFailer(failDelay, session, failOnCreateConnection);
class Runner extends Thread
{
Modified: trunk/tests/src/org/jboss/messaging/tests/integration/cluster/failover/RandomFailoverTest.java
===================================================================
--- trunk/tests/src/org/jboss/messaging/tests/integration/cluster/failover/RandomFailoverTest.java 2009-02-17 17:18:39 UTC (rev 5883)
+++ trunk/tests/src/org/jboss/messaging/tests/integration/cluster/failover/RandomFailoverTest.java 2009-02-17 19:52:51 UTC (rev 5884)
@@ -36,7 +36,6 @@
import org.jboss.messaging.core.config.impl.ConfigurationImpl;
import org.jboss.messaging.core.exception.MessagingException;
import org.jboss.messaging.core.logging.Logger;
-import org.jboss.messaging.core.remoting.impl.invm.InVMConnector;
import org.jboss.messaging.core.remoting.impl.invm.InVMRegistry;
import org.jboss.messaging.core.remoting.impl.invm.TransportConstants;
import org.jboss.messaging.core.server.Messaging;
@@ -1369,19 +1368,17 @@
}
protected void doTestL(final ClientSessionFactory sf) throws Exception
- {
- ClientSession s = sf.createSession(false, false, false);
+ {
+ final int numSessions = 10;
- final int numSessions = 100;
-
for (int i = 0; i < numSessions; i++)
{
+ log.info("i " + i);
+
ClientSession session = sf.createSession(false, false, false);
session.close();
- }
-
- s.close();
+ }
}
protected void doTestN(final ClientSessionFactory sf) throws Exception
@@ -1432,7 +1429,7 @@
protected int getNumIterations()
{
- return 1;
+ return 2;
}
protected void setUp() throws Exception
Modified: trunk/tests/src/org/jboss/messaging/tests/integration/paging/PageCrashTest.java
===================================================================
--- trunk/tests/src/org/jboss/messaging/tests/integration/paging/PageCrashTest.java 2009-02-17 17:18:39 UTC (rev 5883)
+++ trunk/tests/src/org/jboss/messaging/tests/integration/paging/PageCrashTest.java 2009-02-17 19:52:51 UTC (rev 5884)
@@ -88,7 +88,6 @@
public void testCrashDuringDeleteFile() throws Exception
{
-
pageAndFail();
File pageDir = new File(getPageDir());
Modified: trunk/tests/src/org/jboss/messaging/tests/performance/persistence/FakePostOffice.java
===================================================================
--- trunk/tests/src/org/jboss/messaging/tests/performance/persistence/FakePostOffice.java 2009-02-17 17:18:39 UTC (rev 5883)
+++ trunk/tests/src/org/jboss/messaging/tests/performance/persistence/FakePostOffice.java 2009-02-17 19:52:51 UTC (rev 5884)
@@ -48,6 +48,12 @@
*/
public class FakePostOffice implements PostOffice
{
+ public boolean redistribute(ServerMessage message, SimpleString routingName, Transaction tx) throws Exception
+ {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
public void sendQueueInfoToQueue(SimpleString queueName, SimpleString address) throws Exception
{
// TODO Auto-generated method stub
Modified: trunk/tests/src/org/jboss/messaging/tests/stress/failover/LargeMessageMultiThreadFailoverStressTest.java
===================================================================
--- trunk/tests/src/org/jboss/messaging/tests/stress/failover/LargeMessageMultiThreadFailoverStressTest.java 2009-02-17 17:18:39 UTC (rev 5883)
+++ trunk/tests/src/org/jboss/messaging/tests/stress/failover/LargeMessageMultiThreadFailoverStressTest.java 2009-02-17 19:52:51 UTC (rev 5884)
@@ -50,7 +50,7 @@
protected int getNumIterations()
{
- return 20;
+ return 50;
}
Modified: trunk/tests/src/org/jboss/messaging/tests/stress/failover/MultiThreadRandomFailoverStressTest.java
===================================================================
--- trunk/tests/src/org/jboss/messaging/tests/stress/failover/MultiThreadRandomFailoverStressTest.java 2009-02-17 17:18:39 UTC (rev 5883)
+++ trunk/tests/src/org/jboss/messaging/tests/stress/failover/MultiThreadRandomFailoverStressTest.java 2009-02-17 19:52:51 UTC (rev 5884)
@@ -24,7 +24,7 @@
{
protected int getNumIterations()
{
- return 20;
+ return 50;
}
}
Modified: trunk/tests/src/org/jboss/messaging/tests/stress/failover/RandomFailoverStressTest.java
===================================================================
--- trunk/tests/src/org/jboss/messaging/tests/stress/failover/RandomFailoverStressTest.java 2009-02-17 17:18:39 UTC (rev 5883)
+++ trunk/tests/src/org/jboss/messaging/tests/stress/failover/RandomFailoverStressTest.java 2009-02-17 19:52:51 UTC (rev 5884)
@@ -53,7 +53,7 @@
protected int getNumIterations()
{
- return 20;
+ return 50;
}
// Private -------------------------------------------------------
Modified: trunk/tests/src/org/jboss/messaging/tests/timing/core/server/impl/QueueImplTest.java
===================================================================
--- trunk/tests/src/org/jboss/messaging/tests/timing/core/server/impl/QueueImplTest.java 2009-02-17 17:18:39 UTC (rev 5883)
+++ trunk/tests/src/org/jboss/messaging/tests/timing/core/server/impl/QueueImplTest.java 2009-02-17 19:52:51 UTC (rev 5884)
@@ -69,12 +69,12 @@
// The tests ----------------------------------------------------------------
- public void testScheduledDirect()
+ public void testScheduledDirect() throws Exception
{
testScheduled(true);
}
- public void testScheduledQueueing()
+ public void testScheduledQueueing() throws Exception
{
testScheduled(false);
}
@@ -145,7 +145,7 @@
assertRefListsIdenticalRefs(refs, consumer.getReferences());
}
- private void testScheduled(boolean direct)
+ private void testScheduled(boolean direct) throws Exception
{
Queue queue = new QueueImpl(1,new SimpleString("address1"), new SimpleString("queue1"), null, false, true, scheduledExecutor, null, null, null);
Modified: trunk/tests/src/org/jboss/messaging/tests/unit/core/deployers/impl/AddressSettingsDeployerTest.java
===================================================================
--- trunk/tests/src/org/jboss/messaging/tests/unit/core/deployers/impl/AddressSettingsDeployerTest.java 2009-02-17 17:18:39 UTC (rev 5883)
+++ trunk/tests/src/org/jboss/messaging/tests/unit/core/deployers/impl/AddressSettingsDeployerTest.java 2009-02-17 19:52:51 UTC (rev 5884)
@@ -62,7 +62,6 @@
public void testDeploy() throws Exception
{
final AddressSettings addressSettings = new AddressSettings();
- addressSettings.setClustered(false);
addressSettings.setRedeliveryDelay((long) 100);
addressSettings.setMaxSizeBytes(-100);
addressSettings.setDistributionPolicyClass("org.jboss.messaging.core.impl.RoundRobinDistributionPolicy");
@@ -76,7 +75,6 @@
public Object answer() throws Throwable
{
AddressSettings q = (AddressSettings) EasyMock.getCurrentArguments()[1];
- assertFalse(q.isClustered());
assertEquals(q.getRedeliveryDelay(), addressSettings.getRedeliveryDelay());
assertEquals(q.getMaxSizeBytes(), addressSettings.getMaxSizeBytes());
assertEquals(q.getDistributionPolicyClass(), addressSettings.getDistributionPolicyClass());
Modified: trunk/tests/src/org/jboss/messaging/tests/unit/core/journal/impl/JournalImplTestUnit.java
===================================================================
--- trunk/tests/src/org/jboss/messaging/tests/unit/core/journal/impl/JournalImplTestUnit.java 2009-02-17 17:18:39 UTC (rev 5883)
+++ trunk/tests/src/org/jboss/messaging/tests/unit/core/journal/impl/JournalImplTestUnit.java 2009-02-17 19:52:51 UTC (rev 5884)
@@ -3018,6 +3018,7 @@
assertEquals(0, journal.getDataFilesCount());
}
+
protected abstract int getAlignment();
}
Modified: trunk/tests/src/org/jboss/messaging/tests/unit/core/management/impl/QueueControlTest.java
===================================================================
--- trunk/tests/src/org/jboss/messaging/tests/unit/core/management/impl/QueueControlTest.java 2009-02-17 17:18:39 UTC (rev 5883)
+++ trunk/tests/src/org/jboss/messaging/tests/unit/core/management/impl/QueueControlTest.java 2009-02-17 19:52:51 UTC (rev 5884)
@@ -636,7 +636,7 @@
private QueueControl createControl() throws Exception
{
- return new QueueControl(queue, storageManager, postOffice, repository, messageCounter);
+ return new QueueControl(queue, postOffice, repository, messageCounter);
}
// Inner classes -------------------------------------------------
Modified: trunk/tests/src/org/jboss/messaging/tests/unit/core/server/impl/QueueFactoryImplTest.java
===================================================================
--- trunk/tests/src/org/jboss/messaging/tests/unit/core/server/impl/QueueFactoryImplTest.java 2009-02-17 17:18:39 UTC (rev 5883)
+++ trunk/tests/src/org/jboss/messaging/tests/unit/core/server/impl/QueueFactoryImplTest.java 2009-02-17 19:52:51 UTC (rev 5884)
@@ -46,7 +46,6 @@
StorageManager sm = EasyMock.createStrictMock(StorageManager.class);
Filter filter = EasyMock.createStrictMock(Filter.class);
AddressSettings addressSettings = new AddressSettings();
- addressSettings.setClustered(true);
addressSettings.setMaxSizeBytes(9999);
addressSettings.setDistributionPolicyClass("org.jboss.messaging.core.server.impl.RoundRobinDistributor");
EasyMock.expect(addressSettingsRepository.getMatch("testQ")).andReturn(addressSettings);
@@ -69,7 +68,6 @@
HierarchicalRepository<AddressSettings> addressSettingsRepository = EasyMock.createStrictMock(HierarchicalRepository.class);
StorageManager sm = EasyMock.createStrictMock(StorageManager.class);
AddressSettings addressSettings = new AddressSettings();
- addressSettings.setClustered(false);
addressSettings.setMaxSizeBytes(8888);
addressSettings.setDistributionPolicyClass(null);
EasyMock.expect(addressSettingsRepository.getMatch("testQ2")).andReturn(addressSettings);
Modified: trunk/tests/src/org/jboss/messaging/tests/unit/core/server/impl/QueueImplTest.java
===================================================================
--- trunk/tests/src/org/jboss/messaging/tests/unit/core/server/impl/QueueImplTest.java 2009-02-17 17:18:39 UTC (rev 5883)
+++ trunk/tests/src/org/jboss/messaging/tests/unit/core/server/impl/QueueImplTest.java 2009-02-17 19:52:51 UTC (rev 5884)
@@ -199,7 +199,7 @@
}
- public void testSimpleDirectDelivery()
+ public void testSimpleDirectDelivery() throws Exception
{
Queue queue = new QueueImpl(1, address1, queue1, null, false, true, scheduledExecutor, null, null, null);
@@ -227,7 +227,7 @@
assertRefListsIdenticalRefs(refs, consumer.getReferences());
}
- public void testSimpleNonDirectDelivery()
+ public void testSimpleNonDirectDelivery() throws Exception
{
Queue queue = new QueueImpl(1, address1, queue1, null, false, true, scheduledExecutor, null, null, null);
@@ -265,7 +265,7 @@
assertEquals(numMessages, queue.getDeliveringCount());
}
- public void testBusyConsumer()
+ public void testBusyConsumer() throws Exception
{
Queue queue = new QueueImpl(1, address1, queue1, null, false, true, scheduledExecutor, null, null, null);
@@ -309,7 +309,7 @@
assertEquals(10, queue.getDeliveringCount());
}
- public void testBusyConsumerThenAddMoreMessages()
+ public void testBusyConsumerThenAddMoreMessages() throws Exception
{
Queue queue = new QueueImpl(1, address1, queue1, null, false, true, scheduledExecutor, null, null, null);
@@ -376,7 +376,7 @@
assertEquals(30, queue.getDeliveringCount());
}
- public void testAddFirstadd()
+ public void testAddFirstadd() throws Exception
{
Queue queue = new QueueImpl(1, address1, queue1, null, false, true, scheduledExecutor, null, null, null);
@@ -585,7 +585,7 @@
}
- public void testConsumerReturningNull()
+ public void testConsumerReturningNull() throws Exception
{
Queue queue = new QueueImpl(1, address1, queue1, null, false, true, scheduledExecutor, null, null, null);
@@ -618,7 +618,7 @@
}
}
- public void testRoundRobinWithQueueing()
+ public void testRoundRobinWithQueueing() throws Exception
{
Queue queue = new QueueImpl(1, address1, queue1, null, false, true, scheduledExecutor, null, null, null);
@@ -663,7 +663,7 @@
}
}
- public void testRoundRobinDirect()
+ public void testRoundRobinDirect() throws Exception
{
Queue queue = new QueueImpl(1, address1, queue1, null, false, true, scheduledExecutor, null, null, null);
@@ -790,7 +790,7 @@
// assertTrue(consumer.getReferences().isEmpty());
// }
- public void testWithPriorities()
+ public void testWithPriorities() throws Exception
{
Queue queue = new QueueImpl(1, address1, queue1, null, false, true, scheduledExecutor, null, null, null);
Modified: trunk/tests/src/org/jboss/messaging/tests/unit/core/settings/impl/AddressSettingsTest.java
===================================================================
--- trunk/tests/src/org/jboss/messaging/tests/unit/core/settings/impl/AddressSettingsTest.java 2009-02-17 17:18:39 UTC (rev 5883)
+++ trunk/tests/src/org/jboss/messaging/tests/unit/core/settings/impl/AddressSettingsTest.java 2009-02-17 19:52:51 UTC (rev 5884)
@@ -38,7 +38,6 @@
assertEquals(addressSettings.getDistributionPolicy().getClass(), AddressSettings.DEFAULT_DISTRIBUTION_POLICY_CLASS);
assertEquals(addressSettings.getDistributionPolicyClass(), null);
assertEquals(addressSettings.getDeadLetterAddress(), null);
- assertEquals(addressSettings.isClustered(), Boolean.valueOf(false));
assertEquals(addressSettings.getExpiryAddress(), null);
assertEquals(addressSettings.getMaxDeliveryAttempts(), AddressSettings.DEFAULT_MAX_DELIVERY_ATTEMPTS);
assertEquals(addressSettings.getMaxSizeBytes(), AddressSettings.DEFAULT_MAX_SIZE_BYTES);
@@ -52,7 +51,6 @@
{
AddressSettings addressSettings = new AddressSettings();
AddressSettings addressSettingsToMerge = new AddressSettings();
- addressSettingsToMerge.setClustered(true);
SimpleString DLQ = new SimpleString("testDLQ");
SimpleString exp = new SimpleString("testExpiryQueue");
addressSettingsToMerge.setDeadLetterAddress(DLQ);
@@ -66,7 +64,6 @@
addressSettings.merge(addressSettingsToMerge);
assertEquals(addressSettings.getDistributionPolicy().getClass(), AddressSettings.DEFAULT_DISTRIBUTION_POLICY_CLASS);
assertEquals(addressSettings.getDistributionPolicyClass(), null);
- assertEquals(addressSettings.isClustered(), Boolean.valueOf(true));
assertEquals(addressSettings.getDeadLetterAddress(), DLQ);
assertEquals(addressSettings.getExpiryAddress(), exp);
assertEquals(addressSettings.getMaxDeliveryAttempts(), Integer.valueOf(1000));
@@ -81,7 +78,6 @@
{
AddressSettings addressSettings = new AddressSettings();
AddressSettings addressSettingsToMerge = new AddressSettings();
- addressSettingsToMerge.setClustered(true);
SimpleString DLQ = new SimpleString("testDLQ");
SimpleString exp = new SimpleString("testExpiryQueue");
addressSettingsToMerge.setDeadLetterAddress(DLQ);
@@ -92,7 +88,6 @@
addressSettings.merge(addressSettingsToMerge);
AddressSettings addressSettingsToMerge2 = new AddressSettings();
- addressSettingsToMerge2.setClustered(true);
SimpleString exp2 = new SimpleString("testExpiryQueue2");
addressSettingsToMerge2.setExpiryAddress(exp2);
addressSettingsToMerge2.setMaxSizeBytes(2001);
@@ -101,7 +96,6 @@
assertEquals(addressSettings.getDistributionPolicy().getClass(), AddressSettings.DEFAULT_DISTRIBUTION_POLICY_CLASS);
assertEquals(addressSettings.getDistributionPolicyClass(), null);
- assertEquals(addressSettings.isClustered(), Boolean.valueOf(true));
assertEquals(addressSettings.getDeadLetterAddress(), DLQ);
assertEquals(addressSettings.getExpiryAddress(), exp);
assertEquals(addressSettings.getMaxDeliveryAttempts(), Integer.valueOf(1000));
@@ -114,7 +108,6 @@
{
AddressSettings addressSettings = new AddressSettings();
AddressSettings addressSettingsToMerge = new AddressSettings();
- addressSettingsToMerge.setClustered(true);
SimpleString DLQ = new SimpleString("testDLQ");
SimpleString exp = new SimpleString("testExpiryQueue");
addressSettingsToMerge.setDeadLetterAddress(DLQ);
@@ -124,7 +117,6 @@
addressSettings.merge(addressSettingsToMerge);
AddressSettings addressSettingsToMerge2 = new AddressSettings();
- addressSettingsToMerge2.setClustered(false);
SimpleString exp2 = new SimpleString("testExpiryQueue2");
SimpleString DLQ2 = new SimpleString("testDlq2");
addressSettingsToMerge2.setExpiryAddress(exp2);
@@ -137,7 +129,6 @@
assertEquals(addressSettings.getDistributionPolicy().getClass(), AddressSettings.DEFAULT_DISTRIBUTION_POLICY_CLASS);
assertEquals(addressSettings.getDistributionPolicyClass(), null);
- assertEquals(addressSettings.isClustered(), Boolean.valueOf(true));
assertEquals(addressSettings.getDeadLetterAddress(), DLQ);
assertEquals(addressSettings.getExpiryAddress(), exp);
assertEquals(addressSettings.getMaxDeliveryAttempts(), Integer.valueOf(2000));
More information about the jboss-cvs-commits
mailing list