Author: pero
Date: Thu Apr  5 02:41:20 2007
New Revision: 525783

URL: http://svn.apache.org/viewvc?view=rev&rev=525783
Log:
Add better GET access session message support with new DeltaManager 
expireTolerance and updateActiveIntervall attributes.
Fix DeltaRequest missing synchonized
Fix DeltaRequest better error report at readRequest.

Modified:
    
tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/catalina/cluster/session/DeltaManager.java
    
tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/catalina/cluster/session/DeltaRequest.java
    
tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/catalina/cluster/session/DeltaSession.java
    
tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/catalina/cluster/session/mbeans-descriptors.xml
    tomcat/container/tc5.5.x/webapps/docs/changelog.xml
    tomcat/container/tc5.5.x/webapps/docs/cluster-howto.xml

Modified: 
tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/catalina/cluster/session/DeltaManager.java
URL: 
http://svn.apache.org/viewvc/tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/catalina/cluster/session/DeltaManager.java?view=diff&rev=525783&r1=525782&r2=525783
==============================================================================
--- 
tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/catalina/cluster/session/DeltaManager.java
 (original)
+++ 
tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/catalina/cluster/session/DeltaManager.java
 Thu Apr  5 02:41:20 2007
@@ -144,6 +144,17 @@
      */
     private int sendAllSessionsWaitTime = 2 * 1000 ; 
 
+    /**
+     * Send session access message every updateActiveInterval sec 
+     */
+    private int updateActiveInterval = 60;
+
+    /**
+     * The default session maxInactiveInterval + tolerance time interval, in 
seconds, between client requests before
+     * the servlet container may invalidate a backup session from other 
cluster node.
+     */
+    private int expireTolerance = 300;
+
     private ArrayList receivedMessageQueue = new ArrayList() ;
     
     private boolean receiverQueue = false ;
@@ -237,6 +248,22 @@
 
     }
 
+    public int getUpdateActiveInterval() {
+        return updateActiveInterval;
+    }
+
+    public void setUpdateActiveInterval(int updateActiveInterval) {
+        this.updateActiveInterval = updateActiveInterval;
+    }
+
+    public int getExpireTolerance() {
+        return expireTolerance;
+    }
+
+    public void setExpireTolerance(int expireTolerance) {
+        this.expireTolerance = expireTolerance;
+    }
+
     /**
      * @return Returns the counterSend_EVT_GET_ALL_SESSIONS.
      */
@@ -620,6 +647,7 @@
         }
 
         DeltaSession session = (DeltaSession) super.createSession(sessionId) ;
+        session.setExpireTolerance(this.expireTolerance);
         if (distribute) {
             sendCreateSession(session.getId(), session);
         }
@@ -933,6 +961,8 @@
         if (started) {
             return;
         }
+        if(log.isInfoEnabled())
+            log.info("Starting clustering manager...:"+getName());
         started = true;
         lifecycle.fireLifecycleEvent(START_EVENT, null);
 
