Author: markt
Date: Wed Mar 18 14:50:43 2015
New Revision: 1667565

URL: http://svn.apache.org/r1667565
Log:
Fix https://bz.apache.org/bugzilla/show_bug.cgi?id=56608
Watched resources should be tracked if they are expected to exist even if they 
don't exist when the Context starts
Also prevent multiple changes at the same time triggering multiple reloads 
rather than just one

Modified:
    tomcat/tc6.0.x/trunk/STATUS.txt
    tomcat/tc6.0.x/trunk/java/org/apache/catalina/startup/HostConfig.java
    tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml

Modified: tomcat/tc6.0.x/trunk/STATUS.txt
URL: 
http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/STATUS.txt?rev=1667565&r1=1667564&r2=1667565&view=diff
==============================================================================
--- tomcat/tc6.0.x/trunk/STATUS.txt (original)
+++ tomcat/tc6.0.x/trunk/STATUS.txt Wed Mar 18 14:50:43 2015
@@ -53,15 +53,6 @@ PATCHES PROPOSED TO BACKPORT:
        (e.g. search for "ecj-4.3.1.jar"), and do not skip jstl.jar.)
 
 
-* Fix https://bz.apache.org/bugzilla/show_bug.cgi?id=56608
-  Watched resources should be tracked if they are expected to exist even if 
they
-  don't exist when the Context starts
-  Also prevent multiple changes at the same time triggering multiple reloads
-  rather than just one
-  http://people.apache.org/~markt/patches/2015-03-05-bug56608-tc6-v1.patch
-  +1: markt, schultz, remm
-  -1:
-
 * Fix https://bz.apache.org/bugzilla/show_bug.cgi?id=57675
   Correctly quote strings when using the extended access log
   http://svn.apache.org/r1665087

Modified: tomcat/tc6.0.x/trunk/java/org/apache/catalina/startup/HostConfig.java
URL: 
http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/catalina/startup/HostConfig.java?rev=1667565&r1=1667564&r2=1667565&view=diff
==============================================================================
--- tomcat/tc6.0.x/trunk/java/org/apache/catalina/startup/HostConfig.java 
(original)
+++ tomcat/tc6.0.x/trunk/java/org/apache/catalina/startup/HostConfig.java Wed 
Mar 18 14:50:43 2015
@@ -712,7 +712,7 @@ public class HostConfig
                                 new Long(warDocBase.lastModified()));
                     }
                 }
-                if (expandedDocBase.exists()) {
+                if (unpackWARs) {
                     
deployedApp.redeployResources.put(expandedDocBase.getAbsolutePath(),
                             new Long(expandedDocBase.lastModified()));
                     addWatchedResources(deployedApp,
@@ -1261,36 +1261,41 @@ public class HostConfig
             }
         }
         resources = app.reloadResources.keySet().toArray(new String[0]);
+        boolean update = false;
         for (int i = 0; i < resources.length; i++) {
             File resource = new File(resources[i]);
-            if (log.isDebugEnabled())
+            if (log.isDebugEnabled()) {
                 log.debug("Checking context[" + app.name + "] reload resource 
" + resource);
+            }
             long lastModified = 
app.reloadResources.get(resources[i]).longValue();
-            if ((!resource.exists() && lastModified != 0L)
-                || (resource.lastModified() != lastModified)) {
-                // Reload application
-                if(log.isInfoEnabled())
-                    log.info(sm.getString("hostConfig.reload", app.name));
-                Container context = host.findChild(app.name);
-                try {
-                    ((Lifecycle) context).stop();
-                } catch (Exception e) {
-                    log.warn(sm.getString
-                             ("hostConfig.context.restart", app.name), e);
-                }
-                // If the context was not started (for example an error
-                // in web.xml) we'll still get to try to start
-                try {
-                    ((Lifecycle) context).start();
-                } catch (Exception e) {
-                    log.warn(sm.getString
-                             ("hostConfig.context.restart", app.name), e);
+            if (resource.lastModified() != lastModified || update) {
+                if (!update) {
+                    // Reload application
+                    if(log.isInfoEnabled()) {
+                        log.info(sm.getString("hostConfig.reload", app.name));
+                    }
+                    Container context = host.findChild(app.name);
+                    try {
+                        ((Lifecycle) context).stop();
+                    } catch (Exception e) {
+                        log.warn(sm.getString
+                                 ("hostConfig.context.restart", app.name), e);
+                    }
+                    // If the context was not started (for example an error
+                    // in web.xml) we'll still get to try to start
+                    try {
+                        ((Lifecycle) context).start();
+                    } catch (Exception e) {
+                        log.warn(sm.getString
+                                 ("hostConfig.context.restart", app.name), e);
+                    }
+                    update = true;
                 }
-                // Update times
-                app.reloadResources.put(resources[i], new 
Long(resource.lastModified()));
-                app.timestamp = System.currentTimeMillis();
-                return;
+                // Update times. More than one file may have been updated. We
+                // don't want to trigger a series of reloads.
+                app.reloadResources.put(resources[i], 
Long.valueOf(resource.lastModified()));
             }
+            app.timestamp = System.currentTimeMillis();
         }
     }
 

Modified: tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml
URL: 
http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml?rev=1667565&r1=1667564&r2=1667565&view=diff
==============================================================================
--- tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/tc6.0.x/trunk/webapps/docs/changelog.xml Wed Mar 18 14:50:43 2015
@@ -317,6 +317,16 @@
         variables. Be more strict with executable filename on Windows
         (s/java/java.exe/). Based on a patch by Neeme Praks. (markt/kkolinko)
       </add>
+      <fix>
+        <bug>56608</bug>: When deploying an external WAR, add watched resources
+        in the expanded directory based on whether the expanded directory is
+        expected to exist rather than if it does exist.
+      </fix>
+      <fix>
+         When triggering a reload due to a modified watched resource, ensure
+         that multiple changed watched resources only trigger one reload rather
+         than a series of reloads.
+      </fix>
     </changelog>
   </subsection>
 </section>



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to