You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by bs...@apache.org on 2015/11/13 20:45:53 UTC

incubator-geode git commit: GEODE-77: faster initiation of suspect processing on crashed member TCPConduit's Connection.java was not initiating suspect processing when a member crashed. This was due to not having the check in the normal (amt < 0) check

Repository: incubator-geode
Updated Branches:
  refs/heads/feature/GEODE-77 4addcea05 -> f57eb8b15


GEODE-77: faster initiation of suspect processing on crashed member
TCPConduit's Connection.java was not initiating suspect processing when a member crashed.  This was due to not having the check in the normal (amt < 0) check for a socket error.

In testing this fix with ReconnectDUnitTest I found that the change exposed some problems in GMSJoinLeave that were keeping reconnect from happening as fast as it should:

1. The reconnecting member was processing a RemoveMember message intended for its old incarnation.  This caused it to invoke forceDisconnect() but the concurrent join() attempt did not notice this and continued to try to connect until it timed out.

2. ViewCreator was removing the new member from the view if its old ID was being declared crashed in the same view because of the way InternalDistributedMember.compareTo() works with viewless identifiers.

This change-set also gets rid of a bunch of references to JGroups scattered around in the code and removes references to JGroups classes from GMSMembershipManager, moving the code requiring these refs to the quorum checker.


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

Branch: refs/heads/feature/GEODE-77
Commit: f57eb8b15e042e87576b117e093180bba256f90f
Parents: 4addcea
Author: Bruce Schuchardt <bs...@pivotal.io>
Authored: Fri Nov 13 11:44:00 2015 -0800
Committer: Bruce Schuchardt <bs...@pivotal.io>
Committed: Fri Nov 13 11:45:34 2015 -0800

----------------------------------------------------------------------
 .../internal/DistributionMessage.java           |  2 +-
 .../distributed/internal/ReplyMessage.java      |  2 +-
 .../distributed/internal/ShutdownMessage.java   |  2 +-
 .../distributed/internal/StartupMessage.java    |  2 +-
 .../internal/StartupResponseMessage.java        |  2 +-
 .../internal/WaitForViewInstallation.java       |  2 +-
 .../internal/membership/QuorumChecker.java      |  7 +++
 .../internal/membership/gms/GMSMember.java      |  2 +-
 .../membership/gms/GMSMemberFactory.java        |  2 +-
 .../membership/gms/fd/GMSHealthMonitor.java     |  7 +--
 .../membership/gms/membership/GMSJoinLeave.java | 20 ++++--
 .../gms/messenger/GMSQuorumChecker.java         | 10 ++-
 .../gms/mgr/GMSMembershipManager.java           | 64 +++++++++-----------
 .../internal/admin/remote/AdminResponse.java    |  2 +-
 .../admin/remote/AlertListenerMessage.java      |  2 +-
 .../admin/remote/FetchStatsResponse.java        |  2 +-
 .../admin/remote/FetchSysCfgRequest.java        |  2 +-
 .../admin/remote/HealthListenerMessage.java     |  2 +-
 .../admin/remote/ShutdownAllRequest.java        |  2 +-
 .../admin/remote/ShutdownAllResponse.java       |  2 +-
 .../admin/remote/SnapshotResultMessage.java     |  2 +-
 .../admin/remote/StatListenerMessage.java       |  2 +-
 .../internal/cache/CloseCacheMessage.java       |  2 +-
 .../internal/cache/CreateRegionProcessor.java   |  4 +-
 .../internal/cache/FindRemoteTXMessage.java     |  2 +-
 .../cache/UpdateAttributesProcessor.java        |  2 +-
 .../partitioned/BucketProfileUpdateMessage.java |  2 +-
 .../cache/partitioned/FetchEntriesMessage.java  | 11 ++--
 .../gemfire/internal/i18n/LocalizedStrings.java |  4 +-
 .../internal/i18n/ParentLocalizedStrings.java   |  6 +-
 .../gemfire/internal/tcp/Connection.java        | 21 ++++---
 .../management/internal/JmxManagerAdvisor.java  |  2 +-
 .../cli/commands/DiskStoreCommands.java         |  7 ++-
 .../membership/gms/MembershipManagerHelper.java |  1 +
 .../fd/GMSHealthMonitorJUnitTest.java           |  3 +
 .../java/dunit/standalone/ProcessManager.java   |  8 ++-
 36 files changed, 124 insertions(+), 93 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/f57eb8b1/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/DistributionMessage.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/DistributionMessage.java b/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/DistributionMessage.java
index 83ef91d..551e47d 100644
--- a/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/DistributionMessage.java
+++ b/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/DistributionMessage.java
@@ -234,7 +234,7 @@ public abstract class DistributionMessage
    * direct-channel.  This is typically only done for messages that are
    * broadcast to the full membership set.
    */
