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 2019/12/30 21:21:54 UTC

[geode] 01/01: GEODE-7634: create an ArchUnitTest that asserts that geode-core only uses the membership API

This is an automated email from the ASF dual-hosted git repository.

bschuchardt pushed a commit to branch feature/GEODE-7634
in repository https://gitbox.apache.org/repos/asf/geode.git

commit 8b9285cc2700024335339424563057388d31a33f
Author: Bruce Schuchardt <bs...@pivotal.io>
AuthorDate: Mon Dec 30 13:18:43 2019 -0800

    GEODE-7634: create an ArchUnitTest that asserts that geode-core only uses the membership API
    
    creating a new test to enforce use of membership APIs.  There are a few
    exceptions in test code, plus others that aren't in the "integration
    test" source set.
---
 .../apache/geode/cache30/ReconnectDUnitTest.java   |   6 +-
 .../distributed/DistributedMemberDUnitTest.java    |   3 +-
 .../distributed/DistributedSystemDUnitTest.java    |   2 +-
 .../ClusterDistributionManagerDUnitTest.java       |   4 +-
 .../MeterSubregistryReconnectDistributedTest.java  |   7 +-
 .../LoggingWithReconnectDistributedTest.java       |   3 +-
 .../AutoConnectionSourceImplJUnitTest.java         |  27 +++--
 .../api/CoreOnlyUsesMembershipAPIArchUnitTest.java |  60 ++++++++++++
 .../main/java/org/apache/geode/SystemFailure.java  |  39 --------
 .../client/internal/AutoConnectionSourceImpl.java  |  51 +++++-----
 .../cache/client/internal/ConnectionImpl.java      |   5 -
 .../cache/client/internal/EndpointManagerImpl.java |   4 -
 .../cache/client/internal/LocatorAddress.java      | 109 +++++++++++++++++++++
 .../geode/cache/client/internal/PoolImpl.java      |  13 +--
 .../cache/client/internal/QueueConnectionImpl.java |   4 -
 .../cache/client/internal/QueueManagerImpl.java    |   4 -
 .../internal/pooling/ConnectionManagerImpl.java    |   4 -
 .../client/internal/pooling/PooledConnection.java  |   5 -
 .../geode/distributed/internal/Distribution.java   |  28 ------
 .../distributed/internal/DistributionImpl.java     |  80 +--------------
 .../internal/InternalDistributedSystem.java        |  19 ----
 .../distributed/internal/direct/DirectChannel.java |   9 --
 .../internal/membership/gms/GMSMembership.java     |  46 ++-------
 .../membership/gms/fd/GMSHealthMonitor.java        |   3 -
 .../membership/gms/membership/GMSJoinLeave.java    |   2 -
 .../geode/internal/SystemFailureTestHook.java      |   4 -
 .../admin/remote/RemoteGfManagerAgent.java         |  19 ----
 .../geode/internal/cache/GemFireCacheImpl.java     |  22 -----
 .../geode/internal/cache/PoolFactoryImpl.java      |   6 +-
 .../geode/internal/cache/PoolManagerImpl.java      |   4 -
 .../internal/cache/tier/CachedRegionHelper.java    |  10 --
 .../internal/cache/tier/sockets/AcceptorImpl.java  |  20 ----
 .../cache/tier/sockets/ServerConnection.java       |   9 --
 .../apache/geode/internal/tcp/ConnectionTable.java |   9 --
 .../org/apache/geode/internal/tcp/TCPConduit.java  |   9 --
 .../geode/cache/client/internal/PoolImplTest.java  |   3 +-
 ...itTest.java => GMSMembershipViewJUnitTest.java} |  26 ++---
 .../membership/InternalDistributedMemberTest.java  |  26 ++---
 .../membership/gms/MembershipManagerHelper.java    |   9 +-
 ...SenderEventRemoteDispatcherIntegrationTest.java |   3 +-
 40 files changed, 269 insertions(+), 447 deletions(-)

diff --git a/geode-core/src/distributedTest/java/org/apache/geode/cache30/ReconnectDUnitTest.java b/geode-core/src/distributedTest/java/org/apache/geode/cache30/ReconnectDUnitTest.java
index a1b5edb..bdbe97cf 100755
--- a/geode-core/src/distributedTest/java/org/apache/geode/cache30/ReconnectDUnitTest.java
+++ b/geode-core/src/distributedTest/java/org/apache/geode/cache30/ReconnectDUnitTest.java
@@ -86,7 +86,6 @@ import org.apache.geode.distributed.DistributedMember;
 import org.apache.geode.distributed.DistributedSystem;
 import org.apache.geode.distributed.DistributedSystemDisconnectedException;
 import org.apache.geode.distributed.Locator;
-import org.apache.geode.distributed.internal.Distribution;
 import org.apache.geode.distributed.internal.InternalDistributedSystem;
 import org.apache.geode.distributed.internal.InternalDistributedSystem.ReconnectListener;
 import org.apache.geode.distributed.internal.InternalLocator;
