This is an automated email from the ASF dual-hosted git repository.

markt pushed a commit to branch 8.5.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git

commit 978134282acd5da1bbdeb9eb09fff2e0c6479a68
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 1e21d20..6936438 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 1ff15fa..7e9b5dd 100644
--- a/java/org/apache/catalina/manager/HTMLManagerServlet.java
+++ b/java/org/apache/catalina/manager/HTMLManagerServlet.java
@@ -282,11 +282,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 f157da7..33678b8 100644
--- a/java/org/apache/catalina/manager/ManagerServlet.java
+++ b/java/org/apache/catalina/manager/ManagerServlet.java
@@ -813,11 +813,11 @@ public class ManagerServlet extends HttpServlet 
implements ContainerServlet {
                         // Copy WAR to the host's appBase
                         copy(uploadedWar, deployedWar);
                     }
-                    // Perform new deployment
-                    check(name);
                 } finally {
                     removeServiced(name);
                 }
+                // Perform new deployment
+                check(name);
             } else {
                 writer.println(smClient.getString("managerServlet.inService", 
displayPath));
             }
@@ -870,11 +870,11 @@ public class ManagerServlet extends HttpServlet 
implements ContainerServlet {
                         return;
                     }
                     copy(localWar, deployedWar);
-                    // Perform new deployment
-                    check(name);
                 } finally {
                     removeServiced(name);
                 }
+                // Perform new deployment
+                check(name);
             } else {
                 writer.println(smClient.getString("managerServlet.inService", 
displayPath));
             }
@@ -984,11 +984,11 @@ public class ManagerServlet extends HttpServlet 
implements ContainerServlet {
                         }
                         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));
             }
@@ -1510,11 +1510,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 cf2f64d..1b216ac 100644
--- a/java/org/apache/catalina/startup/HostConfig.java
+++ b/java/org/apache/catalina/startup/HostConfig.java
@@ -1659,17 +1659,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

Reply via email to