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