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

Reply via email to