Author: fhanik
Date: Tue May 23 14:59:43 2006
New Revision: 409012
URL: http://svn.apache.org/viewvc?rev=409012&view=rev
Log:
More changes to coordination,
Modified:
tomcat/container/tc5.5.x/modules/groupcom/doc/leader-election-message-arrives.dia
tomcat/container/tc5.5.x/modules/groupcom/doc/leader-election-message-arrives.jpg
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/group/interceptors/NonBlockingCoordinator.java
Modified:
tomcat/container/tc5.5.x/modules/groupcom/doc/leader-election-message-arrives.dia
URL:
http://svn.apache.org/viewvc/tomcat/container/tc5.5.x/modules/groupcom/doc/leader-election-message-arrives.dia?rev=409012&r1=409011&r2=409012&view=diff
==============================================================================
Binary files - no diff available.
Modified:
tomcat/container/tc5.5.x/modules/groupcom/doc/leader-election-message-arrives.jpg
URL:
http://svn.apache.org/viewvc/tomcat/container/tc5.5.x/modules/groupcom/doc/leader-election-message-arrives.jpg?rev=409012&r1=409011&r2=409012&view=diff
==============================================================================
Binary files - no diff available.
Modified:
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/group/interceptors/NonBlockingCoordinator.java
URL:
http://svn.apache.org/viewvc/tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/group/interceptors/NonBlockingCoordinator.java?rev=409012&r1=409011&r2=409012&view=diff
==============================================================================
---
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/group/interceptors/NonBlockingCoordinator.java
(original)
+++
tomcat/container/tc5.5.x/modules/groupcom/src/share/org/apache/catalina/tribes/group/interceptors/NonBlockingCoordinator.java
Tue May 23 14:59:43 2006
@@ -162,6 +162,7 @@
* and this is the one we are running
*/
protected UniqueId suggestedviewId;
+ protected Membership suggestedView;
protected LinkedHashMap rotatingViews = new LinkedHashMap();
@@ -174,24 +175,9 @@
super();
}
- public void start(int svc) throws ChannelException {
- if ( membership == null ) setupMembership();
- if (started)return;
- super.start(startsvc);
- startElection(false);
- started = true;
- }
-
- public void stop(int svc) throws ChannelException {
- try {
- halt();
- if ( !started ) return;
- super.stop(startsvc);
- started = false;
- }finally {
- release();
- }
- }
+//============================================================================================================
+// COORDINATION HANDLING
+//============================================================================================================
public Membership getView(UniqueId id) {
return (Membership)rotatingViews.get(id);
@@ -229,6 +215,8 @@
MemberImpl[] mbrs = m.getMembers();
CoordinationMessage msg = new CoordinationMessage(leader, local,
mbrs,new UniqueId(UUIDGenerator.randomUUID(true)), this.COORD_REQUEST);
suggestedviewId = msg.getId();
+ suggestedView = new Membership(local);
+ Arrays.fill(suggestedView,mbrs);
rotatingViews.put(suggestedviewId, msg);
super.sendMessage(new Member[] {others[0]}, createData(msg,
local), null);
}
@@ -273,17 +261,28 @@
protected void processCoordMessage(CoordinationMessage msg, Member sender)
{
synchronized (electionMutex) {
msg.timestamp = System.currentTimeMillis();
+ rotatingViews.put(msg.getId(),msg);
+ Membership merged = mergeOnArrive(msg,sender);
+ if ( isViewConf(msg) ) handleViewConf(msg, sender,merged);
}
}
-
- protected void sendMessage(CoordinationMessage msg, Member dest) throws
ChannelException {
- ChannelData data = new
ChannelData(UUIDGenerator.randomUUID(false),msg.getBuffer(),System.currentTimeMillis());
- data.setOptions(Channel.SEND_OPTIONS_USE_ACK);
- Member[] destination = new Member[] {dest};
- sendMessage(destination,data,null);
+ protected void handleViewConf(CoordinationMessage msg, Member sender,
+ Membership merged) {
+ this.view = new
Membership((MemberImpl)getLocalMember(false),AbsoluteOrder.comp);
+ this.viewId = msg.getId();
+ if ( viewId.equals(this.suggestedviewId) ) {
+ this.suggestedView = null;
+ this.suggestedviewId = null;
+ }
+ this.viewChange(viewId,view.getMembers());
+
}
+ protected boolean isViewConf(CoordinationMessage msg) {
+ return Arrays.contains(msg.getType(),0,COORD_CONF,0,COORD_CONF.length);
+ }
+
/**
* Returns coordinator if one is available
@@ -293,6 +292,51 @@
return (view != null && view.hasMembers()) ? view.getMembers()[0] :
null;
}
+ /**
+ * Block in/out messages while a election is going on
+ */
+ protected void halt() {
+
+ }
+
+ /**
+ * Release lock for in/out messages election is completed
+ */
+ protected void release() {
+
+ }
+
+ /**
+ * Wait for an election to end
+ */
+ protected void waitForRelease() {
+
+ }
+
+
+//============================================================================================================
+// OVERRIDDEN METHODS FROM CHANNEL INTERCEPTOR BASE
+//============================================================================================================
+ public void start(int svc) throws ChannelException {
+ if ( membership == null ) setupMembership();
+ if (started)return;
+ super.start(startsvc);
+ startElection(false);
+ started = true;
+ }
+
+ public void stop(int svc) throws ChannelException {
+ try {
+ halt();
+ if ( !started ) return;
+ super.stop(startsvc);
+ started = false;
+ }finally {
+ release();
+ }
+ }
+
+
public void sendMessage(Member[] destination, ChannelMessage msg,
InterceptorPayload payload) throws ChannelException {
waitForRelease();
super.sendMessage(destination, msg, payload);
@@ -390,26 +434,13 @@
}
}
- /**
- * Block in/out messages while a election is going on
- */
- protected void halt() {
-
- }
- /**
- * Release lock for in/out messages election is completed
- */
- protected void release() {
-
- }
+//============================================================================================================
+// HELPER CLASSES FOR COORDINATION
+//============================================================================================================
- /**
- * Wait for an election to end
- */
- protected void waitForRelease() {
-
- }
+
+
public static class CoordinationMessage {
//X{A-ldr, A-src, mbrs-A,B,C,D}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]