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]

Reply via email to