Author: sebb
Date: Wed Feb 2 23:10:06 2011
New Revision: 1066684
URL: http://svn.apache.org/viewvc?rev=1066684&view=rev
Log:
Bug 50659 - JMeter server does not support concurrent tests - prevent client
from starting another
Modified:
jakarta/jmeter/trunk/src/core/org/apache/jmeter/engine/ClientJMeterEngine.java
jakarta/jmeter/trunk/src/core/org/apache/jmeter/engine/JMeterEngine.java
jakarta/jmeter/trunk/src/core/org/apache/jmeter/engine/RemoteJMeterEngineImpl.java
jakarta/jmeter/trunk/src/core/org/apache/jmeter/engine/StandardJMeterEngine.java
jakarta/jmeter/trunk/xdocs/changes.xml
Modified:
jakarta/jmeter/trunk/src/core/org/apache/jmeter/engine/ClientJMeterEngine.java
URL:
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/core/org/apache/jmeter/engine/ClientJMeterEngine.java?rev=1066684&r1=1066683&r2=1066684&view=diff
==============================================================================
---
jakarta/jmeter/trunk/src/core/org/apache/jmeter/engine/ClientJMeterEngine.java
(original)
+++
jakarta/jmeter/trunk/src/core/org/apache/jmeter/engine/ClientJMeterEngine.java
Wed Feb 2 23:10:06 2011
@@ -24,6 +24,7 @@ import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.Remote;
import java.rmi.RemoteException;
+import java.rmi.ServerException;
import java.rmi.server.RemoteObject;
import java.util.Properties;
@@ -144,8 +145,13 @@ public class ClientJMeterEngine implemen
}
remote.runTest();
log.info("sent run command to "+ host);
+ } catch (ServerException ex) {
+ log.error("Error in run() method", ex); // $NON-NLS-1$
+ log.fatalError("Exitting JVM"); // Necessary otherwise hangs on
Timer Thread.
+ System.out.println("Fatal error, exitting:
"+ex.getLocalizedMessage());
+ System.exit(1);
} catch (Exception ex) {
- log.error("", ex); // $NON-NLS-1$
+ log.error("Error in run() method", ex); // $NON-NLS-1$
}
}
@@ -165,4 +171,8 @@ public class ClientJMeterEngine implemen
savep = p;
// Sent later
}
+
+ public boolean isActive() {
+ return true;
+ }
}
Modified:
jakarta/jmeter/trunk/src/core/org/apache/jmeter/engine/JMeterEngine.java
URL:
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/core/org/apache/jmeter/engine/JMeterEngine.java?rev=1066684&r1=1066683&r2=1066684&view=diff
==============================================================================
--- jakarta/jmeter/trunk/src/core/org/apache/jmeter/engine/JMeterEngine.java
(original)
+++ jakarta/jmeter/trunk/src/core/org/apache/jmeter/engine/JMeterEngine.java
Wed Feb 2 23:10:06 2011
@@ -34,4 +34,6 @@ public interface JMeterEngine {
void setProperties(Properties p);
void exit();
+
+ boolean isActive();
}
Modified:
jakarta/jmeter/trunk/src/core/org/apache/jmeter/engine/RemoteJMeterEngineImpl.java
URL:
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/core/org/apache/jmeter/engine/RemoteJMeterEngineImpl.java?rev=1066684&r1=1066683&r2=1066684&view=diff
==============================================================================
---
jakarta/jmeter/trunk/src/core/org/apache/jmeter/engine/RemoteJMeterEngineImpl.java
(original)
+++
jakarta/jmeter/trunk/src/core/org/apache/jmeter/engine/RemoteJMeterEngineImpl.java
Wed Feb 2 23:10:06 2011
@@ -43,6 +43,8 @@ public class RemoteJMeterEngineImpl exte
static final String JMETER_ENGINE_RMI_NAME = "JMeterEngine"; // $NON-NLS-1$
private transient JMeterEngine backingEngine;
+
+ private transient Thread ownerThread;
public static final int DEFAULT_RMI_PORT =
JMeterUtils.getPropDefault("server.rmi.port", 1099); // $NON-NLS-1$
@@ -120,13 +122,19 @@ public class RemoteJMeterEngineImpl exte
*/
public void configure(HashTree testTree, String host, File jmxBase) throws
RemoteException {
log.info("Creating JMeter engine on host "+host+" base '"+jmxBase+"'");
+ if (backingEngine != null && backingEngine.isActive()) {
+ log.warn("Engine is busy - cannot create JMeter engine");
+ throw new RemoteException("Engine is busy - please try later");
+ }
+ ownerThread = Thread.currentThread();
backingEngine = new StandardJMeterEngine(host);
backingEngine.configure(testTree);
FileServer.getFileServer().setBase(jmxBase);
}
public void runTest() throws RemoteException, JMeterEngineException {
- log.info("running test");
+ log.info("Running test");
+ checkOwner("runTest");
backingEngine.runTest();
}
@@ -151,6 +159,15 @@ public class RemoteJMeterEngineImpl exte
}
public void setProperties(Properties p) throws RemoteException {
+ checkOwner("setProperties");
backingEngine.setProperties(p);
}
+
+ private void checkOwner(String methodName) throws RemoteException {
+ if (ownerThread != Thread.currentThread()){
+ String msg = "The engine is not owned by this thread - cannot call
"+methodName;
+ log.warn(msg);
+ throw new RemoteException(msg);
+ }
+ }
}
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=1066684&r1=1066683&r2=1066684&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
Wed Feb 2 23:10:06 2011
@@ -99,6 +99,9 @@ public class StandardJMeterEngine implem
/** Flag to show whether test is running. Set to false to stop creating
more threads. */
private volatile boolean running = false;
+ /** Flag to show whether engine is active. Set to false at end of test. */
+ private volatile boolean active = false;
+
/** Thread Groups run sequentially */
private volatile boolean serialized = false;
@@ -168,6 +171,7 @@ public class StandardJMeterEngine implem
}
public void configure(HashTree testTree) {
+ active = true;
test = testTree;
}
@@ -293,6 +297,7 @@ public class StandardJMeterEngine implem
exit();
}
}
+ active=false;
}
private ListedHashTree cloneTree(ListedHashTree tree) {
@@ -639,4 +644,8 @@ public class StandardJMeterEngine implem
log.info("Applying properties "+p);
JMeterUtils.getJMeterProperties().putAll(p);
}
+
+ public boolean isActive() {
+ return active;
+ }
}
Modified: jakarta/jmeter/trunk/xdocs/changes.xml
URL:
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/xdocs/changes.xml?rev=1066684&r1=1066683&r2=1066684&view=diff
==============================================================================
--- jakarta/jmeter/trunk/xdocs/changes.xml (original)
+++ jakarta/jmeter/trunk/xdocs/changes.xml Wed Feb 2 23:10:06 2011
@@ -192,6 +192,7 @@ Fixed RMI startup to provide location of
<li>Bug 50490 - Setup and Post Thread Group enhancements for better test
flow.</li>
<li>All BeansShell test elements now have the script variables "prev" and
"Label" defined.</li>
<li>Bug 50708 - Classpath jar order in NewDriver not alphabetically</li>
+<li>Bug 50659 - JMeter server does not support concurrent tests - prevent
client from starting another</li>
</ul>
<h2>Non-functional changes</h2>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]