You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jmeter-dev@jakarta.apache.org by se...@apache.org on 2009/04/20 16:47:06 UTC
svn commit: r766712 -
/jakarta/jmeter/trunk/src/core/org/apache/jmeter/engine/StandardJMeterEngine.java
Author: sebb
Date: Mon Apr 20 14:47:06 2009
New Revision: 766712
URL: http://svn.apache.org/viewvc?rev=766712&view=rev
Log:
Tidyup; add askThreadsToStopNow() method
Modified:
jakarta/jmeter/trunk/src/core/org/apache/jmeter/engine/StandardJMeterEngine.java
Modified: jakarta/jmeter/trunk/src/core/org/apache/jmeter/engine/StandardJMeterEngine.java
URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/core/org/apache/jmeter/engine/StandardJMeterEngine.java?rev=766712&r1=766711&r2=766712&view=diff
==============================================================================
--- jakarta/jmeter/trunk/src/core/org/apache/jmeter/engine/StandardJMeterEngine.java (original)
+++ jakarta/jmeter/trunk/src/core/org/apache/jmeter/engine/StandardJMeterEngine.java Mon Apr 20 14:47:06 2009
@@ -61,14 +61,15 @@
/** JMeterThread => its JVM thread */
private final Map/*<JMeterThread, Thread>*/ allThreads;
- private volatile boolean startingGroups; // flag to show that groups are still being created
+ /** flag to show that groups are still being created, i.e test plan is not complete */
+ private volatile boolean startingGroups;
+ /** Flag to show whether test is running. Set to false to stop creating more threads. */
private volatile boolean running = false;
+ /** Thread Groups run sequentially */
private volatile boolean serialized = false;
- private volatile boolean schedule_run = false;
-
private HashTree test;
private volatile SearchByClass testListenersSave;
@@ -264,11 +265,12 @@
}
}
+ // Called by JMeter thread when it finishes
public synchronized void threadFinished(JMeterThread thread) {
try {
allThreads.remove(thread);
log.info("Ending thread " + thread.getThreadName());
- if (!serialized && !schedule_run && !startingGroups && allThreads.size() == 0 ) {
+ if (!startingGroups && allThreads.size() == 0 ) {
log.info("Stopping test");
stopTest();
}
@@ -374,12 +376,11 @@
ListenerNotifier notifier = new ListenerNotifier();
- schedule_run = true;
JMeterContextService.getContext().setSamplingStarted(true);
int groupCount = 0;
JMeterContextService.clearTotalThreads();
startingGroups = true;
- while (iter.hasNext()) {
+ while (running && iter.hasNext()) {// for each thread group
groupCount++;
ThreadGroup group = (ThreadGroup) iter.next();
int numThreads = group.getNumThreads();
@@ -420,14 +421,10 @@
Thread newThread = new Thread(jmeterThread);
newThread.setName(threadName);
allThreads.put(jmeterThread, newThread);
- if (serialized && !iter.hasNext() && i == numThreads - 1) // last thread
- {
- serialized = false;
- }
newThread.start();
- }
- schedule_run = false;
- if (serialized) {
+ } // end of thread startup for this thread group
+ if (serialized && !iter.hasNext()) {
+ log.info("Waiting for thread group: "+groupName+" to finish before starting next group");
while (running && allThreads.size() > 0) {
try {
Thread.sleep(1000);
@@ -435,6 +432,11 @@
}
}
}
+ } // end of thread groups
+ if (running) {
+ log.info("All threads have been started");
+ } else {
+ log.info("Test stopped - no more threads will be started");
}
startingGroups = false;
}
@@ -511,6 +513,10 @@
engine.stopTest(false);
}
+ public void askThreadsToStopNow() {
+ engine.stopTest(true);
+ }
+
private void stopAllThreads() {
Iterator iter = new HashSet(allThreads.keySet()).iterator();
while (iter.hasNext()) {
---------------------------------------------------------------------
To unsubscribe, e-mail: jmeter-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: jmeter-dev-help@jakarta.apache.org