Author: markt Date: Mon Jul 7 13:06:53 2014 New Revision: 1608448 URL: http://svn.apache.org/r1608448 Log: Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=56698 When persisting idle sessions, only persist newly idle sessions. Patch provided by Felix Schumacher.
Added: tomcat/tc7.0.x/trunk/test/org/apache/catalina/session/TestPersistentManager.java - copied, changed from r1608443, tomcat/trunk/test/org/apache/catalina/session/TestPersistentManager.java Modified: tomcat/tc7.0.x/trunk/ (props changed) tomcat/tc7.0.x/trunk/java/org/apache/catalina/session/PersistentManagerBase.java tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml Propchange: tomcat/tc7.0.x/trunk/ ------------------------------------------------------------------------------ Merged /tomcat/trunk:r1608443 Modified: tomcat/tc7.0.x/trunk/java/org/apache/catalina/session/PersistentManagerBase.java URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/catalina/session/PersistentManagerBase.java?rev=1608448&r1=1608447&r2=1608448&view=diff ============================================================================== --- tomcat/tc7.0.x/trunk/java/org/apache/catalina/session/PersistentManagerBase.java (original) +++ tomcat/tc7.0.x/trunk/java/org/apache/catalina/session/PersistentManagerBase.java Mon Jul 7 13:06:53 2014 @@ -143,6 +143,12 @@ public abstract class PersistentManagerB */ private static String name = "PersistentManagerBase"; + /** + * Key of the note of a session in which the timestamp of last backup is stored. + */ + private static final String PERSISTED_LAST_ACCESSED_TIME = + "org.apache.catalina.session.PersistentManagerBase.persistedLastAccessedTime"; + /** * Store object which will manage the Session store. @@ -1021,6 +1027,12 @@ public abstract class PersistentManagerB synchronized (session) { if (!session.isValid()) continue; + long lastAccessedTime = session.getLastAccessedTime(); + Long persistedLastAccessedTime = + (Long) session.getNote(PERSISTED_LAST_ACCESSED_TIME); + if (persistedLastAccessedTime != null && + lastAccessedTime == persistedLastAccessedTime.longValue()) + continue; int timeIdle; if (StandardSession.LAST_ACCESS_AT_START) { timeIdle = (int) ((timeNow - session.getLastAccessedTime()) / 1000L); @@ -1039,6 +1051,8 @@ public abstract class PersistentManagerB } catch (IOException e) { // This is logged in writeSession() } + session.setNote(PERSISTED_LAST_ACCESSED_TIME, + Long.valueOf(lastAccessedTime)); } } } Copied: tomcat/tc7.0.x/trunk/test/org/apache/catalina/session/TestPersistentManager.java (from r1608443, tomcat/trunk/test/org/apache/catalina/session/TestPersistentManager.java) URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/test/org/apache/catalina/session/TestPersistentManager.java?p2=tomcat/tc7.0.x/trunk/test/org/apache/catalina/session/TestPersistentManager.java&p1=tomcat/trunk/test/org/apache/catalina/session/TestPersistentManager.java&r1=1608443&r2=1608448&rev=1608448&view=diff ============================================================================== --- tomcat/trunk/test/org/apache/catalina/session/TestPersistentManager.java (original) +++ tomcat/tc7.0.x/trunk/test/org/apache/catalina/session/TestPersistentManager.java Mon Jul 7 13:06:53 2014 @@ -129,7 +129,7 @@ public class TestPersistentManager exten private static class DummyStore implements Store { private Manager manager; - private List<String> savedIds = new ArrayList<>(); + private List<String> savedIds = new ArrayList<String>(); List<String> getSavedIds() { return savedIds; @@ -183,5 +183,9 @@ public class TestPersistentManager exten savedIds.add(session.getId()); } + @Override + public String getInfo() { + return null; + } } } \ No newline at end of file Modified: tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml?rev=1608448&r1=1608447&r2=1608448&view=diff ============================================================================== --- tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml (original) +++ tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml Mon Jul 7 13:06:53 2014 @@ -141,6 +141,10 @@ <code>HttpServletRequest.getPathTranslated()</code> returns a value that is based on the modified PathInfo. (markt) </fix> + <fix> + <bug>56698</bug>: When persisting idle sessions, only persist newly idle + sessions. Patch provided by Felix Schumacher. (markt) + </fix> </changelog> </subsection> <subsection name="Coyote"> --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org