This is an automated email from the ASF dual-hosted git repository. markt pushed a commit to branch 9.0.x in repository https://gitbox.apache.org/repos/asf/tomcat.git
commit 4edd0b66fd81bf0eae942c7c4277f8ee48bad2da Author: Mark Thomas <ma...@apache.org> AuthorDate: Fri Jan 22 19:52:04 2021 +0000 Refactor marking app as serviced when using check Sixth in a series of patches aimed at allowing parallel requests to the Manager application to deploy different applications in parallel rather than using a sync block to deploy them serially. Check triggers HostConfig to redploy the application if it has been updated. check calls tryAddServiced to avoid conflicts so existing calls to check can't be made from inside a tryAddServiced ... removeServiced block. --- java/org/apache/catalina/ha/deploy/FarmWarDeployer.java | 8 +++----- java/org/apache/catalina/manager/HTMLManagerServlet.java | 4 ++-- java/org/apache/catalina/manager/ManagerServlet.java | 16 ++++++++-------- java/org/apache/catalina/startup/HostConfig.java | 15 ++++++++++----- 4 files changed, 23 insertions(+), 20 deletions(-) diff --git a/java/org/apache/catalina/ha/deploy/FarmWarDeployer.java b/java/org/apache/catalina/ha/deploy/FarmWarDeployer.java index 09f075b..4912b7f 100644 --- a/java/org/apache/catalina/ha/deploy/FarmWarDeployer.java +++ b/java/org/apache/catalina/ha/deploy/FarmWarDeployer.java @@ -236,10 +236,10 @@ public class FarmWarDeployer extends ClusterListener "farmWarDeployer.renameFail", factory.getFile(), deployable)); } - check(contextName); } finally { removeServiced(contextName); } + check(contextName); if (log.isDebugEnabled()) log.debug(sm.getString( "farmWarDeployer.deployEnd", @@ -424,6 +424,7 @@ public class FarmWarDeployer extends ClusterListener } finally { removeServiced(contextName); } + check(contextName); } else log.error(sm.getString("farmWarDeployer.removeFailRemote", contextName)); @@ -458,10 +459,10 @@ public class FarmWarDeployer extends ClusterListener if (tryAddServiced(cn.getName())) { try { copy(newWar, deployWar); - check(cn.getName()); } finally { removeServiced(cn.getName()); } + check(cn.getName()); } else { log.error(sm.getString("farmWarDeployer.servicingDeploy", cn.getName(), deployWar.getName())); @@ -519,10 +520,7 @@ public class FarmWarDeployer extends ClusterListener log.error(sm.getString("farmWarDeployer.deleteFail", xml)); } } - // Perform new deployment and remove internal HostConfig state - check(contextName); } - } /** diff --git a/java/org/apache/catalina/manager/HTMLManagerServlet.java b/java/org/apache/catalina/manager/HTMLManagerServlet.java index b0aea34..ca816a5 100644 --- a/java/org/apache/catalina/manager/HTMLManagerServlet.java +++ b/java/org/apache/catalina/manager/HTMLManagerServlet.java @@ -287,11 +287,11 @@ public final class HTMLManagerServlet extends ManagerServlet { if (tryAddServiced(name)) { try { warPart.write(file.getAbsolutePath()); - // Perform new deployment - check(name); } finally { removeServiced(name); } + // Perform new deployment + check(name); } else { message = smClient.getString("managerServlet.inService", name); } diff --git a/java/org/apache/catalina/manager/ManagerServlet.java b/java/org/apache/catalina/manager/ManagerServlet.java index ca028b1..fe9f331 100644 --- a/java/org/apache/catalina/manager/ManagerServlet.java +++ b/java/org/apache/catalina/manager/ManagerServlet.java @@ -845,11 +845,11 @@ public class ManagerServlet extends HttpServlet implements ContainerServlet { // Copy WAR to the host's appBase ExpandWar.copy(uploadedWar, deployedWar); } - // Perform new deployment - check(name); } finally { removeServiced(name); } + // Perform new deployment + check(name); } else { writer.println(smClient.getString("managerServlet.inService", displayPath)); } @@ -902,11 +902,11 @@ public class ManagerServlet extends HttpServlet implements ContainerServlet { return; } ExpandWar.copy(localWar, deployedWar); - // Perform new deployment - check(name); } finally { removeServiced(name); } + // Perform new deployment + check(name); } else { writer.println(smClient.getString("managerServlet.inService", displayPath)); } @@ -1016,11 +1016,11 @@ public class ManagerServlet extends HttpServlet implements ContainerServlet { } ExpandWar.copy(new File(war), localWar); } - // Perform new deployment - check(name); } finally { removeServiced(name); } + // Perform new deployment + check(name); } else { writer.println(smClient.getString("managerServlet.inService", displayPath)); } @@ -1541,11 +1541,11 @@ public class ManagerServlet extends HttpServlet implements ContainerServlet { "managerServlet.deleteFail", xml)); return; } - // Perform new deployment - check(name); } finally { removeServiced(name); } + // Perform new deployment + check(name); } else { writer.println(smClient.getString("managerServlet.inService", displayPath)); } diff --git a/java/org/apache/catalina/startup/HostConfig.java b/java/org/apache/catalina/startup/HostConfig.java index 2853199..2079117 100644 --- a/java/org/apache/catalina/startup/HostConfig.java +++ b/java/org/apache/catalina/startup/HostConfig.java @@ -1667,17 +1667,22 @@ public class HostConfig implements LifecycleListener { * it as necessary. This method is for use with functionality such as * management web applications that upload new/updated web applications and * need to trigger the appropriate action to deploy them. This method - * assumes that the web application is currently marked as serviced and that - * any uploading/updating has been completed before this method is called. - * Any action taken as a result of the checks will complete before this - * method returns. + * assumes that any uploading/updating has been completed before this method + * is called. Any action taken as a result of the checks will complete + * before this method returns. * * @param name The name of the web application to check */ public void check(String name) { DeployedApplication app = deployed.get(name); if (app != null) { - checkResources(app, true); + if (tryAddServiced(app.name)) { + try { + checkResources(app, true); + } finally { + removeServiced(app.name); + } + } } deployApps(name); } --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org