mstover1 2002/08/27 19:58:54
Modified: src/core/org/apache/jmeter/engine PreCompiler.java
StandardJMeterEngine.java
src/core/org/apache/jmeter/gui MainFrame.java
src/core/org/apache/jmeter/resources messages.properties
messages_de.properties messages_ja.properties
messages_no.properties
src/protocol/http/org/apache/jmeter/protocol/http/proxy
ProxyControl.java
src/protocol/http/org/apache/jmeter/protocol/http/proxy/gui
ProxyControlGui.java
src/protocol/http/org/apache/jmeter/protocol/http/sampler
HTTPSampler.java
Log:
Improving reliability of running and stopping threads
Revision Changes Path
1.4 +26 -96
jakarta-jmeter/src/core/org/apache/jmeter/engine/PreCompiler.java
Index: PreCompiler.java
===================================================================
RCS file:
/home/cvs/jakarta-jmeter/src/core/org/apache/jmeter/engine/PreCompiler.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- PreCompiler.java 23 Aug 2002 22:51:44 -0000 1.3
+++ PreCompiler.java 28 Aug 2002 02:58:53 -0000 1.4
@@ -1,135 +1,65 @@
package org.apache.jmeter.engine;
-
-import java.util.Collection;
-import java.util.Iterator;
import java.util.Map;
-import org.apache.jmeter.functions.CompoundFunction;
import org.apache.jmeter.functions.InvalidVariableException;
+import org.apache.jmeter.functions.ValueReplacer;
import org.apache.jmeter.testelement.TestElement;
import org.apache.jmeter.testelement.TestPlan;
import org.apache.jmeter.util.ListedHashTree;
import org.apache.jmeter.util.ListedHashTreeVisitor;
+import org.apache.jmeter.util.LoggingManager;
import org.apache.log.Hierarchy;
import org.apache.log.Logger;
-
/**
* @author mstover
*
* To change this generated comment edit the template variable "typecomment":
* Window>Preferences>Java>Templates.
*/
-public class PreCompiler implements ListedHashTreeVisitor {
- private static Logger log = Hierarchy.getDefaultHierarchy().getLoggerFor(
- "jmeter.engine");
-
+public class PreCompiler implements ListedHashTreeVisitor
+{
+ private static Logger log =
+ Hierarchy.getDefaultHierarchy().getLoggerFor(LoggingManager.ENGINE);
private Map userDefinedVariables;
- private CompoundFunction masterFunction = new CompoundFunction();
private boolean testValid = true;
-
+ private ValueReplacer replacer;
public PreCompiler()
{
+ replacer = new ValueReplacer();
}
-
/**
* @see ListedHashTreeVisitor#addNode(Object, ListedHashTree)
*/
- public void addNode(Object node, ListedHashTree subTree) {
- if(node instanceof TestPlan)
+ public void addNode(Object node, ListedHashTree subTree)
+ {
+ if (node instanceof TestPlan)
{
-
masterFunction.setUserDefinedVariables(((TestPlan)node).getUserDefinedVariables());
+ replacer.setUserDefinedVariables(
+ ((TestPlan) node).getUserDefinedVariables());
}
- if(node instanceof TestElement)
+ if (node instanceof TestElement)
{
- replaceValues((TestElement)node);
+ try
+ {
+ replacer.replaceValues((TestElement) node);
+ }
+ catch (InvalidVariableException e)
+ {
+ log.error("invalid variables",e);
+ testValid = false;
+ }
}
}
-
/**
* @see ListedHashTreeVisitor#subtractNode()
*/
- public void subtractNode() {
+ public void subtractNode()
+ {
}
-
/**
* @see ListedHashTreeVisitor#processPath()
*/
- public void processPath() {
- }
-
- private void replaceValues(TestElement el)
+ public void processPath()
{
- Iterator iter = el.getPropertyNames().iterator();
- while(iter.hasNext())
- {
- String propName = (String)iter.next();
- Object propValue = el.getProperty(propName);
- if(propValue instanceof String)
- {
- Object newValue = getNewValue((String)propValue);
- el.setProperty(propName,newValue);
- }
- else if(propValue instanceof TestElement)
- {
- replaceValues((TestElement)propValue);
- }
- else if(propValue instanceof Collection)
- {
-
el.setProperty(propName,replaceValues((Collection)propValue));
- }
- }
- }
-
- private Object getNewValue(String propValue)
- {
- Object newValue = propValue;
- masterFunction.clear();
- try {
-
masterFunction.setParameters((String)propValue);
- } catch(InvalidVariableException e) {
- testValid = false;
- }
- if(masterFunction.hasFunction())
- {
- newValue = masterFunction.getFunction();
- }
- else if(masterFunction.hasStatics())
- {
- newValue =
masterFunction.getStaticSubstitution();
- }
- return newValue;
- }
-
- private Collection replaceValues(Collection values)
- {
- Collection newColl = null;
- try {
- newColl = (Collection)values.getClass().newInstance();
- } catch(Exception e) {
- log.error("",e);
- return values;
- }
- Iterator iter = values.iterator();
- while(iter.hasNext())
- {
- Object val = iter.next();
- if(val instanceof TestElement)
- {
- replaceValues((TestElement)val);
- }
- else if(val instanceof String)
- {
- val = getNewValue((String)val);
- }
- else if(val instanceof Collection)
- {
- val = replaceValues((Collection)val);
- }
- newColl.add(val);
- }
- return newColl;
}
-
-
-
}
1.10 +51 -6
jakarta-jmeter/src/core/org/apache/jmeter/engine/StandardJMeterEngine.java
Index: StandardJMeterEngine.java
===================================================================
RCS file:
/home/cvs/jakarta-jmeter/src/core/org/apache/jmeter/engine/StandardJMeterEngine.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- StandardJMeterEngine.java 27 Aug 2002 15:03:36 -0000 1.9
+++ StandardJMeterEngine.java 28 Aug 2002 02:58:53 -0000 1.10
@@ -84,10 +84,11 @@
*@created $Date$
*@version $Revision$
***********************************************************/
-public class StandardJMeterEngine implements JMeterEngine,JMeterThreadMonitor
+public class StandardJMeterEngine implements
JMeterEngine,JMeterThreadMonitor,Runnable
{
private static Logger log = Hierarchy.getDefaultHierarchy().getLoggerFor(
"jmeter.engine");
+ private static long WAIT_TO_DIE = 5 * 1000; //5 seconds
Map allThreads;
boolean running = false;
ListedHashTree test;
@@ -280,10 +281,10 @@
public synchronized void threadFinished(JMeterThread thread)
{
allThreads.remove(thread);
- if(allThreads.size() == 0)
+ /*if(allThreads.size() == 0)
{
notifyTestListenersOfEnd();
- }
+ }*/
}
/************************************************************
@@ -291,7 +292,51 @@
***********************************************************/
public void stopTest()
{
- running = false;
+ running = false;
+ Thread stopThread = new Thread(this);
+ stopThread.start();
+ }
+
+ public void run()
+ {
+ tellThreadsToStop();
+ try
+ {
+ Thread.sleep(10 * allThreads.size());
+ }
+ catch (InterruptedException e)
+ {
+ }
+ verifyThreadsStopped();
+ notifyTestListenersOfEnd();
+ }
+
+ private void verifyThreadsStopped()
+ {
+ Iterator iter = new HashSet(allThreads.keySet()).iterator();
+ while(iter.hasNext())
+ {
+ Thread t = (Thread)allThreads.get(iter.next());
+ if(t != null && t.isAlive())
+ {
+ try
+ {
+ t.join(WAIT_TO_DIE);
+ }
+ catch (InterruptedException e)
+ {
+ }
+ if(t.isAlive())
+ {
+ log.info("Thread won't die: "+t.getName());
+ }
+ }
+ log.debug("finished thread");
+ }
+ }
+
+ private void tellThreadsToStop()
+ {
Iterator iter = new HashSet(allThreads.keySet()).iterator();
while(iter.hasNext())
{
1.3 +12 -9 jakarta-jmeter/src/core/org/apache/jmeter/gui/MainFrame.java
Index: MainFrame.java
===================================================================
RCS file: /home/cvs/jakarta-jmeter/src/core/org/apache/jmeter/gui/MainFrame.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- MainFrame.java 24 Aug 2002 02:44:25 -0000 1.2
+++ MainFrame.java 28 Aug 2002 02:58:53 -0000 1.3
@@ -138,7 +138,10 @@
{
public void run()
{
- stoppingMessage.show();
+ if(stoppingMessage != null)
+ {
+ stoppingMessage.show();
+ }
}
});
}
@@ -274,11 +277,6 @@
public void testEnded()
{
- if(stoppingMessage != null)
- {
- stoppingMessage.dispose();
- stoppingMessage = null;
- }
testEnded("local");
menuBar.setEnabled(false);
}
@@ -289,6 +287,11 @@
if(hosts.size() == 0)
{
runningIndicator.setIcon(stoppedIcon);
+ if(stoppingMessage != null)
+ {
+ stoppingMessage.dispose();
+ stoppingMessage = null;
+ }
}
menuBar.setRunning(false,host);
}
1.9 +2 -1
jakarta-jmeter/src/core/org/apache/jmeter/resources/messages.properties
Index: messages.properties
===================================================================
RCS file:
/home/cvs/jakarta-jmeter/src/core/org/apache/jmeter/resources/messages.properties,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- messages.properties 25 Aug 2002 19:42:21 -0000 1.8
+++ messages.properties 28 Aug 2002 02:58:53 -0000 1.9
@@ -293,4 +293,5 @@
english=English
japanese=Japanese
german=German
-norwegian=Norwegian
\ No newline at end of file
+norwegian=Norwegian
+record_controller_title=Recording Controller
\ No newline at end of file
1.11 +2 -1
jakarta-jmeter/src/core/org/apache/jmeter/resources/messages_de.properties
Index: messages_de.properties
===================================================================
RCS file:
/home/cvs/jakarta-jmeter/src/core/org/apache/jmeter/resources/messages_de.properties,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- messages_de.properties 26 Aug 2002 15:49:37 -0000 1.10
+++ messages_de.properties 28 Aug 2002 02:58:53 -0000 1.11
@@ -293,4 +293,5 @@
english=English
japanese=Japanese
german=Deutsch
-norwegian=Norwegian
\ No newline at end of file
+norwegian=Norwegian
+record_controller_title=Recording Controller
\ No newline at end of file
1.9 +2 -1
jakarta-jmeter/src/core/org/apache/jmeter/resources/messages_ja.properties
Index: messages_ja.properties
===================================================================
RCS file:
/home/cvs/jakarta-jmeter/src/core/org/apache/jmeter/resources/messages_ja.properties,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- messages_ja.properties 25 Aug 2002 19:42:21 -0000 1.8
+++ messages_ja.properties 28 Aug 2002 02:58:53 -0000 1.9
@@ -288,4 +288,5 @@
english=English
japanese=Japanese
german=German
-norwegian=Norwegian
\ No newline at end of file
+norwegian=Norwegian
+record_controller_title=Recording Controller
\ No newline at end of file
1.9 +2 -1
jakarta-jmeter/src/core/org/apache/jmeter/resources/messages_no.properties
Index: messages_no.properties
===================================================================
RCS file:
/home/cvs/jakarta-jmeter/src/core/org/apache/jmeter/resources/messages_no.properties,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- messages_no.properties 25 Aug 2002 19:42:21 -0000 1.8
+++ messages_no.properties 28 Aug 2002 02:58:53 -0000 1.9
@@ -280,4 +280,5 @@
english=English
japanese=Japanese
german=German
-norwegian=Norwegian
\ No newline at end of file
+norwegian=Norwegian
+record_controller_title=Recording Controller
\ No newline at end of file
1.4 +5 -3
jakarta-jmeter/src/protocol/http/org/apache/jmeter/protocol/http/proxy/ProxyControl.java
Index: ProxyControl.java
===================================================================
RCS file:
/home/cvs/jakarta-jmeter/src/protocol/http/org/apache/jmeter/protocol/http/proxy/ProxyControl.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- ProxyControl.java 23 Aug 2002 22:51:46 -0000 1.3
+++ ProxyControl.java 28 Aug 2002 02:58:54 -0000 1.4
@@ -59,10 +59,12 @@
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
+
import junit.framework.TestCase;
+
import org.apache.jmeter.config.ConfigElement;
import org.apache.jmeter.config.ConfigTestElement;
-import org.apache.jmeter.control.gui.LogicControllerGui;
+import org.apache.jmeter.control.gui.RecordController;
import org.apache.jmeter.exceptions.IllegalUserActionException;
import org.apache.jmeter.gui.GuiPackage;
import org.apache.jmeter.gui.JMeterGUIComponent;
@@ -302,7 +304,7 @@
{
TestElement urlConfig = null;
JMeterTreeModel treeModel = GuiPackage.getInstance().getTreeModel();
- List nodes = treeModel.getNodesOfType(LogicControllerGui.class);
+ List nodes = treeModel.getNodesOfType(RecordController.class);
if (nodes.size() == 0)
{
nodes = treeModel.getNodesOfType(ThreadGroupGui.class);
1.2 +35 -6
jakarta-jmeter/src/protocol/http/org/apache/jmeter/protocol/http/proxy/gui/ProxyControlGui.java
Index: ProxyControlGui.java
===================================================================
RCS file:
/home/cvs/jakarta-jmeter/src/protocol/http/org/apache/jmeter/protocol/http/proxy/gui/ProxyControlGui.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- ProxyControlGui.java 11 Aug 2002 19:24:52 -0000 1.1
+++ ProxyControlGui.java 28 Aug 2002 02:58:54 -0000 1.2
@@ -81,12 +81,17 @@
import javax.swing.JTextField;
import javax.swing.border.Border;
import javax.swing.border.EmptyBorder;
+
+import org.apache.jmeter.functions.InvalidVariableException;
+import org.apache.jmeter.functions.ValueReplacer;
+import org.apache.jmeter.gui.GuiPackage;
import org.apache.jmeter.gui.JMeterGUIComponent;
import org.apache.jmeter.gui.NamePanel;
import org.apache.jmeter.gui.util.MenuFactory;
import org.apache.jmeter.gui.util.PowerTableModel;
import org.apache.jmeter.protocol.http.proxy.ProxyControl;
import org.apache.jmeter.testelement.TestElement;
+import org.apache.jmeter.testelement.TestPlan;
import org.apache.jmeter.util.JMeterUtils;
/****************************************
@@ -246,16 +251,13 @@
else if(command.equals(START))
{
model = (ProxyControl)createTestElement();
- model.startProxy();
- start.setEnabled(false);
- stop.setEnabled(true);
+ startProxy();
}
else if(command.equals(RESTART))
{
model.stopProxy();
model = (ProxyControl)createTestElement();
- model.startProxy();
- restart.setEnabled(false);
+ startProxy();
}
else if(command.equals(this.ADD_EXCLUDE))
{
@@ -282,6 +284,33 @@
includeModel.fireTableDataChanged();
enableRestart();
}
+ }
+
+ private void startProxy()
+ {
+ ValueReplacer replacer = getReplacer();
+ try
+ {
+ replacer.replaceValues(model);
+ model.startProxy();
+ start.setEnabled(false);
+ stop.setEnabled(true);
+ restart.setEnabled(false);
+ }
+ catch (InvalidVariableException e)
+ {
+ JOptionPane.showMessageDialog(this,JMeterUtils.getResString(
+
"invalid_variables"),"Error",JOptionPane.ERROR_MESSAGE);
+ }
+ }
+
+ private ValueReplacer getReplacer()
+ {
+ ValueReplacer replacer = new ValueReplacer(
+ ((TestPlan)((JMeterGUIComponent)
+
GuiPackage.getInstance().getTreeModel().getTestPlan().getArray()
+ [0]).createTestElement()).getUserDefinedVariables());
+ return replacer;
}
private void enableRestart()
1.11 +15 -4
jakarta-jmeter/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPSampler.java
Index: HTTPSampler.java
===================================================================
RCS file:
/home/cvs/jakarta-jmeter/src/protocol/http/org/apache/jmeter/protocol/http/sampler/HTTPSampler.java,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- HTTPSampler.java 27 Aug 2002 18:19:26 -0000 1.10
+++ HTTPSampler.java 28 Aug 2002 02:58:54 -0000 1.11
@@ -57,6 +57,7 @@
import java.io.ByteArrayOutputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
+import java.net.BindException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
@@ -64,6 +65,7 @@
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
+
import org.apache.jmeter.config.Arguments;
import org.apache.jmeter.config.ConfigTestElement;
import org.apache.jmeter.protocol.http.control.AuthManager;
@@ -810,9 +812,9 @@
{
conn.connect();
}
- catch(IOException e)
+ catch(BindException e)
{
- log.debug("Connection failed, turning off keep-alive and
trying again");
+ log.debug("Bind exception, try again");
if(connectionTries++ == 10)
{
log.error("Can't connect",e);
@@ -829,6 +831,15 @@
postWriter.setHeaders(conn,this);
}
time = connect();
+ }
+ catch(IOException e)
+ {
+ log.debug("Connection failed, giving up");
+ conn.disconnect();
+ conn = null;
+ System.gc();
+ Runtime.getRuntime().runFinalization();
+ throw e;
}
return time;
}
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>