Author: markt
Date: Mon Jan 18 09:17:13 2016
New Revision: 1725201

URL: http://svn.apache.org/viewvc?rev=1725201&view=rev
Log:
Refactor handling of failed loading of persisted sessions.
Old behaviour:
 - sessions loaded up to point where error occurred
 - serialized session data deleted
 - web app started
i.e. session data after the failure was lost
New behaviour
 - serialized session data deleted only if all sessions loaded without error
 - web application only starts if all sessions loaded without error

Modified:
    tomcat/trunk/java/org/apache/catalina/session/StandardManager.java

Modified: tomcat/trunk/java/org/apache/catalina/session/StandardManager.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/session/StandardManager.java?rev=1725201&r1=1725200&r2=1725201&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/session/StandardManager.java 
(original)
+++ tomcat/trunk/java/org/apache/catalina/session/StandardManager.java Mon Jan 
18 09:17:13 2016
@@ -225,11 +225,17 @@ public class StandardManager extends Man
                         }
                         sessionCounter++;
                     }
-                } finally {
+
                     // Delete the persistent storage file
                     if (file.exists()) {
                         file.delete();
                     }
+                } catch (Throwable t) {
+                    // Clearing the partially loaded sessions here prevents the
+                    // stop() method overwriting the file where the session 
data
+                    // is stored.
+                    sessions.clear();
+                    throw t;
                 }
             }
         } catch (FileNotFoundException e) {
@@ -278,6 +284,8 @@ public class StandardManager extends Man
             log.debug(sm.getString("standardManager.unloading.debug"));
 
         if (sessions.isEmpty()) {
+            // This is important in the case where the load fails since it
+            // prevents the overwriting of the data that failed to load.
             log.debug(sm.getString("standardManager.unloading.nosessions"));
             return; // nothing to do
         }
@@ -354,7 +362,7 @@ public class StandardManager extends Man
             load();
         } catch (Throwable t) {
             ExceptionUtils.handleThrowable(t);
-            log.error(sm.getString("standardManager.managerLoad"), t);
+            throw new 
LifecycleException(sm.getString("standardManager.managerLoad"), t);
         }
 
         setState(LifecycleState.STARTING);



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

Reply via email to