Author: kfujino Date: Mon Oct 31 09:58:42 2011 New Revision: 1195384 URL: http://svn.apache.org/viewvc?rev=1195384&view=rev Log: When Context manager does not exist, A no context manager message is replied in order to avoid timeout (default 60sec) of GET_ALL_SESSIONS sync phase.
Modified: tomcat/trunk/java/org/apache/catalina/ha/session/ClusterSessionListener.java tomcat/trunk/java/org/apache/catalina/ha/session/DeltaManager.java tomcat/trunk/java/org/apache/catalina/ha/session/LocalStrings.properties tomcat/trunk/java/org/apache/catalina/ha/session/SessionMessage.java tomcat/trunk/java/org/apache/catalina/ha/session/SessionMessageImpl.java tomcat/trunk/java/org/apache/catalina/ha/session/mbeans-descriptors.xml Modified: tomcat/trunk/java/org/apache/catalina/ha/session/ClusterSessionListener.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/ha/session/ClusterSessionListener.java?rev=1195384&r1=1195383&r2=1195384&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/ha/session/ClusterSessionListener.java (original) +++ tomcat/trunk/java/org/apache/catalina/ha/session/ClusterSessionListener.java Mon Oct 31 09:58:42 2011 @@ -74,10 +74,22 @@ public class ClusterSessionListener exte } } else { ClusterManager mgr = managers.get(ctxname); - if (mgr != null) + if (mgr != null) { mgr.messageDataReceived(msg); - else if (log.isWarnEnabled()) - log.warn("Context manager doesn't exist:" + ctxname); + } else { + if (log.isWarnEnabled()) + log.warn("Context manager doesn't exist:" + ctxname); + + // A no context manager message is replied in order to avoid + // timeout of GET_ALL_SESSIONS sync phase. + if (msg.getEventType() == SessionMessage.EVT_GET_ALL_SESSIONS) { + SessionMessage replymsg = new SessionMessageImpl(ctxname, + SessionMessage.EVT_ALL_SESSION_NOCONTEXTMANAGER, + null, "NO-CONTEXT-MANAGER","NO-CONTEXT-MANAGER-" + ctxname); + cluster.send(replymsg, msg.getAddress()); + } + } + } } return; Modified: tomcat/trunk/java/org/apache/catalina/ha/session/DeltaManager.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/ha/session/DeltaManager.java?rev=1195384&r1=1195383&r2=1195384&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/ha/session/DeltaManager.java (original) +++ tomcat/trunk/java/org/apache/catalina/ha/session/DeltaManager.java Mon Oct 31 09:58:42 2011 @@ -92,6 +92,7 @@ public class DeltaManager extends Cluste private boolean notifySessionListenersOnReplication = true; private boolean notifyContainerListenersOnReplication = true; private volatile boolean stateTransfered = false ; + private volatile boolean noContextManagerReceived = false ; private int stateTransferTimeout = 60; private boolean sendAllSessions = true; private int sendAllSessionsSize = 1000 ; @@ -117,6 +118,7 @@ public class DeltaManager extends Cluste private long counterReceive_EVT_SESSION_DELTA = 0; private int counterReceive_EVT_ALL_SESSION_TRANSFERCOMPLETE = 0 ; private long counterReceive_EVT_CHANGE_SESSION_ID = 0 ; + private long counterReceive_EVT_ALL_SESSION_NOCONTEXTMANAGER = 0 ; private long counterSend_EVT_GET_ALL_SESSIONS = 0 ; private long counterSend_EVT_ALL_SESSION_DATA = 0 ; private long counterSend_EVT_SESSION_CREATED = 0; @@ -126,6 +128,7 @@ public class DeltaManager extends Cluste private int counterSend_EVT_ALL_SESSION_TRANSFERCOMPLETE = 0 ; private long counterSend_EVT_CHANGE_SESSION_ID = 0; private int counterNoStateTransfered = 0 ; + // ------------------------------------------------------------- Constructor public DeltaManager() { @@ -261,6 +264,13 @@ public class DeltaManager extends Cluste } /** + * @return Returns the counterReceive_EVT_CHANGE_SESSION_ID. + */ + public long getCounterReceive_EVT_ALL_SESSION_NOCONTEXTMANAGER() { + return counterReceive_EVT_ALL_SESSION_NOCONTEXTMANAGER; + } + + /** * @return Returns the processingTime. */ @Override @@ -315,6 +325,14 @@ public class DeltaManager extends Cluste this.stateTransfered = stateTransfered; } + public boolean isNoContextManagerReceived() { + return noContextManagerReceived; + } + + public void setNoContextManagerReceived(boolean noContextManagerReceived) { + this.noContextManagerReceived = noContextManagerReceived; + } + /** * @return Returns the sendAllSessionsWaitTime in msec */ @@ -883,7 +901,7 @@ public class DeltaManager extends Cluste } reqNow = System.currentTimeMillis(); isTimeout = ((reqNow - reqStart) > (1000 * getStateTransferTimeout())); - } while ((!getStateTransfered()) && (!isTimeout)); + } while ((!getStateTransfered()) && (!isTimeout) && (!isNoContextManagerReceived())); } else { if(getStateTransferTimeout() == -1) { // wait that state is transfered @@ -892,13 +910,16 @@ public class DeltaManager extends Cluste Thread.sleep(100); } catch (Exception sleep) { } - } while ((!getStateTransfered())); + } while ((!getStateTransfered())&& (!isNoContextManagerReceived())); reqNow = System.currentTimeMillis(); } } - if (isTimeout || (!getStateTransfered())) { + if (isTimeout) { counterNoStateTransfered++ ; log.error(sm.getString("deltaManager.noSessionState",getName(),new Date(beforeSendTime),Long.valueOf(reqNow - beforeSendTime))); + }else if (isNoContextManagerReceived()) { + if (log.isWarnEnabled()) + log.warn(sm.getString("deltaManager.noContextManager",getName(),new Date(beforeSendTime),Long.valueOf(reqNow - beforeSendTime))); } else { if (log.isInfoEnabled()) log.info(sm.getString("deltaManager.sessionReceived",getName(), new Date(beforeSendTime), Long.valueOf(reqNow - beforeSendTime))); @@ -1261,6 +1282,10 @@ public class DeltaManager extends Cluste handleCHANGE_SESSION_ID(msg,sender); break; } + case SessionMessage.EVT_ALL_SESSION_NOCONTEXTMANAGER: { + handleALL_SESSION_NOCONTEXTMANAGER(msg,sender); + break; + } default: { //we didn't recognize the message type, do nothing break; @@ -1445,6 +1470,18 @@ public class DeltaManager extends Cluste } /** + * handle receive no context manager. + * @param msg + * @param sender + */ + protected void handleALL_SESSION_NOCONTEXTMANAGER(SessionMessage msg, Member sender) { + counterReceive_EVT_ALL_SESSION_NOCONTEXTMANAGER++ ; + if (log.isDebugEnabled()) + log.debug(sm.getString("deltaManager.receiveMessage.noContextManager",getName(), sender.getHost(), Integer.valueOf(sender.getPort()))); + noContextManagerReceived = true ; + } + + /** * send a block of session to sender * @param sender * @param currentSessions Modified: tomcat/trunk/java/org/apache/catalina/ha/session/LocalStrings.properties URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/ha/session/LocalStrings.properties?rev=1195384&r1=1195383&r2=1195384&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/ha/session/LocalStrings.properties (original) +++ tomcat/trunk/java/org/apache/catalina/ha/session/LocalStrings.properties Mon Oct 31 09:58:42 2011 @@ -31,6 +31,7 @@ deltaManager.noCluster=Starting... no cl deltaManager.noMasterMember=Starting... with no other member for context [{0}] at domain [{1}] deltaManager.noMembers=Manager [{0}]: skipping state transfer. No members active in cluster group. deltaManager.noSessionState=Manager [{0}]: No session state send at {1} received, timing out after {2} ms. +deltaManager.noContextManager=Manager [{0}]: No context manager send at {1} received in {2} ms. deltaManager.sendMessage.newSession=Manager [{0}] send new session ({1}) deltaManager.expireSessions=Manager [{0}] expiring sessions upon shutdown deltaManager.receiveMessage.accessed=Manager [{0}]: received session [{1}] accessed. @@ -40,6 +41,7 @@ deltaManager.receiveMessage.error=Manage deltaManager.receiveMessage.eventType=Manager [{0}]: Received SessionMessage of type=({1}) from [{2}] deltaManager.receiveMessage.expired=Manager [{0}]: received session [{1}] expired. deltaManager.receiveMessage.transfercomplete=Manager [{0}] received from node [{1}:{2}] session state transfered. +deltaManager.receiveMessage.noContextManager=Manager [{0}] received from node [{1}:{2}] no context manager. deltaManager.receiveMessage.unloadingAfter=Manager [{0}]: unloading sessions complete deltaManager.receiveMessage.unloadingBegin=Manager [{0}]: start unloading sessions deltaManager.receiveMessage.allSessionDataAfter=Manager [{0}]: session state deserialized Modified: tomcat/trunk/java/org/apache/catalina/ha/session/SessionMessage.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/ha/session/SessionMessage.java?rev=1195384&r1=1195383&r2=1195384&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/ha/session/SessionMessage.java (original) +++ tomcat/trunk/java/org/apache/catalina/ha/session/SessionMessage.java Mon Oct 31 09:58:42 2011 @@ -33,6 +33,7 @@ import org.apache.catalina.ha.ClusterMes * <li><pre>public static final int EVT_ALL_SESSION_DATA</pre><li> * <li><pre>public static final int EVT_ALL_SESSION_TRANSFERCOMPLETE</pre><li> * <li><pre>public static final int EVT_CHANGE_SESSION_ID</pre><li> + * <li><pre>public static final int EVT_ALL_SESSION_NOCONTEXTMANAGER</pre><li> * </ul> * */ @@ -81,6 +82,11 @@ public interface SessionMessage extends */ public static final int EVT_CHANGE_SESSION_ID = 15; + /** + * Event type used when context manager doesn't exist. + * This is used when the manager which send a session state does not exist. + */ + public static final int EVT_ALL_SESSION_NOCONTEXTMANAGER = 16; public String getContextName(); Modified: tomcat/trunk/java/org/apache/catalina/ha/session/SessionMessageImpl.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/ha/session/SessionMessageImpl.java?rev=1195384&r1=1195383&r2=1195384&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/ha/session/SessionMessageImpl.java (original) +++ tomcat/trunk/java/org/apache/catalina/ha/session/SessionMessageImpl.java Mon Oct 31 09:58:42 2011 @@ -83,6 +83,9 @@ public class SessionMessageImpl extends * after GET_ALL_SESSION received from this sender.<BR> * <B>EVT_CHANGE_SESSION_ID</B><BR> * send original sessionID and new sessionID.<BR> + * <B>EVT_ALL_SESSION_NOCONTEXTMANAGER</B><BR> + * send that context manager does not exist + * after GET_ALL_SESSION received from this sender.<BR> * @param contextName - the name of the context (application * @param eventtype - one of the 8 event type defined in this class * @param session - the serialized byte array of the session itself @@ -151,6 +154,7 @@ public class SessionMessageImpl extends case EVT_ALL_SESSION_DATA : return "ALL-SESSION-DATA"; case EVT_ALL_SESSION_TRANSFERCOMPLETE : return "SESSION-STATE-TRANSFERED"; case EVT_CHANGE_SESSION_ID : return "SESSION-ID-CHANGED"; + case EVT_ALL_SESSION_NOCONTEXTMANAGER : return "NO-CONTEXT-MANAGER"; default : return "UNKNOWN-EVENT-TYPE"; } } Modified: tomcat/trunk/java/org/apache/catalina/ha/session/mbeans-descriptors.xml URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/ha/session/mbeans-descriptors.xml?rev=1195384&r1=1195383&r2=1195384&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/ha/session/mbeans-descriptors.xml (original) +++ tomcat/trunk/java/org/apache/catalina/ha/session/mbeans-descriptors.xml Mon Oct 31 09:58:42 2011 @@ -141,6 +141,11 @@ type="long" writeable="false"/> <attribute + name="counterReceive_EVT_ALL_SESSION_NOCONTEXTMANAGER" + description="Count receive EVT_ALL_SESSION_NOCONTEXTMANAGER messages" + type="long" + writeable="false"/> + <attribute name="counterSend_EVT_GET_ALL_SESSIONS" description="Count send EVT_GET_ALL_SESSIONS messages" type="long" @@ -307,6 +312,11 @@ description="Number of sessions we rejected due to maxActive beeing reached" type="int" writeable="false"/> + <attribute + name="noContextManagerReceived" + is="true" + description="Is no context manager message received? " + type="boolean"/> <operation name="expireSession" description="Expired the given session" --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org