-  public boolean sendViaJGroups() {
+  public boolean sendViaUDP() {
     return false;
   }
   /**

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/f57eb8b1/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/ReplyMessage.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/ReplyMessage.java b/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/ReplyMessage.java
index 98d2365..96ca5ef 100644
--- a/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/ReplyMessage.java
+++ b/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/ReplyMessage.java
@@ -64,7 +64,7 @@ public class ReplyMessage extends HighPriorityDistributionMessage  {
   }
   
   @Override
-  public boolean sendViaJGroups() {
+  public boolean sendViaUDP() {
     return this.sendViaJGroups;
   }
   

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/f57eb8b1/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/ShutdownMessage.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/ShutdownMessage.java b/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/ShutdownMessage.java
index bdf3599..b96850e 100644
--- a/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/ShutdownMessage.java
+++ b/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/ShutdownMessage.java
@@ -42,7 +42,7 @@ public final class ShutdownMessage extends HighPriorityDistributionMessage imple
   }
   
   @Override
-  public boolean sendViaJGroups() {
+  public boolean sendViaUDP() {
     return true;
   }
   

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/f57eb8b1/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/StartupMessage.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/StartupMessage.java b/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/StartupMessage.java
index 4bdf99f..612d3fa 100644
--- a/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/StartupMessage.java
+++ b/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/StartupMessage.java
@@ -142,7 +142,7 @@ public final class StartupMessage extends HighPriorityDistributionMessage implem
   }
   
   @Override
-  public boolean sendViaJGroups() {
+  public boolean sendViaUDP() {
     return true;
   }
   

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/f57eb8b1/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/StartupResponseMessage.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/StartupResponseMessage.java b/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/StartupResponseMessage.java
index c9b6baf..762c111 100644
--- a/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/StartupResponseMessage.java
+++ b/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/StartupResponseMessage.java
@@ -129,7 +129,7 @@ public class StartupResponseMessage extends HighPriorityDistributionMessage impl
   }
   
   @Override
-  public boolean sendViaJGroups() {
+  public boolean sendViaUDP() {
     return true;
   }
   

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/f57eb8b1/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/WaitForViewInstallation.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/WaitForViewInstallation.java b/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/WaitForViewInstallation.java
index 1ba0ed1..6cd0912 100644
--- a/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/WaitForViewInstallation.java
+++ b/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/WaitForViewInstallation.java
@@ -64,7 +64,7 @@ public class WaitForViewInstallation extends HighPriorityDistributionMessage
   }
 
   @Override
-  public boolean sendViaJGroups() {
+  public boolean sendViaUDP() {
     return true;
   }
 

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/f57eb8b1/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/QuorumChecker.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/QuorumChecker.java b/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/QuorumChecker.java
index 3d8d261..32e68d5 100644
--- a/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/QuorumChecker.java
+++ b/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/QuorumChecker.java
@@ -42,6 +42,13 @@ public interface QuorumChecker {
    * resumes the quorum checker after having invoked suspend();
    */
   public void resume();
+  
+  /**
+   * closes the quorum checker and releases resources.  Use this if
+   * the distributed system is not going to be reconnected and you
+   * want to release resources.
+   */
+  public void close();
 
   /**
    * Get the membership info from the old system that needs to be passed

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/f57eb8b1/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/GMSMember.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/GMSMember.java b/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/GMSMember.java
index 51a166b..c92ff7d 100755
--- a/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/GMSMember.java
+++ b/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/GMSMember.java
@@ -217,7 +217,7 @@ public class GMSMember implements NetMember, DataSerializableFixedID {
     }
     // obligatory type check
     if (o == null || !(o instanceof GMSMember) ) {
-      throw new ClassCastException(LocalizedStrings.JGroupMember_JGROUPMEMBERCOMPARETO_COMPARISON_BETWEEN_DIFFERENT_CLASSES.toLocalizedString());
+      throw new ClassCastException(LocalizedStrings.Member_MEMBERCOMPARETO_COMPARISON_BETWEEN_DIFFERENT_CLASSES.toLocalizedString());
     }
     byte[] myAddr = inetAddr.getAddress();
     GMSMember his = (GMSMember)o;

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/f57eb8b1/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/GMSMemberFactory.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/GMSMemberFactory.java b/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/GMSMemberFactory.java
index 59f9deb..36311a2 100755
--- a/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/GMSMemberFactory.java
+++ b/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/GMSMemberFactory.java
@@ -116,7 +116,7 @@ public class GMSMemberFactory implements MemberServices {
       services.start();
     }
     catch (ConnectionException e) {
-      throw new DistributionException(LocalizedStrings.JGroupMemberFactory_UNABLE_TO_CREATE_MEMBERSHIP_MANAGER.toLocalizedString(), e);
+      throw new DistributionException(LocalizedStrings.MemberFactory_UNABLE_TO_CREATE_MEMBERSHIP_MANAGER.toLocalizedString(), e);
     }
     catch (GemFireConfigException
         | SystemConnectException

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/f57eb8b1/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 84eca62..da42ddb 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
@@ -977,11 +977,8 @@ public class GMSHealthMonitor implements HealthMonitor, MessageHandler {
     
     // only respond if the intended recipient is this member
     InternalDistributedMember me = localAddress;
-    // TODO the first part of this check should be removed.
-    // because a restarted server will probably have the same
-    // membership port as it had in its last incarnation, causing
-    // delays in removing the old member ID from the view.
-    if (me.getVmViewId() < 0 || m.getTarget().equals(me)) {
+
+    if (me.getVmViewId() >= 0  &&  m.getTarget().equals(me)) {
       HeartbeatMessage prm = new HeartbeatMessage(m.getRequestId());
       prm.setRecipient(m.getSender());
       Set<InternalDistributedMember> membersNotReceivedMsg = services.getMessenger().send(prm);

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/f57eb8b1/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 500131b..a7ffe18 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
@@ -222,7 +222,7 @@ public class GMSJoinLeave implements JoinLeave, MessageHandler {
       long locatorGiveUpTime = startTime + locatorWaitTime;
       long giveupTime = startTime + timeout;
 
-      for (int tries=0; !this.isJoined; tries++) {
+      for (int tries=0; !this.isJoined && !this.isStopping; tries++) {
         logger.debug("searching for the membership coordinator");
         boolean found = findCoordinator();
         if (found) {
@@ -489,6 +489,11 @@ public class GMSJoinLeave implements JoinLeave, MessageHandler {
       logger.info("Membership ignoring removal request for " + mbr + " from non-member " + incomingRequest.getSender());
       return;
     }
+    
+    if (v == null) {
+      // not yet a member
+      return;
+    }
 
     logger.info("Membership received a request to remove " + mbr
         + " from " + incomingRequest.getSender() 
@@ -1103,7 +1108,7 @@ public class GMSJoinLeave implements JoinLeave, MessageHandler {
           return;
         }
       }
-
+      
       if (isJoined && isNetworkPartition(newView, true)) {
         if (quorumRequired) {
           Set<InternalDistributedMember> crashes = newView.getActualCrashedMembers(currentView);
@@ -1352,6 +1357,7 @@ public class GMSJoinLeave implements JoinLeave, MessageHandler {
   @Override
   public void memberShutdown(DistributedMember mbr, String reason) {
     LeaveRequestMessage msg = new LeaveRequestMessage(Collections.singleton(this.localAddress), (InternalDistributedMember)mbr, reason);
+    msg.setSender((InternalDistributedMember)mbr);
     processLeaveRequest(msg);
   }
 
@@ -1806,7 +1812,7 @@ public class GMSJoinLeave implements JoinLeave, MessageHandler {
           }
           break;
         case REMOVE_MEMBER_REQUEST:
-          // process these after gathring all leave-requests so that
+          // process these after gathering all leave-requests so that
           // we don't kick out a member that's shutting down
           break;
         default:
@@ -1850,14 +1856,16 @@ public class GMSJoinLeave implements JoinLeave, MessageHandler {
         int viewNumber = 0;
         List<InternalDistributedMember> mbrs;
         if (currentView == null) {
-          mbrs = new ArrayList<InternalDistributedMember>(joinReqs);
+          mbrs = new ArrayList<InternalDistributedMember>();
         } else {
           viewNumber = currentView.getViewId() + 1;
           mbrs = new ArrayList<InternalDistributedMember>(oldMembers);
-          mbrs.addAll(joinReqs);
         }
         mbrs.removeAll(leaveReqs);
         mbrs.removeAll(removalReqs);
+        // add joinReqs after removing old members because an ID may
+        // be reused in an auto-reconnect and get a new vmViewID
+        mbrs.addAll(joinReqs);
         newView = new NetView(localAddress, viewNumber, mbrs, leaveReqs, new HashSet<InternalDistributedMember>(removalReqs));
         int size = joinReqs.size();
         for (InternalDistributedMember mbr: joinReqs) {
@@ -1888,7 +1896,7 @@ public class GMSJoinLeave implements JoinLeave, MessageHandler {
 
       // if there are no membership changes then abort creation of
       // the new view
-      if (newView.getMembers().equals(currentView.getMembers())) {
+      if (joinReqs.isEmpty() && newView.getMembers().equals(currentView.getMembers())) {
         logger.info("membership hasn't changed - aborting new view {}", newView);
         return;
       }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/f57eb8b1/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/messenger/GMSQuorumChecker.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/messenger/GMSQuorumChecker.java b/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/messenger/GMSQuorumChecker.java
index cf3fc6b..f8b5f28 100644
--- a/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/messenger/GMSQuorumChecker.java
+++ b/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/messenger/GMSQuorumChecker.java
@@ -91,8 +91,14 @@ public class GMSQuorumChecker implements QuorumChecker {
 
   @Override
   public void suspend() {
-    // TODO Auto-generated method stub
-
+    // NO-OP for this implementation
+  }
+  
+  @Override
+  public void close() {
+    if (channel != null  &&  !channel.isClosed()) {
+      channel.close();
+    }
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/f57eb8b1/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/mgr/GMSMembershipManager.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/mgr/GMSMembershipManager.java b/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/mgr/GMSMembershipManager.java
index 4c5718f..79af74e 100755
--- a/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/mgr/GMSMembershipManager.java
+++ b/gemfire-core/src/main/java/com/gemstone/gemfire/distributed/internal/membership/gms/mgr/GMSMembershipManager.java
@@ -29,7 +29,6 @@ import java.util.concurrent.locks.ReadWriteLock;
 import java.util.concurrent.locks.ReentrantReadWriteLock;
 
 import org.apache.logging.log4j.Logger;
-import org.jgroups.JChannel;
 
 import com.gemstone.gemfire.CancelException;
 import com.gemstone.gemfire.ForcedDisconnectException;
@@ -108,11 +107,11 @@ public class GMSMembershipManager implements MembershipManager, Manager
   private volatile QuorumChecker quorumChecker;
   
   /**
-   * thread-local used to force use of JGroups for communications, usually to
+   * thread-local used to force use of Messenger for communications, usually to
    * avoid deadlock when conserve-sockets=true.  Use of this should be removed
    * when connection pools are implemented in the direct-channel 
    */
-  private ThreadLocal<Boolean> forceUseJGroups = new ThreadLocal<Boolean>();
+  private ThreadLocal<Boolean> forceUseUDPMessaging = new ThreadLocal<Boolean>();
   
   /**
    * Trick class to make the startup synch more
@@ -268,7 +267,7 @@ public class GMSMembershipManager implements MembershipManager, Manager
   
   /**
    * This is the latest view (ordered list of DistributedMembers) 
-   * that has been returned from Jgroups
+   * that has been installed
    * 
    * All accesses to this object are protected via {@link #latestViewLock}
    */
@@ -302,8 +301,8 @@ public class GMSMembershipManager implements MembershipManager, Manager
   
   volatile boolean isJoining;
   
-  /** has the jgroups channel been connected successfully? */
-  volatile boolean hasConnected;
+  /** have we joined successfully? */
+  volatile boolean hasJoined;
   
   /**
    * a map keyed on InternalDistributedMember, values are Stubs that represent direct
@@ -340,7 +339,7 @@ public class GMSMembershipManager implements MembershipManager, Manager
 
   /**
    * Members that have sent a shutdown message.  This is used to suppress
-   * suspect processing in JGroups that otherwise becomes pretty aggressive 
+   * suspect processing that otherwise becomes pretty aggressive 
    * when a member is shutting down.
    */
   private final Map shutdownMembers = new BoundedLinkedHashMap(1000);
@@ -356,7 +355,7 @@ public class GMSMembershipManager implements MembershipManager, Manager
   /**
    * The identities and birth-times of others that we have allowed into
    * membership at the distributed system level, but have not yet appeared
-   * in a jgroups view.
+   * in a view.
    * <p>
    * Keys are instances of {@link InternalDistributedMember}, values are 
    * Longs indicating the time this member was shunned.
@@ -415,7 +414,7 @@ public class GMSMembershipManager implements MembershipManager, Manager
   protected volatile boolean processingEvents = false;
   
   /**
-   * This is the latest viewId received from JGroups
+   * This is the latest viewId installed
    */
   long latestViewId = -1;
   
@@ -595,7 +594,7 @@ public class GMSMembershipManager implements MembershipManager, Manager
       for (int i = 0; i < newView.getMembers().size(); i++) { // additions
         InternalDistributedMember m = (InternalDistributedMember)newView.getMembers().get(i);
         
-        // Once a member has been seen via JGroups, remove them from the
+        // Once a member has been seen via a view, remove them from the
         // newborn set
         boolean wasSurprise = surpriseMembers.remove(m) != null;
         
@@ -678,7 +677,7 @@ public class GMSMembershipManager implements MembershipManager, Manager
         }
         
         if (surpriseMembers.containsKey(m)) {
-          continue; // member has not yet appeared in JGroups view
+          continue; // member has not yet appeared in a view
         }
 
         try {
@@ -686,7 +685,7 @@ public class GMSMembershipManager implements MembershipManager, Manager
               LocalizedStrings.GroupMembershipService_MEMBERSHIP_PROCESSING_DEPARTING_MEMBER__0_, m));
           removeWithViewLock(m,
               newView.getCrashedMembers().contains(m) || suspectedMembers.containsKey(m)
-              , "departed JGroups view");
+              , "departed membership view");
         }
         catch (VirtualMachineError err) {
           SystemFailure.initiateFailure(err);
@@ -797,7 +796,7 @@ public class GMSMembershipManager implements MembershipManager, Manager
         long delta = System.currentTimeMillis() - start;
 
         logger.info(LogMarker.DISTRIBUTION, LocalizedMessage.create(
-            LocalizedStrings.GroupMembershipService_CONNECTED_TO_JGROUPS_CHANNEL_TOOK__0__MS, delta));
+            LocalizedStrings.GroupMembershipService_JOINED_TOOK__0__MS, delta));
 
         NetView initialView = services.getJoinLeave().getView();
         latestView = new NetView(initialView, initialView.getViewId());
