pero 2004/11/22 06:51:19
Modified: modules/cluster/src/share/org/apache/catalina/cluster/session
DeltaManager.java DeltaSession.java
SimpleTcpReplicationManager.java
Log:
Move processExpiresFrequency check to ManagerBase and reflect change to all
subclasses (StandardManager, PersientManagerBase, DeltaManager)
Better log support to DeltaManager to see detail information at debug level.
Revision Changes Path
1.36 +85 -111
jakarta-tomcat-catalina/modules/cluster/src/share/org/apache/catalina/cluster/session/DeltaManager.java
Index: DeltaManager.java
===================================================================
RCS file:
/home/cvs/jakarta-tomcat-catalina/modules/cluster/src/share/org/apache/catalina/cluster/session/DeltaManager.java,v
retrieving revision 1.35
retrieving revision 1.36
diff -u -r1.35 -r1.36
--- DeltaManager.java 13 Nov 2004 22:10:10 -0000 1.35
+++ DeltaManager.java 22 Nov 2004 14:51:18 -0000 1.36
@@ -103,17 +103,6 @@
/**
- * Path name of the disk file in which active sessions are saved
- * when we stop, and from which these sessions are loaded when we start.
- * A <code>null</code> value indicates that no persistence is desired.
- * If this pathname is relative, it will be resolved against the
- * temporary working directory provided by our context, available via
- * the <code>javax.servlet.context.tempdir</code> context attribute.
- */
- private String pathname = "SESSIONS.ser";
-
-
- /**
* Has this component been started yet?
*/
private boolean started = false;
@@ -130,6 +119,7 @@
private boolean printToScreen;
private boolean notifyListenersOnReplication = false;
+
// -------------------------------------------------------------
Constructor
public DeltaManager() {
super();
@@ -198,26 +188,6 @@
this.rejectedSessions = rejectedSessions;
}
- /** Number of sessions that expired.
- *
- * @return The count
- */
- public int getExpiredSessions() {
- return expiredSessions;
- }
-
- public void setExpiredSessions(int expiredSessions) {
- this.expiredSessions = expiredSessions;
- }
-
- public long getProcessingTime() {
- return processingTime;
- }
-
- public void setProcessingTime(long processingTime) {
- this.processingTime = processingTime;
- }
-
/**
* Set the maximum number of actives Sessions allowed, or -1 for
* no limit.
@@ -244,32 +214,6 @@
}
-
- /**
- * Return the session persistence pathname, if any.
- */
- public String getPathname() {
-
- return (this.pathname);
-
- }
-
-
- /**
- * Set the session persistence pathname to the specified value. If no
- * persistence support is desired, set the pathname to <code>null</code>.
- *
- * @param pathname New session persistence pathname
- */
- public void setPathname(String pathname) {
-
- String oldPathname = this.pathname;
- this.pathname = pathname;
- support.firePropertyChange("pathname", oldPathname, this.pathname);
-
- }
-
-
// --------------------------------------------------------- Public
Methods
/**
@@ -295,6 +239,14 @@
return createSession(true);
}
+
+ /**
+ * create new session with check maxActiveSessions and send session
creation to other
+ * cluster nodes.
+ *
+ * @param distribute
+ * @return
+ */
public Session createSession(boolean distribute) {
if ((maxActiveSessions >= 0) &&
@@ -333,10 +285,13 @@
null,
sessionId,
sessionId+System.currentTimeMillis());
+ if(log.isDebugEnabled())
+ log.debug("Manager ("+name+") send new session (" +sessionId+
")");
cluster.send(msg);
session.resetDeltaRequest();
}
- log.debug("Created a DeltaSession with Id["+session.getId()+"] Total
count="+sessions.size());
+ if(log.isDebugEnabled())
+ log.debug("Created a DeltaSession with Id["+session.getId()+"]
Total count="+sessions.size());
return (session);
@@ -611,7 +566,8 @@
// Load unloaded sessions, if any
try {
//the channel is already running
- log.info("Starting clustering manager...:"+getName());
+ if(log.isInfoEnabled())
+ log.info("Starting clustering manager...:"+getName());
if ( cluster == null ) {
log.error("Starting... no cluster associated with this
context:"+getName());
return;
@@ -636,7 +592,8 @@
//request session state
cluster.send(msg, mbr);
- log.warn("Manager["+getName()+"], requesting session state
from "+mbr+
+ if(log.isWarnEnabled())
+ log.warn("Manager["+getName()+"], requesting session
state from "+mbr+
". This operation will timeout if no session state
has been received within "+
"60 seconds");
long reqStart = System.currentTimeMillis();
@@ -651,11 +608,13 @@
} while ( (!getStateTransferred()) && (!isTimeout));
if ( isTimeout || (!getStateTransferred()) ) {
log.error("Manager["+getName()+"], No session state
received, timing out.");
- }else {
- log.info("Manager["+getName()+"], session state received
in "+(reqNow-reqStart)+" ms.");
+ } else {
+ if(log.isInfoEnabled())
+ log.info("Manager["+getName()+"], session state
received in "+(reqNow-reqStart)+" ms.");
}
} else {
- log.info("Manager["+getName()+"], skipping state transfer.
No members active in cluster group.");
+ if(log.isInfoEnabled())
+ log.info("Manager["+getName()+"], skipping state
transfer. No members active in cluster group.");
}//end if
} catch (Throwable t) {
@@ -675,7 +634,7 @@
public void stop() throws LifecycleException {
if (log.isDebugEnabled())
- log.debug("Stopping");
+ log.debug("Manager["+getName()+"] is stopping");
getCluster().removeManager(getName());
@@ -686,22 +645,21 @@
lifecycle.fireLifecycleEvent(STOP_EVENT, null);
started = false;
- // Expire all active sessions
- {
- log.info("Expiring sessions upon shutdown");
- Session sessions[] = findSessions();
- for (int i = 0; i < sessions.length; i++) {
- DeltaSession session = (DeltaSession) sessions[i];
- if (!session.isValid())
- continue;
- try {
- session.expire(true, this.getExpireSessionsOnShutdown());
- }
- catch (Throwable t) {
- ;
- } //catch
- } //for
- }//end if
+ // Expire all active sessions
+ if(log.isInfoEnabled())
+ log.info("Manager["+getName()+"] Expiring sessions upon
shutdown");
+ Session sessions[] = findSessions();
+ for (int i = 0; i < sessions.length; i++) {
+ DeltaSession session = (DeltaSession) sessions[i];
+ if (!session.isValid())
+ continue;
+ try {
+ session.expire(true, this.getExpireSessionsOnShutdown());
+ }
+ catch (Throwable t) {
+ ;
+ } //catch
+ } //for
// Require a new random number generator if we are restarted
this.random = null;
@@ -778,12 +736,20 @@
data, sessionId,
sessionId+System.currentTimeMillis());
session.resetDeltaRequest();
+ if (log.isDebugEnabled()) {
+ log.debug("Manager (" + name + ") send session ("
+ + sessionId + ") delta.");
+ }
} else if ( !session.isPrimarySession() ) {
msg = new SessionMessageImpl(getName(),
SessionMessage.EVT_SESSION_ACCESSED,
null,
sessionId,
sessionId+System.currentTimeMillis());
+ if (log.isDebugEnabled()) {
+ log.debug("Manager (" + name + ") send session ("
+ + sessionId + ") access to change primary.");
+ }
}
session.setPrimarySession(true);
//check to see if we need to send out an access message
@@ -795,6 +761,10 @@
null,
sessionId,
sessionId+System.currentTimeMillis());
+ if (log.isDebugEnabled()) {
+ log.debug("Manager (" + name + ") send session ("
+ + sessionId + ") access.");
+ }
}
}
@@ -810,7 +780,14 @@
}
+ /**
+ * send session expired to other cluster nodes
+ * @param id session id
+ */
protected void sessionExpired(String id) {
+ if (log.isDebugEnabled())
+ log.debug("Manager (" + name + ") send session ("
+ + id + ") expired.");
SessionMessage msg = new SessionMessageImpl(getName(),
SessionMessage.EVT_SESSION_EXPIRED,
null,
@@ -840,38 +817,54 @@
*/
protected void messageReceived(SessionMessage msg, Member sender) {
try {
- log.debug("Manager ("+name+") Received SessionMessage of
type=" + msg.getEventTypeString()+" from "+sender);
+ if(log.isDebugEnabled())
+ log.debug("Manager ("+name+") Received SessionMessage of
type=" + msg.getEventTypeString()+" from "+sender);
switch (msg.getEventType()) {
case SessionMessage.EVT_GET_ALL_SESSIONS: {
//get a list of all the session from this manager
- log.debug("Manager ("+name+") unloading sessions");
+ if(log.isDebugEnabled())
+ log.debug("Manager ("+name+") unloading
sessions");
byte[] data = doUnload();
- log.debug("Manager ("+name+") unloading sessions
complete");
+ if(log.isDebugEnabled())
+ log.debug("Manager ("+name+") unloading sessions
complete");
SessionMessage newmsg = new SessionMessageImpl(name,
SessionMessage.EVT_ALL_SESSION_DATA,
data, "SESSION-STATE","SESSION-STATE-"+getName());
+ if(log.isDebugEnabled())
+ log.debug("Manager ("+name+") send all session
data.");
cluster.send(newmsg, sender);
break;
}
case SessionMessage.EVT_ALL_SESSION_DATA: {
- log.debug("Manager ("+name+") received session state
data.");
+ if(log.isDebugEnabled())
+ log.debug("Manager ("+name+") received session
state data.");
byte[] data = msg.getSession();
doLoad(data);
- log.debug("Manager ("+name+") state deserialized.");
+ if(log.isDebugEnabled())
+ log.debug("Manager ("+name+") state
deserialized.");
stateTransferred = true;
break;
}
case SessionMessage.EVT_SESSION_CREATED: {
+ if (log.isDebugEnabled())
+ log.debug("Manager (" + name + ") received
session ("
+ + msg.getSessionID() + ") created.");
DeltaSession session =
(DeltaSession)createSession(false);
+ // Q: Why inform all session listener a replicate
node?
session.setId(msg.getSessionID());
session.setNew(false);
session.setPrimarySession(false);
+ // Q: Why generate a delta?
session.resetDeltaRequest();
break;
}
case SessionMessage.EVT_SESSION_EXPIRED: {
DeltaSession session =
(DeltaSession)findSession(msg.getSessionID());
if (session != null) {
+ if (log.isDebugEnabled())
+ log.debug("Manager (" + name + ") received
session ("
+ + msg.getSessionID() + ") expired.");
+ // Q: Why not only remove from manager?
session.expire(true,false);
} //end if
break;
@@ -879,6 +872,9 @@
case SessionMessage.EVT_SESSION_ACCESSED: {
DeltaSession session =
(DeltaSession)findSession(msg.getSessionID());
if (session != null) {
+ if (log.isDebugEnabled())
+ log.debug("Manager (" + name + ") received
session ("
+ + msg.getSessionID() + ") accessed.");
session.access();
session.setPrimarySession(false);
session.endAccess();
@@ -889,6 +885,9 @@
byte[] delta = msg.getSession();
DeltaSession session =
(DeltaSession)findSession(msg.getSessionID());
if (session != null) {
+ if (log.isDebugEnabled())
+ log.debug("Manager (" + name + ") received
session ("
+ + msg.getSessionID() + ") delta.");
DeltaRequest dreq = loadDeltaRequest(session,
delta);
dreq.execute(session,notifyListenersOnReplication);
session.setPrimarySession(false);
@@ -910,31 +909,6 @@
// -------------------------------------------------------- Private
Methods
-
- public void backgroundProcess() {
- processExpires();
- }
- /**
- * Invalidate all sessions that have expired.
- */
- public void processExpires() {
- long timeNow = System.currentTimeMillis();
- Session sessions[] = findSessions();
-
- for (int i = 0; i < sessions.length; i++) {
- DeltaSession session = (DeltaSession) sessions[i];
- if (!session.isValid()) {
- try {
- expiredSessions++;
- } catch (Throwable t) {
- log.error(sm.getString
- ("standardManager.expireException"), t);
- }
- }
- }
- long timeEnd = System.currentTimeMillis();
- processingTime += ( timeEnd - timeNow );
- }
public boolean getStateTransferred() {
return stateTransferred;
1.28 +3 -2
jakarta-tomcat-catalina/modules/cluster/src/share/org/apache/catalina/cluster/session/DeltaSession.java
Index: DeltaSession.java
===================================================================
RCS file:
/home/cvs/jakarta-tomcat-catalina/modules/cluster/src/share/org/apache/catalina/cluster/session/DeltaSession.java,v
retrieving revision 1.27
retrieving revision 1.28
diff -u -r1.27 -r1.28
--- DeltaSession.java 29 Sep 2004 16:43:44 -0000 1.27
+++ DeltaSession.java 22 Nov 2004 14:51:18 -0000 1.28
@@ -770,7 +770,8 @@
if ( notifyCluster ) {
- log.debug("Notifying cluster of expiration primary=" +
+ if(log.isDebugEnabled())
+ log.debug("Notifying cluster of expiration primary=" +
isPrimarySession() + " id=" + expiredId);
( (DeltaManager) manager).sessionExpired(expiredId);
}
1.36 +16 -8
jakarta-tomcat-catalina/modules/cluster/src/share/org/apache/catalina/cluster/session/SimpleTcpReplicationManager.java
Index: SimpleTcpReplicationManager.java
===================================================================
RCS file:
/home/cvs/jakarta-tomcat-catalina/modules/cluster/src/share/org/apache/catalina/cluster/session/SimpleTcpReplicationManager.java,v
retrieving revision 1.35
retrieving revision 1.36
diff -u -r1.35 -r1.36
--- SimpleTcpReplicationManager.java 13 Nov 2004 22:10:10 -0000 1.35
+++ SimpleTcpReplicationManager.java 22 Nov 2004 14:51:18 -0000 1.36
@@ -128,7 +128,8 @@
}
public void setCluster(CatalinaCluster cluster) {
- log.debug("Cluster associated with SimpleTcpReplicationManager");
+ if(log.isDebugEnabled())
+ log.debug("Cluster associated with SimpleTcpReplicationManager");
this.cluster = cluster;
}
@@ -139,7 +140,8 @@
public void setPrintToScreen(boolean printtoscreen)
{
- log.debug("Setting screen debug to:"+printtoscreen);
+ if(log.isDebugEnabled())
+ log.debug("Setting screen debug to:"+printtoscreen);
mPrintToScreen = printtoscreen;
}
@@ -413,7 +415,8 @@
try {
//the channel is already running
if ( mChannelStarted ) return;
- log.info("Starting clustering manager...:"+getName());
+ if(log.isInfoEnabled())
+ log.info("Starting clustering manager...:"+getName());
if ( cluster == null ) {
log.error("Starting... no cluster associated with this
context:"+getName());
return;
@@ -429,7 +432,8 @@
"GET-ALL",
"GET-ALL-"+this.getName());
cluster.send(msg, mbr);
- log.warn("Manager["+getName()+"], requesting session state
from "+mbr+
+ if(log.isWarnEnabled())
+ log.warn("Manager["+getName()+"], requesting session
state from "+mbr+
". This operation will timeout if no session state
has been received within "+
"60 seconds");
long reqStart = System.currentTimeMillis();
@@ -445,10 +449,12 @@
if ( isTimeout || (!isStateTransferred()) ) {
log.error("Manager["+getName()+"], No session state
received, timing out.");
}else {
- log.info("Manager["+getName()+"], session state received
in "+(reqNow-reqStart)+" ms.");
+ if(log.isInfoEnabled())
+ log.info("Manager["+getName()+"], session state
received in "+(reqNow-reqStart)+" ms.");
}
} else {
- log.info("Manager["+getName()+"], skipping state transfer.
No members active in cluster group.");
+ if(log.isInfoEnabled())
+ log.info("Manager["+getName()+"], skipping state
transfer. No members active in cluster group.");
}//end if
mChannelStarted = true;
} catch ( Exception x ) {
@@ -504,8 +510,10 @@
*/
protected void messageReceived( SessionMessage msg, Member sender ) {
try {
- log.debug("Received SessionMessage of
type="+msg.getEventTypeString());
- log.debug("Received SessionMessage sender="+sender);
+ if(log.isInfoEnabled()) {
+ log.debug("Received SessionMessage of
type="+msg.getEventTypeString());
+ log.debug("Received SessionMessage sender="+sender);
+ }
switch ( msg.getEventType() ) {
case SessionMessage.EVT_GET_ALL_SESSIONS: {
//get a list of all the session from this manager
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]