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]

Reply via email to