@@ -810,7 +809,7 @@ public class GMSMembershipManager implements MembershipManager, Manager
         if (ex.getCause() != null && ex.getCause().getCause() instanceof SystemConnectException) {
           throw (SystemConnectException)(ex.getCause().getCause());
         }
-        throw new DistributionException(LocalizedStrings.GroupMembershipService_AN_EXCEPTION_WAS_THROWN_WHILE_CONNECTING_TO_JGROUPS.toLocalizedString(), ex);
+        throw new DistributionException(LocalizedStrings.GroupMembershipService_AN_EXCEPTION_WAS_THROWN_WHILE_JOINING.toLocalizedString(), ex);
       }
       finally {
         this.isJoining = false;
@@ -899,7 +898,7 @@ public class GMSMembershipManager implements MembershipManager, Manager
       stubToMemberMap.put(stub, address);
     }
 
-    this.hasConnected = true;
+    this.hasJoined = true;
 
     // in order to debug startup issues we need to announce the membership
     // ID as soon as we know it
@@ -1078,7 +1077,7 @@ public class GMSMembershipManager implements MembershipManager, Manager
   
   /**
    * Logic for handling a direct connection event (message received
-   * from a member not in the JGroups view).  Does not employ the
+   * from a member not in the view).  Does not employ the
    * startup queue.
    * <p>
    * Must be called with {@link #latestViewLock} held.  Waits
@@ -1131,7 +1130,7 @@ public class GMSMembershipManager implements MembershipManager, Manager
       }
 
       // Adding him to this set ensures we won't remove him if a new
-      // JGroups view comes in and he's still not visible.
+      // view comes in and he's still not visible.
       surpriseMembers.put(member, Long.valueOf(System.currentTimeMillis()));
 
       if (shutdownInProgress()) {
@@ -1185,7 +1184,7 @@ public class GMSMembershipManager implements MembershipManager, Manager
 
         // However, we put the new member at the end of the list.  This
         // should ensure he's not chosen as an elder.
-        // This will get corrected when he finally shows up in the JGroups
+        // This will get corrected when he finally shows up in the
         // view.
         NetView newMembers = new NetView(latestView, latestView.getViewId());
         newMembers.add(member);
@@ -1336,7 +1335,7 @@ public class GMSMembershipManager implements MembershipManager, Manager
    */
   protected void handleOrDeferViewEvent(NetView viewArg) {
     if (this.isJoining) {
-      // bug #44373 - queue all view messages while connecting the jgroups channel.
+      // bug #44373 - queue all view messages while joining.
       // This is done under the latestViewLock, but we can't block here because
       // we're sitting in the UDP reader thread.
       synchronized(startupLock) {
@@ -1353,7 +1352,7 @@ public class GMSMembershipManager implements MembershipManager, Manager
         }
       }
       // view processing can take a while, so we use a separate thread
-      // to avoid blocking the jgroups stack
+      // to avoid blocking a reader thread
       NetView newView = viewArg;
       long newId = viewArg.getViewId();
       if (logger.isTraceEnabled(LogMarker.DM_VIEWS)) {
@@ -1660,8 +1659,8 @@ public class GMSMembershipManager implements MembershipManager, Manager
   protected static volatile boolean inhibitForceDisconnectLogging;
   
   /**
-   * Ensure that the critical classes from JGroups and the TCP conduit
-   * implementation get loaded.
+   * Ensure that the critical classes from components
+   * get loaded.
    * 
    * @see SystemFailure#loadEmergencyClasses()
    */
@@ -1897,7 +1896,7 @@ public class GMSMembershipManager implements MembershipManager, Manager
   }
   
   public void suspectMember(DistributedMember mbr, String reason) {
-    if (mbr != null && !this.shutdownMembers.containsKey(mbr)) {
+    if (!this.shutdownInProgress && !this.shutdownMembers.containsKey(mbr)) {
       this.services.getHealthMonitor().suspect((InternalDistributedMember)mbr, reason);
     }
   }
@@ -2032,7 +2031,7 @@ public class GMSMembershipManager implements MembershipManager, Manager
    * @see com.gemstone.gemfire.distributed.internal.membership.MembershipManager#isConnected()
    */
   public boolean isConnected() {
-    return (this.hasConnected && !this.shutdownInProgress); 
+    return (this.hasJoined && !this.shutdownInProgress); 
   }
   
   /**
@@ -2040,9 +2039,7 @@ public class GMSMembershipManager implements MembershipManager, Manager
    * Otherwise returns false.
    */
   public boolean isReconnectingDS() {
-    if (this.hasConnected) {
-      // if the jgroups channel has been connected then we aren't in the
-      // middle of a reconnect attempt in this instance of the distributed system
+    if (this.hasJoined) {
       return false;
     } else {
       return this.wasReconnectingSystem;
@@ -2068,10 +2065,7 @@ public class GMSMembershipManager implements MembershipManager, Manager
     ((GMSQuorumChecker)checker).suspend();
     InternalDistributedSystem system = InternalDistributedSystem.getAnyInstance();
     if (system == null || !system.isConnected()) {
-      JChannel channel = (JChannel)checker.getMembershipInfo();
-      if (channel != null  &&  !channel.isClosed()) {
-        channel.close();
-      }
+      checker.close();
     }
   }
   
@@ -2145,9 +2139,9 @@ public class GMSMembershipManager implements MembershipManager, Manager
       useMcast = (msg.getMulticast() || allDestinations);
     }
     
-    boolean sendViaJGroups = isForceUDPCommunications(); // enable when bug #46438 is fixed: || msg.sendViaJGroups();
+    boolean sendViaMessenger = isForceUDPCommunications(); // enable when bug #46438 is fixed: || msg.sendViaUDP();
 
-    if (useMcast || tcpDisabled || sendViaJGroups) {
+    if (useMcast || tcpDisabled || sendViaMessenger) {
       result = services.getMessenger().send(msg);
     }
     else {
@@ -2165,11 +2159,11 @@ public class GMSMembershipManager implements MembershipManager, Manager
   // MembershipManager method
   @Override
   public void forceUDPMessagingForCurrentThread() {
-    forceUseJGroups.set(null);
+    forceUseUDPMessaging.set(null);
   }
   
   private boolean isForceUDPCommunications() {
-    Boolean forced = forceUseJGroups.get();
+    Boolean forced = forceUseUDPMessaging.get();
     return forced == Boolean.TRUE;
   }
 

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/f57eb8b1/gemfire-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/AdminResponse.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/AdminResponse.java b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/AdminResponse.java
index cc5707e..14a201c 100644
--- a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/AdminResponse.java
+++ b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/AdminResponse.java
@@ -47,7 +47,7 @@ public abstract class AdminResponse extends HighPriorityDistributionMessage
   }
   
   @Override
-  public boolean sendViaJGroups() {
+  public boolean sendViaUDP() {
     return true;
   }
 

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/f57eb8b1/gemfire-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/AlertListenerMessage.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/AlertListenerMessage.java b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/AlertListenerMessage.java
index 6f0f0c1..5892d35 100644
--- a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/AlertListenerMessage.java
+++ b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/AlertListenerMessage.java
@@ -105,7 +105,7 @@ public final class AlertListenerMessage extends PooledDistributionMessage implem
   }
   
   @Override
-  public boolean sendViaJGroups() {
+  public boolean sendViaUDP() {
     return true;
   }
 

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/f57eb8b1/gemfire-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/FetchStatsResponse.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/FetchStatsResponse.java b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/FetchStatsResponse.java
index a4991f8..22003d1 100644
--- a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/FetchStatsResponse.java
+++ b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/FetchStatsResponse.java
@@ -80,7 +80,7 @@ public final class FetchStatsResponse extends AdminResponse {
 
   
   @Override
-  public boolean sendViaJGroups() {
+  public boolean sendViaUDP() {
     return true;
   }
 

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/f57eb8b1/gemfire-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/FetchSysCfgRequest.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/FetchSysCfgRequest.java b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/FetchSysCfgRequest.java
index 156b853..5f9db76 100644
--- a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/FetchSysCfgRequest.java
+++ b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/FetchSysCfgRequest.java
@@ -41,7 +41,7 @@ public final class FetchSysCfgRequest extends AdminRequest {
   }
   
   @Override
-  public boolean sendViaJGroups() {
+  public boolean sendViaUDP() {
     return true;
   }
 

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/f57eb8b1/gemfire-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/HealthListenerMessage.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/HealthListenerMessage.java b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/HealthListenerMessage.java
index 28261ee..2047821 100644
--- a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/HealthListenerMessage.java
+++ b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/HealthListenerMessage.java
@@ -62,7 +62,7 @@ public final class HealthListenerMessage extends PooledDistributionMessage imple
   }
   
   @Override
-  public boolean sendViaJGroups() {
+  public boolean sendViaUDP() {
     return true;
   }
 

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/f57eb8b1/gemfire-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/ShutdownAllRequest.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/ShutdownAllRequest.java b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/ShutdownAllRequest.java
index 122b94c..ffe1ddf 100644
--- a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/ShutdownAllRequest.java
+++ b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/ShutdownAllRequest.java
@@ -137,7 +137,7 @@ public class ShutdownAllRequest extends AdminRequest {
   }
   
   @Override
-  public boolean sendViaJGroups() {
+  public boolean sendViaUDP() {
     return true;
   }
   

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/f57eb8b1/gemfire-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/ShutdownAllResponse.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/ShutdownAllResponse.java b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/ShutdownAllResponse.java
index f467a99..ad36a9a 100644
--- a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/ShutdownAllResponse.java
+++ b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/ShutdownAllResponse.java
@@ -37,7 +37,7 @@ public class ShutdownAllResponse extends AdminResponse {
   }
   
   @Override
-  public boolean sendViaJGroups() {
+  public boolean sendViaUDP() {
     return true;
   }
   

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/f57eb8b1/gemfire-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/SnapshotResultMessage.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/SnapshotResultMessage.java b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/SnapshotResultMessage.java
index 6820831..a19447f 100644
--- a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/SnapshotResultMessage.java
+++ b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/SnapshotResultMessage.java
@@ -48,7 +48,7 @@ public final class SnapshotResultMessage extends PooledDistributionMessage
   }
 
   @Override
-  public boolean sendViaJGroups() {
+  public boolean sendViaUDP() {
     return true;
   }
 

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/f57eb8b1/gemfire-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/StatListenerMessage.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/StatListenerMessage.java b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/StatListenerMessage.java
index f97c45d..acd980d 100644
--- a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/StatListenerMessage.java
+++ b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/admin/remote/StatListenerMessage.java
@@ -85,7 +85,7 @@ public final class StatListenerMessage extends PooledDistributionMessage
   }
 
   @Override
-  public boolean sendViaJGroups() {
+  public boolean sendViaUDP() {
     return true;
   }
 

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/f57eb8b1/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/CloseCacheMessage.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/CloseCacheMessage.java b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/CloseCacheMessage.java
index 4aa37b2..edd4db2 100644
--- a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/CloseCacheMessage.java
+++ b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/CloseCacheMessage.java
@@ -50,7 +50,7 @@ public final class CloseCacheMessage extends HighPriorityDistributionMessage
   }
   
   @Override
-  public boolean sendViaJGroups() {
+  public boolean sendViaUDP() {
     return true;
   }
   

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/f57eb8b1/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/CreateRegionProcessor.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/CreateRegionProcessor.java b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/CreateRegionProcessor.java
index f4ac672..bfd287e 100644
--- a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/CreateRegionProcessor.java
+++ b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/CreateRegionProcessor.java
@@ -347,7 +347,7 @@ public class CreateRegionProcessor implements ProfileExchangeProcessor {
     }
 
     @Override
-    public boolean sendViaJGroups() {
+    public boolean sendViaUDP() {
       return true;
     }
     
@@ -807,7 +807,7 @@ public class CreateRegionProcessor implements ProfileExchangeProcessor {
     }
 
     @Override
-    public boolean sendViaJGroups() {
+    public boolean sendViaUDP() {
       return true;
     }
     

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/f57eb8b1/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/FindRemoteTXMessage.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/FindRemoteTXMessage.java b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/FindRemoteTXMessage.java
index f0e9de7..bf96551 100644
--- a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/FindRemoteTXMessage.java
+++ b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/FindRemoteTXMessage.java
@@ -230,7 +230,7 @@ public class FindRemoteTXMessage extends HighPriorityDistributionMessage impleme
   }
   
   @Override
-  public boolean sendViaJGroups() {
+  public boolean sendViaUDP() {
     return true;
   }
 

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/f57eb8b1/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/UpdateAttributesProcessor.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/UpdateAttributesProcessor.java b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/UpdateAttributesProcessor.java
index 4aed85e..c81eac1 100644
--- a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/UpdateAttributesProcessor.java
+++ b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/UpdateAttributesProcessor.java
@@ -277,7 +277,7 @@ public class UpdateAttributesProcessor {
     }
     
     @Override
-    public boolean sendViaJGroups() {
+    public boolean sendViaUDP() {
       return true;
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/f57eb8b1/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/BucketProfileUpdateMessage.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/BucketProfileUpdateMessage.java b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/BucketProfileUpdateMessage.java
index 7325789..aa7bacc 100644
--- a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/BucketProfileUpdateMessage.java
+++ b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/BucketProfileUpdateMessage.java
@@ -77,7 +77,7 @@ public final class BucketProfileUpdateMessage extends DistributionMessage
   }
 
   @Override
-  public boolean sendViaJGroups() {
+  public boolean sendViaUDP() {
     return true;
   }
 

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/f57eb8b1/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/FetchEntriesMessage.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/FetchEntriesMessage.java b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/FetchEntriesMessage.java
index d8767e6..ef22609 100644
--- a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/FetchEntriesMessage.java
+++ b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/partitioned/FetchEntriesMessage.java
@@ -568,10 +568,13 @@ public final class FetchEntriesMessage extends PartitionMessage
               VersionTag versionTag = DataSerializer.readObject(in);
               
               //Fix for 47260 - canonicalize the mebmer ids to avoid an OOME
-              if(canonicalMembers.containsKey(versionTag.getMemberID())) {
-                versionTag.setMemberID(canonicalMembers.get(versionTag.getMemberID()));
-              } else {
-                canonicalMembers.put(versionTag.getMemberID(), versionTag.getMemberID());
+              VersionSource id = versionTag.getMemberID();
+              if (id != null) {
+                if(canonicalMembers.containsKey(id)) {
+                  versionTag.setMemberID(canonicalMembers.get(id));
+                } else {
+                  canonicalMembers.put(id, id);
+                }
               }
               
               synchronized(returnValue) {

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/f57eb8b1/gemfire-core/src/main/java/com/gemstone/gemfire/internal/i18n/LocalizedStrings.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/i18n/LocalizedStrings.java b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/i18n/LocalizedStrings.java
index dc02e36..f6edb9b 100644
--- a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/i18n/LocalizedStrings.java
+++ b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/i18n/LocalizedStrings.java
@@ -67,7 +67,7 @@ public class LocalizedStrings extends ParentLocalizedStrings {
   public static final StringId MessageFactory_COULD_NOT_ACCESS_ZEROARG_CONSTRUCTOR_OF_0 = new StringId(3435, "Could not access zero-arg constructor of  {0}");
   public static final StringId GroupMembershipService_AN_IOEXCEPTION_WAS_THROWN_WHILE_OPENING_0 = new StringId(3436, "An IOException was thrown while opening \"{0}\"");
   public static final StringId GroupMembershipService_AN_EXCEPTION_WAS_THROWN_WHILE_READING_JGROUPS_CONFIG = new StringId(3437, "An Exception was thrown while reading JGroups config.");
-  public static final StringId GroupMembershipService_AN_EXCEPTION_WAS_THROWN_WHILE_CONNECTING_TO_JGROUPS = new StringId(3438, "An Exception was thrown while connecting to Jgroups.");
+  public static final StringId GroupMembershipService_AN_EXCEPTION_WAS_THROWN_WHILE_JOINING = new StringId(3438, "An Exception was thrown while attempting to join the distributed system.");
   public static final StringId InternalInstantiator_CANNOT_UNREGISTER_A_NULL_CLASS = new StringId(3439, "Cannot unregister a null class");
   public static final StringId StatisticDescriptorImpl_THE_STATISTIC_0_WITH_ID_1_IS_OF_TYPE_2_AND_IT_WAS_EXPECTED_TO_BE_AN_INT = new StringId(3440, "The statistic  {0}  with id  {1}  is of type  {2}  and it was expected to be an int.");
   public static final StringId StatisticDescriptorImpl_THE_STATISTIC_0_WITH_ID_1_IS_OF_TYPE_2_AND_IT_WAS_EXPECTED_TO_BE_A_DOUBLE = new StringId(3441, "The statistic  {0}  with id  {1}  is of type  {2}  and it was expected to be a double.");
@@ -188,7 +188,7 @@ public class LocalizedStrings extends ParentLocalizedStrings {
   public static final StringId MemberAttributes_IOEXCEPTION_ON_A_BYTE_ARRAY_0 = new StringId(3553, "IOException on a byte array:  {0}");
   public static final StringId MemberAttributes_CLASSNOTFOUNDEXCEPTION_IN_DESERIALIZATION_0 = new StringId(3554, "ClassNotFoundException in deserialization:  {0}");
   public static final StringId GroupMembershipService_UNKNOWN_STARTUP_EVENT_0 = new StringId(3555, "unknown startup event:  {0}");
-  public static final StringId JGroupMember_ATTEMPT_TO_EXTERNALIZE_NULL_IP_ADDRESS = new StringId(3556, "attempt to externalize null ip address");
+  // 3556 available for reuse
   public static final StringId UpdateOperation_UNKNOWN_DESERIALIZATION_POLICY = new StringId(3557, "unknown deserialization policy");
   public static final StringId UpdateOperation_UNKNOWN_DESERIALIZATION_POLICY_0 = new StringId(3558, "unknown deserialization policy:  {0}");
   public static final StringId QueuedOperation_CACHEWRITER_SHOULD_NOT_BE_CALLED = new StringId(3559, "CacheWriter should not be called");

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/f57eb8b1/gemfire-core/src/main/java/com/gemstone/gemfire/internal/i18n/ParentLocalizedStrings.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/i18n/ParentLocalizedStrings.java b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/i18n/ParentLocalizedStrings.java
index 0e6cdcd..150b408 100755
--- a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/i18n/ParentLocalizedStrings.java
+++ b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/i18n/ParentLocalizedStrings.java
@@ -719,7 +719,7 @@ class ParentLocalizedStrings {
   public static final StringId Invalid_0_INVALID_MESSAGE_TYPE_WITH_TX_1_FROM_2 = new StringId(1711, "{0}: INVALID message type with tx: {1} from {2}");
   // ok to reuse 1712
   public static final StringId JCAConnectionManagerImpl_EXCEPTION_CAUGHT_WHILE_INITIALIZING = new StringId(1713, "JCAConnectionManagerImpl::Constructor: An exception was caught while initialising due to {0}" );
-  public static final StringId GroupMembershipService_CONNECTED_TO_JGROUPS_CHANNEL_TOOK__0__MS = new StringId(1714, "Connected to Jgroups channel (took  {0}  ms)");
+  public static final StringId GroupMembershipService_JOINED_TOOK__0__MS = new StringId(1714, "Joined the distributed system (took  {0}  ms)");
   public static final StringId GroupMembershipService_FAILED_TO_SEND_MESSAGE_0_TO_MEMBER_1_VIEW_2 = new StringId(1715, "Failed to send message <{0}> to member <{1}> view = {2}");
   // ok to reuse 1716
   // ok to reuse 1717
@@ -1807,8 +1807,8 @@ class ParentLocalizedStrings {
   public static final StringId InvalidateMessage_FAILED_SENDING_0 = new StringId(2798, "Failed sending < {0} >");
   public static final StringId InvalidateMessage_NO_RESPONSE_CODE_RECEIVED = new StringId(2799, "no response code received");
   public static final StringId JCAConnectionManagerImpl_JCACONNECTIONMANAGERIMPLALLOCATECONNECTIONNO_VALID_CONNECTION_AVAILABLE = new StringId(2800, "JCAConnectionManagerImpl::allocateConnection::No valid Connection available");
-  public static final StringId JGroupMemberFactory_UNABLE_TO_CREATE_MEMBERSHIP_MANAGER = new StringId(2801, "Unable to create membership manager");
-  public static final StringId JGroupMember_JGROUPMEMBERCOMPARETO_COMPARISON_BETWEEN_DIFFERENT_CLASSES = new StringId(2802, "JGroupMember.compareTo(): comparison between different classes");
+  public static final StringId MemberFactory_UNABLE_TO_CREATE_MEMBERSHIP_MANAGER = new StringId(2801, "Unable to create membership manager");
+  public static final StringId Member_MEMBERCOMPARETO_COMPARISON_BETWEEN_DIFFERENT_CLASSES = new StringId(2802, "NetMember.compareTo(): comparison between different classes");
   public static final StringId GroupMembershipService_CANNOT_FIND_0 = new StringId(2803, "Cannot find  {0}");
   public static final StringId GroupMembershipService_CHANNEL_CLOSED = new StringId(2804, "Channel closed");
   public static final StringId GroupMembershipService_CHANNEL_FAILURE = new StringId(2805, "Channel failure");

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/f57eb8b1/gemfire-core/src/main/java/com/gemstone/gemfire/internal/tcp/Connection.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/tcp/Connection.java b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/tcp/Connection.java
index 700e495..b6b1f8b 100644
--- a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/tcp/Connection.java
+++ b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/tcp/Connection.java
@@ -1856,6 +1856,7 @@ public class Connection implements Runnable {
             continue;
           }
           if (amt < 0) {
+            initiateSuspicionIfSharedUnordered();
             this.readerShuttingDown = true;
             try {
               requestClose("SocketChannel.read returned EOF");
@@ -1893,14 +1894,14 @@ public class Connection implements Runnable {
         }
         catch (ClosedChannelException e) {
           this.readerShuttingDown = true;
-          initiateSuspicionIfShared();
+          initiateSuspicionIfSharedUnordered();
           try { 
             requestClose(LocalizedStrings.Connection_CLOSEDCHANNELEXCEPTION_IN_CHANNEL_READ_0.toLocalizedString(e));
           } catch (Exception ex) {}
           return;
         }
         catch (IOException e) {
-          initiateSuspicionIfShared();
+          initiateSuspicionIfSharedUnordered();
           if (! isSocketClosed()
                 && !"Socket closed".equalsIgnoreCase(e.getMessage()) // needed for Solaris jdk 1.4.2_08
                 ) {
@@ -1924,7 +1925,7 @@ public class Connection implements Runnable {
           if (!stopped && ! isSocketClosed() ) {
             logger.fatal(LocalizedMessage.create(LocalizedStrings.Connection_0_EXCEPTION_IN_CHANNEL_READ, p2pReaderName()), e);
           }
-          initiateSuspicionIfShared();
+          initiateSuspicionIfSharedUnordered();
           this.readerShuttingDown = true;
           try { 
             requestClose(LocalizedStrings.Connection_0_EXCEPTION_IN_CHANNEL_READ.toLocalizedString(e)); 
@@ -1946,11 +1947,12 @@ public class Connection implements Runnable {
   }
 
   /** initiate suspect processing if a shared/ordered connection is lost and we're not shutting down */
-  private void initiateSuspicionIfShared() {
-    if (this.isReceiver && this.handshakeRead && this.preserveOrder && this.sharedResource) {
+  private void initiateSuspicionIfSharedUnordered() {
+    if (this.isReceiver && this.handshakeRead && !this.preserveOrder && this.sharedResource) {
       if (this.owner.getConduit().getCancelCriterion().cancelInProgress() == null) {
-            this.owner.getDM().getMembershipManager().suspectMember(this.getRemoteAddress(),
-            "member shut down shared/ordered connection");
+        String reason = "member shut down shared unordered connection";
+        this.owner.getDM().getMembershipManager().suspectMember(this.getRemoteAddress(),
+            reason);
       }
     }
   }
@@ -2089,6 +2091,7 @@ public class Connection implements Runnable {
         }
         int len = 0;
         if (readFully(input, lenbytes, lenbytes.length) < 0) {
+          initiateSuspicionIfSharedUnordered();
           stopped = true;
           continue;
         }
@@ -2445,7 +2448,7 @@ public class Connection implements Runnable {
         this.stopped = true;
       }
       catch (IOException io) {
-        initiateSuspicionIfShared();
+        initiateSuspicionIfSharedUnordered();
         boolean closed = isSocketClosed()
                 || "Socket closed".equalsIgnoreCase(io.getMessage()); // needed for Solaris jdk 1.4.2_08
         if (!closed) {
@@ -2479,7 +2482,7 @@ public class Connection implements Runnable {
         if (!stopped && !(e instanceof InterruptedException) ) {
           logger.fatal(LocalizedMessage.create(LocalizedStrings.Connection_0_EXCEPTION_RECEIVED, p2pReaderName()), e);
         }
-        initiateSuspicionIfShared();
+        initiateSuspicionIfSharedUnordered();
         if (isSocketClosed()) {
           stopped = true;
         }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/f57eb8b1/gemfire-core/src/main/java/com/gemstone/gemfire/management/internal/JmxManagerAdvisor.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/management/internal/JmxManagerAdvisor.java b/gemfire-core/src/main/java/com/gemstone/gemfire/management/internal/JmxManagerAdvisor.java
index 4e0518c..e47400d 100644
--- a/gemfire-core/src/main/java/com/gemstone/gemfire/management/internal/JmxManagerAdvisor.java
+++ b/gemfire-core/src/main/java/com/gemstone/gemfire/management/internal/JmxManagerAdvisor.java
@@ -154,7 +154,7 @@ public class JmxManagerAdvisor extends DistributionAdvisor {
     public JmxManagerProfileMessage() {}
     
     @Override
-    public boolean sendViaJGroups() {
+    public boolean sendViaUDP() {
       return true;
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/f57eb8b1/gemfire-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/DiskStoreCommands.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/DiskStoreCommands.java b/gemfire-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/DiskStoreCommands.java
index 9df08d0..f724921 100644
--- a/gemfire-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/DiskStoreCommands.java
+++ b/gemfire-core/src/main/java/com/gemstone/gemfire/management/internal/cli/commands/DiskStoreCommands.java
@@ -1189,7 +1189,10 @@ public class DiskStoreCommands extends AbstractCommandsSupport {
       }
       
       //Pass any java options on to the command
-      commandList.add(System.getenv("JAVA_OPTS"));
+      String opts = System.getenv("JAVA_OPTS");
+      if (opts != null) {
+        commandList.add(opts);
+      }
       commandList.add("-classpath");
       commandList.add(System.getProperty("java.class.path", "."));
       commandList.add(DiskStoreValidater.class.getName());
@@ -1219,6 +1222,8 @@ public class DiskStoreCommands extends AbstractCommandsSupport {
       return ResultBuilder
           .createGemFireErrorResult(CliStrings.format(CliStrings.VALIDATE_DISK_STORE__MSG__IO_ERROR,diskStoreName, ex.getMessage() ));
     } catch (Exception ex) {
+//      StringPrintWriter s = new StringPrintWriter();
+//      ex.printStackTrace(s);
       return ResultBuilder.createGemFireErrorResult(CliStrings.format(CliStrings.VALIDATE_DISK_STORE__MSG__ERROR,diskStoreName, ex.getMessage()));
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/f57eb8b1/gemfire-core/src/test/java/com/gemstone/gemfire/distributed/internal/membership/gms/MembershipManagerHelper.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/test/java/com/gemstone/gemfire/distributed/internal/membership/gms/MembershipManagerHelper.java b/gemfire-core/src/test/java/com/gemstone/gemfire/distributed/internal/membership/gms/MembershipManagerHelper.java
index b2c67e0..c5141de 100644
--- a/gemfire-core/src/test/java/com/gemstone/gemfire/distributed/internal/membership/gms/MembershipManagerHelper.java
+++ b/gemfire-core/src/test/java/com/gemstone/gemfire/distributed/internal/membership/gms/MembershipManagerHelper.java
@@ -154,6 +154,7 @@ public class MembershipManagerHelper
   }
   
   public static void crashDistributedSystem(final DistributedSystem msys) {
+    msys.getLogWriter().info("crashing distributed system: " + msys);
     MembershipManagerHelper.inhibitForcedDisconnectLogging(true);
     MembershipManagerHelper.playDead(msys);
     GMSMembershipManager mgr = ((GMSMembershipManager)getMembershipManager(msys));

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/f57eb8b1/gemfire-core/src/test/java/com/gemstone/gemfire/distributed/internal/membership/gms/membership/fd/GMSHealthMonitorJUnitTest.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/test/java/com/gemstone/gemfire/distributed/internal/membership/gms/membership/fd/GMSHealthMonitorJUnitTest.java b/gemfire-core/src/test/java/com/gemstone/gemfire/distributed/internal/membership/gms/membership/fd/GMSHealthMonitorJUnitTest.java
index 4307bdd..697e899 100644
--- a/gemfire-core/src/test/java/com/gemstone/gemfire/distributed/internal/membership/gms/membership/fd/GMSHealthMonitorJUnitTest.java
+++ b/gemfire-core/src/test/java/com/gemstone/gemfire/distributed/internal/membership/gms/membership/fd/GMSHealthMonitorJUnitTest.java
@@ -106,8 +106,11 @@ public class GMSHealthMonitorJUnitTest {
   public void testHMServiceStarted() throws IOException {
 
     InternalDistributedMember mbr = new InternalDistributedMember(SocketCreator.getLocalHost(), 12345);
+    mbr.setVmViewId(1);
     when(messenger.getMemberID()).thenReturn(mbr);
     gmsHealthMonitor.started();
+    
+    NetView v = new NetView(mbr, 1, mockMembers, new HashSet<InternalDistributedMember>(), new HashSet<InternalDistributedMember>());
 
     gmsHealthMonitor.processMessage(new HeartbeatRequestMessage(mbr, 1));
     verify(messenger, atLeastOnce()).send(any(HeartbeatMessage.class));

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/f57eb8b1/gemfire-core/src/test/java/dunit/standalone/ProcessManager.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/test/java/dunit/standalone/ProcessManager.java b/gemfire-core/src/test/java/dunit/standalone/ProcessManager.java
index f8a4da7..b6a4493 100644
--- a/gemfire-core/src/test/java/dunit/standalone/ProcessManager.java
+++ b/gemfire-core/src/test/java/dunit/standalone/ProcessManager.java
@@ -131,8 +131,12 @@ public class ProcessManager {
         try {
           String line = reader.readLine();
           while(line != null) {
-            out.print(vmName);
-            out.println(line);
+            if (line.length() == 0) {
+              out.println();
+            } else {
+              out.print(vmName);
+              out.println(line);
+            }
             line = reader.readLine();
           }
         } catch(Exception e) {