jmeter-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From sebb <seb...@gmail.com>
Subject Re: svn commit: r1517293 - in /jmeter/trunk: bin/ src/core/org/apache/jmeter/resources/ src/core/org/apache/jmeter/testelement/ src/jorphan/org/apache/jorphan/exec/ src/protocol/native/org/apache/jmeter/protocol/system/ src/protocol/native/org/apache/jmete...
Date Tue, 27 Aug 2013 12:54:37 GMT
On 25 August 2013 15:11,  <pmouawad@apache.org> wrote:
> Author: pmouawad
> Date: Sun Aug 25 14:11:05 2013
> New Revision: 1517293
>
> URL: http://svn.apache.org/r1517293
> Log:
> Bug 55403 - Enhancement to OS sampler: Support for timeout
> Bugzilla Id: 55403
>
> Modified:
>     jmeter/trunk/bin/jmeter.properties
>     jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties
>     jmeter/trunk/src/core/org/apache/jmeter/resources/messages_fr.properties
>     jmeter/trunk/src/core/org/apache/jmeter/testelement/AbstractTestElement.java
>     jmeter/trunk/src/core/org/apache/jmeter/testelement/TestElement.java
>     jmeter/trunk/src/jorphan/org/apache/jorphan/exec/SystemCommand.java
>     jmeter/trunk/src/protocol/native/org/apache/jmeter/protocol/system/NativeCommand.java
>     jmeter/trunk/src/protocol/native/org/apache/jmeter/protocol/system/SystemSampler.java
>     jmeter/trunk/src/protocol/native/org/apache/jmeter/protocol/system/gui/SystemSamplerGui.java
>     jmeter/trunk/xdocs/changes.xml
>
> Modified: jmeter/trunk/bin/jmeter.properties
> URL: http://svn.apache.org/viewvc/jmeter/trunk/bin/jmeter.properties?rev=1517293&r1=1517292&r2=1517293&view=diff
> ==============================================================================
> --- jmeter/trunk/bin/jmeter.properties (original)
> +++ jmeter/trunk/bin/jmeter.properties Sun Aug 25 14:11:05 2013
> @@ -626,6 +626,12 @@ wmlParser.types=text/vnd.wap.wml
>  # monitor.buffer.size=800
>
>  #---------------------------------------------------------------------------
> +# OS Process Sampler configuration
> +#---------------------------------------------------------------------------
> +# Polling to see if process has finished its work, used when a timeout is configured
on sampler
> +#os_sampler.poll_for_timeout=100
> +
> +#---------------------------------------------------------------------------
>  # TCP Sampler configuration
>  #---------------------------------------------------------------------------
>
>
> Modified: jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties
> URL: http://svn.apache.org/viewvc/jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties?rev=1517293&r1=1517292&r2=1517293&view=diff
> ==============================================================================
> --- jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties (original)
> +++ jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties Sun Aug 25
14:11:05 2013
> @@ -1090,6 +1090,8 @@ throughput_control_title=Throughput Cont
>  throughput_control_tplabel=Throughput
>  time_format=Format string for SimpleDateFormat (optional)
>  timelim=Time limit
> +timeout_config_box_title=Timeout configuration
> +timeout_title=Timeout (ms)
>  toggle=Toggle
>  toolbar_icon_set_not_found=The file description of toolbar icon set is not found. See
logs.
>  total_threads_tooltip=Total number of threads to run
>
> Modified: jmeter/trunk/src/core/org/apache/jmeter/resources/messages_fr.properties
> URL: http://svn.apache.org/viewvc/jmeter/trunk/src/core/org/apache/jmeter/resources/messages_fr.properties?rev=1517293&r1=1517292&r2=1517293&view=diff
> ==============================================================================
> --- jmeter/trunk/src/core/org/apache/jmeter/resources/messages_fr.properties (original)
> +++ jmeter/trunk/src/core/org/apache/jmeter/resources/messages_fr.properties Sun Aug
25 14:11:05 2013
> @@ -1083,6 +1083,8 @@ throughput_control_title=Contr\u00F4leur
>  throughput_control_tplabel=D\u00E9bit \:
>  time_format=Chaine de formatage sur le mod\u00E8le SimpleDateFormat (optionnel)
>  timelim=Limiter le temps de r\u00E9ponses \u00E0 (ms)
> +timeout_config_box_title=Configuration du d\u00E9lai d'expiration
> +timeout_title=D\u00E9lai expiration (ms)
>  toggle=Permuter
>  toolbar_icon_set_not_found=Le fichier de description des ic\u00F4nes de la barre d'outils
n'est pas trouv\u00E9. Voir les journaux.
>  total_threads_tooltip=Nombre total d'Unit\u00E9s \u00E0 lancer
>
> Modified: jmeter/trunk/src/core/org/apache/jmeter/testelement/AbstractTestElement.java
> URL: http://svn.apache.org/viewvc/jmeter/trunk/src/core/org/apache/jmeter/testelement/AbstractTestElement.java?rev=1517293&r1=1517292&r2=1517293&view=diff
> ==============================================================================
> --- jmeter/trunk/src/core/org/apache/jmeter/testelement/AbstractTestElement.java (original)
> +++ jmeter/trunk/src/core/org/apache/jmeter/testelement/AbstractTestElement.java Sun
Aug 25 14:11:05 2013
> @@ -33,6 +33,7 @@ import org.apache.jmeter.testelement.pro
>  import org.apache.jmeter.testelement.property.CollectionProperty;
>  import org.apache.jmeter.testelement.property.IntegerProperty;
>  import org.apache.jmeter.testelement.property.JMeterProperty;
> +import org.apache.jmeter.testelement.property.LongProperty;
>  import org.apache.jmeter.testelement.property.MapProperty;
>  import org.apache.jmeter.testelement.property.MultiProperty;
>  import org.apache.jmeter.testelement.property.NullProperty;
> @@ -406,7 +407,7 @@ public abstract class AbstractTestElemen
>      }
>
>      /**
> -     * Create a boolean property - but only if it is not the default.
> +     * Create an int property - but only if it is not the default.
>       * This is intended for use when adding new properties to JMeter
>       * so that JMX files are not expanded unnecessarily.
>       *
> @@ -424,6 +425,31 @@ public abstract class AbstractTestElemen
>              setProperty(new IntegerProperty(name, value));
>          }
>      }
> +
> +    @Override
> +    public void setProperty(String name, long value) {
> +        setProperty(new LongProperty(name, value));
> +    }
> +
> +    /**
> +     * Create a long property - but only if it is not the default.
> +     * This is intended for use when adding new properties to JMeter
> +     * so that JMX files are not expanded unnecessarily.
> +     *
> +     * N.B. - must agree with the default applied when reading the property.
> +     *
> +     * @param name property name
> +     * @param value current value
> +     * @param dflt default
> +     */
> +    @Override
> +    public void setProperty(String name, long value, long dflt) {
> +        if (value == dflt) {
> +            removeProperty(name);
> +        } else {
> +            setProperty(new LongProperty(name, value));
> +        }
> +    }
>
>      @Override
>      public PropertyIterator propertyIterator() {
>
> Modified: jmeter/trunk/src/core/org/apache/jmeter/testelement/TestElement.java
> URL: http://svn.apache.org/viewvc/jmeter/trunk/src/core/org/apache/jmeter/testelement/TestElement.java?rev=1517293&r1=1517292&r2=1517293&view=diff
> ==============================================================================
> --- jmeter/trunk/src/core/org/apache/jmeter/testelement/TestElement.java (original)
> +++ jmeter/trunk/src/core/org/apache/jmeter/testelement/TestElement.java Sun Aug 25 14:11:05
2013
> @@ -56,6 +56,10 @@ public interface TestElement extends Clo
>
>      void setProperty(String key, int value, int dflt);
>
> +    void setProperty(String name, long value);
> +
> +    void setProperty(String name, long value, long dflt);
> +
>      /**
>       * Check if ENABLED property is present and true ; defaults to true
>       *

Ideally it would have been better to add the changes to
TestElement/ATE in a separate commit, as they are generic.

> Modified: jmeter/trunk/src/jorphan/org/apache/jorphan/exec/SystemCommand.java
> URL: http://svn.apache.org/viewvc/jmeter/trunk/src/jorphan/org/apache/jorphan/exec/SystemCommand.java?rev=1517293&r1=1517292&r2=1517293&view=diff
> ==============================================================================
> --- jmeter/trunk/src/jorphan/org/apache/jorphan/exec/SystemCommand.java (original)
> +++ jmeter/trunk/src/jorphan/org/apache/jorphan/exec/SystemCommand.java Sun Aug 25 14:11:05
2013
> @@ -26,6 +26,7 @@ import java.util.Collections;
>  import java.util.List;
>  import java.util.Map;
>
> +import org.apache.jmeter.util.JMeterUtils;
>  import org.apache.jorphan.util.JOrphanUtils;
>
>  /**
> @@ -33,6 +34,7 @@ import org.apache.jorphan.util.JOrphanUt
>   */
>  public class SystemCommand {
>
> +    private static final int POLL_INTERVAL = JMeterUtils.getPropDefault("os_sampler.poll_for_timeout",
100);
>      private StreamGobbler outputGobbler;
>      private final File directory;
>      private final Map<String, String> env;
> @@ -40,25 +42,28 @@ public class SystemCommand {
>      private final String stdin;
>      private final String stdout;
>      private final String stderr;
> +    private final long timeoutMillis;
>
>      /**
>       * @param env Environment variables appended to environment (may be null)
>       * @param directory File working directory (may be null)
>       */
>      public SystemCommand(File directory, Map<String, String> env) {
> -        this(directory, env, null, null, null);
> +        this(directory, 0L, env, null, null, null);
>      }
>
>      /**
>       *
>       * @param env Environment variables appended to environment (may be null)
>       * @param directory File working directory (may be null)
> +     * @param timeoutMillis timeout in Milliseconds
>       * @param stdin File name that will contain data to be input to process (may be
null)
>       * @param stdout File name that will contain out stream (may be null)
>       * @param stderr File name that will contain err stream (may be null)
>       */
> -    public SystemCommand(File directory, Map<String, String> env, String stdin,
String stdout, String stderr) {
> +    public SystemCommand(File directory, long timeoutMillis, Map<String, String>
env, String stdin, String stdout, String stderr) {
>          super();
> +        this.timeoutMillis = timeoutMillis;
>          this.directory = directory;
>          this.env = env;
>          this.stdin = JOrphanUtils.nullifyIfEmptyTrimmed(stdin);
> @@ -108,7 +113,7 @@ public class SystemCommand {
>              } else {
>                  proc.getOutputStream().close(); // ensure the application does not hang
if it requests input
>              }
> -            int exitVal = proc.waitFor();
> +            int exitVal = waitForEndWithTimeout(proc, timeoutMillis);
>
>              if (outputGobbler != null) {
>                  outputGobbler.join();
> @@ -139,6 +144,44 @@ public class SystemCommand {
>      }
>
>      /**
> +     * Wait for end of proc execution or timeout if timeoutInMillis is greater than
0
> +     * @param proc Process
> +     * @param timeoutInMillis long timeout in ms
> +     * @return proc exit value
> +     * @throws InterruptedException
> +     */
> +    private int waitForEndWithTimeout(Process proc, long timeoutInMillis) throws InterruptedException
{
> +        if (timeoutInMillis <= 0L) {
> +            return proc.waitFor();
> +        } else {
> +            long now = System.currentTimeMillis();
> +            long finish = now + timeoutInMillis;
> +            while (isAlive(proc) && (System.currentTimeMillis() < finish))
{
> +                Thread.sleep(POLL_INTERVAL);
> +            }
> +
> +            if (isAlive(proc)) {

This will leave the process running. Is that intentional?

If so, it needs to be documented.

> +                throw new InterruptedException( "Process timeout out after " + timeoutInMillis
+ " milliseconds" );
> +            }
> +            return proc.exitValue();
> +        }
> +    }
> +
> +    /**
> +     *
> +     * @param p Process
> +     * @return true if p is still running
> +     */
> +    public static boolean isAlive(Process p) {
> +        try {
> +            p.exitValue();
> +            return false;
> +        } catch (IllegalThreadStateException e) {
> +            return true;
> +        }
> +    }
> +
> +    /**
>       * @return Out/Err stream contents
>       */
>      public String getOutResult() {
>
> Modified: jmeter/trunk/src/protocol/native/org/apache/jmeter/protocol/system/NativeCommand.java
> URL: http://svn.apache.org/viewvc/jmeter/trunk/src/protocol/native/org/apache/jmeter/protocol/system/NativeCommand.java?rev=1517293&r1=1517292&r2=1517293&view=diff
> ==============================================================================
> --- jmeter/trunk/src/protocol/native/org/apache/jmeter/protocol/system/NativeCommand.java
(original)
> +++ jmeter/trunk/src/protocol/native/org/apache/jmeter/protocol/system/NativeCommand.java
Sun Aug 25 14:11:05 2013
> @@ -45,7 +45,7 @@ public class NativeCommand extends  org.
>       * @param stderr File name that will contain err stream
>       */
>      public NativeCommand(File directory, Map<String, String> env, String stdin,
String stdout, String stderr) {
> -        super(directory, env, stdin, stdout, stderr);
> +        super(directory, 0L, env, stdin, stdout, stderr);
>      }
>
>  }
> \ No newline at end of file
>
> Modified: jmeter/trunk/src/protocol/native/org/apache/jmeter/protocol/system/SystemSampler.java
> URL: http://svn.apache.org/viewvc/jmeter/trunk/src/protocol/native/org/apache/jmeter/protocol/system/SystemSampler.java?rev=1517293&r1=1517292&r2=1517293&view=diff
> ==============================================================================
> --- jmeter/trunk/src/protocol/native/org/apache/jmeter/protocol/system/SystemSampler.java
(original)
> +++ jmeter/trunk/src/protocol/native/org/apache/jmeter/protocol/system/SystemSampler.java
Sun Aug 25 14:11:05 2013
> @@ -67,6 +67,8 @@ public class SystemSampler extends Abstr
>
>      private static final String STDIN = "SystemSampler.stdin";
>
> +    private static final String TIMEOUT = "SystemSampler.timeout";
> +
>      // - JMX names
>
>      /**
> @@ -144,7 +146,7 @@ public class SystemSampler extends Abstr
>                  "\nEnvironment:"+env+
>                  "\nExecuting:" + cmdLine.toString());
>
> -        SystemCommand nativeCommand = new SystemCommand(directory, env, getStdin(),
getStdout(), getStderr());
> +        SystemCommand nativeCommand = new SystemCommand(directory, getTimeout(), env,
getStdin(), getStdout(), getStderr());
>
>          try {
>              results.sampleStart();
> @@ -309,4 +311,11 @@ public class SystemSampler extends Abstr
>          setProperty(STDIN, filename, "");
>      }
>
> +    public long getTimeout() {
> +        return getPropertyAsLong(TIMEOUT, 0L);
> +    }
> +
> +    public void setTimout(long timeoutMs) {
> +        setProperty(TIMEOUT, timeoutMs, 0L);
> +    }
>  }
> \ No newline at end of file
>
> Modified: jmeter/trunk/src/protocol/native/org/apache/jmeter/protocol/system/gui/SystemSamplerGui.java
> URL: http://svn.apache.org/viewvc/jmeter/trunk/src/protocol/native/org/apache/jmeter/protocol/system/gui/SystemSamplerGui.java?rev=1517293&r1=1517292&r2=1517293&view=diff
> ==============================================================================
> --- jmeter/trunk/src/protocol/native/org/apache/jmeter/protocol/system/gui/SystemSamplerGui.java
(original)
> +++ jmeter/trunk/src/protocol/native/org/apache/jmeter/protocol/system/gui/SystemSamplerGui.java
Sun Aug 25 14:11:05 2013
> @@ -40,12 +40,15 @@ import org.apache.jmeter.testelement.Tes
>  import org.apache.jmeter.util.JMeterUtils;
>  import org.apache.jorphan.gui.JLabeledTextField;
>  import org.apache.jorphan.gui.ObjectTableModel;
> +import org.apache.jorphan.logging.LoggingManager;
>  import org.apache.jorphan.reflect.Functor;
> +import org.apache.log.Logger;
>
>  /**
>   * GUI for {@link SystemSampler}
>   */
>  public class SystemSamplerGui extends AbstractSamplerGui implements ItemListener {
> +    private static final Logger log = LoggingManager.getLoggerForClass();
>
>      /**
>       *
> @@ -59,6 +62,7 @@ public class SystemSamplerGui extends Ab
>      private final FilePanelEntry stderr = new FilePanelEntry(JMeterUtils.getResString("system_sampler_stderr"));
// $NON-NLS-1$
>      private JLabeledTextField directory;
>      private JLabeledTextField command;
> +    private JLabeledTextField timeout;
>      private ArgumentsPanel argsPanel;
>      private ArgumentsPanel envPanel;
>
> @@ -92,7 +96,8 @@ public class SystemSamplerGui extends Ab
>
>          JPanel streamsCodePane = new JPanel(new BorderLayout());
>          streamsCodePane.add(makeStreamsPanel(), BorderLayout.NORTH);
> -        streamsCodePane.add(makeReturnCodePanel(), BorderLayout.SOUTH);
> +        streamsCodePane.add(makeReturnCodePanel(), BorderLayout.CENTER);
> +        streamsCodePane.add(makeTimeoutPanel(), BorderLayout.SOUTH);
>          add(streamsCodePane, BorderLayout.SOUTH);
>      }
>
> @@ -125,6 +130,13 @@ public class SystemSamplerGui extends Ab
>          systemSampler.setStdin(stdin.getFilename());
>          systemSampler.setStdout(stdout.getFilename());
>          systemSampler.setStderr(stderr.getFilename());
> +        if(!StringUtils.isEmpty(timeout.getText())) {
> +            try {
> +                systemSampler.setTimout(Long.parseLong(timeout.getText()));
> +            } catch (NumberFormatException e) {
> +                log.error("Error parsing timeout field value:"+timeout.getText(), e);
> +            }
> +        }
>      }
>
>      /* Overrides AbstractJMeterGuiComponent.configure(TestElement) */
> @@ -165,6 +177,21 @@ public class SystemSamplerGui extends Ab
>      }
>
>      /**
> +     * @return JPanel timeout config
> +     */
> +    private JPanel makeTimeoutPanel() {
> +        JPanel panel = new JPanel();
> +        panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS));
> +        panel.setBorder(BorderFactory.createTitledBorder(
> +                BorderFactory.createEtchedBorder(),
> +                JMeterUtils.getResString("timeout_config_box_title"))); // $NON-NLS-1$
> +        timeout = new JLabeledTextField(JMeterUtils.getResString("timeout_title"));
// $NON-NLS-1$
> +        timeout.setSize(timeout.getSize().height, 30);
> +        panel.add(timeout);
> +        return panel;
> +    }
> +
> +    /**
>       * @return JPanel Command + directory
>       */
>      private JPanel makeCommandPanel() {
>
> Modified: jmeter/trunk/xdocs/changes.xml
> URL: http://svn.apache.org/viewvc/jmeter/trunk/xdocs/changes.xml?rev=1517293&r1=1517292&r2=1517293&view=diff
> ==============================================================================
> --- jmeter/trunk/xdocs/changes.xml (original)
> +++ jmeter/trunk/xdocs/changes.xml Sun Aug 25 14:11:05 2013
> @@ -73,6 +73,11 @@ citizen in JMeter, you can now test your
>  <figure width="906" height="313" image="changes/2.10/03_mongodb_script_alpha.png"></figure>
>  </p>
>
> +<h4>* Timeout has been added to OS Process Sampler</h4>
> +<p>
> +<figure width="540" height="600" image="changes/2.10/17_os_process_timeout.png"></figure>
> +</p>
> +
>  <h4>* Query timeout has been added to JDBC Request</h4>
>  <p>
>  <figure width="540" height="600" image="changes/2.10/04_jdbc_request_timeout.png"></figure>
> @@ -129,19 +134,22 @@ template into your Test Plan</h4>
>  <figure width="911" height="614" image="changes/2.10/11_color_syntax_jsr223_preprocessor.png"></figure>
>  </p>
>
> +<h4>* JMeter GUI can now be fully Internationalized, all remaining issues have
been fixed</h4>
> +<h5>Currently French has all its labels translated. Other languages are partly
translated, feel free to
> +contribute translations by reading <a href="localising/index.html">Localisation
(Translator's Guide)</a></h5>
> +
>  <h4>* Moving elements in Test plan has been improved in many ways</h4>
>  <h5>Drag and drop of elements in Test Plan tree is now much easier and possible
on multiple nodes</h5>
>  <p>
>  <figure width="894" height="236" image="changes/2.10/12_drap_n-drop_multiple.png"></figure>
>  </p>
>  <p>
> -Note that due to this <a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6560955">bug
in Java</a>,
> +<b>Note that due to this <a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6560955">bug
in Java</a>,
>  you cannot drop a node after last node. The workaround is to drop it before this last
node and then Drag and Drop the last node
> -before the one you just dropped.
> -<figure width="762" height="277" image="changes/2.10/XXX.png"></figure>
> +before the one you just dropped.</b>
>  </p>
>  <h5>New shortcuts have been added to move elements in the tree. </h5>
> -<p>(alt + Arrow Up) and (alt + Arrow Down) move the element within the parent
node.
> +<p>(alt + Arrow Up) and (alt + Arrow Down) move the element within the parent
node.<br/>
>  (alt + Arrow Left) and (alt + Arrow Right) move the element up and down in the tree
depth</p>
>
>  <h4>* Response Time Graph Y axis can now be scaled</h4>
> @@ -328,6 +336,7 @@ Previously the default was 1, which coul
>  <li><bugzilla>54759</bugzilla> - SSLPeerUnverifiedException using
HTTPS , property documented.</li>
>  <li><bugzilla>54896</bugzilla> - JUnit sampler gives only "failed
to create an instance of the class" message with constructor problems.</li>
>  <li><bugzilla>55084</bugzilla> - Add timeout support for JDBC Request.
Contributed by Mikhail Epikhin (epihin-m at yandex.ru)</li>
> +<li><bugzilla>55403</bugzilla> - Enhancement to OS sampler: Support
for timeout</li>
>  </ul>
>
>  <h3>Controllers</h3>
>
>

Mime
View raw message