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]>

Reply via email to