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 2014/04/03 09:57:38 UTC
svn commit: r1584275 - in /tomcat/tc7.0.x/trunk:
java/org/apache/catalina/ha/session/ webapps/docs/
Author: kfujino
Date: Thu Apr 3 07:57:38 2014
New Revision: 1584275
URL: http://svn.apache.org/r1584275
Log:
Backport r1584267, r1584268, r1584270 and r1584274
Add support for cross context session replication to BackupManager.
This fix is included sevral improvement of cluster manager.
Modified:
tomcat/tc7.0.x/trunk/java/org/apache/catalina/ha/session/BackupManager.java
tomcat/tc7.0.x/trunk/java/org/apache/catalina/ha/session/ClusterManagerBase.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/DeltaSession.java
tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml
Modified: tomcat/tc7.0.x/trunk/java/org/apache/catalina/ha/session/BackupManager.java
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/catalina/ha/session/BackupManager.java?rev=1584275&r1=1584274&r2=1584275&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/catalina/ha/session/BackupManager.java (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/catalina/ha/session/BackupManager.java Thu Apr 3 07:57:38 2014
@@ -20,12 +20,10 @@ import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
-import org.apache.catalina.Cluster;
import org.apache.catalina.DistributedManager;
import org.apache.catalina.LifecycleException;
import org.apache.catalina.LifecycleState;
import org.apache.catalina.Session;
-import org.apache.catalina.ha.CatalinaCluster;
import org.apache.catalina.ha.ClusterManager;
import org.apache.catalina.ha.ClusterMessage;
import org.apache.catalina.tribes.Channel;
@@ -168,16 +166,7 @@ public class BackupManager extends Clust
super.startInternal();
try {
- if (getCluster() == null) {
- Cluster cluster = getContainer().getCluster();
- if (cluster instanceof CatalinaCluster) {
- setCluster((CatalinaCluster)cluster);
- } else {
- throw new LifecycleException(
- sm.getString("backupManager.noCluster", getName()));
- }
- }
- cluster.registerManager(this);
+ if (cluster == null) throw new LifecycleException(sm.getString("backupManager.noCluster", getName()));
LazyReplicatedMap map = new LazyReplicatedMap(this,
cluster.getChannel(),
rpcTimeout,
@@ -223,7 +212,6 @@ public class BackupManager extends Clust
map.breakdown();
}
- cluster.removeManager(this);
super.stopInternal();
}
Modified: tomcat/tc7.0.x/trunk/java/org/apache/catalina/ha/session/ClusterManagerBase.java
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/catalina/ha/session/ClusterManagerBase.java?rev=1584275&r1=1584274&r2=1584275&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/catalina/ha/session/ClusterManagerBase.java (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/catalina/ha/session/ClusterManagerBase.java Thu Apr 3 07:57:38 2014
@@ -21,12 +21,18 @@ import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.util.regex.Pattern;
+import org.apache.catalina.Cluster;
import org.apache.catalina.Container;
+import org.apache.catalina.LifecycleException;
import org.apache.catalina.Loader;
+import org.apache.catalina.Valve;
import org.apache.catalina.ha.CatalinaCluster;
import org.apache.catalina.ha.ClusterManager;
+import org.apache.catalina.ha.tcp.ReplicationValve;
import org.apache.catalina.session.ManagerBase;
import org.apache.catalina.tribes.io.ReplicationStream;
+import org.apache.juli.logging.Log;
+import org.apache.juli.logging.LogFactory;
/**
*
@@ -35,6 +41,8 @@ import org.apache.catalina.tribes.io.Rep
public abstract class ClusterManagerBase extends ManagerBase
implements ClusterManager {
+ private final Log log = LogFactory.getLog(ClusterManagerBase.class);
+
/**
* A reference to the cluster
*/
@@ -59,6 +67,11 @@ public abstract class ClusterManagerBase
*/
private Pattern sessionAttributePattern = null;
+ /**
+ * cached replication valve cluster container!
+ */
+ private volatile ReplicationValve replicationValve = null ;
+
/*
* @see org.apache.catalina.ha.ClusterManager#getCluster()
*/
@@ -180,7 +193,6 @@ public abstract class ClusterManagerBase
protected void clone(ClusterManagerBase copy) {
copy.setName("Clone-from-" + getName());
- copy.setCluster(getCluster());
copy.setMaxActiveSessions(getMaxActiveSessions());
copy.setMaxInactiveInterval(getMaxInactiveInterval());
copy.setSessionIdLength(getSessionIdLength());
@@ -192,4 +204,47 @@ public abstract class ClusterManagerBase
copy.setSecureRandomAlgorithm(getSecureRandomAlgorithm());
}
+ /**
+ * Register cross context session at replication valve thread local
+ * @param session cross context session
+ */
+ protected void registerSessionAtReplicationValve(DeltaSession session) {
+ if(replicationValve == null) {
+ CatalinaCluster cluster = getCluster() ;
+ if(cluster != null) {
+ Valve[] valves = cluster.getValves();
+ if(valves != null && valves.length > 0) {
+ for(int i=0; replicationValve == null && i < valves.length ; i++ ){
+ if(valves[i] instanceof ReplicationValve) replicationValve = (ReplicationValve)valves[i] ;
+ }//for
+
+ if(replicationValve == null && log.isDebugEnabled()) {
+ log.debug("no ReplicationValve found for CrossContext Support");
+ }//endif
+ }//end if
+ }//endif
+ }//end if
+ if(replicationValve != null) {
+ replicationValve.registerReplicationSession(session);
+ }
+ }
+
+ @Override
+ protected void startInternal() throws LifecycleException {
+ super.startInternal();
+ if (getCluster() == null) {
+ Cluster cluster = getContainer().getCluster();
+ if (cluster instanceof CatalinaCluster) {
+ setCluster((CatalinaCluster)cluster);
+ }
+ }
+ if (cluster != null) cluster.registerManager(this);
+ }
+
+ @Override
+ protected void stopInternal() throws LifecycleException {
+ if (cluster != null) cluster.removeManager(this);
+ replicationValve = null;
+ super.stopInternal();
+ }
}
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=1584275&r1=1584274&r2=1584275&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 Thu Apr 3 07:57:38 2014
@@ -26,20 +26,14 @@ import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
-import org.apache.catalina.Cluster;
-import org.apache.catalina.Container;
import org.apache.catalina.Context;
import org.apache.catalina.Engine;
import org.apache.catalina.Host;
import org.apache.catalina.LifecycleException;
import org.apache.catalina.LifecycleState;
import org.apache.catalina.Session;
-import org.apache.catalina.Valve;
-import org.apache.catalina.core.StandardContext;
-import org.apache.catalina.ha.CatalinaCluster;
import org.apache.catalina.ha.ClusterManager;
import org.apache.catalina.ha.ClusterMessage;
-import org.apache.catalina.ha.tcp.ReplicationValve;
import org.apache.catalina.session.ManagerBase;
import org.apache.catalina.tribes.Member;
import org.apache.catalina.tribes.io.ReplicationStream;
@@ -85,11 +79,6 @@ public class DeltaManager extends Cluste
*/
protected static String managerName = "DeltaManager";
protected String name = null;
-
- /**
- * cached replication valve cluster container!
- */
- private volatile ReplicationValve replicationValve = null ;
private boolean expireSessionsOnShutdown = false;
private boolean notifySessionListenersOnReplication = true;
@@ -748,20 +737,6 @@ public class DeltaManager extends Cluste
// Load unloaded sessions, if any
try {
- //the channel is already running
- Cluster cluster = getCluster() ;
- // stop remove cluster binding
- if(cluster == null) {
- Container context = getContainer();
- if (context != null) {
- cluster = context.getCluster();
- if(cluster instanceof CatalinaCluster) {
- setCluster((CatalinaCluster) cluster);
- } else {
- cluster = null;
- }
- }
- }
if (cluster == null) {
log.error(sm.getString("deltaManager.noCluster", getName()));
return;
@@ -777,9 +752,6 @@ public class DeltaManager extends Cluste
}
}
if (log.isInfoEnabled()) log.info(sm.getString("deltaManager.startClustering", getName()));
- //to survice context reloads, as only a stop/start is called, not
- // createManager
- cluster.registerManager(this);
getAllClusterSessions();
@@ -846,33 +818,6 @@ public class DeltaManager extends Cluste
}
/**
- * Register cross context session at replication valve thread local
- * @param session cross context session
- */
- protected void registerSessionAtReplicationValve(DeltaSession session) {
- if(replicationValve == null) {
- if(container instanceof StandardContext && ((StandardContext)container).getCrossContext()) {
- CatalinaCluster cluster = getCluster() ;
- if(cluster != null) {
- Valve[] valves = cluster.getValves();
- if(valves != null && valves.length > 0) {
- for(int i=0; replicationValve == null && i < valves.length ; i++ ){
- if(valves[i] instanceof ReplicationValve) replicationValve = (ReplicationValve)valves[i] ;
- }//for
-
- if(replicationValve == null && log.isDebugEnabled()) {
- log.debug("no ReplicationValve found for CrossContext Support");
- }//endif
- }//end if
- }//endif
- }//end if
- }//end if
- if(replicationValve != null) {
- replicationValve.registerReplicationSession(session);
- }
- }
-
- /**
* Find the master of the session state
* @return master member of sessions
*/
@@ -958,9 +903,7 @@ public class DeltaManager extends Cluste
}
// Require a new random number generator if we are restarted
- getCluster().removeManager(this);
super.stopInternal();
- replicationValve = null;
}
// -------------------------------------------------------- Replication
@@ -1509,7 +1452,6 @@ public class DeltaManager extends Cluste
public ClusterManager cloneFromTemplate() {
DeltaManager result = new DeltaManager();
clone(result);
- result.replicationValve = replicationValve;
result.expireSessionsOnShutdown = expireSessionsOnShutdown;
result.notifySessionListenersOnReplication = notifySessionListenersOnReplication;
result.notifyContainerListenersOnReplication = notifyContainerListenersOnReplication;
Modified: tomcat/tc7.0.x/trunk/java/org/apache/catalina/ha/session/DeltaSession.java
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/catalina/ha/session/DeltaSession.java?rev=1584275&r1=1584274&r2=1584275&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/catalina/ha/session/DeltaSession.java (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/catalina/ha/session/DeltaSession.java Thu Apr 3 07:57:38 2014
@@ -423,8 +423,8 @@ public class DeltaSession extends Standa
@Override
public void endAccess() {
super.endAccess() ;
- if(manager instanceof DeltaManager) {
- ((DeltaManager)manager).registerSessionAtReplicationValve(this);
+ if(manager instanceof ClusterManagerBase) {
+ ((ClusterManagerBase)manager).registerSessionAtReplicationValve(this);
}
}
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=1584275&r1=1584274&r2=1584275&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml Thu Apr 3 07:57:38 2014
@@ -75,6 +75,30 @@
</fix>
</changelog>
</subsection>
+ <subsection name="Cluster">
+ <changelog>
+ <fix>
+ Remove cluster and replicationValve from cluster manager template. These
+ instance are not necessary to template. (kfujino)
+ </fix>
+ <fix>
+ Add support for cross context session replication to
+ <code>org.apache.catalina.ha.session.BackupManager</code>. (kfujino)
+ </fix>
+ <fix>
+ Remove the unnecessary cross context check. It does not matter whether
+ the context that is referenced by other context is set to
+ <code>crossContext</code>=true. The context that refers to the different
+ context must be set to <code>crossContext</code>=true. (kfujino)
+ </fix>
+ <scode>
+ Move to <code>org.apache.catalina.ha.session.ClusterManagerBase</code>
+ common logics of
+ <code>org.apache.catalina.ha.session.BackupManager</code> and
+ <code>org.apache.catalina.ha.session.DeltaManager</code>. (kfujino)
+ </scode>
+ </changelog>
+ </subsection>
<subsection name="Web applications">
<changelog>
<fix>
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org