You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by jc...@apache.org on 2015/10/16 02:59:16 UTC

incubator-geode git commit: [GEODE-77] TCP check for health monitor

Repository: incubator-geode
Updated Branches:
  refs/heads/feature/GEODE-77 5ca7c37cc -> e267c88b1


[GEODE-77] TCP check for health monitor


Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/e267c88b
Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/e267c88b
Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/e267c88b

Branch: refs/heads/feature/GEODE-77
Commit: e267c88b134155eea6dab935a7a549c041e3e77e
Parents: 5ca7c37
Author: Jianxia Chen <jc...@pivotal.io>
Authored: Thu Oct 15 17:56:37 2015 -0700
Committer: Jianxia Chen <jc...@pivotal.io>
Committed: Thu Oct 15 17:56:37 2015 -0700

----------------------------------------------------------------------
 .../membership/gms/fd/GMSHealthMonitor.java     | 215 ++++++++++++++++++-
 .../gms/interfaces/HealthMonitor.java           |  17 ++
 .../membership/gms/membership/GMSJoinLeave.java | 103 +++++++--
 .../gms/messages/InstallViewMessage.java        |  31 ++-
 .../gms/messages/JoinRequestMessage.java        |  14 +-
 .../gms/messages/JoinResponseMessage.java       |  31 ++-
 .../membership/GMSHealthMonitorJUnitTest.java   |  14 +-
 .../sanctionedDataSerializables.txt             |  38 ++--
 .../codeAnalysis/sanctionedSerializables.txt    |   5 +-
 9 files changed, 418 insertions(+), 50 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/e267c88b/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/fd/GMSHealthMonitor.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/fd/GMSHealthMonitor.java b/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/fd/GMSHealthMonitor.java
index ae79fc5..8eb4dbb 100755
--- a/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/fd/GMSHealthMonitor.java
+++ b/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/fd/GMSHealthMonitor.java
@@ -4,6 +4,13 @@ import static com.gemstone.gemfire.internal.DataSerializableFixedID.CHECK_REQUES
 import static com.gemstone.gemfire.internal.DataSerializableFixedID.CHECK_RESPONSE;
 import static com.gemstone.gemfire.internal.DataSerializableFixedID.SUSPECT_MEMBERS_MESSAGE;
 
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.InetAddress;
+import java.net.InetSocketAddress;
+import java.net.ServerSocket;
+import java.net.Socket;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
@@ -24,6 +31,7 @@ import java.util.concurrent.atomic.AtomicInteger;
 
 import org.apache.logging.log4j.Logger;
 
+import com.gemstone.gemfire.SystemConnectException;
 import com.gemstone.gemfire.distributed.DistributedMember;
 import com.gemstone.gemfire.distributed.DistributedSystemDisconnectedException;
 import com.gemstone.gemfire.distributed.internal.DistributionMessage;
@@ -36,6 +44,7 @@ import com.gemstone.gemfire.distributed.internal.membership.gms.messages.CheckRe
 import com.gemstone.gemfire.distributed.internal.membership.gms.messages.CheckResponseMessage;
 import com.gemstone.gemfire.distributed.internal.membership.gms.messages.SuspectMembersMessage;
 import com.gemstone.gemfire.distributed.internal.membership.gms.messages.SuspectRequest;
+import com.gemstone.gemfire.internal.AvailablePort;
 import com.gemstone.gemfire.internal.concurrent.ConcurrentHashSet;
 
 /**
@@ -118,6 +127,15 @@ public class GMSHealthMonitor implements HealthMonitor, MessageHandler {
 
   /** test hook */
   boolean beingSick = false;
