You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@jmeter.apache.org by sebb <se...@gmail.com> on 2013/08/27 14:54:37 UTC

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

On 25 August 2013 15:11,  <pm...@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>
>
>

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

Posted by sebb <se...@gmail.com>.
On 27 August 2013 20:39, Philippe Mouawad <ph...@gmail.com> wrote:
> Hello sebb,
> About your note:
> This will leave proc running.
>
> My answer was wrong, for me it works , as destroy will be called in
> finally, right ?
>

Ah - OK, that was not obvious from the patch.
I'll add a comment to the code to clarify.

>
> On Tue, Aug 27, 2013 at 3:00 PM, Philippe Mouawad <
> philippe.mouawad@gmail.com> wrote:
>
>>
>>
>>
>> On Tue, Aug 27, 2013 at 2:54 PM, sebb <se...@gmail.com> wrote:
>>
>>> On 25 August 2013 15:11,  <pm...@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.
>>>
>>
>> You're right.
>>
>>>
>>> > 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.
>>>
>>
>> You mean we should call proc.destroy().
>> Good catch although I remember there may be issues with destro on Windows
>>
>>>
>>> > +                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>
>>> >
>>> >
>>>
>>
>>
>>
>> --
>> Cordialement.
>> Philippe Mouawad.
>>
>>
>>
>
>
> --
> Cordialement.
> Philippe Mouawad.

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

Posted by Philippe Mouawad <ph...@gmail.com>.
Hello sebb,
About your note:
This will leave proc running.

My answer was wrong, for me it works , as destroy will be called in
finally, right ?



On Tue, Aug 27, 2013 at 3:00 PM, Philippe Mouawad <
philippe.mouawad@gmail.com> wrote:

>
>
>
> On Tue, Aug 27, 2013 at 2:54 PM, sebb <se...@gmail.com> wrote:
>
>> On 25 August 2013 15:11,  <pm...@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.
>>
>
> You're right.
>
>>
>> > 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.
>>
>
> You mean we should call proc.destroy().
> Good catch although I remember there may be issues with destro on Windows
>
>>
>> > +                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>
>> >
>> >
>>
>
>
>
> --
> Cordialement.
> Philippe Mouawad.
>
>
>


-- 
Cordialement.
Philippe Mouawad.

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

Posted by Philippe Mouawad <ph...@gmail.com>.
On Tue, Aug 27, 2013 at 2:54 PM, sebb <se...@gmail.com> wrote:

> On 25 August 2013 15:11,  <pm...@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.
>

You're right.

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

You mean we should call proc.destroy().
Good catch although I remember there may be issues with destro on Windows

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



-- 
Cordialement.
Philippe Mouawad.