Author: kfujino
Date: Tue Dec 15 06:45:36 2015
New Revision: 1720076
URL: http://svn.apache.org/viewvc?rev=1720076&view=rev
Log:
Add support for the startup notification of local members in the static cluster.
Modified:
tomcat/tc8.0.x/trunk/java/org/apache/catalina/tribes/group/interceptors/LocalStrings.properties
tomcat/tc8.0.x/trunk/java/org/apache/catalina/tribes/group/interceptors/StaticMembershipInterceptor.java
tomcat/tc8.0.x/trunk/webapps/docs/changelog.xml
Modified:
tomcat/tc8.0.x/trunk/java/org/apache/catalina/tribes/group/interceptors/LocalStrings.properties
URL:
http://svn.apache.org/viewvc/tomcat/tc8.0.x/trunk/java/org/apache/catalina/tribes/group/interceptors/LocalStrings.properties?rev=1720076&r1=1720075&r2=1720076&view=diff
==============================================================================
---
tomcat/tc8.0.x/trunk/java/org/apache/catalina/tribes/group/interceptors/LocalStrings.properties
(original)
+++
tomcat/tc8.0.x/trunk/java/org/apache/catalina/tribes/group/interceptors/LocalStrings.properties
Tue Dec 15 06:45:36 2015
@@ -34,6 +34,7 @@ nonBlockingCoordinator.heartbeat.failed=
orderInterceptor.messageAdded.sameCounter=Message added has the same counter,
synchronization bug. Disable the order interceptor
staticMembershipInterceptor.no.failureDetector=There is no TcpFailureDetector.
Automatic detection of static members does not work properly. By defining the
StaticMembershipInterceptor under the TcpFailureDetector, automatic detection
of the static members will work.
staticMembershipInterceptor.no.pingInterceptor=There is no TcpPingInterceptor.
The health check of static members does not work properly. By defining the
TcpPingInterceptor, the health check of static members will work.
+staticMembershipInterceptor.sendLocalMember.failed=Local member notification
failed.
tcpFailureDetector.memberDisappeared.verify=Received memberDisappeared[{0}]
message. Will verify.
tcpFailureDetector.already.disappeared=Verification complete. Member already
disappeared[{0}]
tcpFailureDetector.member.disappeared=Verification complete. Member
disappeared[{0}]
Modified:
tomcat/tc8.0.x/trunk/java/org/apache/catalina/tribes/group/interceptors/StaticMembershipInterceptor.java
URL:
http://svn.apache.org/viewvc/tomcat/tc8.0.x/trunk/java/org/apache/catalina/tribes/group/interceptors/StaticMembershipInterceptor.java?rev=1720076&r1=1720075&r2=1720076&view=diff
==============================================================================
---
tomcat/tc8.0.x/trunk/java/org/apache/catalina/tribes/group/interceptors/StaticMembershipInterceptor.java
(original)
+++
tomcat/tc8.0.x/trunk/java/org/apache/catalina/tribes/group/interceptors/StaticMembershipInterceptor.java
Tue Dec 15 06:45:36 2015
@@ -17,13 +17,17 @@
package org.apache.catalina.tribes.group.interceptors;
import java.util.ArrayList;
+import java.util.Arrays;
import org.apache.catalina.tribes.Channel;
import org.apache.catalina.tribes.ChannelException;
import org.apache.catalina.tribes.ChannelInterceptor;
+import org.apache.catalina.tribes.ChannelMessage;
import org.apache.catalina.tribes.Member;
import org.apache.catalina.tribes.group.AbsoluteOrder;
import org.apache.catalina.tribes.group.ChannelInterceptorBase;
+import org.apache.catalina.tribes.io.ChannelData;
+import org.apache.catalina.tribes.io.XByteBuffer;
import org.apache.catalina.tribes.util.StringManager;
import org.apache.juli.logging.Log;
import org.apache.juli.logging.LogFactory;
@@ -34,6 +38,10 @@ public class StaticMembershipInterceptor
protected static final StringManager sm =
StringManager.getManager(StaticMembershipInterceptor.class.getPackage().getName());
+ protected static final byte[] MEMBER_START = new byte[] {
+ 76, 111, 99, 97, 108, 32, 83, 116, 97, 116, 105, 99, 77, 101, 109, 98,
101, 114, 32, 78,
+ 111, 116, 105, 102, 105, 99, 97, 116, 105, 111, 110, 32, 68, 97, 116,
97};
+
protected final ArrayList<Member> members = new ArrayList<>();
protected Member localMember = null;
@@ -57,6 +65,21 @@ public class StaticMembershipInterceptor
this.localMember = member;
}
+ @Override
+ public void messageReceived(ChannelMessage msg) {
+ if (msg.getMessage().getLength() == MEMBER_START.length &&
+ Arrays.equals(MEMBER_START, msg.getMessage().getBytes())) {
+ // receive member start
+ Member member = getMember(msg.getAddress());
+ if (member != null) {
+ super.memberAdded(member);
+ }
+
+ } else {
+ super.messageReceived(msg);
+ }
+ }
+
/**
* has members
*/
@@ -115,17 +138,19 @@ public class StaticMembershipInterceptor
public void start(int svc) throws ChannelException {
if ( (Channel.SND_RX_SEQ&svc)==Channel.SND_RX_SEQ )
super.start(Channel.SND_RX_SEQ);
if ( (Channel.SND_TX_SEQ&svc)==Channel.SND_TX_SEQ )
super.start(Channel.SND_TX_SEQ);
- final Member[] mbrs = members.toArray(new Member[members.size()]);
final ChannelInterceptorBase base = this;
- Thread t = new Thread() {
- @Override
- public void run() {
- for (int i=0; i<mbrs.length; i++ ) {
- base.memberAdded(mbrs[i]);
+ for (final Member member : members) {
+ Thread t = new Thread() {
+ @Override
+ public void run() {
+ base.memberAdded(member);
+ if (getfirstInterceptor().getMember(member) != null) {
+ sendLocalMember(new Member[]{member});
+ }
}
- }
- };
- t.start();
+ };
+ t.start();
+ }
super.start(svc & (~Channel.SND_RX_SEQ) & (~Channel.SND_TX_SEQ));
// check required interceptors
@@ -145,4 +170,28 @@ public class StaticMembershipInterceptor
}
}
+ protected void sendLocalMember(Member[] members) {
+ if ( members == null || members.length == 0 ) return;
+ ChannelData data = new ChannelData(true);
+ data.setAddress(getLocalMember(false));
+ data.setTimestamp(System.currentTimeMillis());
+ data.setOptions(getOptionFlag());
+ data.setMessage(new XByteBuffer(MEMBER_START, false));
+ try {
+ super.sendMessage(members, data, null);
+ }catch (ChannelException cx) {
+
log.warn(sm.getString("staticMembershipInterceptor.sendLocalMember.failed"),cx);
+ }
+ }
+
+ protected ChannelInterceptor getfirstInterceptor() {
+ ChannelInterceptor result = null;
+ ChannelInterceptor now = this;
+ do {
+ result = now;
+ now = now.getPrevious();
+ } while (now.getPrevious() != null);
+ return result;
+ }
+
}
\ No newline at end of file
Modified: tomcat/tc8.0.x/trunk/webapps/docs/changelog.xml
URL:
http://svn.apache.org/viewvc/tomcat/tc8.0.x/trunk/webapps/docs/changelog.xml?rev=1720076&r1=1720075&r2=1720076&view=diff
==============================================================================
--- tomcat/tc8.0.x/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/tc8.0.x/trunk/webapps/docs/changelog.xml Tue Dec 15 06:45:36 2015
@@ -83,6 +83,10 @@
Fix potential NPE in <code>AbstractReplicatedMap.breakdown()</code>.
(kfujino)
</fix>
+ <fix>
+ Add support for the startup notification of local members in the static
+ cluster. (kfujino)
+ </fix>
</changelog>
</subsection>
</section>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]