+  
+  // For TCP check
+  private ExecutorService serverSocketExecutor;
+  private static final int PING = 0x01;
+  private static final int PONG = 0x02;
+  private InetAddress ip;
+  private int socketPort;
+  private ServerSocket serverSocket;
+  private Map<InternalDistributedMember, InetSocketAddress> socketInfo = new ConcurrentHashMap<InternalDistributedMember, InetSocketAddress>();
 
   public GMSHealthMonitor() {
 
@@ -327,6 +345,61 @@ public class GMSHealthMonitor implements HealthMonitor, MessageHandler {
     return false;
   }
 
+  /**
+   * During final check, establish TCP connection between current member and suspect member.
+   * And exchange PING/PONG message to see if the suspect member is still alive.
+   * 
+   * @param suspectMember member that does not respond to CheckRequestMessage
+   * @return true if successfully exchanged PING/PONG with TCP connection, otherwise false.
+   */
+  private boolean doTCPCheckMember(InternalDistributedMember suspectMember) {
+    logger.trace("Checking member {} with TCP socket connection.", suspectMember);
+    Socket clientSocket = new Socket();
+    try {
+      // establish TCP connection
+      InetSocketAddress addr = socketInfo.get(suspectMember);
+      if (addr != null) {
+        logger.trace("Checking member {} with TCP socket connection {}:{}.", suspectMember, addr.getAddress(), addr.getPort());
+        clientSocket.connect(addr, (int) services.getConfig().getMemberTimeout());
+      }
+      if (clientSocket.isConnected()) {
+        clientSocket.setSoTimeout((int) services.getConfig().getMemberTimeout());
+        InputStream in = clientSocket.getInputStream();
+        OutputStream out = clientSocket.getOutputStream();
+        out.write(PING);
+        out.flush();
+        clientSocket.shutdownOutput();
+        logger.trace("Send {} to member {} with TCP socket connection.", PING, suspectMember);
+        int b = in.read();
+        logger.trace("Received {} from member {} with TCP socket connection.", b, suspectMember);
+        if (b == PONG) {
+          CustomTimeStamp ts = memberVsLastMsgTS.get(suspectMember);
+          if (ts != null) {
+            ts.setTimeStamp(System.currentTimeMillis());
+          }
+          return true;
+        } else {
+          // TODO: Received something other than PONG. Is it possible?
+          return false;
+        }
+      } else {// cannot establish TCP connection with suspect member
+        return false;
+      }
+    } catch (IOException e) {
+      logger.trace("Unexpected exception", e);
+    } finally {
+      try {
+        if (clientSocket != null) {
+          clientSocket.close();
+        }
+      } catch (IOException e) {
+        logger.trace("Unexpected exception", e);
+      }
+    }
+
+    return false;
+  }
+  
   /*
    * (non-Javadoc)
    * 
@@ -355,7 +428,7 @@ public class GMSHealthMonitor implements HealthMonitor, MessageHandler {
   }
 
   public void start() {
-    {
+    {      
       scheduler = Executors.newScheduledThreadPool(1, new ThreadFactory() {
         @Override
         public Thread newThread(Runnable r) {
@@ -396,6 +469,108 @@ public class GMSHealthMonitor implements HealthMonitor, MessageHandler {
       suspectRequestCollectorThread.setDaemon(true);
       suspectRequestCollectorThread.start();
     }
+    
+    {
+      serverSocketExecutor = Executors.newCachedThreadPool(new ThreadFactory() {
+        AtomicInteger threadIdx = new AtomicInteger();
+
+        @Override
+        public Thread newThread(Runnable r) {
+          int id = threadIdx.getAndIncrement();
+          Thread th = new Thread(Services.getThreadGroup(), r, "TCP Check ServerSocket Thread " + id);
+          th.setDaemon(true);
+          return th;
+        }
+      });
+
+      serverSocketExecutor.execute(new Runnable() {
+        @Override
+        public void run() {
+          Socket socket = null;
+          try {
+            // start server socket for TCP check
+            localAddress = services.getMessenger().getMemberID();            
+            ip = localAddress.getInetAddress();
+            int[] portRange = services.getConfig().getMembershipPortRange();
+            socketPort = AvailablePort.getAvailablePortInRange(portRange[0], portRange[1], AvailablePort.SOCKET);
+            if (socketPort == -1) {
+              throw new SystemConnectException("Unable to find a free port in the membership port range");
+            }
+            serverSocket = new ServerSocket(socketPort);
+            logger.debug("GMSHealthMonitor started server socket on {}:{}.", ip, socketPort);
+            socketInfo.put(localAddress, new InetSocketAddress(ip, socketPort));
+            while (!services.getCancelCriterion().isCancelInProgress() 
+                && !GMSHealthMonitor.this.isStopping && !GMSHealthMonitor.this.playingDead) {
+              try {
+                socket = serverSocket.accept();
+                if (GMSHealthMonitor.this.playingDead) {
+                  continue;
+                }
+                socket.setSoTimeout((int) services.getConfig().getMemberTimeout());
+                new ClientSocketHandler(socket).start();
+              } catch (IOException e) {
+                logger.trace("Unexpected exception", e);
+                try {
+                  if (socket != null) {
+                    socket.close();
+                  }
+                } catch (IOException ioe) {
+                  logger.trace("Unexpected exception", ioe);
+                }
+              }
+            }
+          } catch (IOException e) {
+            logger.trace("Unexpected exception", e);
+          } finally {
+            // close the server socket
+            if (serverSocket != null) {
+              try {
+                serverSocket.close();
+                logger.debug("GMSHealthMonitor server socket closed.");
+              } catch (IOException e) {
+                logger.debug("Unexpected exception", e);
+              }
+            }
+          }
+        }
+      });
+    }
+  }
+
+  class ClientSocketHandler extends Thread {
+
+    private Socket socket;
+
+    public ClientSocketHandler(Socket socket) {
+      super(services.getThreadGroup(), "ClientSocketHandler");
+      this.socket = socket;
+      setDaemon(true);
+    }
+
+    public void run() {
+      try {
+        InputStream in = socket.getInputStream();
+        OutputStream out = socket.getOutputStream();
+        int b = in.read();
+        logger.debug("GMSHealthMonitor server socket received {}.", b);
+        if (b == PING) {
+          out.write(PONG);
+          out.flush();
+          socket.shutdownOutput();
+          logger.debug("GMSHealthMonitor server socket replied {}.", PONG);
+        }
+      } catch (IOException e) {
+        logger.trace("Unexpected exception", e);
+      } finally {
+        if (socket != null) {
+          try {
+            socket.close();
+          } catch (IOException e) {
+            logger.info("Unexpected exception", e);
+          }
+        }
+      }
+    }
   }
 
   public synchronized void installView(NetView newView) {
@@ -519,6 +694,18 @@ public class GMSHealthMonitor implements HealthMonitor, MessageHandler {
       checkExecutor.shutdown();
     }
 
+    if (serverSocketExecutor != null) {
+      if (serverSocket != null) {
+        try {
+          serverSocket.close();
+        }
+        catch (IOException e) {
+          logger.trace("Unexpected exception", e);
+        }
+      }      
+      serverSocketExecutor.shutdownNow();
+    }
+    
     if (suspectRequestCollectorThread != null) {
       suspectRequestCollectorThread.shutdown();
     }
@@ -528,7 +715,7 @@ public class GMSHealthMonitor implements HealthMonitor, MessageHandler {
    * test method
    */
   public boolean isShutdown() {
-    return scheduler.isShutdown() && checkExecutor.isShutdown() && !suspectRequestCollectorThread.isAlive();
+    return scheduler.isShutdown() && checkExecutor.isShutdown() && serverSocketExecutor.isShutdown() && !suspectRequestCollectorThread.isAlive();
   }
 
   @Override
@@ -748,7 +935,12 @@ public class GMSHealthMonitor implements HealthMonitor, MessageHandler {
               memberVsLastMsgTS.put(mbr, ts);
 
               logger.info("Performing final check for suspect member {} reason={}", mbr, reason);
-              boolean pinged = GMSHealthMonitor.this.doCheckMember(mbr);
+              boolean pinged;
+              if (socketInfo.get(mbr) == null || socketInfo.get(mbr).getPort() < 0) {
+                pinged = GMSHealthMonitor.this.doCheckMember(mbr);
+              } else {
+                pinged = GMSHealthMonitor.this.doTCPCheckMember(mbr);
+              }
               if (!pinged && !isStopping) {
                 ts = memberVsLastMsgTS.get(mbr);
                 if (ts == null || ts.getTimeStamp() <= startTime) {
@@ -913,4 +1105,21 @@ public class GMSHealthMonitor implements HealthMonitor, MessageHandler {
     // TODO Auto-generated method stub
     
   }
+  
+  public Map<InternalDistributedMember, InetSocketAddress> getSocketInfo() {
+    return this.socketInfo;
+  }
+
+  public void installSocketInfo(List<InternalDistributedMember> members, List<Integer> portsForMembers) {
+    logger.info("members=" + members + " portsForMembers=" + portsForMembers);
+    logger.info("members.size()=" + members.size() + " portsForMembers.size()=" + portsForMembers.size());
+    for (int i = 0; i < members.size(); i++) {
+      if (portsForMembers.get(i) == -1) {
+        continue;
+      }
+      InetSocketAddress addr = new InetSocketAddress(members.get(i).getInetAddress(), portsForMembers.get(i));
+      socketInfo.put(members.get(i), addr);
+    }
+  }
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/e267c88b/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/interfaces/HealthMonitor.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/interfaces/HealthMonitor.java b/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/interfaces/HealthMonitor.java
index 9ace2be..05e2d91 100755
--- a/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/interfaces/HealthMonitor.java
+++ b/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/interfaces/HealthMonitor.java
@@ -1,5 +1,9 @@
 package com.gemstone.gemfire.distributed.internal.membership.gms.interfaces;
 
+import java.net.InetSocketAddress;
+import java.util.List;
+import java.util.Map;
+
 import com.gemstone.gemfire.distributed.DistributedMember;
 import com.gemstone.gemfire.distributed.internal.membership.InternalDistributedMember;
 
@@ -34,4 +38,17 @@ public interface HealthMonitor extends Service {
    * ShutdownMessage has been received from the given member
    */
   public void memberShutdown(DistributedMember mbr, String reason);
+  
+  /**
+   * Returns a map that describes the members and their server sockets
+   */
+  public Map<InternalDistributedMember, InetSocketAddress> getSocketInfo();
+
+  /**
+   * Update the information of the members and their server sockets
+   * 
+   * @param members
+   * @param portsForMembers List of socket ports for each member
+   */
+  public void installSocketInfo(List<InternalDistributedMember> members, List<Integer> portsForMembers);
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/e267c88b/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/membership/GMSJoinLeave.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/membership/GMSJoinLeave.java b/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/membership/GMSJoinLeave.java
index 4ebc20c..abe6b03 100755
--- a/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/membership/GMSJoinLeave.java
+++ b/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/membership/GMSJoinLeave.java
@@ -19,6 +19,7 @@ import java.util.HashSet;
 import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.Callable;
 import java.util.concurrent.ExecutionException;
@@ -280,7 +281,10 @@ public class GMSJoinLeave implements JoinLeave, MessageHandler {
     logger.info("Attempting to join the distributed system through coordinator " + coord + " using address " + this.localAddress);
     JoinRequestMessage req = new JoinRequestMessage(coord, this.localAddress, 
         services.getAuthenticator().getCredentials(coord));
-
+    //add server socket port in the join request
+    if (services.getHealthMonitor().getSocketInfo().get(localAddress) != null) {
+      req.setSocketPort(services.getHealthMonitor().getSocketInfo().get(localAddress).getPort());
+    }
     services.getMessenger().send(req);
     
     JoinResponseMessage response = null;
@@ -322,6 +326,7 @@ public class GMSJoinLeave implements JoinLeave, MessageHandler {
           this.localAddress.setVmViewId(this.birthViewId);
           GMSMember me = (GMSMember)this.localAddress.getNetMember();
           me.setBirthViewId(birthViewId);
+          services.getHealthMonitor().installSocketInfo(response.getCurrentView().getMembers(), response.getPortsForMembers());
           installView(response.getCurrentView());
         }
 
@@ -374,6 +379,23 @@ public class GMSJoinLeave implements JoinLeave, MessageHandler {
     if (!this.localAddress.getNetMember().preferredForCoordinator() &&
         incomingRequest.getMemberID().getNetMember().preferredForCoordinator()) {
       JoinResponseMessage m = new JoinResponseMessage(incomingRequest.getMemberID(), currentView, true);
+      // add socket ports of all members to join response
+      List<Integer> portsForMembers = new ArrayList<Integer>(currentView.size());      
+      Map<InternalDistributedMember, InetSocketAddress> socketInfo = services.getHealthMonitor().getSocketInfo();      
+      for (InternalDistributedMember mbr : currentView.getMembers()) {
+        InetSocketAddress addr = socketInfo.get(mbr);
+        if (addr != null) {
+          portsForMembers.add(addr.getPort());
+        } else {          
+          if (incomingRequest.getMemberID().compareTo(mbr, true) == 0) {
+            portsForMembers.add(incomingRequest.getSocketPort());
+          }
+          else {
+            portsForMembers.add(-1);
+          }
+        }
+      }
+      m.setPortsForMembers(portsForMembers);
       services.getMessenger().send(m);
       return;
     }
@@ -577,9 +599,10 @@ public class GMSJoinLeave implements JoinLeave, MessageHandler {
     }
   }
   
-  private void sendJoinResponses(List<InternalDistributedMember> newMbrs, NetView newView) {
+  private void sendJoinResponses(List<InternalDistributedMember> newMbrs, NetView newView, List<Integer> portsForMembers) {
     for (InternalDistributedMember mbr: newMbrs) {
       JoinResponseMessage response = new JoinResponseMessage(mbr, newView);
+      response.setPortsForMembers(portsForMembers);
       services.getMessenger().send(response);
     }
   }
@@ -594,19 +617,44 @@ public class GMSJoinLeave implements JoinLeave, MessageHandler {
   }
   
   
-  boolean prepareView(NetView view, Collection<InternalDistributedMember> newMembers) {
-    return sendView(view, newMembers, true, this.prepareProcessor);
+  boolean prepareView(NetView view, Collection<InternalDistributedMember> newMembers, List<DistributionMessage> requests) {
+    return sendView(view, newMembers, true, this.prepareProcessor, requests);
   }
   
-  void sendView(NetView view, Collection<InternalDistributedMember> newMembers) {
-    sendView(view, newMembers, false, this.viewProcessor);
+  void sendView(NetView view, Collection<InternalDistributedMember> newMembers, List<DistributionMessage> requests) {
+    sendView(view, newMembers, false, this.viewProcessor, requests);
   }
   
   
-  boolean sendView(NetView view, Collection<InternalDistributedMember> newMembers, boolean preparing, ViewReplyProcessor rp) {
+  boolean sendView(NetView view, Collection<InternalDistributedMember> newMembers, boolean preparing, ViewReplyProcessor rp, List<DistributionMessage> requests) {
     int id = view.getViewId();
     InstallViewMessage msg = new InstallViewMessage(view, services.getAuthenticator().getCredentials(this.localAddress), preparing);
     Set<InternalDistributedMember> recips = new HashSet<>(view.getMembers());
+    // add socket ports of all members to InstallViewMessage
+    List<Integer> portsForMembers = new ArrayList<Integer>(view.size());
+    if (requests != null) {
+      Map<InternalDistributedMember, InetSocketAddress> socketInfo = services.getHealthMonitor().getSocketInfo();
+      for (InternalDistributedMember mbr : view.getMembers()) {
+        InetSocketAddress addr = socketInfo.get(mbr);
+        if (addr != null) {
+          portsForMembers.add(addr.getPort());
+        } else {
+          boolean found = false;
+          for (DistributionMessage req : requests) {
+            if (req instanceof JoinRequestMessage) {
+              if (((JoinRequestMessage) req).getMemberID().compareTo(mbr, false) == 0) {
+                portsForMembers.add(((JoinRequestMessage) req).getSocketPort());
+                found = true;
+              }
+            }
+          }
+          if (!found) {
+            portsForMembers.add(-1);
+          }
+        }
+      }
+      msg.setPortsForMembers(portsForMembers);
+    }
 
     // a recent member was seen not to receive a new view - I think this is why
 //    recips.removeAll(newMembers); // new members get the view in a JoinResponseMessage
@@ -620,6 +668,9 @@ public class GMSJoinLeave implements JoinLeave, MessageHandler {
 
     if (preparing) {
       this.preparedView = view;
+      if (requests != null) {
+        services.getHealthMonitor().installSocketInfo(view.getMembers(), portsForMembers);
+      }
     } else {
       installView(view);
     }
@@ -686,6 +737,9 @@ public class GMSJoinLeave implements JoinLeave, MessageHandler {
       }
       else {
         this.preparedView = view;
+        if (!m.getPortsForMembers().isEmpty()) {
+          services.getHealthMonitor().installSocketInfo(view.getMembers(), m.getPortsForMembers());
+        }
         ackView(m);
       }
     }
@@ -1555,7 +1609,7 @@ public class GMSJoinLeave implements JoinLeave, MessageHandler {
       if (initialView != null) {
         try {
           prepareAndSendView(initialView, Collections.<InternalDistributedMember>emptyList(),
-            initialLeaving, initialRemovals);
+            initialLeaving, initialRemovals, null);
         } finally {
           this.initialView = null;
           this.initialLeaving = null;
@@ -1736,10 +1790,32 @@ public class GMSJoinLeave implements JoinLeave, MessageHandler {
       // we want to always check for quorum loss but don't act on it
       // unless network-partition-detection is enabled
       if ( !(isNetworkPartition(newView) && quorumRequired) ) {
-        sendJoinResponses(joinReqs, newView);
+        // add socket ports of all members to join response
+        List<Integer> portsForMembers = new ArrayList<Integer>(newView.size());        
+        Map<InternalDistributedMember, InetSocketAddress> socketInfo = services.getHealthMonitor().getSocketInfo();        
+        for (InternalDistributedMember mbr : newView.getMembers()) {
+          InetSocketAddress addr = socketInfo.get(mbr);
+          if (addr != null) {
+            portsForMembers.add(addr.getPort());
+          } else {
+            boolean found = false;
+            for (DistributionMessage req : requests) {
+              if (req instanceof JoinRequestMessage) {
+                if (((JoinRequestMessage) req).getMemberID().compareTo(mbr, true) == 0) {
+                  portsForMembers.add(((JoinRequestMessage) req).getSocketPort());
+                  found = true;
+                }
+              }
+            }
+            if (!found) {
+              portsForMembers.add(-1);
+            }
+          }
+        }
+        sendJoinResponses(joinReqs, newView, portsForMembers);
       }
 
-      prepareAndSendView(newView, joinReqs, leaveReqs, newView.getCrashedMembers());
+      prepareAndSendView(newView, joinReqs, leaveReqs, newView.getCrashedMembers(), requests);
       return;
     }
     
@@ -1750,7 +1826,8 @@ public class GMSJoinLeave implements JoinLeave, MessageHandler {
     void prepareAndSendView(NetView newView,
         List<InternalDistributedMember> joinReqs,
         Set<InternalDistributedMember> leaveReqs,
-        Set<InternalDistributedMember> removalReqs) {
+        Set<InternalDistributedMember> removalReqs,
+        List<DistributionMessage> requests) {
       boolean prepared = false;
       do {
         if (this.shutdown || Thread.currentThread().isInterrupted()) {
@@ -1773,7 +1850,7 @@ public class GMSJoinLeave implements JoinLeave, MessageHandler {
           return;
         }
 
-        prepared = prepareView(newView, joinReqs);
+        prepared = prepareView(newView, joinReqs, requests);
         logger.debug("view preparation phase completed.  prepared={}", prepared);
 
         if (prepared) {
@@ -1825,7 +1902,7 @@ public class GMSJoinLeave implements JoinLeave, MessageHandler {
       
       lastConflictingView = null;
       
-      sendView(newView, joinReqs);
+      sendView(newView, joinReqs, requests);
     }
     
     /**

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/e267c88b/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..5534ff8 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,21 @@ 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.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 = new ArrayList<Integer>();
 
   public InstallViewMessage(NetView view, Object credentials) {
     this.view = view;
@@ -54,12 +57,29 @@ public class InstallViewMessage extends HighPriorityDistributionMessage {
     throw new IllegalStateException("this message is not intended to execute in a thread pool");
   }
 
+  /** this will deserialize as an ArrayList */
+  private void writeAsArrayList(List 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++) {
+        DataSerializer.writeObject(list.get(i), out);
+      }
+    }
+  }
+  
   @Override
   public void toData(DataOutput out) throws IOException {
     super.toData(out);
     DataSerializer.writeObject(this.view, out);
     DataSerializer.writeObject(this.credentials, out);
     out.writeBoolean(preparing);
+    writeAsArrayList(portsForMembers, out);
   }
 
   @Override
@@ -68,13 +88,22 @@ public class InstallViewMessage extends HighPriorityDistributionMessage {
     this.view = DataSerializer.readObject(in);
     this.credentials = DataSerializer.readObject(in);
     this.preparing = in.readBoolean();
+    this.portsForMembers = DataSerializer.readArrayList(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/e267c88b/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/e267c88b/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..c405333 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,15 @@ 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.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 +21,7 @@ public class JoinResponseMessage extends HighPriorityDistributionMessage {
   private InternalDistributedMember memberID;
   private Object messengerData;
   private boolean becomeCoordinator;
+  private List<Integer> portsForMembers = new ArrayList<Integer>();
   
   public JoinResponseMessage(InternalDistributedMember memberID, NetView view) {
     this.currentView = view;
@@ -74,6 +77,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 +93,27 @@ public class JoinResponseMessage extends HighPriorityDistributionMessage {
     return JOIN_RESPONSE;
   }
 
+  /** this will deserialize as an ArrayList */
+  private void writeAsArrayList(List 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++) {
+        DataSerializer.writeObject(list.get(i), out);
+      }
+    }
+  }
+  
   @Override
   public void toData(DataOutput out) throws IOException {
     DataSerializer.writeObject(currentView, out);
     DataSerializer.writeObject(memberID, out);
+    writeAsArrayList(portsForMembers, out);
     out.writeBoolean(becomeCoordinator);
     DataSerializer.writeString(rejectionMessage, out);
     DataSerializer.writeObject(messengerData, out);
@@ -102,9 +123,17 @@ public class JoinResponseMessage extends HighPriorityDistributionMessage {
   public void fromData(DataInput in) throws IOException, ClassNotFoundException {
     currentView = DataSerializer.readObject(in);
     memberID = DataSerializer.readObject(in);
+    portsForMembers = DataSerializer.readArrayList(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/e267c88b/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/e267c88b/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 7210d9e..874069d 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,43,2a2bb700122a2bb80013c00014b500052a2bb80013b500072a2bb900150100b500062a2bb80016b50004b1
+toData,41,2a2bb7000f2ab400052bb8000e2ab400072bb8000e2b2ab40006b9001002002a2ab400042bb70011b1
 
 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,57,2a2bb80022c00023b500052a2bb80022c00024b500062a2bb80025b500042a2bb900260100b500082a2bb80027b500092a2bb80022b5000ab1
+toData,52,2ab400052bb8001e2ab400062bb8001e2a2ab400042bb7001f2b2ab40008b9002002002ab400092bb800212ab4000a2bb8001eb1
 
 com/gemstone/gemfire/distributed/internal/membership/gms/messages/LeaveRequestMessage,2
 fromData,20,2a2bb8000bc0000cb500032a2bb8000db50004b1
@@ -400,10 +400,6 @@ com/gemstone/gemfire/distributed/internal/membership/gms/messages/ViewAckMessage
 fromData,37,2a2bb7000d2a2bb9000e0100b500032a2bb9000f0100b500042a2bb80010c00011b50005b1
 toData,34,2a2bb700092b2ab40003b9000a02002b2ab40004b9000b02002ab400052bb8000cb1
 
-com/gemstone/gemfire/distributed/internal/membership/gms/mgr/FakeViewMessage,2
-fromData,8,bb000759b70008bf
-toData,8,bb000759b70008bf
-
 com/gemstone/gemfire/distributed/internal/membership/gms/mgr/LocalViewMessage,2
 fromData,8,bb000759b70008bf
 toData,8,bb000759b70008bf
@@ -899,8 +895,8 @@ fromData,1,b1
 toData,1,b1
 
 com/gemstone/gemfire/internal/cache/AbstractRegion,2
-toData,6,2a2bb80188b1
-fromData,8,bb018959b7018abf
+toData,6,2a2bb8017cb1
+fromData,8,bb017d59b7017ebf
 
 com/gemstone/gemfire/internal/cache/AbstractUpdateOperation$AbstractUpdateMessage,2
 fromData,16,2a2bb700192a2bb9001a0100b5000db1
@@ -910,14 +906,6 @@ com/gemstone/gemfire/internal/cache/AddCacheServerProfileMessage,2
 fromData,16,2a2bb7002f2a2bb900300100b50007b1
 toData,16,2a2bb7002d2b2ab40007b9002e0200b1
 
-com/gemstone/gemfire/internal/cache/ClientRegionEventImpl,2
-fromData,14,2a2bb700132a2bb80014b60003b1
-toData,14,2a2bb700112ab6000d2bb80012b1
-
-com/gemstone/gemfire/internal/cache/CacheServerAdvisor$CacheServerProfile,2
-fromData,53,2a2bb700102a2bb80011b500042a2bb900120100b500062abb001359b70014b500052ab400052bb800152a2bb900160100b60017b1
-toData,42,2a2bb7000a2ab400042bb8000b2b2ab40006b9000c02002ab400052bb8000d2b2ab6000eb9000f0300b1
-
 com/gemstone/gemfire/internal/cache/BucketAdvisor$BucketProfile,2
 fromData,36,2a2bb700132a2bb900140100b500042a2bb900140100b500062a2bb900140100b50012b1
 toData,36,2a2bb700152b2ab40004b9001602002b2ab40006b9001602002b2ab40012b900160200b1
@@ -938,6 +926,14 @@ com/gemstone/gemfire/internal/cache/CacheDistributionAdvisor$CacheProfile,2
 fromData,94,2a2bb700622bb9006301003d2a1cb6001b2a1cb700649900162abb006559b70066b500262ab400262bb800672a1cb7006899000e2a2bb80069c0006ab5000d2a1cb7006b99000e2a2bb80069c0006ab5000e2a2bb80069c0006cb50016b1
 toData,81,2a2bb7005b2b2ab6001ab9005c02002ab40026c6000b2ab400262bb8005d2ab4000db9002c01009a000c2a2ab4000d2bb7005e2ab4000eb9002c01009a000c2a2ab4000e2bb7005e2ab400162bb8005fb1
 
+com/gemstone/gemfire/internal/cache/CacheServerAdvisor$CacheServerProfile,2
+fromData,53,2a2bb700102a2bb80011b500042a2bb900120100b500062abb001359b70014b500052ab400052bb800152a2bb900160100b60017b1
+toData,42,2a2bb7000a2ab400042bb8000b2b2ab40006b9000c02002ab400052bb8000d2b2ab6000eb9000f0300b1
+
+com/gemstone/gemfire/internal/cache/ClientRegionEventImpl,2
+fromData,14,2a2bb700132a2bb80014b60003b1
+toData,14,2a2bb700112ab6000d2bb80012b1
+
 com/gemstone/gemfire/internal/cache/CloseCacheMessage,2
 fromData,16,2a2bb700172a2bb900180100b50002b1
 toData,16,2a2bb700192b2ab40002b9001a0200b1
@@ -1308,7 +1304,7 @@ fromData,242,2a2bb700712a2bb80072b600732bb9007401003d2a1cb200757e91b500042a2bb80
 toData,252,2a03b500082a2bb700892ab6008a2bb8008b2ab400043d2ab40024c600091cb20079803d2ab4007cc600091cb2007b803d2ab4002bc600091cb20086803d2b1cb9008c02002ab6008d2bb8008b2b2ab40020b9008e03002b2ab40022b4008fb9008c02002ab40024c6000b2ab400242bb8008b2ab4007cc6000b2ab4007c2bb8008b2ab400262bb800902ab4000ec6000b2ab4000e2bb8008b2ab4000799002a2b2ab4000599000704a7000403b9008c02002ab40005b800913e1d2ab700922ab600932bb800942ab400042ab4006f2ab600952bb800942ab4000bb60096c6000e2ab4000bb600962bb800972ab4002bc6000b2ab4002b2bb8008bb1
 
 com/gemstone/gemfire/internal/cache/RemotePutMessage$PutReplyMessage,2
-fromData,81,2a2bb700272bb9002801001100ff7e913d2a1c047e99000704a7000403b500032a2bb900280100b80029b500022a2bb8002ab500061c057e9900181c077e99000704a70004033e2a1d2bb8002bb50007b1
+fromData,81,2a2bb700252bb9002601001100ff7e913d2a1c047e99000704a7000403b500032a2bb900260100b80027b500022a2bb80028b500061c057e9900181c077e99000704a70004033e2a1d2bb80029b50007b1
 toData,94,2a2bb70032033d2ab400039900081c0480913d2ab40007c600081c0580913d2ab40007c100339900081c0780913d2b1cb9003402002b2ab40002b40035b9003402002b2ab600362ab40037b800382ab40007c6000b2ab400072bb80039b1
 
 com/gemstone/gemfire/internal/cache/RemoteRegionOperation,2

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/e267c88b/gemfire-core/src/test/resources/com/gemstone/gemfire/codeAnalysis/sanctionedSerializables.txt
----------------------------------------------------------------------
diff --git a/gemfire-core/src/test/resources/com/gemstone/gemfire/codeAnalysis/sanctionedSerializables.txt b/gemfire-core/src/test/resources/com/gemstone/gemfire/codeAnalysis/sanctionedSerializables.txt
index 6b10ea1..3e30605 100644
--- a/gemfire-core/src/test/resources/com/gemstone/gemfire/codeAnalysis/sanctionedSerializables.txt
+++ b/gemfire-core/src/test/resources/com/gemstone/gemfire/codeAnalysis/sanctionedSerializables.txt
@@ -218,6 +218,7 @@ com/gemstone/gemfire/cache/query/internal/utils/PDXUtils$1,false
 com/gemstone/gemfire/cache/query/internal/utils/PDXUtils$2,false
 com/gemstone/gemfire/cache/snapshot/SnapshotOptions$SnapshotFormat,false
 com/gemstone/gemfire/cache/util/BoundedLinkedHashMap,true,-3419897166186852692,_maximumNumberOfEntries:int
+com/gemstone/gemfire/cache/util/Gateway$OrderPolicy,false
 com/gemstone/gemfire/cache/wan/GatewaySender$OrderPolicy,false
 com/gemstone/gemfire/compression/CompressionException,true,4118639654597191235
 com/gemstone/gemfire/compression/SnappyCompressor,true,496609875302446099
@@ -830,9 +831,5 @@ com/gemstone/gemfire/security/AuthenticationFailedException,true,-82028664722790
 com/gemstone/gemfire/security/AuthenticationRequiredException,true,4675976651103154919
 com/gemstone/gemfire/security/GemFireSecurityException,true,3814254578203076926
 com/gemstone/gemfire/security/NotAuthorizedException,true,419215768216387745,principal:java/security/Principal
-com/gemstone/java/util/concurrent/SynchronousQueueNoSpin,true,-3223113410248163686,qlock:java/util/concurrent/locks/ReentrantLock,waitingConsumers:com/gemstone/java/util/concurrent/SynchronousQueueNoSpin$WaitQueue,waitingProducers:com/gemstone/java/util/concurrent/SynchronousQueueNoSpin$WaitQueue
-com/gemstone/java/util/concurrent/SynchronousQueueNoSpin$FifoWaitQueue,true,-3623113410248163686
-com/gemstone/java/util/concurrent/SynchronousQueueNoSpin$LifoWaitQueue,true,-3633113410248163686
-com/gemstone/java/util/concurrent/SynchronousQueueNoSpin$WaitQueue,true,423369940180943459
 com/gemstone/org/apache/logging/log4j/message/GemFireParameterizedMessage,true,-665975803997290697,messagePattern:java/lang/String,stringArgs:java/lang/String[]
 com/gemstone/org/apache/logging/log4j/message/GemFireParameterizedMessageFactory,true,1