You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by fh...@apache.org on 2006/05/23 01:02:55 UTC
svn commit: r408780 - in /tomcat/container/tc5.5.x/modules/groupcom:
src/share/org/apache/catalina/tribes/group/interceptors/StaticMembershipInterceptor.java
to-do.txt
Author: fhanik
Date: Mon May 22 16:02:55 2006
New Revision: 408780
URL: http://svn.apache.org/viewvc?rev=408780&view=rev
Log:
Added static membership interceptor, so that you can hard code your members.
Stuff the TcpFailureDetector on top of this, and you will get a true membership
Added:
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/group/interceptors/StaticMembershipInterceptor.java
Modified:
tomcat/container/tc5.5.x/modules/groupcom/to-do.txt
Added: tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/group/interceptors/StaticMembershipInterceptor.java
URL: http://svn.apache.org/viewvc/tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/group/interceptors/StaticMembershipInterceptor.java?rev=408780&view=auto
==============================================================================
--- tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/group/interceptors/StaticMembershipInterceptor.java (added)
+++ tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/group/interceptors/StaticMembershipInterceptor.java Mon May 22 16:02:55 2006
@@ -0,0 +1,78 @@
+package org.apache.catalina.tribes.group.interceptors;
+
+import org.apache.catalina.tribes.group.ChannelInterceptorBase;
+import org.apache.catalina.tribes.Member;
+import java.util.ArrayList;
+import org.apache.catalina.tribes.group.AbsoluteOrder;
+
+public class StaticMembershipInterceptor
+ extends ChannelInterceptorBase {
+ protected ArrayList members = new ArrayList();
+ protected Member localMember = null;
+
+ public StaticMembershipInterceptor() {
+ super();
+ }
+
+ public void addStaticMember(Member member) {
+ synchronized (members) {
+ if (!members.contains(member)) members.add(member);
+ }
+ }
+
+ public void removeStaticMember(Member member) {
+ synchronized (members) {
+ if (members.contains(member)) members.remove(member);
+ }
+ }
+
+ public void setLocalMember(Member member) {
+ this.localMember = member;
+ }
+
+ /**
+ * has members
+ */
+ public boolean hasMembers() {
+ return super.hasMembers() || (members.size()>0);
+ }
+
+ /**
+ * Get all current cluster members
+ * @return all members or empty array
+ */
+ public Member[] getMembers() {
+ if ( members.size() == 0 ) return super.getMembers();
+ else {
+ synchronized (members) {
+ Member[] others = super.getMembers();
+ Member[] result = new Member[members.size() + others.length];
+ for (int i = 0; i < others.length; i++) result[i] = others[i];
+ for (int i = 0; i < members.size(); i++) result[i + others.length] = (Member) members.get(i);
+ AbsoluteOrder.absoluteOrder(result);
+ return result;
+ }//sync
+ }//end if
+ }
+
+ /**
+ *
+ * @param mbr Member
+ * @return Member
+ */
+ public Member getMember(Member mbr) {
+ if ( members.contains(mbr) ) return (Member)members.get(members.indexOf(mbr));
+ else return super.getMember(mbr);
+ }
+
+ /**
+ * Return the member that represents this node.
+ *
+ * @return Member
+ */
+ public Member getLocalMember(boolean incAlive) {
+ if (this.localMember != null ) return localMember;
+ else return super.getLocalMember(incAlive);
+ }
+
+}
\ No newline at end of file
Modified: tomcat/container/tc5.5.x/modules/groupcom/to-do.txt
URL: http://svn.apache.org/viewvc/tomcat/container/tc5.5.x/modules/groupcom/to-do.txt?rev=408780&r1=408779&r2=408780&view=diff
==============================================================================
--- tomcat/container/tc5.5.x/modules/groupcom/to-do.txt (original)
+++ tomcat/container/tc5.5.x/modules/groupcom/to-do.txt Mon May 22 16:02:55 2006
@@ -66,9 +66,6 @@
35. The ability to share one channel amongst multiple processes
-34. Configurable payload for the membership heartbeat, so that the app can decide what to heartbeat.
- such as JMX management port, ala Andy Piper's suggestion.
-
32. Replicated JNDI entries in Tomcat in the format
cluster:<map name>/<entry key> for example
cluster:myapps/db/shared/dbinfo
@@ -100,9 +97,6 @@
26. JNDIChannel - a way to bind the group channel in a JNDI tree,
so that shared resources can access it.
-25. Member.uniqueId - 16 bytes unique for a member, UUID
- Needed to not confuse a crashed member with a revived member on the same port
-
23. TotalOrderInterceptor - fairly straight forward implementation
This interceptor would depend on the fact that there is some sort of
membership coordinator, see task 9.
@@ -131,14 +125,14 @@
cons: the sequence can become overloaded, since it has to do all the trafficing
the requesting member will not know if the message failed/succeeded
OPTION C) Research papers on total order, better algorithms exist.
+ NOTES! THIS CANT BE DONE USING A SEQUENCER THAT SENDS THE MESSAGE SINCE WE
+ LOSE THE ABILITY TO REPORT FEEDBACK
21. Implement a WAN membership layer, using a WANMbrInterceptor and a
WAN Router/Forwarder (Tipi on top of a ManagedChannel)
20. Implement a TCP membership interceptor, for guaranteed functionality, not just discovery
-19. Implement a hardcoded tcp membership
-
18. Implement SSL encryption over message transfers, BIO and NIO
8. WaitForCompletionInterceptor - waits for the message to get processed by all receivers before returning
@@ -146,8 +140,6 @@
parallel processing, but you want to have all messages sent in parallel and
don't return until all have been processed on the remote end.)
-10. Xa2PhaseCommitInterceptor - make sure the message doesn't reach the receiver unless all members got it
-
11. Code a ReplicatedFileSystem example, package org.apache.catalina.tipis
13. StateTransfer interceptor
@@ -162,11 +154,6 @@
14. Keepalive count and idle kill off for Nio senders
-16. Guaranteed delivery of messages, ie either all get it or none get it.
- Meaning, that all receivers get it, then wait for a process command.
- ala Gossip protocol - this is fairly redundant with a Xa2PhaseCommitInterceptor
- except it doesn't keep a transaction log.
-
17. Implement transactions - the ability to start a transaction, send several messages,
and then commit the transaction
@@ -292,4 +279,27 @@
Notes: Completed
33. TcpFailureDetector, when a member is reported missing, first check TCP path too.
+Notes: Completed
+
+34. Configurable payload for the membership heartbeat, so that the app can decide what to heartbeat.
+ such as JMX management port, ala Andy Piper's suggestion.
+Notes: Completed
+
+49. Make sure that membership is established before the start process returns.
+Notes: Completed
+
+16. Guaranteed delivery of messages, ie either all get it or none get it.
+ Meaning, that all receivers get it, then wait for a process command.
+ ala Gossip protocol - this is fairly redundant with a Xa2PhaseCommitInterceptor
+ except it doesn't keep a transaction log.
+Notes: Completed in another task
+
+10. Xa2PhaseCommitInterceptor - make sure the message doesn't reach the receiver unless all members got it
+Notes: Completed
+
+25. Member.uniqueId - 16 bytes unique for a member, UUID
+ Needed to not confuse a crashed member with a revived member on the same port
+Notes: Completed
+
+19. Implement a hardcoded tcp membership
Notes: Completed
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org