You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by pe...@apache.org on 2005/03/25 23:11:40 UTC
cvs commit: jakarta-tomcat-catalina/modules/cluster/src/share/org/apache/catalina/cluster/tcp SimpleTcpCluster.java
pero 2005/03/25 14:11:40
Modified: modules/cluster/src/share/org/apache/catalina/cluster/tcp
SimpleTcpCluster.java
Log:
Add a lot Fixme for next 5.5.10 release :-)
Revision Changes Path
1.59 +65 -22 jakarta-tomcat-catalina/modules/cluster/src/share/org/apache/catalina/cluster/tcp/SimpleTcpCluster.java
Index: SimpleTcpCluster.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat-catalina/modules/cluster/src/share/org/apache/catalina/cluster/tcp/SimpleTcpCluster.java,v
retrieving revision 1.58
retrieving revision 1.59
diff -u -r1.58 -r1.59
--- SimpleTcpCluster.java 15 Feb 2005 09:31:45 -0000 1.58
+++ SimpleTcpCluster.java 25 Mar 2005 22:11:39 -0000 1.59
@@ -58,8 +58,17 @@
* setting up a cluster and provides callers with a valid multicast
* receiver/sender.
*
+ * FIXME remove install/remove/start/stop context dummys
+ * FIXME better stats
+ * FIXME factor out receiver handling
+ * FIXME Support JMX and Lifecycle Listener Notification (start/stop member) (start/stop context/manager)
+ * FIXME optimize message package creation
+ * FIXME better compress message handling
+ * FIXME Clearer implementation from notifyListenersOnReplication flag
+ *
* @author Filip Hanik
* @author Remy Maucherat
+ * @author Peter Rossbach
* @version $Revision$, $Date$
*/
@@ -297,10 +306,18 @@
return manager;
}
+ /* remove an application form cluster replication bus
+ * FIXME notify someone (JMX(Listener)
+ * @see org.apache.catalina.cluster.CatalinaCluster#removeManager(java.lang.String)
+ */
public void removeManager(String name) {
managers.remove(name);
}
+ /* add an application to cluster replication bus
+ * FIXME notify someone (JMX(Listener)
+ * @see org.apache.catalina.cluster.CatalinaCluster#addManager(java.lang.String, org.apache.catalina.cluster.ClusterManager)
+ */
public void addManager(String name, ClusterManager manager) {
manager.setName(name);
manager.setCluster(this);
@@ -366,6 +383,7 @@
* other nodes in the cluster, and request the current session state to be
* transferred to this node.
*
+ * FIXME notify someone (JMX(Listener)
* @exception IllegalStateException
* if this component has already been started
* @exception LifecycleException
@@ -389,7 +407,7 @@
}
registerMBeans();
- clusterReceiver.setWaitForAck(clusterSender.isWaitForAck());
+ clusterReceiver.setSendAck(clusterSender.isWaitForAck());
clusterReceiver.setCatalinaCluster(this);
clusterReceiver.start();
clusterSender.setCatalinaCluster(this);
@@ -435,20 +453,15 @@
&& (smsg.getEventType() == SessionMessage.EVT_GET_ALL_SESSIONS)
&& (membershipService.getMembers().length > 0)) {
destination = membershipService.getMembers()[0];
- }//end if
- }//end if
- msg.setTimestamp(System.currentTimeMillis());
- java.io.ByteArrayOutputStream outs = new java.io.ByteArrayOutputStream();
- java.io.ObjectOutputStream out = new java.io.ObjectOutputStream(
- outs);
- out.writeObject(msg);
- byte[] data = outs.toByteArray();
+ }
+ }
+ byte[] data = createMessageData(msg);
if (destination != null) {
Member tcpdest = dest;
if ((tcpdest != null)
&& (!membershipService.getLocalMember().equals(tcpdest))) {
clusterSender.sendMessage(msg.getUniqueId(), data, tcpdest);
- }//end if
+ }
} else {
clusterSender.sendMessage(msg.getUniqueId(), data);
}
@@ -458,6 +471,22 @@
}
/**
+ * Send Message create Timestamp and generate message bytes form msg
+ * @param msg cluster message
+ * @return cluster message as byte array
+ * @throws IOException
+ */
+ protected byte[] createMessageData(ClusterMessage msg) throws IOException {
+ msg.setTimestamp(System.currentTimeMillis());
+ java.io.ByteArrayOutputStream outs = new java.io.ByteArrayOutputStream();
+ java.io.ObjectOutputStream out = new java.io.ObjectOutputStream(
+ outs);
+ out.writeObject(msg);
+ byte[] data = outs.toByteArray();
+ return data;
+ }
+
+ /**
* send message to all cluster members
*
* @see org.apache.catalina.cluster.CatalinaCluster#send(org.apache.catalina.cluster.ClusterMessage)
@@ -473,6 +502,7 @@
* This will disconnect the cluster communication channel and stop the
* listener thread.
*
+ * FIXME notify someone (JMX(Listener)
* @exception IllegalStateException
* if this component has not been started
* @exception LifecycleException
@@ -504,6 +534,10 @@
started = false;
}
+ /* New cluster member is registered
+ * FIXME notify someone (JMX(Listener)
+ * @see org.apache.catalina.cluster.MembershipListener#memberAdded(org.apache.catalina.cluster.Member)
+ */
public void memberAdded(Member member) {
try {
if (log.isInfoEnabled())
@@ -515,6 +549,10 @@
}
+ /* Cluster member is gone
+ * FIXME notify someone (JMX(Listener)
+ * @see org.apache.catalina.cluster.MembershipListener#memberDisappeared(org.apache.catalina.cluster.Member)
+ */
public void memberDisappeared(Member member) {
if (log.isInfoEnabled())
log.info("Received member disappeared:" + member);
@@ -587,13 +625,15 @@
new java.io.ByteArrayInputStream(data), getClass()
.getClassLoader());
Object myobj = stream.readObject();
+ if (log.isDebugEnabled()
+ && myobj != null && myobj instanceof ClusterMessage)
+ log.debug("Assuming clocks are synched: Replication for "
+ + ((ClusterMessage) myobj).getUniqueId() + " took="
+ + (System.currentTimeMillis() - ((ClusterMessage) myobj).getTimestamp())
+ + " ms.");
if (myobj != null && myobj instanceof SessionMessage) {
SessionMessage msg = (SessionMessage) myobj;
- if (log.isDebugEnabled())
- log.debug("Assuming clocks are synched: Replication took="
- + (System.currentTimeMillis() - msg.getTimestamp())
- + " ms.");
String ctxname = msg.getContextName();
//check if the message is a EVT_GET_ALL_SESSIONS,
//if so, wait until we are fully started up
@@ -611,14 +651,14 @@
log.debug("Context manager doesn't exist:"
+ key);
}
- }//while
+ }
} else {
ClusterManager mgr = (ClusterManager) managers.get(ctxname);
if (mgr != null)
mgr.messageDataReceived(msg);
else if (log.isWarnEnabled())
log.warn("Context manager doesn't exist:" + ctxname);
- }//end if
+ }
} else {
//invoke all the listeners
for (int i = 0; i < clusterListeners.size(); i++) {
@@ -626,11 +666,14 @@
.elementAt(i);
if (myobj != null && myobj instanceof ClusterMessage
&& listener.accept((ClusterMessage) myobj)) {
- listener.messageReceived((ClusterMessage) myobj);
- }//end if
-
- }//for
- }//end if
+ listener.messageReceived((ClusterMessage) myobj);
+ } else
+ if(log.isDebugEnabled())
+ log.debug("Message " + myobj.toString()
+ + " from type " + myobj.getClass().getName()
+ + " transfered but no listener registered");
+ }
+ }
} catch (Exception x) {
log.error("Unable to deserialize session message.", x);
---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-dev-help@jakarta.apache.org