You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by kf...@apache.org on 2011/10/31 11:22:32 UTC
svn commit: r1195393 - in /tomcat/tc7.0.x/trunk:
java/org/apache/catalina/ha/session/ webapps/docs/
Author: kfujino
Date: Mon Oct 31 10:22:31 2011
New Revision: 1195393
URL: http://svn.apache.org/viewvc?rev=1195393&view=rev
Log:
When Context manager does not exist, no context manager message is replied in order to avoid timeout (default 60 sec) of GET_ALL_SESSIONS sync phase.
Modified:
tomcat/tc7.0.x/trunk/java/org/apache/catalina/ha/session/ClusterSessionListener.java
tomcat/tc7.0.x/trunk/java/org/apache/catalina/ha/session/DeltaManager.java
tomcat/tc7.0.x/trunk/java/org/apache/catalina/ha/session/LocalStrings.properties
tomcat/tc7.0.x/trunk/java/org/apache/catalina/ha/session/SessionMessage.java
tomcat/tc7.0.x/trunk/java/org/apache/catalina/ha/session/SessionMessageImpl.java
tomcat/tc7.0.x/trunk/java/org/apache/catalina/ha/session/mbeans-descriptors.xml
tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml
Modified: tomcat/tc7.0.x/trunk/java/org/apache/catalina/ha/session/ClusterSessionListener.java
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/catalina/ha/session/ClusterSessionListener.java?rev=1195393&r1=1195392&r2=1195393&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/catalina/ha/session/ClusterSessionListener.java (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/catalina/ha/session/ClusterSessionListener.java Mon Oct 31 10:22:31 2011
@@ -88,10 +88,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/tc7.0.x/trunk/java/org/apache/catalina/ha/session/DeltaManager.java
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/catalina/ha/session/DeltaManager.java?rev=1195393&r1=1195392&r2=1195393&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/catalina/ha/session/DeltaManager.java (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/catalina/ha/session/DeltaManager.java Mon Oct 31 10:22:31 2011
@@ -97,6 +97,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 ;
@@ -122,6 +123,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;
@@ -131,6 +133,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() {
@@ -274,7 +277,14 @@ public class DeltaManager extends Cluste
public long getCounterReceive_EVT_CHANGE_SESSION_ID() {
return counterReceive_EVT_CHANGE_SESSION_ID;
}
-
+
+ /**
+ * @return Returns the counterReceive_EVT_ALL_SESSION_NOCONTEXTMANAGER.
+ */
+ public long getCounterReceive_EVT_ALL_SESSION_NOCONTEXTMANAGER() {
+ return counterReceive_EVT_ALL_SESSION_NOCONTEXTMANAGER;
+ }
+
/**
* @return Returns the processingTime.
*/
@@ -329,7 +339,15 @@ public class DeltaManager extends Cluste
public void setStateTransfered(boolean stateTransfered) {
this.stateTransfered = stateTransfered;
}
-
+
+ public boolean isNoContextManagerReceived() {
+ return noContextManagerReceived;
+ }
+
+ public void setNoContextManagerReceived(boolean noContextManagerReceived) {
+ this.noContextManagerReceived = noContextManagerReceived;
+ }
+
/**
* @return Returns the sendAllSessionsWaitTime in msec
*/
@@ -898,7 +916,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
@@ -907,13 +925,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)));
@@ -1276,6 +1297,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;
@@ -1460,6 +1485,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/tc7.0.x/trunk/java/org/apache/catalina/ha/session/LocalStrings.properties
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/catalina/ha/session/LocalStrings.properties?rev=1195393&r1=1195392&r2=1195393&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/catalina/ha/session/LocalStrings.properties (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/catalina/ha/session/LocalStrings.properties Mon Oct 31 10:22:31 2011
@@ -33,6 +33,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.
@@ -42,6 +43,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/tc7.0.x/trunk/java/org/apache/catalina/ha/session/SessionMessage.java
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/catalina/ha/session/SessionMessage.java?rev=1195393&r1=1195392&r2=1195393&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/catalina/ha/session/SessionMessage.java (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/catalina/ha/session/SessionMessage.java Mon Oct 31 10:22:31 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/tc7.0.x/trunk/java/org/apache/catalina/ha/session/SessionMessageImpl.java
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/catalina/ha/session/SessionMessageImpl.java?rev=1195393&r1=1195392&r2=1195393&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/catalina/ha/session/SessionMessageImpl.java (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/catalina/ha/session/SessionMessageImpl.java Mon Oct 31 10:22:31 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/tc7.0.x/trunk/java/org/apache/catalina/ha/session/mbeans-descriptors.xml
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/catalina/ha/session/mbeans-descriptors.xml?rev=1195393&r1=1195392&r2=1195393&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/catalina/ha/session/mbeans-descriptors.xml (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/catalina/ha/session/mbeans-descriptors.xml Mon Oct 31 10:22:31 2011
@@ -151,6 +151,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"
@@ -322,6 +327,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"
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=1195393&r1=1195392&r2=1195393&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml Mon Oct 31 10:22:31 2011
@@ -230,6 +230,11 @@
to be observed in the clustering module than the HTTP or AJP NIO
connector. (markt)
</fix>
+ <add>
+ When Context manager does not exist, no context manager message is
+ replied in order to avoid timeout (default 60sec) of
+ GET_ALL_SESSIONS sync phase. (kfujino)
+ </add>
</changelog>
</subsection>
<subsection name="Web applications">
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org