[jboss-cvs] JBoss Messaging SVN: r2882 - in trunk: src/main/org/jboss/jms/server/endpoint and 2 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Thu Jul 12 14:22:33 EDT 2007
Author: timfox
Date: 2007-07-12 14:22:33 -0400 (Thu, 12 Jul 2007)
New Revision: 2882
Modified:
trunk/src/main/org/jboss/jms/client/container/ClientConsumer.java
trunk/src/main/org/jboss/jms/server/endpoint/ServerSessionEndpoint.java
trunk/src/main/org/jboss/messaging/core/impl/postoffice/MessagingPostOffice.java
trunk/tests/build.xml
Log:
Tidied up thread handling for responses received and pruned tests/build.xml
Modified: trunk/src/main/org/jboss/jms/client/container/ClientConsumer.java
===================================================================
--- trunk/src/main/org/jboss/jms/client/container/ClientConsumer.java 2007-07-12 11:57:11 UTC (rev 2881)
+++ trunk/src/main/org/jboss/jms/client/container/ClientConsumer.java 2007-07-12 18:22:33 UTC (rev 2882)
@@ -42,7 +42,6 @@
import org.jboss.messaging.util.prioritylinkedlist.BasicPriorityLinkedList;
import org.jboss.messaging.util.prioritylinkedlist.PriorityLinkedList;
-import EDU.oswego.cs.dl.util.concurrent.LinkedQueue;
import EDU.oswego.cs.dl.util.concurrent.QueuedExecutor;
/**
Modified: trunk/src/main/org/jboss/jms/server/endpoint/ServerSessionEndpoint.java
===================================================================
--- trunk/src/main/org/jboss/jms/server/endpoint/ServerSessionEndpoint.java 2007-07-12 11:57:11 UTC (rev 2881)
+++ trunk/src/main/org/jboss/jms/server/endpoint/ServerSessionEndpoint.java 2007-07-12 18:22:33 UTC (rev 2882)
@@ -125,7 +125,7 @@
static final String TEMP_QUEUE_MESSAGECOUNTER_PREFIX = "TempQueue.";
- private static final long CLOSE_TIMEOUT = 5 * 1000;
+ private static final long DELIVERY_WAIT_TIMEOUT = 5 * 1000;
// Static ---------------------------------------------------------------------------------------
@@ -781,6 +781,236 @@
{
return "SessionEndpoint[" + id + "]";
}
+
+ public void deliverAnyWaitingDeliveries(String queueName) throws Exception
+ {
+ // First deliver any waiting deliveries
+
+ if (trace) { log.trace("Delivering any waiting deliveries: " + queueName); }
+
+ List toAddBack = null;
+
+ while (true)
+ {
+ DeliveryRecord dr = (DeliveryRecord)toDeliver.poll(0);
+
+ if (dr == null)
+ {
+ break;
+ }
+
+ if (trace) { log.trace("Considering " + dr); }
+
+ if (queueName == null || dr.queueName.equals(queueName))
+ {
+ //Need to synchronized to prevent the delivery being performed twice
+ synchronized (dr)
+ {
+ performDelivery(dr.del.getReference(), dr.deliveryID, dr.getConsumer());
+
+ dr.waitingForResponse = false;
+ }
+ }
+ else
+ {
+ if (toAddBack == null)
+ {
+ toAddBack = new ArrayList();
+ }
+
+ toAddBack.add(dr);
+ }
+ }
+
+ if (toAddBack != null)
+ {
+ Iterator iter = toAddBack.iterator();
+
+ while (iter.hasNext())
+ {
+ toDeliver.put(iter.next());
+ }
+ }
+
+ if (trace) { log.trace("Done delivering"); }
+ }
+
+ public boolean collectDeliveries(Map map, boolean firstNode, String queueName) throws Exception
+ {
+ if (trace) { log.trace("Collecting deliveries"); }
+
+ boolean gotSome = false;
+
+ if (!firstNode)
+ {
+ if (trace) { log.trace("Now collecting"); }
+
+ Iterator iter = deliveries.entrySet().iterator();
+
+ while (iter.hasNext())
+ {
+ Map.Entry entry = (Map.Entry)iter.next();
+
+ Long l = (Long)entry.getKey();
+
+ long deliveryID = l.longValue();
+
+ DeliveryRecord rec = (DeliveryRecord)entry.getValue();
+
+ if (rec.replicating && (queueName == null || rec.queueName.equals(queueName)))
+ {
+ Map ids = (Map)map.get(rec.queueName);
+
+ if (ids == null)
+ {
+ ids = new HashMap();
+
+ map.put(rec.queueName, ids);
+ }
+
+ ids.put(new Long(rec.del.getReference().getMessage().getMessageID()), id);
+
+ gotSome = true;
+
+ boolean notify = false;
+
+ //Need to synchronize to prevent delivery occurring more than once - e.g.
+ //if replicateDeliveryResponseReceived occurs curently with this
+ synchronized (rec)
+ {
+ if (rec.waitingForResponse)
+ {
+ //Do the delivery now
+
+ performDelivery(rec.del.getReference(), deliveryID, rec.getConsumer());
+
+ rec.waitingForResponse = false;
+
+ notify = true;
+ }
+ }
+
+ if (notify)
+ {
+ synchronized (deliveryLock)
+ {
+ deliveryLock.notifyAll();
+ }
+ }
+ }
+ }
+ }
+
+ if (trace) { log.trace("Collected " + map.size() + " deliveries"); }
+
+ return gotSome;
+ }
+
+ private Object myLock = new Object();
+
+ public void replicateDeliveryResponseReceived(long deliveryID) throws Exception
+ {
+ //We look up the delivery in the list and actually perform the delivery
+
+ if (trace) { log.trace(this + " replicate delivery response received for delivery " + deliveryID); }
+
+ DeliveryRecord rec = (DeliveryRecord)deliveries.get(new Long(deliveryID));
+
+ if (rec == null)
+ {
+ throw new java.lang.IllegalStateException("Cannot find delivery with id " + deliveryID);
+ }
+
+ boolean delivered = false;
+
+ //Note there will only be contention on this if two or more responses come back at the same time - which is unlikely
+ //Is it even possible? If the responses come back on the same JGroups channel - surely this can't happen - maybe
+ //we can remove the lock?
+ //Anyway there is little overhead if the lock is not contended
+ synchronized (myLock)
+ {
+ long toWait = DELIVERY_WAIT_TIMEOUT;
+
+ while (toWait > 0)
+ {
+ DeliveryRecord dr = (DeliveryRecord)toDeliver.peek();
+
+ if (dr == null)
+ {
+ //Response came back after deliveries collected? - Do nothing
+ break;
+ }
+
+ boolean wait = false;
+
+ //Needs to be synchronized to prevent delivery occurring twice e.g. if this occurs at same time as collectDeliveries
+ synchronized (dr)
+ {
+ boolean performDelivery = false;
+
+ if (dr.waitingForResponse)
+ {
+ if (dr == rec)
+ {
+ performDelivery = true;
+ }
+ else
+ {
+ //We have to wait for another response to arrive first
+ wait = true;
+ }
+ }
+ else
+ {
+ //Non replicated delivery
+ performDelivery = true;
+ }
+
+ if (performDelivery)
+ {
+ toDeliver.take();
+
+ performDelivery(dr.del.getReference(), dr.deliveryID, dr.getConsumer());
+
+ delivered = true;
+
+ dr.waitingForResponse = false;
+
+ myLock.notify();
+
+ break;
+ }
+ }
+
+ if (wait)
+ {
+ long start = System.currentTimeMillis();
+
+ try
+ {
+ //We need to wait since responses have come back out of order
+ myLock.wait(toWait);
+ }
+ catch (InterruptedException e)
+ {
+ }
+ toWait -= (System.currentTimeMillis() - start);
+ }
+ }
+ if (toWait <= 0)
+ {
+ throw new IllegalStateException("Timed out waiting for previous response to arrive");
+ }
+ }
+
+ if (delivered)
+ {
+ synchronized (deliveryLock)
+ {
+ deliveryLock.notifyAll();
+ }
+ }
+ }
// Package protected ----------------------------------------------------------------------------
@@ -933,185 +1163,8 @@
}
rec.del.cancel();
- }
+ }
- public void deliverAnyWaitingDeliveries(String queueName) throws Exception
- {
- // First deliver any waiting deliveries
-
- if (trace) { log.trace("Delivering any waiting deliveries: " + queueName); }
-
- List toAddBack = null;
-
- while (true)
- {
- DeliveryRecord dr = (DeliveryRecord)toDeliver.poll(0);
-
- if (dr == null)
- {
- break;
- }
-
- if (trace) { log.trace("Considering " + dr); }
-
- if (queueName == null || dr.queueName.equals(queueName))
- {
- performDelivery(dr.del.getReference(), dr.deliveryID, dr.getConsumer());
-
- dr.waitingForResponse = false;
- }
- else
- {
- if (toAddBack == null)
- {
- toAddBack = new ArrayList();
- }
-
- toAddBack.add(dr);
- }
- }
-
- if (toAddBack != null)
- {
- Iterator iter = toAddBack.iterator();
-
- while (iter.hasNext())
- {
- toDeliver.put(iter.next());
- }
- }
-
- if (trace) { log.trace("Done delivering"); }
- }
-
- public boolean collectDeliveries(Map map, boolean firstNode, String queueName) throws Exception
- {
- if (trace) { log.trace("Collecting deliveries"); }
-
- boolean gotSome = false;
-
- if (!firstNode)
- {
- if (trace) { log.trace("Now collecting"); }
-
- Iterator iter = deliveries.entrySet().iterator();
-
- while (iter.hasNext())
- {
- Map.Entry entry = (Map.Entry)iter.next();
-
- Long l = (Long)entry.getKey();
-
- long deliveryID = l.longValue();
-
- DeliveryRecord rec = (DeliveryRecord)entry.getValue();
-
- if (rec.replicating && (queueName == null || rec.queueName.equals(queueName)))
- {
- Map ids = (Map)map.get(rec.queueName);
-
- if (ids == null)
- {
- ids = new HashMap();
-
- map.put(rec.queueName, ids);
- }
-
- ids.put(new Long(rec.del.getReference().getMessage().getMessageID()), id);
-
- gotSome = true;
-
- if (rec.waitingForResponse)
- {
- //Do the delivery now
-
- performDelivery(rec.del.getReference(), deliveryID, rec.getConsumer());
-
- rec.waitingForResponse = false;
-
- synchronized (deliveryLock)
- {
- deliveryLock.notifyAll();
- }
- }
- }
- }
- }
-
- if (trace) { log.trace("Collected " + map.size() + " deliveries"); }
-
- return gotSome;
- }
-
- public synchronized void replicateDeliveryResponseReceived(long deliveryID) throws Exception
- {
- //We look up the delivery in the list and actually perform the delivery
-
- if (trace) { log.trace(this + " replicate delivery response received for delivery " + deliveryID); }
-
- DeliveryRecord rec = (DeliveryRecord)deliveries.get(new Long(deliveryID));
-
- if (rec == null)
- {
- throw new java.lang.IllegalStateException("Cannot find delivery with id " + deliveryID);
- }
-
- boolean delivered = false;
-
- //FIXME there is a race condition here
- //Message is peeked - is NP, then by the time it is actually taken
- //Another thread has peeked and taken it, so the first thread takes the next one
- //which is a persistent message which should remain in the list
-
- while (true)
- {
- DeliveryRecord dr = (DeliveryRecord)toDeliver.peek();
-
- if (dr == null)
- {
- break;
- }
-
- boolean performDelivery = false;
-
- if (dr.waitingForResponse)
- {
- if (dr == rec)
- {
- performDelivery = true;
- }
- else
- {
- break;
- }
- }
- else
- {
- //NP message
- performDelivery = true;
- }
-
- if (performDelivery)
- {
- toDeliver.take();
-
- performDelivery(dr.del.getReference(), dr.deliveryID, dr.getConsumer());
-
- delivered = true;
-
- dr.waitingForResponse = false;
- }
- }
-
- if (delivered)
- {
- synchronized (deliveryLock)
- {
- deliveryLock.notifyAll();
- }
- }
- }
-
/*
* When a consumer closes there may be deliveries where the replication messages has gone out to the backup
* but the response hasn't been received yet so the messages hasn't actually been delivered.
@@ -1120,7 +1173,7 @@
*/
void waitForDeliveriesFromConsumer(String consumerID) throws Exception
{
- long toWait = CLOSE_TIMEOUT;
+ long toWait = DELIVERY_WAIT_TIMEOUT;
boolean wait;
@@ -1173,7 +1226,7 @@
}
}
- synchronized void handleDelivery(Delivery delivery, ServerConsumerEndpoint consumer) throws Exception
+ void handleDelivery(Delivery delivery, ServerConsumerEndpoint consumer) throws Exception
{
long deliveryId = -1;
Modified: trunk/src/main/org/jboss/messaging/core/impl/postoffice/MessagingPostOffice.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/impl/postoffice/MessagingPostOffice.java 2007-07-12 11:57:11 UTC (rev 2881)
+++ trunk/src/main/org/jboss/messaging/core/impl/postoffice/MessagingPostOffice.java 2007-07-12 18:22:33 UTC (rev 2882)
@@ -85,7 +85,6 @@
import EDU.oswego.cs.dl.util.concurrent.PooledExecutor;
import EDU.oswego.cs.dl.util.concurrent.ReadWriteLock;
import EDU.oswego.cs.dl.util.concurrent.ReentrantWriterPreferenceReadWriteLock;
-import EDU.oswego.cs.dl.util.concurrent.WriterPreferenceReadWriteLock;
/**
* @author <a href="mailto:tim.fox at jboss.com">Tim Fox</a>
@@ -219,8 +218,6 @@
private volatile int failoverNodeID = -1;
- private ReadWriteLock replicateDeliveryLock;
-
private volatile boolean firstNode;
// Constructors ---------------------------------------------------------------------------------
@@ -266,9 +263,7 @@
this.clusterNotifier = clusterNotifier;
lock = new ReentrantWriterPreferenceReadWriteLock();
-
- replicateDeliveryLock = new WriterPreferenceReadWriteLock();
-
+
waitForBindUnbindLock = new Object();
}
@@ -1286,30 +1281,18 @@
public void handleReplicateDeliveryAck(String sessionID, long deliveryID) throws Exception
{
if (trace) { log.trace(this + " handleReplicateDeliveryAck " + sessionID + " " + deliveryID); }
+
+ //TOD - this does not belong here
+ ServerSessionEndpoint session = serverPeer.getSession(sessionID);
- //We need to lock this while failover node change is occurring - otherwise we could end up with the same message
- //being delivered more than once
-
- replicateDeliveryLock.readLock().acquire();
-
- try
- {
- //TOD - this does not belong here
- ServerSessionEndpoint session = serverPeer.getSession(sessionID);
-
- if (session == null)
- {
- log.warn("Cannot find session " + sessionID);
-
- return;
- }
-
- session.replicateDeliveryResponseReceived(deliveryID);
- }
- finally
+ if (session == null)
{
- replicateDeliveryLock.readLock().release();
+ log.warn("Cannot find session " + sessionID);
+
+ return;
}
+
+ session.replicateDeliveryResponseReceived(deliveryID);
}
public void handleAckAllReplicatedDeliveries(int nodeID) throws Exception
@@ -2769,57 +2752,48 @@
{
//We must lock any responses to delivery adds coming in in this period - otherwise we could end up with the same
//message being delivered more than once
-
- replicateDeliveryLock.writeLock().acquire();
-
- try
- {
- if (localNameMap != null)
- {
- Map deliveries = new HashMap();
-
- //FIXME - this is ugly
- //Find a better way of getting the sessions
- //We shouldn't know abou the server peer
-
- if (serverPeer != null)
- {
+
+ if (localNameMap != null)
+ {
+ Map deliveries = new HashMap();
+
+ //FIXME - this is ugly
+ //Find a better way of getting the sessions
+ //We shouldn't know abou the server peer
+
+ if (serverPeer != null)
+ {
+
+ Collection sessions = serverPeer.getSessions();
+
+ Iterator iter2 = sessions.iterator();
+
+ while (iter2.hasNext())
+ {
+ ServerSessionEndpoint session = (ServerSessionEndpoint)iter2.next();
- Collection sessions = serverPeer.getSessions();
+ session.deliverAnyWaitingDeliveries(null);
- Iterator iter2 = sessions.iterator();
+ session.collectDeliveries(deliveries, firstNode, null);
+ }
+
+ if (!firstNode)
+ {
+ PostOfficeAddressInfo info = (PostOfficeAddressInfo)nodeIDAddressMap.get(new Integer(failoverNodeID));
+
+ if (info == null)
+ {
+ throw new IllegalStateException("Cannot find address for failover node " + failoverNodeID);
+ }
- while (iter2.hasNext())
- {
- ServerSessionEndpoint session = (ServerSessionEndpoint)iter2.next();
-
- session.deliverAnyWaitingDeliveries(null);
-
- session.collectDeliveries(deliveries, firstNode, null);
- }
+ ClusterRequest request = new AddAllReplicatedDeliveriesMessage(thisNodeID, deliveries);
- if (!firstNode)
- {
- PostOfficeAddressInfo info = (PostOfficeAddressInfo)nodeIDAddressMap.get(new Integer(failoverNodeID));
-
- if (info == null)
- {
- throw new IllegalStateException("Cannot find address for failover node " + failoverNodeID);
- }
-
- ClusterRequest request = new AddAllReplicatedDeliveriesMessage(thisNodeID, deliveries);
-
- groupMember.unicastControl(request, info.getControlChannelAddress(), false);
-
- if (trace) { log.trace("Sent AddAllReplicatedDeliveriesMessage"); }
- }
- }
- }
- }
- finally
- {
- replicateDeliveryLock.writeLock().release();
- }
+ groupMember.unicastControl(request, info.getControlChannelAddress(), false);
+
+ if (trace) { log.trace("Sent AddAllReplicatedDeliveriesMessage"); }
+ }
+ }
+ }
}
}
Modified: trunk/tests/build.xml
===================================================================
--- trunk/tests/build.xml 2007-07-12 11:57:11 UTC (rev 2881)
+++ trunk/tests/build.xml 2007-07-12 18:22:33 UTC (rev 2882)
@@ -106,9 +106,10 @@
<property name="junit.haltonfailure" value="false"/>
<property name="junit.fork" value="true"/>
<property name="junit.includeantruntime" value="true"/>
- <property name="junit.timeout" value="1200000"/>
- <property name="clustering.junit.timeout" value="1200000"/>
- <property name="stress.timeout" value="1200000"/>
+ <property name="junit.timeout" value="900000"/> <!-- 15 mins -->
+ <property name="clustering.junit.timeout" value="1200000"/> <!-- 20 mins -->
+ <property name="stress.junit.timeout" value="900000"/> <!-- 15 mins -->
+ <property name="bridge.junit.timeout" value="5400000"/> <!-- 90 mins -->
<property name="junit.showoutput" value="true"/>
<property name="junit.jvm" value=""/>
@@ -260,48 +261,7 @@
<classpath refid="test.execution.classpath"/>
</java>
</target>
-
- <!-- Starts an all config already when starting the rmi server (used on crash tests) -->
- <target name="start-rmi-server-with-allconfig" depends="init"
- description="Starts an all config already when starting the rmi server (used on crash tests)">
-
- <java classname="org.jboss.test.messaging.tools.jmx.rmi.RMITestServer" fork="true" spawn="true">
- <sysproperty key="module.output" value="${tests.output}"/>
- <sysproperty key="test.logfile.suffix" value="${remote.server.test.logfile.suffix}"/>
- <sysproperty key="test.bind.address" value="${test.bind.address}"/>
- <sysproperty key="jgroups.bind_addr" value="${test.bind.address}"/>
- <sysproperty key="test.database" value="${functional.tests.database}"/>
- <sysproperty key="test.remoting" value="${test.remoting}"/>
- <sysproperty key="java.net.preferIPv4Stack" value="true"/>
- <sysproperty key="objectstore.dir" value="${objectstore.dir}"/>
- <!--
- <jvmarg line="-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_shmem,server=y,suspend=y,address=rmiserver"/>
- -->
- <arg value="-startAll"/>
- <classpath refid="test.execution.classpath"/>
- </java>
- </target>
-
- <target name="start-rmi-server-clustering" depends="init"
- description="Starts the RMI server used by clustering tests">
-
- <java classname="org.jboss.test.messaging.tools.jmx.rmi.RMITestServer" fork="true" spawn="true">
- <sysproperty key="test.server.index" value="${test.server.index}"/>
- <sysproperty key="module.output" value="${tests.output}"/>
- <sysproperty key="test.logfile.suffix" value="clustering-server${test.server.index}"/>
- <sysproperty key="test.bind.address" value="${test.bind.address}"/>
- <sysproperty key="jgroups.bind_addr" value="${test.bind.address}"/>
- <sysproperty key="test.database" value="${clustering.tests.database}"/>
- <sysproperty key="test.clustered" value="true"/>
- <sysproperty key="java.net.preferIPv4Stack" value="true"/>
- <sysproperty key="objectstore.dir" value="${objectstore.dir}"/>
- <!--
- <jvmarg line="-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_shmem,server=y,suspend=y,address=rmiserver"/>
- -->
- <classpath refid="test.execution.classpath"/>
- </java>
- </target>
-
+
<target name="start-rmi-server-stress" depends="init"
description="Starts the RMI server used by remote stress tests">
@@ -345,6 +305,7 @@
<target name="tests" depends="tests-jar, prepare-testdirs, clear-test-logs">
<antcall target="crash-tests"/>
+
<antcall target="invm-tests"/>
<!--
default remoting configuration (bisocket)
@@ -361,6 +322,8 @@
<antcall target="clustering-tests"/>
+ <antcall target="bridge-tests"/>
+
</target>
<target name="http-tests" depends="tests-jar, prepare-testdirs, clear-test-logs">
@@ -369,21 +332,6 @@
</antcall>
</target>
- <target name="stress-tests" depends="tests-jar, prepare-testdirs, clear-test-logs">
- <antcall target="invm-stress-tests"/>
- <antcall target="remote-stress-tests"/> <!-- default remoting configuration (bisocket) -->
-
-
- <!-- We DO NOT run the test suite using the HTTP transport - it is not sufficiently stable
-
- <antcall target="remote-stress-tests">
- <param name="test.remoting" value="http"/>
- </antcall>
-
- -->
-
- </target>
-
<target name="invm-tests" depends="tests-jar, prepare-testdirs, clear-test-logs"
description="Runs all available tests an in-VM configuration">
@@ -441,134 +389,6 @@
</junit>
</target>
- <target name="local-jms-tests" depends="tests-jar, prepare-testdirs, clear-test-logs"
- description="Runs all available tests an in-VM configuration">
-
- <echo message=""/>
- <echo message="Running invm tests, fork=${junit.fork}, junit.batchtest.fork=${junit.batchtest.fork}"/>
- <echo message=""/>
-
- <junit printsummary="${junit.printsummary}"
- fork="${junit.fork}"
- includeantruntime="${junit.includeantruntime}"
- haltonerror="${junit.haltonerror}"
- haltonfailure="${junit.haltonfailure}"
- showoutput="${junit.showoutput}"
- timeout="${junit.timeout}">
-
- <sysproperty key="remote" value="false"/>
- <sysproperty key="module.output" value="${tests.output}"/>
- <sysproperty key="test.bind.address" value="${test.bind.address}"/>
- <sysproperty key="jgroups.bind_addr" value="${test.bind.address}"/>
- <sysproperty key="test.database" value="${functional.tests.database}"/>
- <sysproperty key="test.logfile.suffix" value="invm"/>
- <sysproperty key="build.lib" value="${build.lib}"/>
- <sysproperty key="objectstore.dir" value="${objectstore.dir}"/>
- <jvmarg value="-Xmx512M"/>
- <!--
- <jvmarg line="-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_shmem,server=y,suspend=y,address=antjunit"/>
- -->
- <classpath refid="test.execution.classpath"/>
- <formatter type="xml" usefile="${junit.formatter.usefile}"/>
- <batchtest fork="${junit.batchtest.fork}"
- todir="${junit.batchtest.todir}"
- haltonfailure="${junit.batchtest.haltonfailure}"
- haltonerror="${junit.batchtest.haltonerror}">
- <formatter type="plain" usefile="${junit.formatter.usefile}"/>
- <fileset dir="${build.tests.classes}">
- <include name="**/messaging/jms/**/*Test.class"/>
- <exclude name="**/messaging/graveyard/**/*Test.class"/>
- <exclude name="**/jms/LongRunningInvocationTest.class"/>
- <exclude name="**/jms/stress/**"/>
- <exclude name="**/jms/crash/*Test.class"/>
- <exclude name="**/*LeakTest.class"/>
- <exclude name="**/jms/bridge/**/*Test.class"/>
- <exclude name="**/jms/manual/**/*Test.class"/>
- <exclude name="**/jms/clustering/*Test.class"/>
- <exclude name="**/jms/RemotingConnectionConfigurationTest.class"/>
- </fileset>
- </batchtest>
- </junit>
- </target>
-
- <target name="ref-test" depends="tests-jar, prepare-testdirs, clear-test-logs"
- description="Runs all available tests an in-VM configuration">
-
- <junit printsummary="${junit.printsummary}"
- fork="${junit.fork}"
- includeantruntime="${junit.includeantruntime}"
- haltonerror="${junit.haltonerror}"
- haltonfailure="${junit.haltonfailure}"
- showoutput="${junit.showoutput}"
- timeout="${junit.timeout}">
-
- <sysproperty key="remote" value="false"/>
- <sysproperty key="module.output" value="${tests.output}"/>
- <sysproperty key="test.bind.address" value="${test.bind.address}"/>
- <sysproperty key="jgroups.bind_addr" value="${test.bind.address}"/>
- <sysproperty key="test.database" value="${functional.tests.database}"/>
- <sysproperty key="build.lib" value="${build.lib}"/>
- <jvmarg value="-Xmx512M"/>
- <!--
- <jvmarg line="-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_shmem,server=y,suspend=y,address=antjunit"/>
- -->
- <classpath refid="test.execution.classpath"/>
- <formatter type="xml" usefile="${junit.formatter.usefile}"/>
- <batchtest fork="${junit.batchtest.fork}"
- todir="${junit.batchtest.todir}"
- haltonfailure="${junit.batchtest.haltonfailure}"
- haltonerror="${junit.batchtest.haltonerror}">
- <formatter type="plain" usefile="${junit.formatter.usefile}"/>
- <fileset dir="${build.tests.classes}">
- <include name="**/messaging/jms/ReferenceableTest.class"/>
- <exclude name="**/messaging/graveyard/**/*Test.class"/>
- <exclude name="**/jms/stress/**"/>
- <exclude name="**/jms/crash/*Test.class"/>
- <exclude name="**/*LeakTest.class"/>
- <exclude name="**/jms/clustering/*Test.class"/>
- </fileset>
- </batchtest>
- </junit>
- </target>
-
- <target name="invm-stress-tests" depends="tests-jar, prepare-testdirs, clear-test-logs"
- description="Runs all stress tests in an in-VM configuration">
-
- <junit printsummary="${junit.printsummary}"
- fork="${junit.fork}"
- includeantruntime="${junit.includeantruntime}"
- haltonerror="${junit.haltonerror}"
- haltonfailure="${junit.haltonfailure}"
- showoutput="${junit.showoutput}"
- timeout="${stress.timeout}">
-
- <sysproperty key="remote" value="false"/>
- <sysproperty key="module.output" value="${tests.output}"/>
- <sysproperty key="test.bind.address" value="${test.bind.address}"/>
- <sysproperty key="jgroups.bind_addr" value="${test.bind.address}"/>
- <sysproperty key="test.database" value="${stress.tests.database}"/>
- <sysproperty key="test.logfile.suffix" value="invm"/>
- <sysproperty key="objectstore.dir" value="${objectstore.dir}"/>
- <jvmarg value="-Xmx512M"/>
- <!--
- <jvmarg line="-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_shmem,server=y,suspend=y,address=antjunit"/>
- -->
- <classpath refid="stress.test.execution.classpath"/>
- <sysproperty key="jboss-junit-configuration" value="StressInVM"/>
- <formatter classname="org.jboss.ant.taskdefs.XMLJUnitMultipleResultFormatter"
- usefile="${junit.formatter.usefile}" extension="-StressInVM.xml"/>
- <batchtest fork="${junit.batchtest.fork}"
- todir="${junit.batchtest.todir}"
- haltonfailure="${junit.batchtest.haltonfailure}"
- haltonerror="${junit.batchtest.haltonerror}">
- <formatter type="plain" usefile="${junit.formatter.usefile}"/>
- <fileset dir="${build.tests.classes}">
- <include name="**/jms/stress/*Test.class"/>
- </fileset>
- </batchtest>
- </junit>
- </target>
-
<target name="remote-tests" depends="tests-jar, prepare-testdirs, clear-test-logs"
description="Runs remotely all tests for which it makes sense to run remotely">
@@ -624,6 +444,7 @@
<fileset dir="${build.tests.classes}">
<include name="**/jms/**/${test-mask}.class"/>
<include name="**/thirdparty/**/${test-mask}.class"/>
+ <exclude name="**/jms/bridge/**/*Test.class"/>
<exclude name="**/messaging/graveyard/**/*Test.class"/>
<exclude name="**/jms/WireFormatTest.class"/>
<exclude name="**/jms/stress/**"/>
@@ -638,7 +459,7 @@
<exclude name="**/jms/manual/**/*Test.class"/>
<exclude name="**/jms/clustering/*Test.class"/>
<exclude name="**/thirdparty/remoting/ServerAddressTest.class"/>
- <exclude name="org/jboss/test/thirdparty/jbosssx/SecurityAssociationTest.class"/>
+ <exclude name="**/thirdparty/jbosssx/SecurityAssociationTest.class"/>
</fileset>
</batchtest>
</junit>
@@ -646,7 +467,58 @@
<antcall target="stop-rmi-server"/>
</target>
+
+ <target name="stress-tests" depends="tests-jar, prepare-testdirs, clear-test-logs">
+ <antcall target="invm-stress-tests"/>
+ <antcall target="remote-stress-tests"/> <!-- default remoting configuration (bisocket) -->
+
+ <!-- We DO NOT run the test suite using the HTTP transport - it is not sufficiently stable
+ <antcall target="remote-stress-tests">
+ <param name="test.remoting" value="http"/>
+ </antcall>
+ -->
+
+ </target>
+
+ <target name="invm-stress-tests" depends="tests-jar, prepare-testdirs, clear-test-logs"
+ description="Runs all stress tests in an in-VM configuration">
+
+ <junit printsummary="${junit.printsummary}"
+ fork="${junit.fork}"
+ includeantruntime="${junit.includeantruntime}"
+ haltonerror="${junit.haltonerror}"
+ haltonfailure="${junit.haltonfailure}"
+ showoutput="${junit.showoutput}"
+ timeout="${stress.junit.timeout}">
+
+ <sysproperty key="remote" value="false"/>
+ <sysproperty key="module.output" value="${tests.output}"/>
+ <sysproperty key="test.bind.address" value="${test.bind.address}"/>
+ <sysproperty key="jgroups.bind_addr" value="${test.bind.address}"/>
+ <sysproperty key="test.database" value="${stress.tests.database}"/>
+ <sysproperty key="test.logfile.suffix" value="invm"/>
+ <sysproperty key="objectstore.dir" value="${objectstore.dir}"/>
+ <jvmarg value="-Xmx512M"/>
+ <!--
+ <jvmarg line="-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_shmem,server=y,suspend=y,address=antjunit"/>
+ -->
+ <classpath refid="stress.test.execution.classpath"/>
+ <sysproperty key="jboss-junit-configuration" value="StressInVM"/>
+ <formatter classname="org.jboss.ant.taskdefs.XMLJUnitMultipleResultFormatter"
+ usefile="${junit.formatter.usefile}" extension="-StressInVM.xml"/>
+ <batchtest fork="${junit.batchtest.fork}"
+ todir="${junit.batchtest.todir}"
+ haltonfailure="${junit.batchtest.haltonfailure}"
+ haltonerror="${junit.batchtest.haltonerror}">
+ <formatter type="plain" usefile="${junit.formatter.usefile}"/>
+ <fileset dir="${build.tests.classes}">
+ <include name="**/jms/stress/*Test.class"/>
+ </fileset>
+ </batchtest>
+ </junit>
+ </target>
+
<target name="remote-stress-tests" depends="tests-jar, prepare-testdirs, clear-test-logs"
description="Runs remotely all stress tests for which it makes sense to run remotely">
@@ -660,7 +532,7 @@
haltonerror="${junit.haltonerror}"
haltonfailure="${junit.haltonfailure}"
showoutput="${junit.showoutput}"
- timeout="${stress.timeout}">
+ timeout="${stress.junit.timeout}">
<sysproperty key="remote" value="true"/>
<sysproperty key="module.output" value="${tests.output}"/>
@@ -698,20 +570,12 @@
<target name="clustering-tests" depends="tests-jar, prepare-testdirs, clear-test-logs"
description="Runs the clustering tests">
-
<mkdir dir="${build.tests.reports}"/>
<echo message=""/>
<echo message="Running clustering tests, fork=${junit.fork}, junit.batchtest.fork=${junit.batchtest.fork}"/>
<echo message=""/>
- <!--
-
- By default, clustered tests are run in a "remote" configuration (the clustered
- nodes physically live in different VMs. If you want to test a co-located clustered
- configuration, use bin/runtest -clustered
- -->
-
<junit printsummary="${junit.printsummary}"
fork="${junit.fork}"
includeantruntime="yes"
@@ -762,51 +626,45 @@
</junit>
</target>
- <target name="bridge-tests" depends="tests-jar, prepare-testdirs, clear-test-logs"
- description="Runs the bridge tests">
+ <target name="bridge-tests" depends="tests-jar, prepare-testdirs, clear-test-logs"
+ description="Runs bridge tests">
+ <antcall target="stop-rmi-server"/>
+ <antcall target="start-rmi-server"/>
<mkdir dir="${build.tests.reports}"/>
<echo message=""/>
- <echo message="Running bridge tests, fork=${junit.fork}, junit.batchtest.fork=${junit.batchtest.fork}"/>
+ <echo message="Running bridge tests, fork=${junit.fork}, junit.batchtest.fork=${junit.batchtest.fork}, remoting=${test.remoting}"/>
<echo message=""/>
- <!--
-
- By default, bridge tests are run in a "remote" configuration (the clustered
- nodes physically live in different VMs.
- -->
-
<junit printsummary="${junit.printsummary}"
fork="${junit.fork}"
includeantruntime="yes"
haltonerror="${junit.haltonerror}"
haltonfailure="${junit.haltonfailure}"
showoutput="${junit.showoutput}"
- timeout="${junit.timeout}">
+ timeout="${bridge.junit.timeout}">
<sysproperty key="remote" value="true"/>
<sysproperty key="module.output" value="${tests.output}"/>
<sysproperty key="test.bind.address" value="${test.bind.address}"/>
<sysproperty key="jgroups.bind_addr" value="${test.bind.address}"/>
- <sysproperty key="test.database" value="${clustering.tests.database}"/>
- <sysproperty key="test.clustered" value="false"/>
- <sysproperty key="test.logfile.suffix" value="clustering-client"/>
+ <sysproperty key="test.database" value="${functional.tests.database}"/>
+ <sysproperty key="test.remoting" value="${test.remoting}"/>
+ <sysproperty key="test.logfile.suffix" value="remote-client"/>
<sysproperty key="objectstore.dir" value="${objectstore.dir}"/>
<jvmarg value="-Xmx512M"/>
- <jvmarg value="-Djava.net.preferIPv4Stack=true"/>
<!--
- <jvmarg line="-Xmx512M -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_shmem,server=n,suspend=n,address=antjunit"/>
- -->
-
+ <jvmarg line="-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_shmem,server=n,suspend=n,address=antjunit"/>
+ -->
<classpath>
<path refid="test.execution.classpath"/>
</classpath>
- <sysproperty key="jboss-junit-configuration" value="Clustering"/>
+ <sysproperty key="jboss-junit-configuration" value="Remote-${test.remoting}"/>
<formatter classname="org.jboss.ant.taskdefs.XMLJUnitMultipleResultFormatter"
- usefile="${junit.formatter.usefile}" extension="-Clustering.xml"/>
+ usefile="${junit.formatter.usefile}" extension="-Remote-${test.remoting}.xml"/>
<batchtest fork="${junit.batchtest.fork}"
todir="${junit.batchtest.todir}"
@@ -818,13 +676,16 @@
perform clean-up, and this is it: register a JUnitTestSuiteListener as a JUnit
batchtest formatter, and it will get notified on a endTestSuite() event.
-->
- <formatter classname="org.jboss.test.messaging.tools.ant.JUnitTestSuiteListener"/>
+ <formatter classname="org.jboss.test.messaging.tools.ant.JUnitTestSuiteListener"/>
- <fileset dir="${build.tests.classes}">
- <include name="**/jms/bridge/${test-mask}.class"/>
- </fileset>
+ <fileset dir="${build.tests.classes}">
+ <include name="**/jms/bridge/**/*Test.class"/>
+ </fileset>
</batchtest>
</junit>
+
+ <antcall target="stop-rmi-server"/>
+
</target>
<target name="memory-leak-tests" depends="tests-jar, prepare-testdirs, clear-test-logs"
@@ -1036,7 +897,6 @@
</target>
-
<target name="crash-test" depends="init" description="Runs crash test">
<junit printsummary="${junit.printsummary}"
@@ -1077,114 +937,6 @@
</target>
-
- <target name="jmstests" depends="tests-jar, prepare-testdirs, clear-test-logs"
- description="Runs the jms tests only">
-
- <antcall target="start-rmi-server"/>
-
- <junit printsummary="${junit.printsummary}"
- fork="${junit.fork}"
- includeantruntime="${junit.includeantruntime}"
- haltonerror="${junit.haltonerror}"
- haltonfailure="${junit.haltonfailure}"
- showoutput="${junit.showoutput}"
- timeout="${junit.timeout}">
- <sysproperty key="remote" value="${build.tests.remote}"/>
- <sysproperty key="module.output" value="${tests.output}"/>
- <sysproperty key="test.bind.address" value="${test.bind.address}"/>
- <sysproperty key="jgroups.bind_addr" value="${test.bind.address}"/>
- <sysproperty key="test.database" value="${functional.tests.database}"/>
- <sysproperty key="objectstore.dir" value="${objectstore.dir}"/>
- <jvmarg value="-Xmx512M"/>
- <classpath refid="test.execution.classpath"/>
- <formatter type="xml" usefile="${junit.formatter.usefile}"/>
- <batchtest fork="${junit.batchtest.fork}"
- todir="${junit.batchtest.todir}"
- haltonfailure="${junit.batchtest.haltonfailure}"
- haltonerror="${junit.batchtest.haltonerror}">
- <formatter type="plain" usefile="${junit.formatter.usefile}"/>
- <fileset dir="${build.tests.classes}">
- <include name="**/messaging/jms/**/*Test.class"/>
- <exclude name="**/messaging/graveyard/**/*Test.class"/>
- <exclude name="**/jms/stress/**"/>
- <exclude name="org/jboss/test/messaging/jms/ManifestTest.class"/>
- <exclude name="**/jms/clustering/*Test.class"/>
- </fileset>
- </batchtest>
- </junit>
-
- <antcall target="stop-rmi-server"/>
-
- </target>
-
- <target name="messagetests" depends="tests-jar, prepare-testdirs, clear-test-logs"
- description="Runs the jms tests only">
-
- <junit printsummary="${junit.printsummary}"
- fork="${junit.fork}"
- includeantruntime="${junit.includeantruntime}"
- haltonerror="${junit.haltonerror}"
- haltonfailure="${junit.haltonfailure}"
- showoutput="${junit.showoutput}"
- timeout="${junit.timeout}">
- <sysproperty key="remote" value="${build.tests.remote}"/>
- <sysproperty key="module.output" value="${tests.output}"/>
- <sysproperty key="test.bind.address" value="${test.bind.address}"/>
- <sysproperty key="jgroups.bind_addr" value="${test.bind.address}"/>
- <sysproperty key="test.database" value="${functional.tests.database}"/>
- <sysproperty key="objectstore.dir" value="${objectstore.dir}"/>
- <jvmarg value="-Xmx512M"/>
- <classpath refid="test.execution.classpath"/>
- <formatter type="xml" usefile="${junit.formatter.usefile}"/>
- <batchtest fork="${junit.batchtest.fork}"
- todir="${junit.batchtest.todir}"
- haltonfailure="${junit.batchtest.haltonfailure}"
- haltonerror="${junit.batchtest.haltonerror}">
- <formatter type="plain" usefile="${junit.formatter.usefile}"/>
- <fileset dir="${build.tests.classes}">
- <include name="**/messaging/jms/message/**/*Test.class"/>
- </fileset>
- </batchtest>
- </junit>
-
- <antcall target="stop-rmi-server"/>
-
- </target>
-
- <target name="coretests" depends="tests-jar, prepare-testdirs, clear-test-logs"
- description="Runs the jms tests only">
-
- <junit printsummary="${junit.printsummary}"
- fork="${junit.fork}"
- includeantruntime="${junit.includeantruntime}"
- haltonerror="${junit.haltonerror}"
- haltonfailure="${junit.haltonfailure}"
- showoutput="${junit.showoutput}"
- timeout="${junit.timeout}">
- <sysproperty key="remote" value="${build.tests.remote}"/>
- <sysproperty key="module.output" value="${tests.output}"/>
- <sysproperty key="test.bind.address" value="${test.bind.address}"/>
- <sysproperty key="jgroups.bind_addr" value="${test.bind.address}"/>
- <sysproperty key="test.database" value="${functional.tests.database}"/>
- <jvmarg value="-Xmx512M"/>
- <classpath refid="test.execution.classpath"/>
- <formatter type="xml" usefile="${junit.formatter.usefile}"/>
- <batchtest fork="${junit.batchtest.fork}"
- todir="${junit.batchtest.todir}"
- haltonfailure="${junit.batchtest.haltonfailure}"
- haltonerror="${junit.batchtest.haltonerror}">
- <formatter type="plain" usefile="${junit.formatter.usefile}"/>
- <fileset dir="${build.tests.classes}">
- <include name="**/messaging/**/*Test.class"/>
- <exclude name="**/messaging/graveyard/**/*Test.class"/>
- <exclude name="**/messaging/jms/**"/>
- </fileset>
- </batchtest>
- </junit>
- <antcall target="stop-rmi-server"/>
- </target>
-
<target name="test" depends="tests-jar, prepare-testdirs, clear-test-logs"
description="Runs a single test, specified by its FQ class name via 'test.classname'">
@@ -1248,17 +1000,9 @@
</target>
<target name="report" depends="tests, copy-stylesheets, compile-report"/>
+
+ <target name="stress-report" depends="stress-tests, copy-stylesheets, compile-report"/>
- <target name="remote-tests-report" depends="remote-tests, copy-stylesheets, compile-report"/>
-
- <target name="jmsreport" depends="jmstests, copy-stylesheets, compile-report"/>
-
- <target name="messagereport" depends="messagetests, copy-stylesheets, compile-report"/>
-
- <target name="corereport" depends="coretests, copy-stylesheets, compile-report"/>
-
- <target name="stressreport" depends="stress-tests, copy-stylesheets, compile-report"/>
-
<target name="functional-tests" depends="tests"/>
<!-- ======================================================================================== -->
@@ -1287,39 +1031,5 @@
<echo message="${test.execution.classpath.unix}" file="${test.execution.classpath.file}"/>
</target>
- <!-- ======================================================================================== -->
- <!-- Miscellaneous -->
- <!-- ======================================================================================== -->
-
- <target name="tests-ejb-jar"
- depends="compile"
- description="Creates the ejb jar file containing the test ejb and mdb for testing jms from within a managed environment">
-
- <mkdir dir="${build.tests.lib}"/>
- <mkdir dir="${build.tests.classes}/META-INF"/>
- <copy file="${source.tests.java}/org/jboss/test/messaging/jms/managed/META-INF/jboss.xml"
- tofile="${build.tests.classes}/META-INF/jboss.xml"/>
- <copy file="${source.tests.java}/org/jboss/test/messaging/jms/managed/META-INF/ejb-jar.xml"
- tofile="${build.tests.classes}/META-INF/ejb-jar.xml"/>
- <!-- Build the tests ejb jar -->
- <jar jarfile="${build.tests.lib}/${build.tests.ejbarchive}">
- <fileset dir="${build.tests.classes}">
- <include name="org/jboss/test/messaging/jms/managed/**"/>
- </fileset>
- <fileset dir="${build.tests.classes}">
- <include name="META-INF/**"/>
- </fileset>
- </jar>
- </target>
-
- <target name="deployejb" depends="tests-ejb-jar">
- <copy file="${build.tests.lib}/${build.tests.ejbarchive}"
- todir="${ENV.JBOSS_HOME}/server/default/deploy"/>
- </target>
-
- <target name="undeployejb">
- <delete file="${ENV.JBOSS_HOME}/server/default/deploy/${build.tests.ejbarchive}"/>
- </target>
-
</project>
More information about the jboss-cvs-commits
mailing list