@@ -250,9 +249,8 @@ public class ReconnectDUnitTest extends JUnit4CacheTestCase {
     locatorVm.invoke(new SerializableRunnable("disable force-disconnect") {
       @Override
       public void run() {
-        Distribution mgr = MembershipManagerHelper
-            .getDistribution(Locator.getLocator().getDistributedSystem());
-        mgr.disableDisconnectOnQuorumLossForTesting();
+        MembershipManagerHelper
+            .disableDisconnectOnQuorumLossForTesting(Locator.getLocator().getDistributedSystem());
       }
     });
 
diff --git a/geode-core/src/distributedTest/java/org/apache/geode/distributed/DistributedMemberDUnitTest.java b/geode-core/src/distributedTest/java/org/apache/geode/distributed/DistributedMemberDUnitTest.java
index 07487e5..b7c4bbc 100755
--- a/geode-core/src/distributedTest/java/org/apache/geode/distributed/DistributedMemberDUnitTest.java
+++ b/geode-core/src/distributedTest/java/org/apache/geode/distributed/DistributedMemberDUnitTest.java
@@ -49,6 +49,7 @@ import org.apache.geode.distributed.internal.DistributionManager;
 import org.apache.geode.distributed.internal.HighPriorityAckedMessage;
 import org.apache.geode.distributed.internal.InternalDistributedSystem;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
+import org.apache.geode.distributed.internal.membership.gms.GMSMembership;
 import org.apache.geode.distributed.internal.membership.gms.MembershipManagerHelper;
 import org.apache.geode.internal.HeapDataOutputStream;
 import org.apache.geode.test.dunit.Host;
@@ -306,7 +307,7 @@ public class DistributedMemberDUnitTest extends JUnit4DistributedTestCase {
 
     Distribution manager =
         MembershipManagerHelper.getDistribution(basicGetSystem());
-    manager.replacePartialIdentifierInMessage(message);
+    ((GMSMembership) manager.getMembership()).replacePartialIdentifierInMessage(message);
 
     assertFalse(message.getSender().isPartial());
   }
diff --git a/geode-core/src/distributedTest/java/org/apache/geode/distributed/DistributedSystemDUnitTest.java b/geode-core/src/distributedTest/java/org/apache/geode/distributed/DistributedSystemDUnitTest.java
index 4bf80f0..bde5458 100644
--- a/geode-core/src/distributedTest/java/org/apache/geode/distributed/DistributedSystemDUnitTest.java
+++ b/geode-core/src/distributedTest/java/org/apache/geode/distributed/DistributedSystemDUnitTest.java
@@ -246,7 +246,7 @@ public class DistributedSystemDUnitTest extends JUnit4DistributedTestCase {
 
     ClusterDistributionManager dm = (ClusterDistributionManager) system.getDistributionManager();
     Distribution mgr = dm.getDistribution();
-    assertThat(mgr.getDirectChannelPort()).isEqualTo(this.tcpPort);
+    assertThat(mgr.getLocalMember().getDirectChannelPort()).isEqualTo(this.tcpPort);
   }
 
   /**
diff --git a/geode-core/src/distributedTest/java/org/apache/geode/distributed/internal/ClusterDistributionManagerDUnitTest.java b/geode-core/src/distributedTest/java/org/apache/geode/distributed/internal/ClusterDistributionManagerDUnitTest.java
index ea78eab..7bbcfda 100644
--- a/geode-core/src/distributedTest/java/org/apache/geode/distributed/internal/ClusterDistributionManagerDUnitTest.java
+++ b/geode-core/src/distributedTest/java/org/apache/geode/distributed/internal/ClusterDistributionManagerDUnitTest.java
@@ -61,6 +61,7 @@ import org.apache.geode.cache.util.CacheListenerAdapter;
 import org.apache.geode.distributed.ConfigurationProperties;
 import org.apache.geode.distributed.Locator;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
+import org.apache.geode.distributed.internal.membership.gms.GMSMembership;
 import org.apache.geode.distributed.internal.membership.gms.MembershipManagerHelper;
 import org.apache.geode.distributed.internal.membership.gms.api.MemberDisconnectedException;
 import org.apache.geode.distributed.internal.membership.gms.api.MembershipView;
@@ -171,7 +172,6 @@ public class ClusterDistributionManagerDUnitTest extends CacheTestCase {
     InternalDistributedSystem system = getSystem();
     Distribution membershipManager =
         MembershipManagerHelper.getDistribution(system);
-    assertThat(membershipManager.isCleanupTimerStarted()).isTrue();
 
     InternalDistributedMember member = new InternalDistributedMember(getIPLiteral(), 12345);
 
@@ -194,7 +194,7 @@ public class ClusterDistributionManagerDUnitTest extends CacheTestCase {
     // now forcibly add it as a surprise member and show that it is reaped
     long gracePeriod = 5000;
     long startTime = System.currentTimeMillis();
-    long timeout = membershipManager.getSurpriseMemberTimeout();
+    long timeout = ((GMSMembership) membershipManager.getMembership()).getSurpriseMemberTimeout();
     long birthTime = startTime - timeout + gracePeriod;
     MembershipManagerHelper.addSurpriseMember(system, member, birthTime);
     assertThat(membershipManager.isSurpriseMember(member)).as("Member was not a surprise member")
diff --git a/geode-core/src/distributedTest/java/org/apache/geode/internal/metrics/MeterSubregistryReconnectDistributedTest.java b/geode-core/src/distributedTest/java/org/apache/geode/internal/metrics/MeterSubregistryReconnectDistributedTest.java
index 8b616fd..306328a 100644
--- a/geode-core/src/distributedTest/java/org/apache/geode/internal/metrics/MeterSubregistryReconnectDistributedTest.java
+++ b/geode-core/src/distributedTest/java/org/apache/geode/internal/metrics/MeterSubregistryReconnectDistributedTest.java
@@ -21,7 +21,6 @@ import static org.apache.geode.distributed.ConfigurationProperties.LOCATORS;
 import static org.apache.geode.distributed.ConfigurationProperties.MAX_WAIT_TIME_RECONNECT;
 import static org.apache.geode.distributed.ConfigurationProperties.MEMBER_TIMEOUT;
 import static org.apache.geode.distributed.ConfigurationProperties.NAME;
-import static org.apache.geode.distributed.internal.membership.gms.MembershipManagerHelper.getDistribution;
 import static org.apache.geode.test.awaitility.GeodeAwaitility.await;
 import static org.apache.geode.test.awaitility.GeodeAwaitility.getTimeout;
 import static org.apache.geode.test.dunit.IgnoredException.addIgnoredException;
@@ -46,8 +45,8 @@ import org.junit.Test;
 import org.apache.geode.ForcedDisconnectException;
 import org.apache.geode.cache.CacheFactory;
 import org.apache.geode.distributed.LocatorLauncher;
-import org.apache.geode.distributed.internal.Distribution;
 import org.apache.geode.distributed.internal.InternalDistributedSystem;
+import org.apache.geode.distributed.internal.membership.gms.MembershipManagerHelper;
 import org.apache.geode.distributed.internal.membership.gms.api.MemberDisconnectedException;
 import org.apache.geode.internal.cache.InternalCache;
 import org.apache.geode.test.dunit.VM;
@@ -137,9 +136,7 @@ public class MeterSubregistryReconnectDistributedTest implements Serializable {
   }
 
   private void reconnect() throws InterruptedException {
-    Distribution membershipManager = getDistribution(system);
-    membershipManager.forceDisconnect("Forcing disconnect in test");
-
+    MembershipManagerHelper.crashDistributedSystem(system);
     await().until(() -> system.isReconnecting());
     system.waitUntilReconnected(TIMEOUT, MILLISECONDS);
 
diff --git a/geode-core/src/distributedTest/java/org/apache/geode/logging/internal/LoggingWithReconnectDistributedTest.java b/geode-core/src/distributedTest/java/org/apache/geode/logging/internal/LoggingWithReconnectDistributedTest.java
index 36b00a5..4b5ef63 100644
--- a/geode-core/src/distributedTest/java/org/apache/geode/logging/internal/LoggingWithReconnectDistributedTest.java
+++ b/geode-core/src/distributedTest/java/org/apache/geode/logging/internal/LoggingWithReconnectDistributedTest.java
@@ -48,6 +48,7 @@ import org.apache.geode.distributed.LocatorLauncher;
 import org.apache.geode.distributed.ServerLauncher;
 import org.apache.geode.distributed.internal.Distribution;
 import org.apache.geode.distributed.internal.InternalDistributedSystem;
+import org.apache.geode.distributed.internal.membership.gms.GMSMembership;
 import org.apache.geode.distributed.internal.membership.gms.api.MemberDisconnectedException;
 import org.apache.geode.test.assertj.LogFileAssert;
 import org.apache.geode.test.dunit.VM;
@@ -139,7 +140,7 @@ public class LoggingWithReconnectDistributedTest implements Serializable {
 
     server2VM.invoke(() -> {
       Distribution membershipManager = getDistribution(system);
-      membershipManager
+      ((GMSMembership) membershipManager.getMembership())
           .forceDisconnect("Forcing disconnect in " + testName.getMethodName());
 
       await().until(() -> system.isReconnecting());
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/cache/client/internal/AutoConnectionSourceImplJUnitTest.java b/geode-core/src/integrationTest/java/org/apache/geode/cache/client/internal/AutoConnectionSourceImplJUnitTest.java
index bc40399..a971665 100644
--- a/geode-core/src/integrationTest/java/org/apache/geode/cache/client/internal/AutoConnectionSourceImplJUnitTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/cache/client/internal/AutoConnectionSourceImplJUnitTest.java
@@ -72,7 +72,6 @@ import org.apache.geode.distributed.internal.InternalDistributedSystem;
 import org.apache.geode.distributed.internal.PoolStatHelper;
 import org.apache.geode.distributed.internal.RestartableTcpHandler;
 import org.apache.geode.distributed.internal.ServerLocation;
-import org.apache.geode.distributed.internal.membership.gms.membership.HostAddress;
 import org.apache.geode.distributed.internal.tcpserver.TcpClient;
 import org.apache.geode.distributed.internal.tcpserver.TcpServer;
 import org.apache.geode.internal.AvailablePortHelper;
@@ -125,8 +124,8 @@ public class AutoConnectionSourceImplJUnitTest {
     InetAddress ia = InetAddress.getLocalHost();
     InetSocketAddress isa = new InetSocketAddress(ia, port);
     locators.add(isa);
-    List<HostAddress> la = new ArrayList<>();
-    la.add(new HostAddress(isa, ia.getHostName()));
+    List<LocatorAddress> la = new ArrayList<>();
+    la.add(new LocatorAddress(isa, ia.getHostName()));
     source = new AutoConnectionSourceImpl(la, "", 60 * 1000);
     source.start(pool);
   }
@@ -187,14 +186,14 @@ public class AutoConnectionSourceImplJUnitTest {
     locators.add(floc1);
     locators.add(floc2);
 
-    List<HostAddress> la = new ArrayList<>();
-    la.add(new HostAddress(floc1, floc1.getHostName()));
-    la.add(new HostAddress(floc2, floc2.getHostName()));
+    List<LocatorAddress> la = new ArrayList<>();
+    la.add(new LocatorAddress(floc1, floc1.getHostName()));
+    la.add(new LocatorAddress(floc2, floc2.getHostName()));
 
     AutoConnectionSourceImpl src = new AutoConnectionSourceImpl(la, "", 60 * 1000);
 
     // This method will create a new InetSocketAddress of floc1
-    src.updateLocatorInLocatorList(new HostAddress(floc1, floc1.getHostName()));
+    src.updateLocatorInLocatorList(new LocatorAddress(floc1, floc1.getHostName()));
 
     List<InetSocketAddress> cLocList = src.getCurrentLocators();
 
@@ -218,18 +217,18 @@ public class AutoConnectionSourceImplJUnitTest {
     InetSocketAddress floc2 = new InetSocketAddress("fakeLocalHost2", port);
     locators.add(floc1);
     locators.add(floc2);
-    List<HostAddress> la = new ArrayList<>();
-    la.add(new HostAddress(floc1, floc1.getHostName()));
-    la.add(new HostAddress(floc2, floc2.getHostName()));
+    List<LocatorAddress> la = new ArrayList<>();
+    la.add(new LocatorAddress(floc1, floc1.getHostName()));
+    la.add(new LocatorAddress(floc2, floc2.getHostName()));
     AutoConnectionSourceImpl src = new AutoConnectionSourceImpl(la, "", 60 * 1000);
 
 
     InetSocketAddress b1 = new InetSocketAddress("fakeLocalHost1", port);
     InetSocketAddress b2 = new InetSocketAddress("fakeLocalHost3", port);
 
-    Set<HostAddress> bla = new HashSet<>();
-    bla.add(new HostAddress(b1, b1.getHostName()));
-    bla.add(new HostAddress(b2, b2.getHostName()));
+    Set<LocatorAddress> bla = new HashSet<>();
+    bla.add(new LocatorAddress(b1, b1.getHostName()));
+    bla.add(new LocatorAddress(b2, b2.getHostName()));
 
 
     src.addbadLocators(la, bla);
@@ -255,7 +254,7 @@ public class AutoConnectionSourceImplJUnitTest {
         isA(Integer.class), isA(Boolean.class))).thenThrow(new ToDataException("testing"));
     try {
       InetSocketAddress address = new InetSocketAddress(NetworkUtils.getServerHostName(), 1234);
-      source.queryOneLocatorUsingConnection(new HostAddress(address, "locator[1234]"), mock(
+      source.queryOneLocatorUsingConnection(new LocatorAddress(address, "locator[1234]"), mock(
           ServerLocationRequest.class), mockConnection);
       verify(mockConnection).requestToServer(isA(InetSocketAddress.class),
           isA(ServerLocationRequest.class), isA(Integer.class), isA(Boolean.class));
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/api/CoreOnlyUsesMembershipAPIArchUnitTest.java b/geode-core/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/api/CoreOnlyUsesMembershipAPIArchUnitTest.java
new file mode 100644
index 0000000..0978eda
--- /dev/null
+++ b/geode-core/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/api/CoreOnlyUsesMembershipAPIArchUnitTest.java
@@ -0,0 +1,60 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package org.apache.geode.distributed.internal.membership.gms.api;
+
+import static com.tngtech.archunit.base.DescribedPredicate.not;
+import static com.tngtech.archunit.core.domain.JavaClass.Predicates.resideInAPackage;
+import static com.tngtech.archunit.core.domain.JavaClass.Predicates.type;
+import static com.tngtech.archunit.lang.syntax.ArchRuleDefinition.classes;
+
+import com.tngtech.archunit.core.importer.ImportOption;
+import com.tngtech.archunit.junit.AnalyzeClasses;
+import com.tngtech.archunit.junit.ArchTest;
+import com.tngtech.archunit.junit.ArchUnitRunner;
+import com.tngtech.archunit.junit.CacheMode;
+import com.tngtech.archunit.lang.ArchRule;
+import org.junit.runner.RunWith;
+
+import org.apache.geode.distributed.LocatorIntegrationTest;
+import org.apache.geode.distributed.internal.membership.MembershipJUnitTest;
+import org.apache.geode.distributed.internal.membership.gms.MembershipManagerHelper;
+
+@RunWith(ArchUnitRunner.class)
+@AnalyzeClasses(packages = "org.apache.geode..",
+    cacheMode = CacheMode.PER_CLASS,
+    importOptions = ImportOption.DoNotIncludeArchives.class)
+public class CoreOnlyUsesMembershipAPIArchUnitTest {
+
+  @ArchTest
+  public static final ArchRule coreOnlyUsesMembershipAPI = classes()
+      .that()
+      .resideInAPackage("org.apache.geode..")
+      .and(not(resideInAPackage("org.apache.geode.distributed.internal.membership.adapter")))
+      .and(not(resideInAPackage("org.apache.geode.distributed.internal.membership.gms..")))
+
+      // These non-integration tests also need to be addressed
+      // .and(not(type(GMSMembershipViewJUnitTest.class)))
+      // .and(not(type(AbstractGMSAuthenticatorTestCase.class)))
+      // .and(not(type(DistributionTest.class)))
+
+      .and(not(type(MembershipJUnitTest.class)))
+      .and(not(type(LocatorIntegrationTest.class)))
+
+      .should()
+      .onlyDependOnClassesThat(
+          resideInAPackage("org.apache.geode.distributed.internal.membership.gms.api")
+              .or(type(MembershipManagerHelper.class))
+              .or(not(resideInAPackage("org.apache.geode.distributed.internal.membership.gms.."))));
+}
diff --git a/geode-core/src/main/java/org/apache/geode/SystemFailure.java b/geode-core/src/main/java/org/apache/geode/SystemFailure.java
index c3f4e34..80197fe 100644
--- a/geode-core/src/main/java/org/apache/geode/SystemFailure.java
+++ b/geode-core/src/main/java/org/apache/geode/SystemFailure.java
@@ -356,30 +356,6 @@ public final class SystemFailure {
     boolean warned = false;
 
     logFine(WATCHDOG_NAME, "Starting");
-    try {
-      basicLoadEmergencyClasses();
-    } catch (ExceptionInInitializerError e) {
-      // Determine if we're shutting down...
-      boolean noSurprise = false;
-      Throwable cause = e.getCause();
-      if (cause != null) {
-        if (cause instanceof IllegalStateException) {
-          String msg = cause.getMessage();
-          if (msg.contains("Shutdown in progress")) {
-            noSurprise = true;
-          }
-        }
-      }
-      if (!noSurprise) {
-        logWarning(WATCHDOG_NAME, "Unable to load GemFire classes: ", e);
-      }
-      return;
-    } catch (CancelException e) {
-      // ignore this because we are shutting down anyway
-    } catch (Throwable t) {
-      logWarning(WATCHDOG_NAME, "Unable to initialize watchdog", t);
-      return;
-    }
     while (!stopping) {
       try {
         if (isCacheClosing) {
@@ -724,12 +700,6 @@ public final class SystemFailure {
   private static final String PROCTOR_NAME = "SystemFailure Proctor";
 
   /**
-   * break any potential circularity in {@link #loadEmergencyClasses()}
-   */
-  @MakeNotStatic
-  private static volatile boolean emergencyClassesLoaded = false;
-
-  /**
    * Since it requires object memory to unpack a jar file, make sure this JVM has loaded the classes
    * necessary for closure <em>before</em> it becomes necessary to use them.
    * <p>
@@ -741,15 +711,6 @@ public final class SystemFailure {
     startThreads();
   }
 
-  private static void basicLoadEmergencyClasses() {
-    if (emergencyClassesLoaded)
-      return;
-    emergencyClassesLoaded = true;
-    SystemFailureTestHook.loadEmergencyClasses(); // bug 50516
-    GemFireCacheImpl.loadEmergencyClasses();
-    RemoteGfManagerAgent.loadEmergencyClasses();
-  }
-
   /**
    * Attempt to close any and all GemFire resources.
    *
diff --git a/geode-core/src/main/java/org/apache/geode/cache/client/internal/AutoConnectionSourceImpl.java b/geode-core/src/main/java/org/apache/geode/cache/client/internal/AutoConnectionSourceImpl.java
index f593183..d51909d 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/client/internal/AutoConnectionSourceImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/client/internal/AutoConnectionSourceImpl.java
@@ -51,7 +51,6 @@ import org.apache.geode.cache.client.internal.locator.ServerLocationRequest;
 import org.apache.geode.cache.client.internal.locator.ServerLocationResponse;
 import org.apache.geode.distributed.internal.DistributionConfig;
 import org.apache.geode.distributed.internal.ServerLocation;
-import org.apache.geode.distributed.internal.membership.gms.membership.HostAddress;
 import org.apache.geode.distributed.internal.tcpserver.TcpClient;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.cache.tier.sockets.ClientProxyMembershipID;
@@ -75,7 +74,7 @@ public class AutoConnectionSourceImpl implements ConnectionSource {
   private static final LocatorListRequest LOCATOR_LIST_REQUEST = new LocatorListRequest();
 
   @Immutable
-  private static final Comparator<HostAddress> SOCKET_ADDRESS_COMPARATOR =
+  private static final Comparator<LocatorAddress> SOCKET_ADDRESS_COMPARATOR =
       (address, otherAddress) -> {
         InetSocketAddress inetSocketAddress = address.getSocketInetAddress();
         InetSocketAddress otherInetSocketAddress = otherAddress.getSocketInetAddress();
@@ -93,7 +92,7 @@ public class AutoConnectionSourceImpl implements ConnectionSource {
           return inetSocketAddress.getPort() - otherInetSocketAddress.getPort();
         }
       };
-  private final List<HostAddress> initialLocators;
+  private final List<LocatorAddress> initialLocators;
   private final String serverGroup;
   private AtomicReference<LocatorList> locators = new AtomicReference<>();
   private AtomicReference<LocatorList> onlineLocators = new AtomicReference<>();
@@ -108,7 +107,7 @@ public class AutoConnectionSourceImpl implements ConnectionSource {
    */
   private final Map<InetSocketAddress, Exception> locatorState = new HashMap<>();
 
-  public AutoConnectionSourceImpl(List<HostAddress> contacts, String serverGroup,
+  public AutoConnectionSourceImpl(List<LocatorAddress> contacts, String serverGroup,
       int handshakeTimeout) {
     this.locators.set(new LocatorList(new ArrayList<>(contacts)));
     this.onlineLocators.set(new LocatorList(Collections.emptyList()));
@@ -197,13 +196,13 @@ public class AutoConnectionSourceImpl implements ConnectionSource {
   }
 
 
-  private ServerLocationResponse queryOneLocator(HostAddress locator,
+  private ServerLocationResponse queryOneLocator(LocatorAddress locator,
       ServerLocationRequest request) {
     return queryOneLocatorUsingConnection(locator, request, tcpClient);
   }
 
 
-  ServerLocationResponse queryOneLocatorUsingConnection(HostAddress locator,
+  ServerLocationResponse queryOneLocatorUsingConnection(LocatorAddress locator,
       ServerLocationRequest request,
       TcpClient locatorConnection) {
     Object returnObj = null;
@@ -243,16 +242,16 @@ public class AutoConnectionSourceImpl implements ConnectionSource {
    * This will cause another DNS lookup, hopefully finding the locator.
    *
    */
-  protected void updateLocatorInLocatorList(HostAddress locator) {
+  protected void updateLocatorInLocatorList(LocatorAddress locator) {
     if (locator.getSocketInetAddressNoLookup().getHostName() != null && !locator.isIpString()) {
       LocatorList locatorList = locators.get();
-      List<HostAddress> newLocatorsList = new ArrayList<>();
+      List<LocatorAddress> newLocatorsList = new ArrayList<>();
 
-      for (HostAddress tloc : locatorList.getLocatorAddresses()) {
+      for (LocatorAddress tloc : locatorList.getLocatorAddresses()) {
         if (tloc.equals(locator)) {
           InetSocketAddress changeLoc = new InetSocketAddress(locator.getHostName(),
               locator.getSocketInetAddressNoLookup().getPort());
-          HostAddress hostAddress = new HostAddress(changeLoc, locator.getHostName());
+          LocatorAddress hostAddress = new LocatorAddress(changeLoc, locator.getHostName());
           newLocatorsList.add(hostAddress);
         } else {
           newLocatorsList.add(tloc);
@@ -277,7 +276,7 @@ public class AutoConnectionSourceImpl implements ConnectionSource {
 
     final boolean isDebugEnabled = logger.isDebugEnabled();
     do {
-      HostAddress hostAddress = (HostAddress) controllerItr.next();
+      LocatorAddress hostAddress = (LocatorAddress) controllerItr.next();
       if (isDebugEnabled) {
         logger.debug("Sending query to locator {}: {}", hostAddress, request);
       }
@@ -296,13 +295,13 @@ public class AutoConnectionSourceImpl implements ConnectionSource {
     isBalanced = response.isBalanced();
     List<ServerLocation> locatorResponse = response.getLocators();
 
-    List<HostAddress> newLocatorAddresses = new ArrayList<>(locatorResponse.size());
-    List<HostAddress> newOnlineLocators = new ArrayList<>(locatorResponse.size());
+    List<LocatorAddress> newLocatorAddresses = new ArrayList<>(locatorResponse.size());
+    List<LocatorAddress> newOnlineLocators = new ArrayList<>(locatorResponse.size());
 
-    Set<HostAddress> badLocators = new HashSet<>(initialLocators);
+    Set<LocatorAddress> badLocators = new HashSet<>(initialLocators);
     for (ServerLocation locator : locatorResponse) {
       InetSocketAddress address = new InetSocketAddress(locator.getHostName(), locator.getPort());
-      HostAddress hostAddress = new HostAddress(address, locator.getHostName());
+      LocatorAddress hostAddress = new LocatorAddress(address, locator.getHostName());
       newLocatorAddresses.add(hostAddress);
       newOnlineLocators.add(hostAddress);
       badLocators.remove(hostAddress);
@@ -341,10 +340,10 @@ public class AutoConnectionSourceImpl implements ConnectionSource {
    * This method will add bad locator only when locator with hostname and port is not already in
    * list.
    */
-  protected void addbadLocators(List<HostAddress> newLocators, Set<HostAddress> badLocators) {
-    for (HostAddress badloc : badLocators) {
+  protected void addbadLocators(List<LocatorAddress> newLocators, Set<LocatorAddress> badLocators) {
+    for (LocatorAddress badloc : badLocators) {
       boolean addIt = true;
-      for (HostAddress goodloc : newLocators) {
+      for (LocatorAddress goodloc : newLocators) {
         boolean isSameHost = badloc.getHostName().equals(goodloc.getHostName());
         if (isSameHost && badloc.getPort() == goodloc.getPort()) {
           // ip has been changed so don't add this in current
@@ -410,23 +409,23 @@ public class AutoConnectionSourceImpl implements ConnectionSource {
    * A list of locators, which remembers the last known good locator.
    */
   private static class LocatorList {
-    protected final List<HostAddress> locators;
+    protected final List<LocatorAddress> locators;
     AtomicInteger currentLocatorIndex = new AtomicInteger();
 
-    LocatorList(List<HostAddress> locators) {
+    LocatorList(List<LocatorAddress> locators) {
       locators.sort(SOCKET_ADDRESS_COMPARATOR);
       this.locators = Collections.unmodifiableList(locators);
     }
 
     public List<InetSocketAddress> getLocators() {
       List<InetSocketAddress> locs = new ArrayList<>();
-      for (HostAddress la : locators) {
+      for (LocatorAddress la : locators) {
         locs.add(la.getSocketInetAddress());
       }
       return locs;
     }
 
-    List<HostAddress> getLocatorAddresses() {
+    List<LocatorAddress> getLocatorAddresses() {
       return locators;
     }
 
@@ -434,7 +433,7 @@ public class AutoConnectionSourceImpl implements ConnectionSource {
       return locators.size();
     }
 
-    public Iterator<HostAddress> iterator() {
+    public Iterator<LocatorAddress> iterator() {
       return new LocatorIterator();
     }
 
@@ -449,7 +448,7 @@ public class AutoConnectionSourceImpl implements ConnectionSource {
      * controller.
      *
      */
-    protected class LocatorIterator implements Iterator<HostAddress> {
+    protected class LocatorIterator implements Iterator<LocatorAddress> {
       private int startLocator = currentLocatorIndex.get();
       private int locatorNum = 0;
 
@@ -459,12 +458,12 @@ public class AutoConnectionSourceImpl implements ConnectionSource {
       }
 
       @Override
-      public HostAddress next() {
+      public LocatorAddress next() {
         if (!hasNext()) {
           return null;
         } else {
           int index = (locatorNum + startLocator) % locators.size();
-          HostAddress nextLocator = locators.get(index);
+          LocatorAddress nextLocator = locators.get(index);
           currentLocatorIndex.set(index);
           locatorNum++;
           return nextLocator;
diff --git a/geode-core/src/main/java/org/apache/geode/cache/client/internal/ConnectionImpl.java b/geode-core/src/main/java/org/apache/geode/cache/client/internal/ConnectionImpl.java
index b4e0415..c149a72 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/client/internal/ConnectionImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/client/internal/ConnectionImpl.java
@@ -267,11 +267,6 @@ public class ConnectionImpl implements Connection {
 
   }
 
-
-  public static void loadEmergencyClasses() {
-    // do nothing
-  }
-
   @Override
   public short getWanSiteVersion() {
     return wanSiteVersion;
diff --git a/geode-core/src/main/java/org/apache/geode/cache/client/internal/EndpointManagerImpl.java b/geode-core/src/main/java/org/apache/geode/cache/client/internal/EndpointManagerImpl.java
index 50fc0bd..d41ca20 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/client/internal/EndpointManagerImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/client/internal/EndpointManagerImpl.java
@@ -207,10 +207,6 @@ public class EndpointManagerImpl implements EndpointManager {
     return getEndpointMap().size();
   }
 
-  public static void loadEmergencyClasses() {
-    // do nothing
-  }
-
   protected static class EndpointListenerBroadcaster implements EndpointManager.EndpointListener {
 
     private volatile Set<EndpointListener> endpointListeners = Collections.emptySet();
diff --git a/geode-core/src/main/java/org/apache/geode/cache/client/internal/LocatorAddress.java b/geode-core/src/main/java/org/apache/geode/cache/client/internal/LocatorAddress.java
new file mode 100644
index 0000000..94a43bb
--- /dev/null
+++ b/geode-core/src/main/java/org/apache/geode/cache/client/internal/LocatorAddress.java
@@ -0,0 +1,109 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package org.apache.geode.cache.client.internal;
+
+import java.net.InetSocketAddress;
+
+import org.apache.commons.validator.routines.InetAddressValidator;
+
+public class LocatorAddress {
+
+  private final InetSocketAddress socketInetAddress;
+  private final String hostname;
+  private final int port;
+  private final boolean isIpString;
+
+  public LocatorAddress(InetSocketAddress loc, String locStr) {
+    this.socketInetAddress = loc;
+    this.hostname = locStr;
+    this.port = loc.getPort();
+    this.isIpString = InetAddressValidator.getInstance().isValid(locStr);
+  }
+
+  public boolean isIpString() {
+    return isIpString;
+  }
+
+  /**
+   * if host is ipString then it will return the cached InetSocketAddress Otherwise it will create
+   * the new instance of InetSocketAddress
+   */
+  public InetSocketAddress getSocketInetAddress() {
+    if (this.isIpString) {
+      return this.socketInetAddress;
+    } else {
+      return new InetSocketAddress(hostname, this.socketInetAddress.getPort());
+    }
+  }
+
+  public String getHostName() {
+    return hostname;
+  }
+
+  public int getPort() {
+    return port;
+  }
+
+  /**
+   * If component has retry logic then use this method to get the InetSocketAddress address
+   * AutoConnectionSourceImpl for client has retry logic; This way client will not make DNS query
+   * each time
+   *
+   */
+  public InetSocketAddress getSocketInetAddressNoLookup() {
+    return this.socketInetAddress;
+  }
+
+  @Override
+  public int hashCode() {
+    int prime = 31;
+    int result = 1;
+    result = prime * result + (isIpString ? 1231 : 1237);
+    result = prime * result + (socketInetAddress == null ? 0 : socketInetAddress.hashCode());
+    result = prime * result + (hostname == null ? 0 : hostname.hashCode());
+    return result;
+  }
+
+  @Override
+  public boolean equals(Object obj) {
+    if (this == obj)
+      return true;
+    if (obj == null)
+      return false;
+    if (getClass() != obj.getClass())
+      return false;
+    LocatorAddress other = (LocatorAddress) obj;
+    if (isIpString != other.isIpString)
+      return false;
+    if (socketInetAddress == null) {
+      if (other.socketInetAddress != null)
+        return false;
+    } else if (!socketInetAddress.equals(other.socketInetAddress))
+      return false;
+    if (hostname == null) {
+      if (other.hostname != null)
+        return false;
+    } else if (!hostname.equals(other.hostname))
+      return false;
+    return true;
+  }
+
+  @Override
+  public String toString() {
+    return "LocatorAddress [socketInetAddress=" + socketInetAddress + ", hostname=" + hostname
+        + ", isIpString=" + isIpString + "]";
+  }
+
+}
diff --git a/geode-core/src/main/java/org/apache/geode/cache/client/internal/PoolImpl.java b/geode-core/src/main/java/org/apache/geode/cache/client/internal/PoolImpl.java
index e49e2da..c82398a 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/client/internal/PoolImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/client/internal/PoolImpl.java
@@ -53,7 +53,6 @@ import org.apache.geode.distributed.PoolCancelledException;
 import org.apache.geode.distributed.internal.DistributionConfig;
 import org.apache.geode.distributed.internal.InternalDistributedSystem;
 import org.apache.geode.distributed.internal.ServerLocation;
-import org.apache.geode.distributed.internal.membership.gms.membership.HostAddress;
 import org.apache.geode.internal.admin.ClientStatsManager;
 import org.apache.geode.internal.cache.EventID;
 import org.apache.geode.internal.cache.InternalCache;
@@ -110,7 +109,7 @@ public class PoolImpl implements InternalPool {
   private final int subscriptionAckInterval;
   private final int subscriptionTimeoutMultiplier;
   private final String serverGroup;
-  private final List<HostAddress> locatorAddresses;
+  private final List<LocatorAddress> locatorAddresses;
   private final List<InetSocketAddress> locators;
   private final List<InetSocketAddress> servers;
   private final boolean startDisabled;
@@ -155,7 +154,7 @@ public class PoolImpl implements InternalPool {
   private final ThreadsMonitoring threadMonitoring;
 
   public static PoolImpl create(PoolManagerImpl pm, String name, Pool attributes,
-      List<HostAddress> locatorAddresses, InternalDistributedSystem distributedSystem,
+      List<LocatorAddress> locatorAddresses, InternalDistributedSystem distributedSystem,
       InternalCache cache, ThreadsMonitoring tMonitoring) {
     PoolImpl pool =
         new PoolImpl(pm, name, attributes, locatorAddresses, distributedSystem, cache, tMonitoring);
@@ -185,7 +184,7 @@ public class PoolImpl implements InternalPool {
   }
 
   protected PoolImpl(PoolManagerImpl pm, String name, Pool attributes,
-      List<HostAddress> locatorAddresses, InternalDistributedSystem distributedSystem,
+      List<LocatorAddress> locatorAddresses, InternalDistributedSystem distributedSystem,
       InternalCache cache, ThreadsMonitoring threadMonitoring) {
     this.pm = pm;
     this.name = name;
@@ -1371,12 +1370,6 @@ public class PoolImpl implements InternalPool {
     }
   }
 
-  public static void loadEmergencyClasses() {
-    QueueManagerImpl.loadEmergencyClasses();
-    ConnectionManagerImpl.loadEmergencyClasses();
-    EndpointManagerImpl.loadEmergencyClasses();
-  }
-
   /**
    * Returns the QueryService, that can be used to execute Query functions on the servers associated
    * with this pool.
diff --git a/geode-core/src/main/java/org/apache/geode/cache/client/internal/QueueConnectionImpl.java b/geode-core/src/main/java/org/apache/geode/cache/client/internal/QueueConnectionImpl.java
index 132fb97..e50de27 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/client/internal/QueueConnectionImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/client/internal/QueueConnectionImpl.java
@@ -212,10 +212,6 @@ public class QueueConnectionImpl implements Connection {
     }
   }
 
-  public static void loadEmergencyClasses() {
-    ConnectionImpl.loadEmergencyClasses();
-  }
-
   @Override
   public short getWanSiteVersion() {
     throw new UnsupportedOperationException();
diff --git a/geode-core/src/main/java/org/apache/geode/cache/client/internal/QueueManagerImpl.java b/geode-core/src/main/java/org/apache/geode/cache/client/internal/QueueManagerImpl.java
index d69a3d1..12b7d99 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/client/internal/QueueManagerImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/client/internal/QueueManagerImpl.java
@@ -1485,8 +1485,4 @@ public class QueueManagerImpl implements QueueManager {
     }
 
   }
-
-  public static void loadEmergencyClasses() {
-    QueueConnectionImpl.loadEmergencyClasses();
-  }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/cache/client/internal/pooling/ConnectionManagerImpl.java b/geode-core/src/main/java/org/apache/geode/cache/client/internal/pooling/ConnectionManagerImpl.java
index 52e1684..b3bffc9 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/client/internal/pooling/ConnectionManagerImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/client/internal/pooling/ConnectionManagerImpl.java
@@ -613,10 +613,6 @@ public class ConnectionManagerImpl implements ConnectionManager {
     return false;
   }
 
-  public static void loadEmergencyClasses() {
-    PooledConnection.loadEmergencyClasses();
-  }
-
   protected class LifetimeExpireConnectionsTask implements Runnable {
     @Override
     public void run() {
diff --git a/geode-core/src/main/java/org/apache/geode/cache/client/internal/pooling/PooledConnection.java b/geode-core/src/main/java/org/apache/geode/cache/client/internal/pooling/PooledConnection.java
index ae7bf5e..ae5df9d 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/client/internal/pooling/PooledConnection.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/client/internal/pooling/PooledConnection.java
@@ -23,7 +23,6 @@ import java.util.concurrent.atomic.AtomicBoolean;
 
 import org.apache.geode.InternalGemFireException;
 import org.apache.geode.cache.client.internal.Connection;
-import org.apache.geode.cache.client.internal.ConnectionImpl;
 import org.apache.geode.cache.client.internal.ConnectionStats;
 import org.apache.geode.cache.client.internal.Endpoint;
 import org.apache.geode.cache.client.internal.Op;
@@ -353,10 +352,6 @@ public class PooledConnection implements Connection {
     return getConnection().execute(op);
   }
 
-  public static void loadEmergencyClasses() {
-    ConnectionImpl.loadEmergencyClasses();
-  }
-
   @Override
   public short getWanSiteVersion() {
     return getConnection().getWanSiteVersion();
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/Distribution.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/Distribution.java
index 830135a..dc7c00d 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/Distribution.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/Distribution.java
@@ -20,10 +20,8 @@ import java.util.Set;
 import java.util.concurrent.TimeoutException;
 import java.util.function.Supplier;
 
-import org.apache.geode.annotations.VisibleForTesting;
 import org.apache.geode.distributed.DistributedMember;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
-import org.apache.geode.distributed.internal.membership.gms.GMSMembershipView;
 import org.apache.geode.distributed.internal.membership.gms.api.Membership;
 import org.apache.geode.distributed.internal.membership.gms.api.MembershipView;
 import org.apache.geode.distributed.internal.membership.gms.api.QuorumChecker;
@@ -114,32 +112,6 @@ public interface Distribution {
 
   Set<InternalDistributedMember> getMembersNotShuttingDown();
 
-  // TODO - this method is only used by tests
-  @VisibleForTesting
-  void forceDisconnect(String reason);
-
-  // TODO - this method is only used by tests
-  @VisibleForTesting
-  void replacePartialIdentifierInMessage(DistributionMessage message);
-
-  // TODO - this method is only used by tests
-  @VisibleForTesting
-  boolean isCleanupTimerStarted();
-
-  // TODO - this method is only used by tests
-  @VisibleForTesting
-  long getSurpriseMemberTimeout();
-
-  // TODO - this method is only used by tests
-  @VisibleForTesting
-  void installView(GMSMembershipView<InternalDistributedMember> newView);
-
-  // TODO - this method is only used by tests
-  @VisibleForTesting
-  int getDirectChannelPort();
-
-  void disableDisconnectOnQuorumLossForTesting();
-
   boolean waitForDeparture(InternalDistributedMember mbr)
       throws TimeoutException, InterruptedException;
 
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/DistributionImpl.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/DistributionImpl.java
index 1df8903..063aea0 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/DistributionImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/DistributionImpl.java
@@ -37,11 +37,9 @@ import org.apache.geode.CancelException;
 import org.apache.geode.ForcedDisconnectException;
 import org.apache.geode.GemFireConfigException;
 import org.apache.geode.SystemConnectException;
-import org.apache.geode.SystemFailure;
 import org.apache.geode.ToDataException;
 import org.apache.geode.annotations.Immutable;
 import org.apache.geode.annotations.VisibleForTesting;
-import org.apache.geode.annotations.internal.MakeNotStatic;
 import org.apache.geode.distributed.DistributedMember;
 import org.apache.geode.distributed.DistributedSystemDisconnectedException;
 import org.apache.geode.distributed.Locator;
@@ -50,9 +48,6 @@ import org.apache.geode.distributed.internal.direct.ShunnedMemberException;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.distributed.internal.membership.adapter.ServiceConfig;
 import org.apache.geode.distributed.internal.membership.adapter.auth.GMSAuthenticator;
-import org.apache.geode.distributed.internal.membership.gms.GMSMembership;
-import org.apache.geode.distributed.internal.membership.gms.GMSMembershipView;
-import org.apache.geode.distributed.internal.membership.gms.Services;
 import org.apache.geode.distributed.internal.membership.gms.api.LifecycleListener;
 import org.apache.geode.distributed.internal.membership.gms.api.MemberDisconnectedException;
 import org.apache.geode.distributed.internal.membership.gms.api.MemberIdentifier;
@@ -68,8 +63,6 @@ import org.apache.geode.distributed.internal.membership.gms.api.MembershipView;
 import org.apache.geode.distributed.internal.membership.gms.api.Message;
 import org.apache.geode.distributed.internal.membership.gms.api.MessageListener;
 import org.apache.geode.distributed.internal.membership.gms.api.QuorumChecker;
-import org.apache.geode.distributed.internal.membership.gms.fd.GMSHealthMonitor;
-import org.apache.geode.distributed.internal.membership.gms.membership.GMSJoinLeave;
 import org.apache.geode.distributed.internal.tcpserver.TcpClient;
 import org.apache.geode.internal.InternalDataSerializer;
 import org.apache.geode.internal.admin.remote.RemoteTransportConfig;
@@ -82,21 +75,16 @@ import org.apache.geode.internal.tcp.ConnectExceptions;
 import org.apache.geode.internal.tcp.ConnectionException;
 import org.apache.geode.internal.util.Breadcrumbs;
 import org.apache.geode.logging.internal.executors.LoggingThread;
+import org.apache.geode.logging.internal.log4j.api.LogService;
 import org.apache.geode.security.AuthenticationRequiredException;
 import org.apache.geode.security.GemFireSecurityException;
 
 public class DistributionImpl implements Distribution {
-  private static final Logger logger = Services.getLogger();
+  private static final Logger logger = LogService.getLogger();
 
   @Immutable
   public static final InternalDistributedMember[] EMPTY_MEMBER_ARRAY =
       new InternalDistributedMember[0];
-  /**
-   * @see SystemFailure#loadEmergencyClasses() /** break any potential circularity in
-   *      {@link #loadEmergencyClasses()}
-   */
-  @MakeNotStatic
-  private static volatile boolean emergencyClassesLoaded = false;
 
   private final ClusterDistributionManager clusterDistributionManager;
   private final boolean tcpDisabled;
@@ -163,25 +151,11 @@ public class DistributionImpl implements Distribution {
     } catch (GemFireSecurityException e) {
       throw e;
     } catch (RuntimeException e) {
-      Services.getLogger().error("Unexpected problem starting up membership services", e);
+      logger.error("Unexpected problem starting up membership services", e);
       throw new SystemConnectException("Problem starting up membership services", e);
     }
   }
 
-  /**
-   * Ensure that the critical classes from components get loaded.
-   *
-   * @see SystemFailure#loadEmergencyClasses()
-   */
-  public static void loadEmergencyClasses() {
-    if (emergencyClassesLoaded)
-      return;
-    emergencyClassesLoaded = true;
-    DirectChannel.loadEmergencyClasses();
-    GMSJoinLeave.loadEmergencyClasses();
-    GMSHealthMonitor.loadEmergencyClasses();
-  }
-
   public static void connectLocatorToServices(Membership<InternalDistributedMember> membership) {
     // see if a locator was started and put it in GMS Services
     InternalLocator l = (InternalLocator) Locator.getLocator();
@@ -638,49 +612,6 @@ public class DistributionImpl implements Distribution {
     return membership.getMembersNotShuttingDown();
   }
 
-  // TODO - this method is only used by tests
-  @Override
-  @VisibleForTesting
-  public void forceDisconnect(String reason) {
-    ((GMSMembership) membership).getGMSManager().forceDisconnect(reason);
-  }
-
-  // TODO - this method is only used by tests
-  @Override
-  @VisibleForTesting
-  public void replacePartialIdentifierInMessage(DistributionMessage message) {
-    ((GMSMembership) membership).replacePartialIdentifierInMessage(message);
-
-  }
-
-  // TODO - this method is only used by tests
-  @Override
-  @VisibleForTesting
-  public boolean isCleanupTimerStarted() {
-    return ((GMSMembership) membership).isCleanupTimerStarted();
-  }
-
-  // TODO - this method is only used by tests
-  @Override
-  @VisibleForTesting
-  public long getSurpriseMemberTimeout() {
-    return ((GMSMembership) membership).getSurpriseMemberTimeout();
-  }
-
-  // TODO - this method is only used by tests
-  @Override
-  @VisibleForTesting
-  public void installView(GMSMembershipView newView) {
-    ((GMSMembership) membership).getGMSManager().installView(newView);
-  }
-
-  // TODO - this method is only used by tests
-  @Override
-  @VisibleForTesting
-  public int getDirectChannelPort() {
-    return directChannel == null ? 0 : directChannel.getPort();
-  }
-
   /**
    * for mock testing this allows insertion of a DirectChannel mock
    */
@@ -690,11 +621,6 @@ public class DistributionImpl implements Distribution {
     this.directChannel = dc;
   }
 
-  @Override
-  public void disableDisconnectOnQuorumLossForTesting() {
-    ((GMSMembership) membership).disableDisconnectOnQuorumLossForTesting();
-  }
-
   private void startDirectChannel(final MemberIdentifier memberID) {
     int dcPort = 0;
 
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/InternalDistributedSystem.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/InternalDistributedSystem.java
index a47c3c0..05e52f9 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/InternalDistributedSystem.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/InternalDistributedSystem.java
@@ -1439,25 +1439,6 @@ public class InternalDistributedSystem extends DistributedSystem
   }
 
   /**
-   * break any potential circularity in {@link #loadEmergencyClasses()}
-   */
-  @MakeNotStatic
-  private static volatile boolean emergencyClassesLoaded = false;
-
-  /**
-   * Ensure that the Distribution class gets loaded.
-   *
-   * @see SystemFailure#loadEmergencyClasses()
-   */
-  public static void loadEmergencyClasses() {
-    if (emergencyClassesLoaded) {
-      return;
-    }
-    emergencyClassesLoaded = true;
-    DistributionImpl.loadEmergencyClasses();
-  }
-
-  /**
    * Closes the membership manager
    *
    * @see SystemFailure#emergencyClose()
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/direct/DirectChannel.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/direct/DirectChannel.java
index 6fcf531..ffaf779 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/direct/DirectChannel.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/direct/DirectChannel.java
@@ -718,15 +718,6 @@ public class DirectChannel {
   }
 
   /**
-   * Ensure that the TCPConduit class gets loaded.
-   *
-   * @see SystemFailure#loadEmergencyClasses()
-   */
-  public static void loadEmergencyClasses() {
-    TCPConduit.loadEmergencyClasses();
-  }
-
-  /**
    * Close the Conduit
    *
    * @see SystemFailure#emergencyClose()
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/GMSMembership.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/GMSMembership.java
index a394aad..d57075f 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/GMSMembership.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/GMSMembership.java
@@ -27,17 +27,11 @@ import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
-import java.util.Queue;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.ExecutorService;
-import java.util.concurrent.LinkedBlockingQueue;
-import java.util.concurrent.RejectedExecutionException;
-import java.util.concurrent.RejectedExecutionHandler;
 import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.ThreadFactory;
-import java.util.concurrent.ThreadPoolExecutor;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeoutException;
 import java.util.concurrent.locks.Lock;
@@ -50,6 +44,7 @@ import org.apache.logging.log4j.Logger;
 
 import org.apache.geode.GemFireConfigException;
 import org.apache.geode.SystemFailure;
+import org.apache.geode.annotations.VisibleForTesting;
 import org.apache.geode.annotations.internal.MakeNotStatic;
 import org.apache.geode.distributed.internal.DistributionConfig;
 import org.apache.geode.distributed.internal.StartupMessage;
@@ -71,7 +66,6 @@ import org.apache.geode.distributed.internal.membership.gms.interfaces.Manager;
 import org.apache.geode.internal.serialization.Version;
 import org.apache.geode.logging.internal.executors.LoggingExecutors;
 import org.apache.geode.logging.internal.executors.LoggingThread;
-import org.apache.geode.logging.internal.executors.LoggingThreadFactory;
 
 public class GMSMembership<ID extends MemberIdentifier> implements Membership<ID> {
   private static final Logger logger = Services.getLogger();
@@ -660,10 +654,7 @@ public class GMSMembership<ID extends MemberIdentifier> implements Membership<ID
     this.listener = listener;
     this.messageListener = messageListener;
     this.gmsManager = new ManagerImpl();
-    LinkedBlockingQueue<Runnable> feed = new LinkedBlockingQueue<>();
-    ThreadFactory threadFactory = new LoggingThreadFactory("Geode View Processor");
-    this.viewExecutor = new ThreadPoolExecutor(1, 1, 30,
-        TimeUnit.SECONDS, feed, threadFactory, new ViewExecutorBlockHandler(feed));
+    this.viewExecutor = LoggingExecutors.newSingleThreadExecutor("Geode View Processor", true);
   }
 
   public Manager<ID> getGMSManager() {
@@ -1777,6 +1768,11 @@ public class GMSMembership<ID extends MemberIdentifier> implements Membership<ID
     }
   }
 
+  @VisibleForTesting
+  public void forceDisconnect(String reason) {
+    this.gmsManager.forceDisconnect(reason);
+  }
+
   /**
    * Test hook - recover health
    */
@@ -2110,32 +2106,4 @@ public class GMSMembership<ID extends MemberIdentifier> implements Membership<ID
     }
 
   }
-
-
-  private static class ViewExecutorBlockHandler implements RejectedExecutionHandler {
-
-    private final Queue queue;
-
-    private ViewExecutorBlockHandler(Queue feed) {
-      queue = feed;
-    }
-
-    @Override
-    public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {
-      if (executor.isShutdown()) {
-        throw new RejectedExecutionException(
-            "executor has been shutdown");
-      } else {
-        try {
-          executor.getQueue().put(r);
-        } catch (InterruptedException ie) {
-          Thread.currentThread().interrupt();
-          RejectedExecutionException e = new RejectedExecutionException(
-              "interrupted");
-          e.initCause(ie);
-        }
-      }
-    }
-  }
-
 }
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/fd/GMSHealthMonitor.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/fd/GMSHealthMonitor.java
index 51e5835..517aa43 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/fd/GMSHealthMonitor.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/fd/GMSHealthMonitor.java
@@ -408,9 +408,6 @@ public class GMSHealthMonitor<ID extends MemberIdentifier> implements HealthMoni
     this.socketCreator = socketCreator;
   }
 
-  @SuppressWarnings("EmptyMethod")
-  public static void loadEmergencyClasses() {}
-
   /*
    * Record the member activity for current time interval.
    */
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/membership/GMSJoinLeave.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/membership/GMSJoinLeave.java
index ca53b4d..82fbdbe 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/membership/GMSJoinLeave.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/membership/GMSJoinLeave.java
@@ -1652,8 +1652,6 @@ public class GMSJoinLeave<ID extends MemberIdentifier> implements JoinLeave<ID>
         VIEW_BROADCAST_INTERVAL);
   }
 
-  public static void loadEmergencyClasses() {}
-
   @Override
   public void emergencyClose() {
     isStopping = true;
diff --git a/geode-core/src/main/java/org/apache/geode/internal/SystemFailureTestHook.java b/geode-core/src/main/java/org/apache/geode/internal/SystemFailureTestHook.java
index e3907c5..e2d27cb 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/SystemFailureTestHook.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/SystemFailureTestHook.java
@@ -41,8 +41,4 @@ public class SystemFailureTestHook {
   public static boolean errorIsExpected(Error failure) {
     return expectedClass != null && expectedClass.isInstance(failure);
   }
-
-  public static void loadEmergencyClasses() {
-    // nothing more needed
-  }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RemoteGfManagerAgent.java b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RemoteGfManagerAgent.java
index cc54036..d9a878a 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RemoteGfManagerAgent.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/admin/remote/RemoteGfManagerAgent.java
@@ -206,12 +206,6 @@ public class RemoteGfManagerAgent implements GfManagerAgent {
   private static volatile List<RemoteGfManagerAgent> allAgents = new ArrayList<>();
 
   /**
-   * break any potential circularity in {@link #loadEmergencyClasses()}
-   */
-  @MakeNotStatic
-  private static volatile boolean emergencyClassesLoaded;
-
-  /**
    * Is this thread currently sending a message?
    */
   private static final ThreadLocal<Boolean> sending = ThreadLocal.withInitial(() -> Boolean.FALSE);
@@ -237,19 +231,6 @@ public class RemoteGfManagerAgent implements GfManagerAgent {
   }
 
   /**
-   * Ensure that the InternalDistributedSystem class gets loaded.
-   *
-   * @see SystemFailure#loadEmergencyClasses()
-   */
-  public static void loadEmergencyClasses() {
-    if (emergencyClassesLoaded) {
-      return;
-    }
-    emergencyClassesLoaded = true;
-    InternalDistributedSystem.loadEmergencyClasses();
-  }
-
-  /**
    * Close all of the RemoteGfManagerAgent's.
    *
    * @see SystemFailure#emergencyClose()
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/GemFireCacheImpl.java b/geode-core/src/main/java/org/apache/geode/internal/cache/GemFireCacheImpl.java
index ad31848..6d4d97f 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/GemFireCacheImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/GemFireCacheImpl.java
@@ -227,7 +227,6 @@ import org.apache.geode.internal.cache.persistence.PersistentMemberID;
 import org.apache.geode.internal.cache.persistence.PersistentMemberManager;
 import org.apache.geode.internal.cache.snapshot.CacheSnapshotServiceImpl;
 import org.apache.geode.internal.cache.tier.Acceptor;
-import org.apache.geode.internal.cache.tier.sockets.AcceptorImpl;
 import org.apache.geode.internal.cache.tier.sockets.CacheClientNotifier;
 import org.apache.geode.internal.cache.tier.sockets.CacheClientProxy;
 import org.apache.geode.internal.cache.tier.sockets.ClientHealthMonitor;
@@ -389,12 +388,6 @@ public class GemFireCacheImpl implements InternalCache, InternalClientCache, Has
       new CopyOnWriteArraySet<>();
 
   /**
-   * Break any potential circularity in {@link #loadEmergencyClasses()}.
-   */
-  @MakeNotStatic
-  private static volatile boolean emergencyClassesLoaded;
-
-  /**
    * Property set to true if resource manager heap percentage is set and query monitor is required
    */
   @MakeNotStatic
@@ -1649,21 +1642,6 @@ public class GemFireCacheImpl implements InternalCache, InternalClientCache, Has
   }
 
   /**
-   * Ensure that all the necessary classes for closing the cache are loaded.
-   *
-   * @see SystemFailure#loadEmergencyClasses()
-   */
-  public static void loadEmergencyClasses() {
-    if (emergencyClassesLoaded) {
-      return;
-    }
-    emergencyClassesLoaded = true;
-    InternalDistributedSystem.loadEmergencyClasses();
-    AcceptorImpl.loadEmergencyClasses();
-    PoolManagerImpl.loadEmergencyClasses();
-  }
-
-  /**
    * Close the distributed system, cache servers, and gateways. Clears the rootRegions and
    * partitionedRegions map. Marks the cache as closed.
    *
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/PoolFactoryImpl.java b/geode-core/src/main/java/org/apache/geode/internal/cache/PoolFactoryImpl.java
index 2cdaba8..ef39f87 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/PoolFactoryImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/PoolFactoryImpl.java
@@ -34,12 +34,12 @@ import org.apache.geode.DataSerializer;
 import org.apache.geode.cache.CacheException;
 import org.apache.geode.cache.client.Pool;
 import org.apache.geode.cache.client.PoolFactory;
+import org.apache.geode.cache.client.internal.LocatorAddress;
 import org.apache.geode.cache.client.internal.LocatorDiscoveryCallback;
 import org.apache.geode.cache.client.internal.PoolImpl;
 import org.apache.geode.cache.query.QueryService;
 import org.apache.geode.cache.wan.GatewaySender;
 import org.apache.geode.distributed.internal.InternalDistributedSystem;
-import org.apache.geode.distributed.internal.membership.gms.membership.HostAddress;
 import org.apache.geode.internal.monitoring.ThreadsMonitoring;
 import org.apache.geode.logging.internal.log4j.api.LogService;
 import org.apache.geode.pdx.internal.TypeRegistry;
@@ -57,7 +57,7 @@ public class PoolFactoryImpl implements PoolFactory {
    */
   private PoolAttributes attributes = new PoolAttributes();
 
-  private final List<HostAddress> locatorAddresses = new ArrayList<>();
+  private final List<LocatorAddress> locatorAddresses = new ArrayList<>();
 
   /**
    * The cache that created this factory
@@ -287,7 +287,7 @@ public class PoolFactoryImpl implements PoolFactory {
     }
     InetSocketAddress isa = getInetSocketAddress(host, port);
     attributes.locators.add(isa);
-    locatorAddresses.add(new HostAddress(isa, host));
+    locatorAddresses.add(new LocatorAddress(isa, host));
     return this;
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/PoolManagerImpl.java b/geode-core/src/main/java/org/apache/geode/internal/cache/PoolManagerImpl.java
index 67488ee..38acffb 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/PoolManagerImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/PoolManagerImpl.java
@@ -300,10 +300,6 @@ public class PoolManagerImpl {
     });
   }
 
-  public static void loadEmergencyClasses() {
-    PoolImpl.loadEmergencyClasses();
-  }
-
   public Pool find(Region<?, ?> region) {
     return find(region.getAttributes().getPoolName());
   }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/CachedRegionHelper.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/CachedRegionHelper.java
index 7d8ce39..18c549d 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/CachedRegionHelper.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/CachedRegionHelper.java
@@ -15,7 +15,6 @@
 package org.apache.geode.internal.cache.tier;
 
 import org.apache.geode.CancelException;
-import org.apache.geode.SystemFailure;
 import org.apache.geode.cache.Region;
 import org.apache.geode.internal.cache.InternalCache;
 import org.apache.geode.internal.cache.InternalCacheForClientAccess;
@@ -68,13 +67,4 @@ public class CachedRegionHelper {
     // cache = null;
   }
 
-  /**
-   * Just ensure that this class gets loaded.
-   *
-   * @see SystemFailure#loadEmergencyClasses()
-   */
-  public static void loadEmergencyClasses() {
-    // nothing needed, just make sure this class gets loaded
-  }
-
 }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/AcceptorImpl.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/AcceptorImpl.java
index 831c08c..b4a475e 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/AcceptorImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/AcceptorImpl.java
@@ -861,26 +861,6 @@ public class AcceptorImpl implements Acceptor, Runnable {
   }
 
   /**
-   * break any potential circularity in {@link #loadEmergencyClasses()}
-   */
-  @MakeNotStatic
-  private static volatile boolean emergencyClassesLoaded;
-
-  /**
-   * Ensure that the CachedRegionHelper and ServerConnection classes get loaded.
-   *
-   * @see SystemFailure#loadEmergencyClasses()
-   */
-  public static void loadEmergencyClasses() {
-    if (emergencyClassesLoaded) {
-      return;
-    }
-    emergencyClassesLoaded = true;
-    CachedRegionHelper.loadEmergencyClasses();
-    ServerConnection.loadEmergencyClasses();
-  }
-
-  /**
    * @see SystemFailure#emergencyClose()
    */
   @Override
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ServerConnection.java b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ServerConnection.java
index bfe7acd..230e5a9 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ServerConnection.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/tier/sockets/ServerConnection.java
@@ -1449,15 +1449,6 @@ public abstract class ServerConnection implements Runnable {
   }
 
   /**
-   * Just ensure that this class gets loaded.
-   *
-   * @see SystemFailure#loadEmergencyClasses()
-   */
-  public static void loadEmergencyClasses() {
-    // nothing needed, just make sure this class gets loaded.
-  }
-
-  /**
    * @see SystemFailure#emergencyClose()
    */
   public void emergencyClose() {
diff --git a/geode-core/src/main/java/org/apache/geode/internal/tcp/ConnectionTable.java b/geode-core/src/main/java/org/apache/geode/internal/tcp/ConnectionTable.java
index dfd723d..7656fe0 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/tcp/ConnectionTable.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/tcp/ConnectionTable.java
@@ -918,15 +918,6 @@ public class ConnectionTable {
   }
 
   /**
-   * Just ensure that this class gets loaded.
-   *
-   * @see SystemFailure#loadEmergencyClasses()
-   */
-  public static void loadEmergencyClasses() {
-    // don't go any further, Frodo!
-  }
-
-  /**
    * Clears lastInstance. Does not yet close underlying sockets, but probably not strictly
    * necessary.
    *
diff --git a/geode-core/src/main/java/org/apache/geode/internal/tcp/TCPConduit.java b/geode-core/src/main/java/org/apache/geode/internal/tcp/TCPConduit.java
index 0639bc1..adf1cc2 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/tcp/TCPConduit.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/tcp/TCPConduit.java
@@ -385,15 +385,6 @@ public class TCPConduit implements Runnable {
   }
 
   /**
-   * Ensure that the ConnectionTable class gets loaded.
-   *
-   * @see SystemFailure#loadEmergencyClasses()
-   */
-  public static void loadEmergencyClasses() {
-    ConnectionTable.loadEmergencyClasses();
-  }
-
-  /**
    * Close the ServerSocketChannel, ServerSocket, and the ConnectionTable.
    *
    * @see SystemFailure#emergencyClose()
diff --git a/geode-core/src/test/java/org/apache/geode/cache/client/internal/PoolImplTest.java b/geode-core/src/test/java/org/apache/geode/cache/client/internal/PoolImplTest.java
index b3921bf..d39c290 100644
--- a/geode-core/src/test/java/org/apache/geode/cache/client/internal/PoolImplTest.java
+++ b/geode-core/src/test/java/org/apache/geode/cache/client/internal/PoolImplTest.java
@@ -37,7 +37,6 @@ import org.apache.geode.cache.client.ServerConnectivityException;
 import org.apache.geode.cache.client.internal.pooling.ConnectionManagerImpl;
 import org.apache.geode.distributed.internal.DistributionConfig;
 import org.apache.geode.distributed.internal.InternalDistributedSystem;
-import org.apache.geode.distributed.internal.membership.gms.membership.HostAddress;
 import org.apache.geode.internal.cache.InternalCache;
 import org.apache.geode.internal.cache.PoolFactoryImpl;
 import org.apache.geode.internal.cache.PoolManagerImpl;
@@ -154,7 +153,7 @@ public class PoolImplTest {
 
     final ThreadsMonitoring tMonitoring = mock(ThreadsMonitoring.class);
 
-    return PoolImpl.create(poolManager, "pool", poolAttributes, new LinkedList<HostAddress>(),
+    return PoolImpl.create(poolManager, "pool", poolAttributes, new LinkedList<LocatorAddress>(),
         internalDistributedSystem, internalCache, tMonitoring);
   }
 
diff --git a/geode-core/src/test/java/org/apache/geode/distributed/internal/membership/MembershipViewJUnitTest.java b/geode-core/src/test/java/org/apache/geode/distributed/internal/membership/GMSMembershipViewJUnitTest.java
similarity index 92%
rename from geode-core/src/test/java/org/apache/geode/distributed/internal/membership/MembershipViewJUnitTest.java
rename to geode-core/src/test/java/org/apache/geode/distributed/internal/membership/GMSMembershipViewJUnitTest.java
index 997ae14..9e66615 100755
--- a/geode-core/src/test/java/org/apache/geode/distributed/internal/membership/MembershipViewJUnitTest.java
+++ b/geode-core/src/test/java/org/apache/geode/distributed/internal/membership/GMSMembershipViewJUnitTest.java
@@ -30,14 +30,13 @@ import org.junit.Before;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
 
-import org.apache.geode.distributed.internal.ClusterDistributionManager;
 import org.apache.geode.distributed.internal.membership.gms.GMSMembershipView;
 import org.apache.geode.distributed.internal.membership.gms.api.MemberIdentifier;
 import org.apache.geode.internal.inet.LocalHostUtil;
 import org.apache.geode.test.junit.categories.MembershipTest;
 
 @Category({MembershipTest.class})
-public class MembershipViewJUnitTest {
+public class GMSMembershipViewJUnitTest {
 
   private List<MemberIdentifier> members;
 
@@ -49,21 +48,21 @@ public class MembershipViewJUnitTest {
       members.add(new InternalDistributedMember(LocalHostUtil.getLocalHost(), 1000 + i));
     }
     // view creator is a locator
-    members.get(0).setVmKind(ClusterDistributionManager.LOCATOR_DM_TYPE);
+    members.get(0).setVmKind(MemberIdentifier.LOCATOR_DM_TYPE);
     members.get(0).setVmViewId(0);
     members.get(0).setPreferredForCoordinator(true);
 
     // members who joined in view #1
     for (int i = 1; i < (numMembers - 1); i++) {
       members.get(i).setVmViewId(1);
-      members.get(i).setVmKind(ClusterDistributionManager.NORMAL_DM_TYPE);
+      members.get(i).setVmKind(MemberIdentifier.NORMAL_DM_TYPE);
       members.get(i).setPreferredForCoordinator(false);
     }
 
     // member joining in this view
     members.get(numMembers - 1).setVmViewId(2);
     members.get(numMembers - 1).getMemberData()
-        .setVmKind(ClusterDistributionManager.NORMAL_DM_TYPE);
+        .setVmKind(MemberIdentifier.NORMAL_DM_TYPE);
   }
 
   private void setFailureDetectionPorts(GMSMembershipView view) {
@@ -184,7 +183,7 @@ public class MembershipViewJUnitTest {
     int oldSize = view.size();
     for (int i = 0; i < 100; i++) {
       MemberIdentifier mbr = new InternalDistributedMember(LocalHostUtil.getLocalHost(), 2000 + i);
-      mbr.setVmKind(ClusterDistributionManager.NORMAL_DM_TYPE);
+      mbr.setVmKind(MemberIdentifier.NORMAL_DM_TYPE);
       mbr.setVmViewId(2);
       view.add(mbr);
       view.setFailureDetectionPort(mbr, 2000 + i);
@@ -233,22 +232,22 @@ public class MembershipViewJUnitTest {
             new InternalDistributedMember("localhost", 6)};
     int i = 0;
     // weight 3
-    members[i].setVmKind(ClusterDistributionManager.LOCATOR_DM_TYPE);
+    members[i].setVmKind(MemberIdentifier.LOCATOR_DM_TYPE);
     members[i++].setPreferredForCoordinator(true);
     // weight 3
-    members[i].setVmKind(ClusterDistributionManager.LOCATOR_DM_TYPE);
+    members[i].setVmKind(MemberIdentifier.LOCATOR_DM_TYPE);
     members[i++].setPreferredForCoordinator(true);
     // weight 15 (cache+leader)
-    members[i].setVmKind(ClusterDistributionManager.NORMAL_DM_TYPE);
+    members[i].setVmKind(MemberIdentifier.NORMAL_DM_TYPE);
     members[i++].setPreferredForCoordinator(false);
     // weight 0
-    members[i].setVmKind(ClusterDistributionManager.ADMIN_ONLY_DM_TYPE);
+    members[i].setVmKind(MemberIdentifier.ADMIN_ONLY_DM_TYPE);
     members[i++].setPreferredForCoordinator(false);
     // weight 0
-    members[i].setVmKind(ClusterDistributionManager.ADMIN_ONLY_DM_TYPE);
+    members[i].setVmKind(MemberIdentifier.ADMIN_ONLY_DM_TYPE);
     members[i++].setPreferredForCoordinator(false);
     // weight 10
-    members[i].setVmKind(ClusterDistributionManager.NORMAL_DM_TYPE);
+    members[i].setVmKind(MemberIdentifier.NORMAL_DM_TYPE);
     members[i++].setPreferredForCoordinator(false);
 
     List<MemberIdentifier> vmbrs = new ArrayList<>(members.length);
@@ -262,7 +261,7 @@ public class MembershipViewJUnitTest {
     assertTrue(!leader.preferredForCoordinator());
 
     MemberIdentifier joiningMember = new InternalDistributedMember("localhost", 7);
-    joiningMember.setVmKind(ClusterDistributionManager.NORMAL_DM_TYPE);
+    joiningMember.setVmKind(MemberIdentifier.NORMAL_DM_TYPE);
     joiningMember.setPreferredForCoordinator(false);
 
     // have the joining member and another cache process (weight 10) in the failed members
@@ -287,4 +286,5 @@ public class MembershipViewJUnitTest {
     Set<MemberIdentifier> actual = newView.getActualCrashedMembers(lastView);
     assertTrue(!actual.contains(members[members.length - 2]));
   }
+
 }
diff --git a/geode-core/src/test/java/org/apache/geode/distributed/internal/membership/InternalDistributedMemberTest.java b/geode-core/src/test/java/org/apache/geode/distributed/internal/membership/InternalDistributedMemberTest.java
index 0f2afa8..13469ee 100644
--- a/geode-core/src/test/java/org/apache/geode/distributed/internal/membership/InternalDistributedMemberTest.java
+++ b/geode-core/src/test/java/org/apache/geode/distributed/internal/membership/InternalDistributedMemberTest.java
@@ -24,7 +24,7 @@ import java.net.UnknownHostException;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
 
-import org.apache.geode.distributed.internal.membership.gms.GMSMemberData;
+import org.apache.geode.distributed.internal.membership.gms.api.MemberData;
 import org.apache.geode.test.junit.categories.MembershipTest;
 
 /**
@@ -73,9 +73,9 @@ public class InternalDistributedMemberTest {
   @Test
   public void equalsReturnsTrueIfNullInetAddress() throws UnknownHostException {
     InetAddress localHost = InetAddress.getLocalHost();
-    GMSMemberData netMember1 = mock(GMSMemberData.class);
+    MemberData netMember1 = mock(MemberData.class);
     when(netMember1.getInetAddress()).thenReturn(localHost).thenReturn(null);
-    GMSMemberData netMember2 = mock(GMSMemberData.class);
+    MemberData netMember2 = mock(MemberData.class);
     when(netMember2.getInetAddress()).thenReturn(localHost).thenReturn(null);
     InternalDistributedMember member = new InternalDistributedMember(netMember1);
     InternalDistributedMember other = new InternalDistributedMember(netMember2);
@@ -89,9 +89,9 @@ public class InternalDistributedMemberTest {
   public void equalsReturnsFalseIfInetAddressDiffer() throws UnknownHostException {
     InetAddress host1 = InetAddress.getByAddress(new byte[] {127, 0, 0, 1});
     InetAddress host2 = InetAddress.getByAddress(new byte[] {127, 0, 0, 2});
-    GMSMemberData netMember1 = mock(GMSMemberData.class);
+    MemberData netMember1 = mock(MemberData.class);
     when(netMember1.getInetAddress()).thenReturn(host1);
-    GMSMemberData netMember2 = mock(GMSMemberData.class);
+    MemberData netMember2 = mock(MemberData.class);
     when(netMember2.getInetAddress()).thenReturn(host2);
     InternalDistributedMember member = new InternalDistributedMember(netMember1);
     InternalDistributedMember other = new InternalDistributedMember(netMember2);
@@ -104,9 +104,9 @@ public class InternalDistributedMemberTest {
   @Test
   public void equalsReturnsFalseIfGetViewIdDiffer() throws UnknownHostException {
     InetAddress host1 = InetAddress.getByAddress(new byte[] {127, 0, 0, 1});
-    GMSMemberData netMember1 = mock(GMSMemberData.class);
+    MemberData netMember1 = mock(MemberData.class);
     when(netMember1.getInetAddress()).thenReturn(host1);
-    GMSMemberData netMember2 = mock(GMSMemberData.class);
+    MemberData netMember2 = mock(MemberData.class);
     when(netMember2.getInetAddress()).thenReturn(host1);
     when(netMember1.getVmViewId()).thenReturn(1);
     when(netMember2.getVmViewId()).thenReturn(2);
@@ -121,9 +121,9 @@ public class InternalDistributedMemberTest {
   @Test
   public void equalsReturnsFalseIfUniqueTagsDiffer() throws UnknownHostException {
     InetAddress host1 = InetAddress.getByAddress(new byte[] {127, 0, 0, 1});
-    GMSMemberData netMember1 = mock(GMSMemberData.class);
+    MemberData netMember1 = mock(MemberData.class);
     when(netMember1.getInetAddress()).thenReturn(host1);
-    GMSMemberData netMember2 = mock(GMSMemberData.class);
+    MemberData netMember2 = mock(MemberData.class);
     when(netMember2.getInetAddress()).thenReturn(host1);
     InternalDistributedMember member = new InternalDistributedMember(netMember1);
     member.setUniqueTag("tag1");
@@ -138,10 +138,10 @@ public class InternalDistributedMemberTest {
   @Test
   public void equalsReturnsFalseIfNotPartialAndNamesDiffer() throws UnknownHostException {
     InetAddress host1 = InetAddress.getByAddress(new byte[] {127, 0, 0, 1});
-    GMSMemberData netMember1 = mock(GMSMemberData.class);
+    MemberData netMember1 = mock(MemberData.class);
     when(netMember1.getInetAddress()).thenReturn(host1);
     when(netMember1.getName()).thenReturn("name1");
-    GMSMemberData netMember2 = mock(GMSMemberData.class);
+    MemberData netMember2 = mock(MemberData.class);
     when(netMember2.getInetAddress()).thenReturn(host1);
     when(netMember2.getName()).thenReturn("name2");
     InternalDistributedMember member = new InternalDistributedMember(netMember1);
@@ -157,9 +157,9 @@ public class InternalDistributedMemberTest {
   @Test
   public void equalsReturnsFalseIfCompareAdditionalDataDiffer() throws UnknownHostException {
     InetAddress host1 = InetAddress.getByAddress(new byte[] {127, 0, 0, 1});
-    GMSMemberData netMember1 = mock(GMSMemberData.class);
+    MemberData netMember1 = mock(MemberData.class);
     when(netMember1.getInetAddress()).thenReturn(host1);
-    GMSMemberData netMember2 = mock(GMSMemberData.class);
+    MemberData netMember2 = mock(MemberData.class);
     when(netMember2.getInetAddress()).thenReturn(host1);
     when(netMember1.compareAdditionalData(netMember2)).thenReturn(1);
     when(netMember2.compareAdditionalData(netMember1)).thenReturn(-1);
diff --git a/geode-dunit/src/main/java/org/apache/geode/distributed/internal/membership/gms/MembershipManagerHelper.java b/geode-dunit/src/main/java/org/apache/geode/distributed/internal/membership/gms/MembershipManagerHelper.java
index df306ca..bf7878f 100644
--- a/geode-dunit/src/main/java/org/apache/geode/distributed/internal/membership/gms/MembershipManagerHelper.java
+++ b/geode-dunit/src/main/java/org/apache/geode/distributed/internal/membership/gms/MembershipManagerHelper.java
@@ -126,14 +126,19 @@ public class MembershipManagerHelper {
   // this method is only used for testing. Should be extract to a test helper instead
   public static void crashDistributedSystem(final DistributedSystem msys) {
     msys.getLogWriter().info("crashing distributed system: " + msys);
-    Distribution mgr = ((Distribution) getDistribution(msys));
+    Distribution mgr = getDistribution(msys);
     MembershipManagerHelper.inhibitForcedDisconnectLogging(true);
     MembershipManagerHelper.beSickMember(msys);
     MembershipManagerHelper.playDead(msys);
-    mgr.forceDisconnect("for testing");
+    ((GMSMembership.ManagerImpl) mgr).forceDisconnect("for testing");
     // wait at most 10 seconds for system to be disconnected
     await().until(() -> !msys.isConnected());
     MembershipManagerHelper.inhibitForcedDisconnectLogging(false);
   }
 
+  public static void disableDisconnectOnQuorumLossForTesting(DistributedSystem msys) {
+    msys.getLogWriter().info("crashing distributed system: " + msys);
+    Distribution mgr = getDistribution(msys);
+    ((GMSMembership) mgr.getMembership()).disableDisconnectOnQuorumLossForTesting();
+  }
 }
diff --git a/geode-wan/src/test/java/org/apache/geode/internal/cache/wan/GatewaySenderEventRemoteDispatcherIntegrationTest.java b/geode-wan/src/test/java/org/apache/geode/internal/cache/wan/GatewaySenderEventRemoteDispatcherIntegrationTest.java
index e734a1d..f564b08 100644
--- a/geode-wan/src/test/java/org/apache/geode/internal/cache/wan/GatewaySenderEventRemoteDispatcherIntegrationTest.java
+++ b/geode-wan/src/test/java/org/apache/geode/internal/cache/wan/GatewaySenderEventRemoteDispatcherIntegrationTest.java
@@ -41,7 +41,6 @@ import org.apache.geode.distributed.internal.DistributionConfig;
 import org.apache.geode.distributed.internal.InternalDistributedSystem;
 import org.apache.geode.distributed.internal.ServerLocation;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
-import org.apache.geode.distributed.internal.membership.gms.membership.HostAddress;
 import org.apache.geode.internal.cache.InternalCache;
 import org.apache.geode.internal.cache.PoolFactoryImpl;
 import org.apache.geode.internal.cache.PoolManagerImpl;
@@ -150,7 +149,7 @@ public class GatewaySenderEventRemoteDispatcherIntegrationTest {
 
     final ThreadsMonitoring tMonitoring = mock(ThreadsMonitoring.class);
 
-    return PoolImpl.create(poolManager, "pool", poolAttributes, new LinkedList<HostAddress>(),
+    return PoolImpl.create(poolManager, "pool", poolAttributes, new LinkedList<>(),
         internalDistributedSystem, internalCache, tMonitoring);
   }