@@ -1326,7 +1356,9 @@
             if ((msg == null)) {
                 long replDelta = System.currentTimeMillis()
                         - session.getLastTimeReplicated();
-                if (replDelta > (getMaxInactiveInterval() * 1000)) {
+                if (replDelta >= updateActiveInterval*1000 ||
+                    (getMaxInactiveInterval()>=0 &&
+                    replDelta >= getMaxInactiveInterval()*1000)) {
                     counterSend_EVT_SESSION_ACCESSED++;
                     msg = new SessionMessageImpl(getName(),
                             SessionMessage.EVT_SESSION_ACCESSED, null,
@@ -1493,7 +1525,7 @@
             if (log.isDebugEnabled())
                 log.debug(sm.getString("deltaManager.receiveMessage.eventType",
                         getName(), msg.getEventTypeString(), sender));
- 
+
             switch (msg.getEventType()) {
             case SessionMessage.EVT_GET_ALL_SESSIONS: {
                 handleGET_ALL_SESSIONS(msg,sender);
@@ -1632,6 +1664,7 @@
         session.setValid(true);
         session.setPrimarySession(false);
         session.setCreationTime(msg.getTimestamp());
+        session.setExpireTolerance(this.expireTolerance);
         session.access();
         if(notifySessionListenersOnReplication)
             session.setId(msg.getSessionID());

Modified: 
tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/catalina/cluster/session/DeltaRequest.java
URL: 
http://svn.apache.org/viewvc/tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/catalina/cluster/session/DeltaRequest.java?view=diff&rev=525783&r1=525782&r2=525783
==============================================================================
--- 
tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/catalina/cluster/session/DeltaRequest.java
 (original)
+++ 
tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/catalina/cluster/session/DeltaRequest.java
 Thu Apr  5 02:41:20 2007
@@ -208,7 +208,7 @@
             new Exception("Session Id is null for 
setSessionId").fillInStackTrace().printStackTrace();
         }
     }
-    public int getSize() {
+    public synchronized int getSize() {
         return actions.size();
     }
     
@@ -244,7 +244,12 @@
             else {
                 info = new AttributeInfo(-1,-1,null,null);
             }
-            info.readExternal(in);
+            try {
+                info.readExternal(in);
+            } catch (java.io.IOException e) {
+                log.error("Decode failure in delta request receiver: sid=" + 
sessionId + ", count=" + cnt + ", failure position=" + i);
+                throw e;
+            }
             actions.addLast(info);
         }//for
     }
@@ -335,8 +340,8 @@
             value = in.readObject();
         }
 
-        public synchronized void writeExternal(java.io.ObjectOutput out) 
throws java.io.
-            IOException {
+        public synchronized void writeExternal(java.io.ObjectOutput out) 
+           throws java.io.IOException {
             //type - int
             //action - int
             //name - String

Modified: 
tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/catalina/cluster/session/DeltaSession.java
URL: 
http://svn.apache.org/viewvc/tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/catalina/cluster/session/DeltaSession.java?view=diff&rev=525783&r1=525782&r2=525783
==============================================================================
--- 
tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/catalina/cluster/session/DeltaSession.java
 (original)
+++ 
tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/catalina/cluster/session/DeltaSession.java
 Thu Apr  5 02:41:20 2007
@@ -183,6 +183,12 @@
     private int maxInactiveInterval = -1;
 
     /**
+     * The maxInactiveInterval + tolerance time interval, in seconds, between 
client requests before
+     * the servlet container may invalidate a backup session from other 
cluster node.
+     */
+    private int expireTolerance = 300;
+
+    /**
      * Flag indicating whether this session is new or not.
      */
     private boolean isNew = false;
@@ -609,7 +615,7 @@
                     expire(true);
                 }
             } else {
-                if (timeIdle >= (2 * maxInactiveInterval)) {
+                if (timeIdle >= (maxInactiveInterval+expireTolerance)) {
                 //if the session has been idle twice as long as allowed,
                 //the primary session has probably crashed, and no other
                 //requests are coming in. that is why we do this. otherwise
@@ -1655,6 +1661,14 @@
 
     protected int getAccessCount() {
         return accessCount;
+    }
+
+    protected void setExpireTolerance(int expireTolerance) {
+        this.expireTolerance = expireTolerance;
+      }
+    
+    protected int getExpireTolerance() {
+        return expireTolerance;
     }
 
 }

Modified: 
tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/catalina/cluster/session/mbeans-descriptors.xml
URL: 
http://svn.apache.org/viewvc/tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/catalina/cluster/session/mbeans-descriptors.xml?view=diff&rev=525783&r1=525782&r2=525783
==============================================================================
--- 
tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/catalina/cluster/session/mbeans-descriptors.xml
 (original)
+++ 
tomcat/container/tc5.5.x/modules/cluster/src/share/org/apache/catalina/cluster/session/mbeans-descriptors.xml
 Thu Apr  5 02:41:20 2007
@@ -255,6 +255,14 @@
     <attribute   name="sendAllSessionsWaitTime"
           description="wait time between send session block (default 2 sec)"
                  type="int" />
+                 
+    <attribute   name="expireTolerance"
+          description="Auto expire tolerance interval for backup sessions 
(default 300 sec)"
+                 type="int" />
+                 
+    <attribute   name="updateActiveIntervall"
+          description="Send session access to backup after this intervall 
(default 60 sec)"
+                 type="int" />     
 
     <operation   name="listSessionIds"
           description="Return the list of active session ids"
@@ -309,6 +317,7 @@
                impact="ACTION"
                returnType="void">
     </operation>
+    
        <operation name="getAllClusterSessions"
                description="send to oldest cluster member that this node need 
all cluster sessions (resync member)"
                impact="ACTION"

Modified: tomcat/container/tc5.5.x/webapps/docs/changelog.xml
URL: 
http://svn.apache.org/viewvc/tomcat/container/tc5.5.x/webapps/docs/changelog.xml?view=diff&rev=525783&r1=525782&r2=525783
==============================================================================
--- tomcat/container/tc5.5.x/webapps/docs/changelog.xml (original)
+++ tomcat/container/tc5.5.x/webapps/docs/changelog.xml Thu Apr  5 02:41:20 2007
@@ -71,6 +71,19 @@
   <subsection name="Cluster">
     <changelog>
       <fix>
+        Receiver can also use tcpListenAddress with a hostname. (rjung, pero)
+      </fix>     
+      <fix>
+        DeltaRequest synchronized getSize() and show log message as 
+        readExternal() failure. (rjung, pero)
+      </fix>
+      <add>
+        Add DeltaManager expireTolerance attribute to quicker auto expire long 
backup sessions. (rjung, pero)
+      </add>
+      <add>
+        Add DeltaManager updateActiveIntervall attribute to send every 60 sec 
a session access message. (rjung, pero)
+      </add>
+      <fix>
         <bug>39866</bug> Duplicate names appended to cluster manager name. 
(yoavs)
       </fix>
     </changelog>

Modified: tomcat/container/tc5.5.x/webapps/docs/cluster-howto.xml
URL: 
http://svn.apache.org/viewvc/tomcat/container/tc5.5.x/webapps/docs/cluster-howto.xml?view=diff&rev=525783&r1=525782&r2=525783
==============================================================================
--- tomcat/container/tc5.5.x/webapps/docs/cluster-howto.xml (original)
+++ tomcat/container/tc5.5.x/webapps/docs/cluster-howto.xml Thu Apr  5 02:41:20 
2007
@@ -390,7 +390,7 @@
                   primaryIndicator="true" /&gt;
           &lt;Valve            
className="org.apache.catalina.cluster.session.JvmRouteBinderValve"
                              enabled="true"  /&gt;
-&lt;Cluster/&gt;
+&lt;/Cluster&gt;
 </source> 
 </p>
 </section>
@@ -953,6 +953,18 @@
     Only other GET_ALL_SESSION events are handle with date before state 
transfer message.</td>
     <td><code>true</code></td>
   </tr>  
+  
+  <tr>
+    <td>updateActiveInterval</td>
+    <td>Send session access message every updateActiveInterval sec.</td>
+    <td><code>60</code></td>
+  </tr>  
+  
+  <tr>
+    <td>expireTolerance</td>
+    <td>Autoexpire backup session after MaxInactive + expireTolerance sec.</td>
+    <td><code>300</code></td>
+  </tr> 
   
 </table>
   



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to