Repository: incubator-geode Updated Branches: refs/heads/feature/GEODE-77 5feab8241 -> 63802dab6
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/63802dab/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/messages/InstallViewMessage.java ---------------------------------------------------------------------- diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/messages/InstallViewMessage.java b/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/messages/InstallViewMessage.java index fa9989f..1afdf40 100755 --- a/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/messages/InstallViewMessage.java +++ b/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/messages/InstallViewMessage.java @@ -3,18 +3,22 @@ package com.gemstone.gemfire.distributed.internal.membership.gms.messages; import java.io.DataInput; import java.io.DataOutput; import java.io.IOException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; import com.gemstone.gemfire.DataSerializer; import com.gemstone.gemfire.distributed.internal.DistributionManager; import com.gemstone.gemfire.distributed.internal.HighPriorityDistributionMessage; import com.gemstone.gemfire.distributed.internal.membership.NetView; -import com.gemstone.gemfire.distributed.internal.membership.gms.mgr.GMSMembershipManager; +import com.gemstone.gemfire.internal.InternalDataSerializer; public class InstallViewMessage extends HighPriorityDistributionMessage { private NetView view; private Object credentials; private boolean preparing; + private List<Integer> portsForMembers = Collections.<Integer>emptyList(); public InstallViewMessage(NetView view, Object credentials) { this.view = view; @@ -54,12 +58,45 @@ public class InstallViewMessage extends HighPriorityDistributionMessage { throw new IllegalStateException("this message is not intended to execute in a thread pool"); } + private void writeListOfInteger(List<Integer> list, DataOutput out) throws IOException { + int size; + if (list == null) { + size = -1; + } else { + size = list.size(); + } + InternalDataSerializer.writeArrayLength(size, out); + if (size > 0) { + for (int i = 0; i < size; i++) { + out.writeInt(list.get(i).intValue()); + } + } + } + + private List<Integer> readListOfInteger(DataInput in) throws IOException { + int size = InternalDataSerializer.readArrayLength(in); + if (size > 0) { + List<Integer> list = new ArrayList<Integer>(size); + for (int i = 0; i < size; i++) { + list.add(Integer.valueOf(in.readInt())); + } + return list; + } + else if (size == 0) { + return Collections.<Integer>emptyList(); + } + else { + return null; + } + } + @Override public void toData(DataOutput out) throws IOException { super.toData(out); DataSerializer.writeObject(this.view, out); DataSerializer.writeObject(this.credentials, out); out.writeBoolean(preparing); + writeListOfInteger(portsForMembers, out); } @Override @@ -68,13 +105,22 @@ public class InstallViewMessage extends HighPriorityDistributionMessage { this.view = DataSerializer.readObject(in); this.credentials = DataSerializer.readObject(in); this.preparing = in.readBoolean(); + this.portsForMembers = readListOfInteger(in); } @Override public String toString() { return "InstallViewMessage(preparing="+this.preparing+"; "+this.view +"; cred="+(credentials==null?"null": "not null") + + "portsForMembers: " + portsForMembers +")"; } + public List<Integer> getPortsForMembers() { + return this.portsForMembers; + } + + public void setPortsForMembers(List<Integer> portsForMembers) { + this.portsForMembers = portsForMembers; + } } http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/63802dab/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/messages/JoinRequestMessage.java ---------------------------------------------------------------------- diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/messages/JoinRequestMessage.java b/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/messages/JoinRequestMessage.java index fc5faa6..952b20e 100755 --- a/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/messages/JoinRequestMessage.java +++ b/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/messages/JoinRequestMessage.java @@ -13,7 +13,7 @@ import com.gemstone.gemfire.internal.Version; public class JoinRequestMessage extends HighPriorityDistributionMessage { private InternalDistributedMember memberID; private Object credentials; - + private int socketPort = -1; public JoinRequestMessage(InternalDistributedMember coord, InternalDistributedMember id, Object credentials) { @@ -47,7 +47,7 @@ public class JoinRequestMessage extends HighPriorityDistributionMessage { @Override public String toString() { - return getShortClassName() + "(" + memberID + (credentials==null? ")" : "; with credentials)"); + return getShortClassName() + "(" + memberID + (credentials==null? ")" : "; with credentials)") + " socketPort:" + socketPort; } @Override @@ -59,6 +59,7 @@ public class JoinRequestMessage extends HighPriorityDistributionMessage { public void toData(DataOutput out) throws IOException { DataSerializer.writeObject(memberID, out); DataSerializer.writeObject(credentials, out); + DataSerializer.writePrimitiveInt(socketPort, out); // preserve the multicast setting so the receiver can tell // if this is a mcast join request out.writeBoolean(getMulticast()); @@ -68,7 +69,16 @@ public class JoinRequestMessage extends HighPriorityDistributionMessage { public void fromData(DataInput in) throws IOException, ClassNotFoundException { memberID = DataSerializer.readObject(in); credentials = DataSerializer.readObject(in); + socketPort = DataSerializer.readPrimitiveInt(in); setMulticast(in.readBoolean()); } + public int getSocketPort() { + return socketPort; + } + + public void setSocketPort(int socketPort) { + this.socketPort = socketPort; + } + } http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/63802dab/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/messages/JoinResponseMessage.java ---------------------------------------------------------------------- diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/messages/JoinResponseMessage.java b/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/messages/JoinResponseMessage.java index d85229c..77b72c3 100755 --- a/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/messages/JoinResponseMessage.java +++ b/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/messages/JoinResponseMessage.java @@ -3,13 +3,16 @@ package com.gemstone.gemfire.distributed.internal.membership.gms.messages; import java.io.DataInput; import java.io.DataOutput; import java.io.IOException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; import com.gemstone.gemfire.DataSerializer; import com.gemstone.gemfire.distributed.internal.DistributionManager; import com.gemstone.gemfire.distributed.internal.HighPriorityDistributionMessage; import com.gemstone.gemfire.distributed.internal.membership.InternalDistributedMember; import com.gemstone.gemfire.distributed.internal.membership.NetView; -import com.gemstone.gemfire.internal.DataSerializableFixedID; +import com.gemstone.gemfire.internal.InternalDataSerializer; import com.gemstone.gemfire.internal.Version; public class JoinResponseMessage extends HighPriorityDistributionMessage { @@ -19,6 +22,7 @@ public class JoinResponseMessage extends HighPriorityDistributionMessage { private InternalDistributedMember memberID; private Object messengerData; private boolean becomeCoordinator; + private List<Integer> portsForMembers = Collections.<Integer>emptyList(); public JoinResponseMessage(InternalDistributedMember memberID, NetView view) { this.currentView = view; @@ -74,6 +78,7 @@ public class JoinResponseMessage extends HighPriorityDistributionMessage { public String toString() { return getShortClassName() + "("+memberID + "; " + (currentView==null? "" : currentView.toString()) + + "portsForMembers: " + portsForMembers + (rejectionMessage==null? "" : ("; "+rejectionMessage)) + (becomeCoordinator? "; becomeCoordinator" : "") + ")"; @@ -89,10 +94,43 @@ public class JoinResponseMessage extends HighPriorityDistributionMessage { return JOIN_RESPONSE; } + private void writeListOfInteger(List<Integer> list, DataOutput out) throws IOException { + int size; + if (list == null) { + size = -1; + } else { + size = list.size(); + } + InternalDataSerializer.writeArrayLength(size, out); + if (size > 0) { + for (int i = 0; i < size; i++) { + out.writeInt(list.get(i).intValue()); + } + } + } + + private List<Integer> readListOfInteger(DataInput in) throws IOException { + int size = InternalDataSerializer.readArrayLength(in); + if (size > 0) { + List<Integer> list = new ArrayList<Integer>(size); + for (int i = 0; i < size; i++) { + list.add(Integer.valueOf(in.readInt())); + } + return list; + } + else if (size == 0) { + return Collections.<Integer>emptyList(); + } + else { + return null; + } + } + @Override public void toData(DataOutput out) throws IOException { DataSerializer.writeObject(currentView, out); DataSerializer.writeObject(memberID, out); + writeListOfInteger(portsForMembers, out); out.writeBoolean(becomeCoordinator); DataSerializer.writeString(rejectionMessage, out); DataSerializer.writeObject(messengerData, out); @@ -102,9 +140,17 @@ public class JoinResponseMessage extends HighPriorityDistributionMessage { public void fromData(DataInput in) throws IOException, ClassNotFoundException { currentView = DataSerializer.readObject(in); memberID = DataSerializer.readObject(in); + portsForMembers = readListOfInteger(in); becomeCoordinator = in.readBoolean(); rejectionMessage = DataSerializer.readString(in); messengerData = DataSerializer.readObject(in); } + public void setPortsForMembers(List<Integer> portsForMembers) { + this.portsForMembers = portsForMembers; + } + + public List<Integer> getPortsForMembers() { + return this.portsForMembers; + } } http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/63802dab/gemfire-core/src/test/java/com/gemstone/gemfire/distributed/internal/membership/gms/membership/GMSHealthMonitorJUnitTest.java ---------------------------------------------------------------------- diff --git a/gemfire-core/src/test/java/com/gemstone/gemfire/distributed/internal/membership/gms/membership/GMSHealthMonitorJUnitTest.java b/gemfire-core/src/test/java/com/gemstone/gemfire/distributed/internal/membership/gms/membership/GMSHealthMonitorJUnitTest.java index ae77b81..cf95817 100644 --- a/gemfire-core/src/test/java/com/gemstone/gemfire/distributed/internal/membership/gms/membership/GMSHealthMonitorJUnitTest.java +++ b/gemfire-core/src/test/java/com/gemstone/gemfire/distributed/internal/membership/gms/membership/GMSHealthMonitorJUnitTest.java @@ -46,9 +46,11 @@ public class GMSHealthMonitorJUnitTest { private GMSJoinLeave joinLeave; private GMSHealthMonitor gmsHealthMonitor; final long memberTimeout = 1000l; + private int[] portRange= new int[]{0, 65535}; @Before public void initMocks() throws UnknownHostException { + System.setProperty("gemfire.bind-address", "localhost"); mockDistConfig = mock(DistributionConfig.class); mockConfig = mock(ServiceConfig.class); messenger = mock(Messenger.class); @@ -58,11 +60,13 @@ public class GMSHealthMonitorJUnitTest { when(mockConfig.getDistributionConfig()).thenReturn(mockDistConfig); when(mockConfig.getMemberTimeout()).thenReturn(memberTimeout); + when(mockConfig.getMembershipPortRange()).thenReturn(portRange); when(services.getConfig()).thenReturn(mockConfig); when(services.getMessenger()).thenReturn(messenger); when(services.getJoinLeave()).thenReturn(joinLeave); when(services.getCancelCriterion()).thenReturn(stopper); when(stopper.isCancelInProgress()).thenReturn(false); + if (mockMembers == null) { mockMembers = new ArrayList<InternalDistributedMember>(); @@ -76,7 +80,7 @@ public class GMSHealthMonitorJUnitTest { mockMembers.add(mbr); } } - + when(joinLeave.getMemberID()).thenReturn(mockMembers.get(3)); gmsHealthMonitor = new GMSHealthMonitor(); gmsHealthMonitor.init(services); gmsHealthMonitor.start(); @@ -316,7 +320,7 @@ public class GMSHealthMonitorJUnitTest { try { // this happens after final check, ping timeout - Thread.sleep(150l); + Thread.sleep(memberTimeout); } catch (InterruptedException e) { } @@ -352,7 +356,7 @@ public class GMSHealthMonitorJUnitTest { try { // this happens after final check, ping timeout - Thread.sleep(90l); + Thread.sleep(memberTimeout); } catch (InterruptedException e) { } @@ -389,8 +393,8 @@ public class GMSHealthMonitorJUnitTest { gmsHealthMonitor.processMessage(sm); try { - // this happens after final check, ping timeout = 100 ms - Thread.sleep(110l); + // this happens after final check, ping timeout = 1000 ms + Thread.sleep(memberTimeout); } catch (InterruptedException e) { } http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/63802dab/gemfire-core/src/test/resources/com/gemstone/gemfire/codeAnalysis/sanctionedDataSerializables.txt ---------------------------------------------------------------------- diff --git a/gemfire-core/src/test/resources/com/gemstone/gemfire/codeAnalysis/sanctionedDataSerializables.txt b/gemfire-core/src/test/resources/com/gemstone/gemfire/codeAnalysis/sanctionedDataSerializables.txt index b1fa2f2..9fea5d8 100644 --- a/gemfire-core/src/test/resources/com/gemstone/gemfire/codeAnalysis/sanctionedDataSerializables.txt +++ b/gemfire-core/src/test/resources/com/gemstone/gemfire/codeAnalysis/sanctionedDataSerializables.txt @@ -373,16 +373,16 @@ fromData,11,2a2bb9000e0100b50002b1 toData,11,2b2ab40002b9000d0200b1 com/gemstone/gemfire/distributed/internal/membership/gms/messages/InstallViewMessage,2 -fromData,35,2a2bb7000b2a2bb8000cc0000db500022a2bb8000cb500042a2bb9000e0100b50003b1 -toData,32,2a2bb700082ab400022bb800092ab400042bb800092b2ab40003b9000a0200b1 +fromData,44,2a2bb7001a2a2bb8001bc0001cb500042a2bb8001bb500062a2bb9001d0100b500052a2a2bb7001eb50003b1 +toData,41,2a2bb700162ab400042bb800172ab400062bb800172b2ab40005b9001802002a2ab400032bb70019b1 com/gemstone/gemfire/distributed/internal/membership/gms/messages/JoinRequestMessage,2 -fromData,30,2a2bb80014c00015b500032a2bb80014b500042a2bb900160100b60017b1 -toData,27,2ab400032bb800112ab400042bb800112b2ab60012b900130200b1 +fromData,38,2a2bb80018c00019b500042a2bb80018b500052a2bb8001ab500022a2bb9001b0100b6001cb1 +toData,35,2ab400042bb800142ab400052bb800142ab400022bb800152b2ab60016b900170200b1 com/gemstone/gemfire/distributed/internal/membership/gms/messages/JoinResponseMessage,2 -fromData,49,2a2bb8001ac0001bb500022a2bb8001ac0001cb500032a2bb9001d0100b500052a2bb8001eb500062a2bb8001ab50007b1 -toData,43,2ab400022bb800172ab400032bb800172b2ab40005b9001802002ab400062bb800192ab400072bb80017b1 +fromData,58,2a2bb8002ac0002bb500042a2bb8002ac0002cb500052a2a2bb7002db500032a2bb9002e0100b500072a2bb8002fb500082a2bb8002ab50009b1 +toData,52,2ab400042bb800262ab400052bb800262a2ab400032bb700272b2ab40007b9002802002ab400082bb800292ab400092bb80026b1 com/gemstone/gemfire/distributed/internal/membership/gms/messages/LeaveRequestMessage,2 fromData,20,2a2bb8000bc0000cb500032a2bb8000db50004b1
