Author: markt
Date: Tue Jan 8 22:46:52 2013
New Revision: 1430602
URL: http://svn.apache.org/viewvc?rev=1430602&view=rev
Log:
Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=54330
Refactor Member interface to reduce dependency on concrete implementation.
Based on a patch by Greg Turnquist.
Modified:
tomcat/trunk/java/org/apache/catalina/tribes/Member.java
tomcat/trunk/java/org/apache/catalina/tribes/group/interceptors/DomainFilterInterceptor.java
tomcat/trunk/java/org/apache/catalina/tribes/group/interceptors/NonBlockingCoordinator.java
tomcat/trunk/java/org/apache/catalina/tribes/group/interceptors/TcpFailureDetector.java
tomcat/trunk/java/org/apache/catalina/tribes/io/ChannelData.java
tomcat/trunk/java/org/apache/catalina/tribes/membership/McastServiceImpl.java
tomcat/trunk/java/org/apache/catalina/tribes/membership/MemberImpl.java
tomcat/trunk/java/org/apache/catalina/tribes/membership/Membership.java
tomcat/trunk/java/org/apache/catalina/tribes/util/Arrays.java
tomcat/trunk/test/org/apache/catalina/tribes/membership/TestMemberImplSerialization.java
tomcat/trunk/test/org/apache/catalina/tribes/test/NioSenderTest.java
Modified: tomcat/trunk/java/org/apache/catalina/tribes/Member.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/tribes/Member.java?rev=1430602&r1=1430601&r2=1430602&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/tribes/Member.java (original)
+++ tomcat/trunk/java/org/apache/catalina/tribes/Member.java Tue Jan 8
22:46:52 2013
@@ -29,8 +29,6 @@ package org.apache.catalina.tribes;
* @author Filip Hanik
* @version $Id$
*/
-
-
public interface Member {
/**
@@ -81,6 +79,8 @@ public interface Member {
*/
public long getMemberAliveTime();
+ public void setMemberAliveTime(long memberAliveTime);
+
/**
* The current state of the member
* @return boolean - true if the member is functioning correctly
@@ -111,15 +111,40 @@ public interface Member {
*/
public byte[] getPayload();
+ public void setPayload(byte[] payload);
+
/**
* returns the command associated with this member
* @return byte[]
*/
public byte[] getCommand();
+ public void setCommand(byte[] command);
+
/**
* Domain for this cluster
* @return byte[]
*/
public byte[] getDomain();
+
+ /**
+ * Highly optimized version of serializing a member into a byte array
+ * Returns a cached byte[] reference, do not modify this data
+ * @param getalive calculate memberAlive time
+ */
+ public byte[] getData(boolean getalive);
+
+ /**
+ * Highly optimized version of serializing a member into a byte array
+ * Returns a cached byte[] reference, do not modify this data
+ * @param getalive calculate memberAlive time
+ * @param reset reset the cached data package, and create a new one
+ */
+ public byte[] getData(boolean getalive, boolean reset);
+
+ /**
+ * Length of a message obtained by {@link #getData(boolean)} or
+ * {@link #getData(boolean, boolean)}.
+ */
+ public int getDataLength();
}
Modified:
tomcat/trunk/java/org/apache/catalina/tribes/group/interceptors/DomainFilterInterceptor.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/tribes/group/interceptors/DomainFilterInterceptor.java?rev=1430602&r1=1430601&r2=1430602&view=diff
==============================================================================
---
tomcat/trunk/java/org/apache/catalina/tribes/group/interceptors/DomainFilterInterceptor.java
(original)
+++
tomcat/trunk/java/org/apache/catalina/tribes/group/interceptors/DomainFilterInterceptor.java
Tue Jan 8 22:46:52 2013
@@ -21,7 +21,6 @@ import java.util.Arrays;
import org.apache.catalina.tribes.ChannelMessage;
import org.apache.catalina.tribes.Member;
import org.apache.catalina.tribes.group.ChannelInterceptorBase;
-import org.apache.catalina.tribes.membership.MemberImpl;
import org.apache.catalina.tribes.membership.Membership;
/**
@@ -52,7 +51,7 @@ public class DomainFilterInterceptor ext
boolean notify = false;
synchronized (membership) {
notify = Arrays.equals(domain,member.getDomain());
- if ( notify ) notify = membership.memberAlive((MemberImpl)member);
+ if ( notify ) notify = membership.memberAlive(member);
}
if ( notify ) super.memberAdded(member);
}
@@ -63,7 +62,7 @@ public class DomainFilterInterceptor ext
boolean notify = false;
synchronized (membership) {
notify = Arrays.equals(domain,member.getDomain());
- membership.removeMember((MemberImpl)member);
+ membership.removeMember(member);
}
if ( notify ) super.memberDisappeared(member);
}
@@ -94,7 +93,7 @@ public class DomainFilterInterceptor ext
protected synchronized void setupMembership() {
if ( membership == null ) {
- membership = new
Membership((MemberImpl)super.getLocalMember(true));
+ membership = new Membership(super.getLocalMember(true));
}
}
Modified:
tomcat/trunk/java/org/apache/catalina/tribes/group/interceptors/NonBlockingCoordinator.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/tribes/group/interceptors/NonBlockingCoordinator.java?rev=1430602&r1=1430601&r2=1430602&view=diff
==============================================================================
---
tomcat/trunk/java/org/apache/catalina/tribes/group/interceptors/NonBlockingCoordinator.java
(original)
+++
tomcat/trunk/java/org/apache/catalina/tribes/group/interceptors/NonBlockingCoordinator.java
Tue Jan 8 22:46:52 2013
@@ -187,13 +187,13 @@ public class NonBlockingCoordinator exte
public void startElection(boolean force) throws ChannelException {
synchronized (electionMutex) {
- MemberImpl local = (MemberImpl)getLocalMember(false);
- MemberImpl[] others = membership.getMembers();
+ Member local = getLocalMember(false);
+ Member[] others = membership.getMembers();
fireInterceptorEvent(new
CoordinationEvent(CoordinationEvent.EVT_START_ELECT,this,"Election initated"));
if ( others.length == 0 ) {
this.viewId = new UniqueId(UUIDGenerator.randomUUID(false));
this.view = new Membership(local,AbsoluteOrder.comp, true);
-
this.handleViewConf(this.createElectionMsg(local,others,local), view);
+ this.handleViewConf(createElectionMsg(local,others,local),
view);
return; //the only member, no need for an election
}
if ( suggestedviewId != null ) {
@@ -212,7 +212,7 @@ public class NonBlockingCoordinator exte
return; //already have this view installed
}
int prio = AbsoluteOrder.comp.compare(local,others[0]);
- MemberImpl leader = ( prio < 0 )?local:others[0];//am I the leader
in my view?
+ Member leader = ( prio < 0 )?local:others[0];//am I the leader in
my view?
if ( local.equals(leader) || force ) {
CoordinationMessage msg = createElectionMsg(local, others,
leader);
suggestedviewId = msg.getId();
@@ -244,21 +244,21 @@ public class NonBlockingCoordinator exte
}
}
- private CoordinationMessage createElectionMsg(MemberImpl local,
MemberImpl[] others, MemberImpl leader) {
+ private CoordinationMessage createElectionMsg(Member local, Member[]
others, Member leader) {
Membership m = new Membership(local,AbsoluteOrder.comp,true);
Arrays.fill(m,others);
- MemberImpl[] mbrs = m.getMembers();
+ Member[] mbrs = m.getMembers();
m.reset();
CoordinationMessage msg = new CoordinationMessage(leader, local,
mbrs,new UniqueId(UUIDGenerator.randomUUID(true)), COORD_REQUEST);
return msg;
}
- protected void sendElectionMsg(MemberImpl local, MemberImpl next,
CoordinationMessage msg) throws ChannelException {
+ protected void sendElectionMsg(Member local, Member next,
CoordinationMessage msg) throws ChannelException {
fireInterceptorEvent(new
CoordinationEvent(CoordinationEvent.EVT_SEND_MSG,this,"Sending election message
to("+next.getName()+")"));
super.sendMessage(new Member[] {next}, createData(msg, local), null);
}
- protected void sendElectionMsgToNextInline(MemberImpl local,
CoordinationMessage msg) throws ChannelException {
+ protected void sendElectionMsgToNextInline(Member local,
CoordinationMessage msg) throws ChannelException {
int next = Arrays.nextIndex(local,msg.getMembers());
int current = next;
msg.leader = msg.getMembers()[0];
@@ -275,7 +275,7 @@ public class NonBlockingCoordinator exte
}
}
- public ChannelData createData(CoordinationMessage msg, MemberImpl local) {
+ public ChannelData createData(CoordinationMessage msg, Member local) {
msg.write();
ChannelData data = new ChannelData(true);
data.setAddress(local);
@@ -297,13 +297,13 @@ public class NonBlockingCoordinator exte
protected Membership mergeOnArrive(CoordinationMessage msg) {
fireInterceptorEvent(new
CoordinationEvent(CoordinationEvent.EVT_PRE_MERGE,this,"Pre merge"));
- MemberImpl local = (MemberImpl)getLocalMember(false);
+ Member local = getLocalMember(false);
Membership merged = new Membership(local,AbsoluteOrder.comp,true);
Arrays.fill(merged,msg.getMembers());
Arrays.fill(merged,getMembers());
Member[] diff = Arrays.diff(merged,membership,local);
for ( int i=0; i<diff.length; i++ ) {
- if (!alive(diff[i])) merged.removeMember((MemberImpl)diff[i]);
+ if (!alive(diff[i])) merged.removeMember(diff[i]);
else memberAdded(diff[i],false);
}
fireInterceptorEvent(new
CoordinationEvent(CoordinationEvent.EVT_POST_MERGE,this,"Post merge"));
@@ -321,7 +321,7 @@ public class NonBlockingCoordinator exte
}
protected void handleToken(CoordinationMessage msg, Membership merged)
throws ChannelException {
- MemberImpl local = (MemberImpl)getLocalMember(false);
+ Member local = getLocalMember(false);
if ( local.equals(msg.getSource()) ) {
//my message msg.src=local
handleMyToken(local, msg, merged);
@@ -330,7 +330,7 @@ public class NonBlockingCoordinator exte
}
}
- protected void handleMyToken(MemberImpl local, CoordinationMessage msg,
Membership merged) throws ChannelException {
+ protected void handleMyToken(Member local, CoordinationMessage msg,
Membership merged) throws ChannelException {
if ( local.equals(msg.getLeader()) ) {
//no leadership change
if ( Arrays.sameMembers(msg.getMembers(),merged.getMembers()) ) {
@@ -354,7 +354,7 @@ public class NonBlockingCoordinator exte
}
}
- protected void handleOtherToken(MemberImpl local, CoordinationMessage msg,
Membership merged) throws ChannelException {
+ protected void handleOtherToken(Member local, CoordinationMessage msg,
Membership merged) throws ChannelException {
if ( local.equals(msg.getLeader()) ) {
//I am the new leader
//startElection(false);
@@ -366,7 +366,7 @@ public class NonBlockingCoordinator exte
protected void handleViewConf(CoordinationMessage msg, Membership merged)
throws ChannelException {
if ( viewId != null && msg.getId().equals(viewId) ) return;//we
already have this view
- view = new
Membership((MemberImpl)getLocalMember(false),AbsoluteOrder.comp,true);
+ view = new Membership(getLocalMember(false),AbsoluteOrder.comp,true);
Arrays.fill(view,msg.getMembers());
viewId = msg.getId();
@@ -449,7 +449,7 @@ public class NonBlockingCoordinator exte
fireInterceptorEvent(new
CoordinationEvent(CoordinationEvent.EVT_START, this, "Before start"));
super.start(startsvc);
started = true;
- if (view == null) view = new Membership(
(MemberImpl)super.getLocalMember(true), AbsoluteOrder.comp, true);
+ if (view == null) view = new
Membership(super.getLocalMember(true), AbsoluteOrder.comp, true);
fireInterceptorEvent(new
CoordinationEvent(CoordinationEvent.EVT_START, this, "After start"));
startElection(false);
}
@@ -510,7 +510,7 @@ public class NonBlockingCoordinator exte
public void memberAdded(Member member,boolean elect) {
try {
if ( membership == null ) setupMembership();
- if ( membership.memberAlive((MemberImpl)member) )
super.memberAdded(member);
+ if ( membership.memberAlive(member) ) super.memberAdded(member);
try {
fireInterceptorEvent(new
CoordinationEvent(CoordinationEvent.EVT_MBR_ADD,this,"Member
add("+member.getName()+")"));
if (started && elect) startElection(false);
@@ -526,7 +526,7 @@ public class NonBlockingCoordinator exte
public void memberDisappeared(Member member) {
try {
- membership.removeMember((MemberImpl)member);
+ membership.removeMember(member);
super.memberDisappeared(member);
try {
fireInterceptorEvent(new
CoordinationEvent(CoordinationEvent.EVT_MBR_DEL,this,"Member
remove("+member.getName()+")"));
@@ -553,7 +553,7 @@ public class NonBlockingCoordinator exte
@Override
public void heartbeat() {
try {
- MemberImpl local = (MemberImpl)getLocalMember(false);
+ Member local = getLocalMember(false);
if ( view != null && (Arrays.diff(view,membership,local).length !=
0 || Arrays.diff(membership,view,local).length != 0) ) {
if ( isHighest() ) {
fireInterceptorEvent(new
CoordinationEvent(CoordinationEvent.EVT_START_ELECT, this,
@@ -612,7 +612,7 @@ public class NonBlockingCoordinator exte
protected synchronized void setupMembership() {
if ( membership == null ) {
- membership = new
Membership((MemberImpl)super.getLocalMember(true),AbsoluteOrder.comp,false);
+ membership = new
Membership(super.getLocalMember(true),AbsoluteOrder.comp,false);
}
}
@@ -625,9 +625,9 @@ public class NonBlockingCoordinator exte
public static class CoordinationMessage {
//X{A-ldr, A-src, mbrs-A,B,C,D}
protected final XByteBuffer buf;
- protected MemberImpl leader;
- protected MemberImpl source;
- protected MemberImpl[] view;
+ protected Member leader;
+ protected Member source;
+ protected Member[] view;
protected UniqueId id;
protected byte[] type;
@@ -636,9 +636,9 @@ public class NonBlockingCoordinator exte
parse();
}
- public CoordinationMessage(MemberImpl leader,
- MemberImpl source,
- MemberImpl[] view,
+ public CoordinationMessage(Member leader,
+ Member source,
+ Member[] view,
UniqueId id,
byte[] type) {
this.buf = new XByteBuffer(4096,false);
@@ -655,12 +655,12 @@ public class NonBlockingCoordinator exte
return NonBlockingCoordinator.COORD_HEADER;
}
- public MemberImpl getLeader() {
+ public Member getLeader() {
if ( leader == null ) parse();
return leader;
}
- public MemberImpl getSource() {
+ public Member getSource() {
if ( source == null ) parse();
return source;
}
@@ -670,7 +670,7 @@ public class NonBlockingCoordinator exte
return id;
}
- public MemberImpl[] getMembers() {
+ public Member[] getMembers() {
if ( view == null ) parse();
return view;
}
@@ -704,7 +704,7 @@ public class NonBlockingCoordinator exte
//view
int mbrCount = XByteBuffer.toInt(buf.getBytesDirect(),offset);
offset += 4;
- view = new MemberImpl[mbrCount];
+ view = new Member[mbrCount];
for (int i=0; i<view.length; i++ ) {
int mbrLen = XByteBuffer.toInt(buf.getBytesDirect(),offset);
offset += 4;
Modified:
tomcat/trunk/java/org/apache/catalina/tribes/group/interceptors/TcpFailureDetector.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/tribes/group/interceptors/TcpFailureDetector.java?rev=1430602&r1=1430601&r2=1430602&view=diff
==============================================================================
---
tomcat/trunk/java/org/apache/catalina/tribes/group/interceptors/TcpFailureDetector.java
(original)
+++
tomcat/trunk/java/org/apache/catalina/tribes/group/interceptors/TcpFailureDetector.java
Tue Jan 8 22:46:52 2013
@@ -34,7 +34,6 @@ import org.apache.catalina.tribes.group.
import org.apache.catalina.tribes.group.InterceptorPayload;
import org.apache.catalina.tribes.io.ChannelData;
import org.apache.catalina.tribes.io.XByteBuffer;
-import org.apache.catalina.tribes.membership.MemberImpl;
import org.apache.catalina.tribes.membership.Membership;
import org.apache.catalina.tribes.membership.StaticMember;
@@ -128,7 +127,7 @@ public class TcpFailureDetector extends
//if we add it here, then add it upwards too
//check to see if it is alive
if (memberAlive(member)) {
- membership.memberAlive( (MemberImpl) member);
+ membership.memberAlive(member);
notify = true;
} else {
addSuspects.put(member,
Long.valueOf(System.currentTimeMillis()));
@@ -156,7 +155,7 @@ public class TcpFailureDetector extends
//if the payload is not a shutdown message
if (shutdown || !memberAlive(member)) {
//not correct, we need to maintain the map
- membership.removeMember( (MemberImpl) member);
+ membership.removeMember(member);
removeSuspects.remove(member);
if (member instanceof StaticMember) {
addSuspects.put(member,
Long.valueOf(System.currentTimeMillis()));
@@ -226,11 +225,11 @@ public class TcpFailureDetector extends
Member[] members = super.getMembers();
for (int i = 0; members != null && i < members.length; i++) {
if (memberAlive(members[i])) {
- if (membership.memberAlive((MemberImpl)members[i]))
super.memberAdded(members[i]);
+ if (membership.memberAlive(members[i]))
super.memberAdded(members[i]);
addSuspects.remove(members[i]);
} else {
if (membership.getMember(members[i])!=null) {
- membership.removeMember((MemberImpl)members[i]);
+ membership.removeMember(members[i]);
removeSuspects.remove(members[i]);
if (members[i] instanceof StaticMember) {
addSuspects.put(members[i],
Long.valueOf(System.currentTimeMillis()));
@@ -250,22 +249,22 @@ public class TcpFailureDetector extends
// avoid temporary adding member.
continue;
}
- if (membership.memberAlive( (MemberImpl) members[i])) {
+ if (membership.memberAlive(members[i])) {
//we don't have this one in our membership, check to see if
he/she is alive
if (memberAlive(members[i])) {
log.warn("Member added, even though we werent notified:" +
members[i]);
super.memberAdded(members[i]);
} else {
- membership.removeMember( (MemberImpl) members[i]);
+ membership.removeMember(members[i]);
} //end if
} //end if
} //for
//check suspect members if they are still alive,
//if not, simply issue the memberDisappeared message
- MemberImpl[] keys = removeSuspects.keySet().toArray(new
MemberImpl[removeSuspects.size()]);
+ Member[] keys = removeSuspects.keySet().toArray(new
Member[removeSuspects.size()]);
for (int i = 0; i < keys.length; i++) {
- MemberImpl m = keys[i];
+ Member m = keys[i];
if (membership.getMember(m) != null && (!memberAlive(m))) {
membership.removeMember(m);
super.memberDisappeared(m);
@@ -277,9 +276,9 @@ public class TcpFailureDetector extends
//check add suspects members if they are alive now,
//if they are, simply issue the memberAdded message
- keys = addSuspects.keySet().toArray(new
MemberImpl[addSuspects.size()]);
+ keys = addSuspects.keySet().toArray(new Member[addSuspects.size()]);
for (int i = 0; i < keys.length; i++) {
- MemberImpl m = keys[i];
+ Member m = keys[i];
if ( membership.getMember(m) == null && (memberAlive(m))) {
membership.memberAlive(m);
super.memberAdded(m);
@@ -292,7 +291,7 @@ public class TcpFailureDetector extends
protected synchronized void setupMembership() {
if ( membership == null ) {
- membership = new
Membership((MemberImpl)super.getLocalMember(true));
+ membership = new Membership(super.getLocalMember(true));
}
}
Modified: tomcat/trunk/java/org/apache/catalina/tribes/io/ChannelData.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/tribes/io/ChannelData.java?rev=1430602&r1=1430601&r2=1430602&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/tribes/io/ChannelData.java (original)
+++ tomcat/trunk/java/org/apache/catalina/tribes/io/ChannelData.java Tue Jan 8
22:46:52 2013
@@ -186,7 +186,7 @@ public class ChannelData implements Chan
4 + //unique id length off=12
uniqueId.length+ //id data off=12+uniqueId.length
4 + //addr length off=12+uniqueId.length+4
- ((MemberImpl)address).getDataLength()+ //member data
off=12+uniqueId.length+4+add.length
+ address.getDataLength()+ //member data
off=12+uniqueId.length+4+add.length
4 + //message length off=12+uniqueId.length+4+add.length+4
message.getLength();
return length;
@@ -205,7 +205,7 @@ public class ChannelData implements Chan
}
public byte[] getDataPackage(byte[] data, int offset) {
- byte[] addr = ((MemberImpl)address).getData(false);
+ byte[] addr = address.getData(false);
XByteBuffer.toBytes(options,data,offset);
offset += 4; //options
XByteBuffer.toBytes(timestamp,data,offset);
Modified:
tomcat/trunk/java/org/apache/catalina/tribes/membership/McastServiceImpl.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/tribes/membership/McastServiceImpl.java?rev=1430602&r1=1430601&r2=1430602&view=diff
==============================================================================
---
tomcat/trunk/java/org/apache/catalina/tribes/membership/McastServiceImpl.java
(original)
+++
tomcat/trunk/java/org/apache/catalina/tribes/membership/McastServiceImpl.java
Tue Jan 8 22:46:52 2013
@@ -360,7 +360,7 @@ public class McastServiceImpl
}
private void memberDataReceived(byte[] data) {
- final MemberImpl m = MemberImpl.getMember(data);
+ final Member m = MemberImpl.getMember(data);
if (log.isTraceEnabled()) log.trace("Mcast receive ping from member "
+ m);
Runnable t = null;
if (Arrays.equals(m.getCommand(), Member.SHUTDOWN_PAYLOAD)) {
@@ -444,9 +444,9 @@ public class McastServiceImpl
protected final Object expiredMutex = new Object();
protected void checkExpired() {
synchronized (expiredMutex) {
- MemberImpl[] expired = membership.expire(timeToExpiration);
+ Member[] expired = membership.expire(timeToExpiration);
for (int i = 0; i < expired.length; i++) {
- final MemberImpl member = expired[i];
+ final Member member = expired[i];
if (log.isDebugEnabled())
log.debug("Mcast expire member " + expired[i]);
try {
Modified:
tomcat/trunk/java/org/apache/catalina/tribes/membership/MemberImpl.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/tribes/membership/MemberImpl.java?rev=1430602&r1=1430601&r2=1430602&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/tribes/membership/MemberImpl.java
(original)
+++ tomcat/trunk/java/org/apache/catalina/tribes/membership/MemberImpl.java Tue
Jan 8 22:46:52 2013
@@ -164,17 +164,15 @@ public class MemberImpl implements Membe
public byte[] getData() {
return getData(true);
}
- /**
- * Highly optimized version of serializing a member into a byte array
- * Returns a cached byte[] reference, do not modify this data
- * @param getalive boolean
- * @return byte[]
- */
+
+
+ @Override
public byte[] getData(boolean getalive) {
return getData(getalive,false);
}
+ @Override
public int getDataLength() {
return TRIBES_MBR_BEGIN.length+ //start pkg
4+ //data length
@@ -194,12 +192,8 @@ public class MemberImpl implements Membe
TRIBES_MBR_END.length; //end pkg
}
- /**
- *
- * @param getalive boolean - calculate memberAlive time
- * @param reset boolean - reset the cached data package, and create a new
one
- * @return byte[]
- */
+
+ @Override
public byte[] getData(boolean getalive, boolean reset) {
if ( reset ) dataPkg = null;
//look in cache first
@@ -298,11 +292,11 @@ public class MemberImpl implements Membe
* @param data - the bytes received
* @return a member object.
*/
- public static MemberImpl getMember(byte[] data, MemberImpl member) {
+ public static Member getMember(byte[] data, MemberImpl member) {
return getMember(data,0,data.length,member);
}
- public static MemberImpl getMember(byte[] data, int offset, int length,
MemberImpl member) {
+ public static Member getMember(byte[] data, int offset, int length,
MemberImpl member) {
//package looks like
//start package TRIBES_MBR_BEGIN.length
//package length - 4 bytes
@@ -408,11 +402,11 @@ public class MemberImpl implements Membe
return member;
}
- public static MemberImpl getMember(byte[] data) {
+ public static Member getMember(byte[] data) {
return getMember(data,new MemberImpl());
}
- public static MemberImpl getMember(byte[] data, int offset, int length) {
+ public static Member getMember(byte[] data, int offset, int length) {
return getMember(data,offset,length,new MemberImpl());
}
@@ -507,6 +501,7 @@ public class MemberImpl implements Membe
return udpPort;
}
+ @Override
public void setMemberAliveTime(long time) {
memberAliveTime=time;
}
@@ -600,6 +595,7 @@ public class MemberImpl implements Membe
getData(true,true);
}
+ @Override
public void setPayload(byte[] payload) {
byte[] oldpayload = this.payload;
this.payload = payload!=null?payload:new byte[0];
@@ -610,6 +606,7 @@ public class MemberImpl implements Membe
}
+ @Override
public void setCommand(byte[] command) {
this.command = command!=null?command:new byte[0];
getData(true,true);
Modified:
tomcat/trunk/java/org/apache/catalina/tribes/membership/Membership.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/tribes/membership/Membership.java?rev=1430602&r1=1430601&r2=1430602&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/tribes/membership/Membership.java
(original)
+++ tomcat/trunk/java/org/apache/catalina/tribes/membership/Membership.java Tue
Jan 8 22:46:52 2013
@@ -40,7 +40,7 @@ import org.apache.catalina.tribes.Member
*/
public class Membership implements Cloneable {
- protected static final MemberImpl[] EMPTY_MEMBERS = new MemberImpl[0];
+ protected static final Member[] EMPTY_MEMBERS = new Member[0];
private final Object membersLock = new Object();
@@ -48,17 +48,17 @@ public class Membership implements Clone
* The name of this membership, has to be the same as the name for the
local
* member
*/
- protected final MemberImpl local;
+ protected final Member local;
/**
* A map of all the members in the cluster.
*/
- protected HashMap<MemberImpl, MbrEntry> map = new HashMap<>();
+ protected HashMap<Member, MbrEntry> map = new HashMap<>();
/**
* A list of all the members in the cluster.
*/
- protected MemberImpl[] members = EMPTY_MEMBERS;
+ protected Member[] members = EMPTY_MEMBERS;
/**
* sort members by alive time
@@ -69,9 +69,9 @@ public class Membership implements Clone
public Object clone() {
synchronized (membersLock) {
Membership clone = new Membership(local, memberComparator);
- final HashMap<MemberImpl, MbrEntry> tmpclone =
(HashMap<MemberImpl, MbrEntry>) map.clone();
+ final HashMap<Member, MbrEntry> tmpclone = (HashMap<Member,
MbrEntry>) map.clone();
clone.map = tmpclone;
- clone.members = new MemberImpl[members.length];
+ clone.members = new Member[members.length];
System.arraycopy(members,0,clone.members,0,members.length);
return clone;
}
@@ -82,19 +82,19 @@ public class Membership implements Clone
* @param local - has to be the name of the local member. Used to filter
the local member from the cluster membership
* @param includeLocal - TBA
*/
- public Membership(MemberImpl local, boolean includeLocal) {
+ public Membership(Member local, boolean includeLocal) {
this(local, new MemberComparator(), includeLocal);
}
- public Membership(MemberImpl local) {
+ public Membership(Member local) {
this(local, false);
}
- public Membership(MemberImpl local, Comparator<Member> comp) {
+ public Membership(Member local, Comparator<Member> comp) {
this(local, comp, false);
}
- public Membership(MemberImpl local, Comparator<Member> comp, boolean
includeLocal) {
+ public Membership(Member local, Comparator<Member> comp, boolean
includeLocal) {
this.local = local;
if ( includeLocal ) addMember(local);
this.memberComparator = comp;
@@ -115,7 +115,7 @@ public class Membership implements Clone
* @return - true if this member is new to the cluster, false
otherwise.<br/>
* - false if this member is the local member or updated.
*/
- public synchronized boolean memberAlive(MemberImpl member) {
+ public synchronized boolean memberAlive(Member member) {
boolean result = false;
//ignore ourselves
if ( member.equals(local) ) return result;
@@ -127,7 +127,7 @@ public class Membership implements Clone
result = true;
} else {
//update the member alive time
- MemberImpl updateMember = entry.getMember() ;
+ Member updateMember = entry.getMember() ;
if(updateMember.getMemberAliveTime() !=
member.getMemberAliveTime()) {
//update fields that can change
updateMember.setMemberAliveTime(member.getMemberAliveTime());
@@ -144,12 +144,12 @@ public class Membership implements Clone
* Add a member to this component and sort array with memberComparator
* @param member The member to add
*/
- public synchronized MbrEntry addMember(MemberImpl member) {
+ public synchronized MbrEntry addMember(Member member) {
synchronized (membersLock) {
MbrEntry entry = new MbrEntry(member);
if (!map.containsKey(member) ) {
map.put(member, entry);
- MemberImpl results[] = new MemberImpl[members.length + 1];
+ Member results[] = new Member[members.length + 1];
for (int i = 0; i < members.length; i++) results[i] = members[i];
results[members.length] = member;
members = results;
@@ -164,7 +164,7 @@ public class Membership implements Clone
*
* @param member The member to remove
*/
- public void removeMember(MemberImpl member) {
+ public void removeMember(Member member) {
map.remove(member);
synchronized (membersLock) {
int n = -1;
@@ -175,7 +175,7 @@ public class Membership implements Clone
}
}
if (n < 0) return;
- MemberImpl results[] = new MemberImpl[members.length - 1];
+ Member results[] = new Member[members.length - 1];
int j = 0;
for (int i = 0; i < members.length; i++) {
if (i != n)
@@ -192,11 +192,11 @@ public class Membership implements Clone
* @param maxtime - the max time a member can remain unannounced before it
is considered dead.
* @return the list of expired members
*/
- public synchronized MemberImpl[] expire(long maxtime) {
+ public synchronized Member[] expire(long maxtime) {
if(!hasMembers() )
return EMPTY_MEMBERS;
- ArrayList<MemberImpl> list = null;
+ ArrayList<Member> list = null;
Iterator<MbrEntry> i = map.values().iterator();
while(i.hasNext()) {
MbrEntry entry = i.next();
@@ -208,7 +208,7 @@ public class Membership implements Clone
}
if(list != null) {
- MemberImpl[] result = new MemberImpl[list.size()];
+ Member[] result = new Member[list.size()];
list.toArray(result);
for( int j=0; j<result.length; j++) {
removeMember(result[j]);
@@ -227,9 +227,9 @@ public class Membership implements Clone
}
- public MemberImpl getMember(Member mbr) {
+ public Member getMember(Member mbr) {
if(hasMembers()) {
- MemberImpl result = null;
+ Member result = null;
for ( int i=0; i<this.members.length && result==null; i++ ) {
if ( members[i].equals(mbr) ) result = members[i];
}//for
@@ -247,7 +247,7 @@ public class Membership implements Clone
* Returning a list of all the members in the membership
* We not need a copy: add and remove generate new arrays.
*/
- public MemberImpl[] getMembers() {
+ public Member[] getMembers() {
if(hasMembers()) {
return members;
} else {
@@ -261,7 +261,7 @@ public class Membership implements Clone
protected synchronized MbrEntry[] getMemberEntries()
{
MbrEntry[] result = new MbrEntry[map.size()];
- Iterator<Map.Entry<MemberImpl,MbrEntry>> i = map.entrySet().iterator();
+ Iterator<Map.Entry<Member,MbrEntry>> i = map.entrySet().iterator();
int pos = 0;
while ( i.hasNext() )
result[pos++] = i.next().getValue();
@@ -293,10 +293,10 @@ public class Membership implements Clone
*/
protected static class MbrEntry {
- protected final MemberImpl mbr;
+ protected final Member mbr;
protected long lastHeardFrom;
- public MbrEntry(MemberImpl mbr) {
+ public MbrEntry(Member mbr) {
this.mbr = mbr;
}
@@ -310,7 +310,7 @@ public class Membership implements Clone
/**
* Return the actual Member object
*/
- public MemberImpl getMember() {
+ public Member getMember() {
return mbr;
}
Modified: tomcat/trunk/java/org/apache/catalina/tribes/util/Arrays.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/tribes/util/Arrays.java?rev=1430602&r1=1430601&r2=1430602&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/tribes/util/Arrays.java (original)
+++ tomcat/trunk/java/org/apache/catalina/tribes/util/Arrays.java Tue Jan 8
22:46:52 2013
@@ -25,7 +25,6 @@ import org.apache.catalina.tribes.Channe
import org.apache.catalina.tribes.Member;
import org.apache.catalina.tribes.UniqueId;
import org.apache.catalina.tribes.group.AbsoluteOrder;
-import org.apache.catalina.tribes.membership.MemberImpl;
import org.apache.catalina.tribes.membership.Membership;
/**
@@ -152,17 +151,17 @@ public class Arrays {
}
public static void fill(Membership mbrship, Member[] m) {
- for (int i=0; i<m.length; i++ ) mbrship.addMember((MemberImpl)m[i]);
+ for (int i=0; i<m.length; i++ ) mbrship.addMember(m[i]);
}
- public static Member[] diff(Membership complete, Membership local,
MemberImpl ignore) {
+ public static Member[] diff(Membership complete, Membership local, Member
ignore) {
ArrayList<Member> result = new ArrayList<>();
- MemberImpl[] comp = complete.getMembers();
+ Member[] comp = complete.getMembers();
for ( int i=0; i<comp.length; i++ ) {
if ( ignore!=null && ignore.equals(comp[i]) ) continue;
if ( local.getMember(comp[i]) == null ) result.add(comp[i]);
}
- return result.toArray(new MemberImpl[result.size()]);
+ return result.toArray(new Member[result.size()]);
}
public static Member[] remove(Member[] all, Member remove) {
Modified:
tomcat/trunk/test/org/apache/catalina/tribes/membership/TestMemberImplSerialization.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/catalina/tribes/membership/TestMemberImplSerialization.java?rev=1430602&r1=1430601&r2=1430602&view=diff
==============================================================================
---
tomcat/trunk/test/org/apache/catalina/tribes/membership/TestMemberImplSerialization.java
(original)
+++
tomcat/trunk/test/org/apache/catalina/tribes/membership/TestMemberImplSerialization.java
Tue Jan 8 22:46:52 2013
@@ -24,6 +24,8 @@ import static org.junit.Assert.assertTru
import org.junit.Before;
import org.junit.Test;
+import org.apache.catalina.tribes.Member;
+
/**
* <p>Title: </p>
*
@@ -73,8 +75,8 @@ public class TestMemberImplSerialization
byte[] md1 = m1.getData();
byte[] md2 = m2.getData();
- MemberImpl a1 = MemberImpl.getMember(md1);
- MemberImpl a2 = MemberImpl.getMember(md2);
+ Member a1 = MemberImpl.getMember(md1);
+ Member a2 = MemberImpl.getMember(md2);
assertTrue(a1.getUdpPort()==a2.getUdpPort());
assertTrue(a1.getUdpPort()==udpPort);
@@ -82,13 +84,13 @@ public class TestMemberImplSerialization
@Test
public void testSerializationOne() throws Exception {
- MemberImpl m = m1;
+ Member m = m1;
byte[] md1 = m.getData(false,true);
byte[] mda1 = m.getData(false,false);
assertTrue(Arrays.equals(md1,mda1));
assertTrue(md1==mda1);
mda1 = m.getData(true,true);
- MemberImpl ma1 = MemberImpl.getMember(mda1);
+ Member ma1 = MemberImpl.getMember(mda1);
assertTrue(compareMembers(m,ma1));
mda1 = p1.getData(false);
assertFalse(Arrays.equals(md1,mda1));
@@ -98,15 +100,15 @@ public class TestMemberImplSerialization
md1 = m.getData(true,true);
Thread.sleep(50);
mda1 = m.getData(true,true);
- MemberImpl a1 = MemberImpl.getMember(md1);
- MemberImpl a2 = MemberImpl.getMember(mda1);
+ Member a1 = MemberImpl.getMember(md1);
+ Member a2 = MemberImpl.getMember(mda1);
assertTrue(a1.equals(a2));
assertFalse(Arrays.equals(md1,mda1));
}
- public boolean compareMembers(MemberImpl impl1, MemberImpl impl2) {
+ public boolean compareMembers(Member impl1, Member impl2) {
boolean result = true;
result = result && Arrays.equals(impl1.getHost(),impl2.getHost());
result = result &&
Arrays.equals(impl1.getPayload(),impl2.getPayload());
Modified: tomcat/trunk/test/org/apache/catalina/tribes/test/NioSenderTest.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/catalina/tribes/test/NioSenderTest.java?rev=1430602&r1=1430601&r2=1430602&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/catalina/tribes/test/NioSenderTest.java
(original)
+++ tomcat/trunk/test/org/apache/catalina/tribes/test/NioSenderTest.java Tue
Jan 8 22:46:52 2013
@@ -40,7 +40,7 @@ import org.apache.catalina.tribes.transp
public class NioSenderTest {
private Selector selector = null;
private int counter = 0;
- MemberImpl mbr;
+ Member mbr;
private static int testOptions = Channel.SEND_OPTIONS_DEFAULT;
public NioSenderTest() {
// Default constructor
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]