This is an automated email from the ASF dual-hosted git repository. ggregory pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/commons-exec.git
The following commit(s) were added to refs/heads/master by this push: new 6eda6204 Add Watchdog.Watchdog(Duration). 6eda6204 is described below commit 6eda62041ab41635ba5700396516b82256d9574c Author: Gary Gregory <garydgreg...@gmail.com> AuthorDate: Thu Dec 14 12:33:26 2023 -0500 Add Watchdog.Watchdog(Duration). - Add ExecuteWatchdog.ExecuteWatchdog(Duration) - Deprecate ExecuteWatchdog.ExecuteWatchdog(long) - Deprecate Watchdog.Watchdog(long) --- src/changes/changes.xml | 4 ++ .../org/apache/commons/exec/ExecuteWatchdog.java | 50 ++++++++++++++-------- .../java/org/apache/commons/exec/Watchdog.java | 21 +++++++++ 3 files changed, 58 insertions(+), 17 deletions(-) diff --git a/src/changes/changes.xml b/src/changes/changes.xml index 66642f28..f52554ae 100644 --- a/src/changes/changes.xml +++ b/src/changes/changes.xml @@ -29,6 +29,8 @@ <!-- ADD --> <action dev="ggregory" type="add" due-to="Gary Gregory">Add ShutdownHookProcessDestroyer.isEmpty().</action> <action dev="ggregory" type="add" due-to="Gary Gregory">Add DefaultExecuteResultHandler.waitFor(Duration).</action> + <action dev="ggregory" type="add" due-to="Gary Gregory">Add Watchdog.Watchdog(Duration).</action> + <action dev="ggregory" type="add" due-to="Gary Gregory">Add ExecuteWatchdog.ExecuteWatchdog(Duration).</action> <!-- FIX --> <action issue="EXEC-105" type="fix" date="2023-07-16" due-to="Dimitrios Efthymiou"> Fix code snippet in tutorial page. @@ -50,6 +52,8 @@ </action> <!-- REMOVE --> <action dev="ggregory" type="remove" due-to="Gary Gregory">Deprecate DefaultExecuteResultHandler.waitFor(long).</action> + <action dev="ggregory" type="remove" due-to="Gary Gregory">Deprecate ExecuteWatchdog.ExecuteWatchdog(long).</action> + <action dev="ggregory" type="remove" due-to="Gary Gregory">Deprecate Watchdog.Watchdog(long).</action> <!-- UPDATE --> <action dev="ggregory" type="update" due-to="Gary Gregory, Dependabot"> Bump github actions #52. diff --git a/src/main/java/org/apache/commons/exec/ExecuteWatchdog.java b/src/main/java/org/apache/commons/exec/ExecuteWatchdog.java index 9de4e84d..9792b872 100644 --- a/src/main/java/org/apache/commons/exec/ExecuteWatchdog.java +++ b/src/main/java/org/apache/commons/exec/ExecuteWatchdog.java @@ -17,6 +17,7 @@ package org.apache.commons.exec; +import java.time.Duration; import java.util.Objects; import org.apache.commons.exec.util.DebugUtils; @@ -49,6 +50,9 @@ public class ExecuteWatchdog implements TimeoutObserver { /** The marker for an infinite timeout */ public static final long INFINITE_TIMEOUT = -1; + /** The marker for an infinite timeout */ + public static final Duration INFINITE_TIMEOUT_DURATION = Duration.ofMillis(INFINITE_TIMEOUT); + /** The process to execute and watch for duration. */ private Process process; @@ -73,12 +77,13 @@ public class ExecuteWatchdog implements TimeoutObserver { /** * Creates a new watchdog with a given timeout. * - * @param timeout the timeout for the process in milliseconds. It must be greater than 0 or 'INFINITE_TIMEOUT' + * @param timeout the timeout for the process in milliseconds. It must be greater than 0 or {@code INFINITE_TIMEOUT_DURATION}. + * @since 1.4.0 */ - public ExecuteWatchdog(final long timeout) { + public ExecuteWatchdog(final Duration timeout) { this.killedProcess = false; this.watch = false; - this.hasWatchdog = timeout != INFINITE_TIMEOUT; + this.hasWatchdog = !INFINITE_TIMEOUT_DURATION.equals(timeout); this.processStarted = false; if (this.hasWatchdog) { this.watchdog = new Watchdog(timeout); @@ -88,6 +93,17 @@ public class ExecuteWatchdog implements TimeoutObserver { } } + /** + * Creates a new watchdog with a given timeout. + * + * @param timeoutMillis the timeout for the process in milliseconds. It must be greater than 0 or {@code INFINITE_TIMEOUT}. + * @deprecated Use {@link #ExecuteWatchdog(Duration)}. + */ + @Deprecated + public ExecuteWatchdog(final long timeoutMillis) { + this(Duration.ofMillis(timeoutMillis)); + } + /** * This method will rethrow the exception that was possibly caught during the run of the process. It will only remains valid once the process has been * terminated either by 'error', timeout or manual intervention. Information will be discarded once a new process is ran. @@ -113,8 +129,8 @@ public class ExecuteWatchdog implements TimeoutObserver { */ public synchronized void destroyProcess() { ensureStarted(); - this.timeoutOccured(null); - this.stop(); + timeoutOccured(null); + stop(); } /** @@ -124,7 +140,7 @@ public class ExecuteWatchdog implements TimeoutObserver { private void ensureStarted() { while (!processStarted && caught == null) { try { - this.wait(); + wait(); } catch (final InterruptedException e) { throw new IllegalStateException(e.getMessage(), e); } @@ -138,9 +154,9 @@ public class ExecuteWatchdog implements TimeoutObserver { * */ public synchronized void failedToStart(final Exception e) { - this.processStarted = true; - this.caught = e; - this.notifyAll(); + processStarted = true; + caught = e; + notifyAll(); } /** @@ -174,16 +190,16 @@ public class ExecuteWatchdog implements TimeoutObserver { */ public synchronized void start(final Process processToMonitor) { Objects.requireNonNull(processToMonitor, "processToMonitor"); - if (this.process != null) { + if (process != null) { throw new IllegalStateException("Already running."); } - this.caught = null; - this.killedProcess = false; - this.watch = true; - this.process = processToMonitor; - this.processStarted = true; - this.notifyAll(); - if (this.hasWatchdog) { + caught = null; + killedProcess = false; + watch = true; + process = processToMonitor; + processStarted = true; + notifyAll(); + if (hasWatchdog) { watchdog.start(); } } diff --git a/src/main/java/org/apache/commons/exec/Watchdog.java b/src/main/java/org/apache/commons/exec/Watchdog.java index dc892307..95f4e289 100644 --- a/src/main/java/org/apache/commons/exec/Watchdog.java +++ b/src/main/java/org/apache/commons/exec/Watchdog.java @@ -17,6 +17,7 @@ package org.apache.commons.exec; +import java.time.Duration; import java.util.Enumeration; import java.util.Vector; @@ -33,6 +34,26 @@ public class Watchdog implements Runnable { private boolean stopped; + /** + * Constructs a new instance. + * + * @param timeout the timeout duration. + * @since 1.4.0 + */ + public Watchdog(final Duration timeout) { + if (timeout.isNegative() || Duration.ZERO.equals(timeout)) { + throw new IllegalArgumentException("timeout must not be less than 1."); + } + this.timeoutMillis = timeout.toMillis(); + } + + /** + * Constructs a new instance. + * + * @param timeoutMillis the timeout duration. + * @deprecated Use {@link #Watchdog(Duration)}. + */ + @Deprecated public Watchdog(final long timeoutMillis) { if (timeoutMillis < 1) { throw new IllegalArgumentException("timeout must not be less than 1.");