This is an automated email from the ASF dual-hosted git repository. rmaucher pushed a commit to branch 10.1.x in repository https://gitbox.apache.org/repos/asf/tomcat.git
commit d992bce1d7ac3d3eb5aba6cbea2f19079db2af21 Author: opencode <[email protected]> AuthorDate: Tue Sep 29 18:28:45 2026 +0200 Add configurable timeout for HTTP connections used by the Manager Ant tasks --- .../apache/catalina/ant/AbstractCatalinaTask.java | 34 ++++++++++++++++++++++ java/org/apache/catalina/ant/DeployTask.java | 4 +++ 2 files changed, 38 insertions(+) diff --git a/java/org/apache/catalina/ant/AbstractCatalinaTask.java b/java/org/apache/catalina/ant/AbstractCatalinaTask.java index 3d05fb311d..aa1e8c6180 100644 --- a/java/org/apache/catalina/ant/AbstractCatalinaTask.java +++ b/java/org/apache/catalina/ant/AbstractCatalinaTask.java @@ -96,6 +96,32 @@ public abstract class AbstractCatalinaTask extends BaseRedirectorHelperTask { } + /** + * The timeout, in seconds, used when establishing a connection to the server and when reading data from it. The + * default value of zero means no timeout, in which case an unresponsive server may cause the build to block + * indefinitely. + */ + protected int timeout = 0; + + /** + * Returns the connection and read timeout, in seconds. + * + * @return the timeout in seconds; zero means no timeout + */ + public int getTimeout() { + return this.timeout; + } + + /** + * Sets the connection and read timeout, in seconds. + * + * @param timeout the timeout in seconds; zero (the default) means no timeout + */ + public void setTimeout(int timeout) { + this.timeout = timeout; + } + + /** * The URL of the <code>Manager</code> application to be used. */ @@ -227,6 +253,10 @@ public abstract class AbstractCatalinaTask extends BaseRedirectorHelperTask { hconn.setAllowUserInteraction(false); hconn.setDoInput(true); hconn.setUseCaches(false); + if (timeout > 0) { + hconn.setConnectTimeout(timeout * 1000); + hconn.setReadTimeout(timeout * 1000); + } // Set up authorization with our credentials Authenticator authenticator = new TaskAuthenticator(username, password); @@ -346,6 +376,10 @@ public abstract class AbstractCatalinaTask extends BaseRedirectorHelperTask { hconn.setAllowUserInteraction(false); hconn.setDoInput(true); hconn.setUseCaches(false); + if (timeout > 0) { + hconn.setConnectTimeout(timeout * 1000); + hconn.setReadTimeout(timeout * 1000); + } hconn.setDoOutput(false); hconn.setAuthenticator(authenticator); hconn.setRequestMethod(Method.OPTIONS); diff --git a/java/org/apache/catalina/ant/DeployTask.java b/java/org/apache/catalina/ant/DeployTask.java index 9b26a31a7f..6595b20d9e 100644 --- a/java/org/apache/catalina/ant/DeployTask.java +++ b/java/org/apache/catalina/ant/DeployTask.java @@ -188,6 +188,10 @@ public class DeployTask extends AbstractCatalinaCommandTask { try { URI uri = new URI(war); URLConnection conn = uri.toURL().openConnection(); + if (timeout > 0) { + conn.setConnectTimeout(timeout * 1000); + conn.setReadTimeout(timeout * 1000); + } contentLength = conn.getContentLengthLong(); stream = new BufferedInputStream(conn.getInputStream(), 1024); } catch (IOException | URISyntaxException e) { --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
