tomcat-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Bip Thelin <...@razorfish.com>
Subject [PATCH PersistentManager.java] Patch to get the Max Idle Backup working
Date Tue, 10 Apr 2001 02:19:39 GMT
A little update to PersistentManager.java to backup sessions that's been Idle
for longer than specified max time.

	..bip


Index: LocalStrings.properties
===================================================================
RCS file: /home/cvspublic/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/session/LocalStrings.properties,v
retrieving revision 1.4
diff -u -r1.4 LocalStrings.properties
--- LocalStrings.properties     2001/02/03 20:36:20     1.4
+++ LocalStrings.properties     2001/04/10 02:16:05
@@ -37,6 +47,8 @@
 persistentManager.deserializeError=Error deserializing Session {0}: {1}
 persistentManager.serializeError=Error deserializing Session {0}: {1}
 persistentManager.swapMaxIdle=Swapping session {0} to Store, idle for {1} seconds
+persistentManager.backupMaxIdle=Backing up session {0} to Store, idle for {1} seconds
+persistentManager.backupException=Exception occured when backing up Session {0}: {1}
 persistentManager.tooManyActive=Too many active sessions, {0}, looking for idle sessions
to swap out
 persistentManager.swapTooManyActive=Swapping out session {0}, idle for {1} seconds too many
sessions active
 persistentManager.processSwaps=Checking for sessions to swap out, {0} active sessions in
memory


Index: PersistentManager.java
===================================================================
RCS file: /home/cvspublic/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/session/PersistentManager.java,v
retrieving revision 1.3
diff -u -r1.3 PersistentManager.java
--- PersistentManager.java      2001/04/07 10:25:03     1.3
+++ PersistentManager.java      2001/04/10 02:11:39
@@ -782,7 +782,32 @@
        if (!started || maxIdleBackup < 0)
            return;

-       // FIXME: Do something useful
+       Session sessions[] = findSessions();
+       long timeNow = System.currentTimeMillis();
+
+       // Back up all sessions idle longer than maxIdleBackup
+       if (maxIdleBackup >= 0) {
+           for (int i = 0; i < sessions.length; i++) {
+               StandardSession session = (StandardSession) sessions[i];
+               if (!session.isValid())
+                   continue;
+               int timeIdle = // Truncate, do not round up
+                   (int) ((timeNow - session.getLastAccessedTime()) / 1000L);
+               if (timeIdle > maxIdleBackup) {
+                   if (debug > 1)
+                       log(sm.getString
+                            ("persistentManager.backupMaxIdle",
+                             session.getId(), new Integer(timeIdle)));
+
+                   try {
+                       backup(session);
+                   } catch (IOException e) {
+                       log(sm.getString
+                           ("persistentManager.backupException", session.getId(
), e));
+                   }
+               }
+           }
+       }
     }


@@ -862,10 +887,18 @@
      * Write the session out to Store, but leave the copy in
      * the Manager's memory unmodified.
      */
-    private void backup() throws IOException {
-
-        // FIXME: Do something
+    private void backup(Session session) throws IOException {
+       if (!session.isValid()
+            || isSessionStale(session, System.currentTimeMillis()))
+           return;

+       try {
+           store.save(session);
+       } catch (IOException e) {
+           log(sm.getString
+                ("persistentManager.serializeError", session.getId(), e));
+           throw e;
+       }
     }

Mime
View raw message