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/02/05 22:34:27 UTC

[geode] branch develop updated: GEODE-4582 Remove singleton calls from product code

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

bschuchardt pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/geode.git


The following commit(s) were added to refs/heads/develop by this push:
     new 986ef9d  GEODE-4582 Remove singleton calls from product code
986ef9d is described below

commit 986ef9dcad9f95e838a0423f01b183724b355bf6
Author: Bruce Schuchardt <bs...@pivotal.io>
AuthorDate: Tue Feb 5 14:32:50 2019 -0800

    GEODE-4582 Remove singleton calls from product code
    
    Removing calls to find an InternalDistributedSystem from membership
    classes.  This also addresses GEODE-1753 "Clean up initialization of GMS
    Services log writer", GEODE-4581 and GEODE-4562.
---
 .../apache/geode/cache30/ReconnectDUnitTest.java   |  2 +
 .../cache30/ReconnectWithCacheXMLDUnitTest.java    |  2 +
 .../apache/geode/distributed/LocatorDUnitTest.java | 18 +++----
 .../distributed/LocatorUDPSecurityDUnitTest.java   |  1 +
 .../internal/membership/MembershipJUnitTest.java   | 17 +++++--
 .../gms/locator/GMSLocatorRecoveryJUnitTest.java   |  9 ++--
 .../internal/ClusterDistributionManager.java       |  2 +-
 .../internal/InternalDistributedSystem.java        |  6 +--
 .../internal/membership/MemberFactory.java         |  9 ++--
 .../internal/membership/MemberServices.java        |  6 ++-
 .../internal/membership/MembershipManager.java     |  5 +-
 .../internal/membership/gms/GMSMemberFactory.java  |  7 +--
 .../internal/membership/gms/Services.java          | 57 ++++++++++------------
 .../membership/gms/auth/GMSAuthenticator.java      |  7 +--
 .../membership/gms/locator/GMSLocator.java         | 16 ------
 .../membership/gms/messenger/GMSEncrypt.java       | 10 +++-
 .../membership/gms/mgr/GMSMembershipManager.java   |  4 +-
 .../org/apache/geode/internal/tcp/Connection.java  |  6 ++-
 .../org/apache/geode/test/dunit/Disconnect.java    |  4 ++
 19 files changed, 99 insertions(+), 89 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 b5fc42c..9a7d32f 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
@@ -140,6 +140,7 @@ public class ReconnectDUnitTest extends JUnit4CacheTestCase {
           locatorPort = locPort;
           Properties props = getDistributedSystemProperties();
           locator = Locator.startLocatorAndDS(locatorPort, new File(""), props);
+          system = (InternalDistributedSystem) locator.getDistributedSystem();
           cache = ((InternalLocator) locator).getCache();
           ReconnectDUnitTest.savedSystem = locator.getDistributedSystem();
           IgnoredException.addIgnoredException(
@@ -563,6 +564,7 @@ public class ReconnectDUnitTest extends JUnit4CacheTestCase {
       try {
         InternalLocator locator =
             (InternalLocator) Locator.startLocatorAndDS(secondLocPort, null, props);
+        system = (InternalDistributedSystem) locator.getDistributedSystem();
         cache = locator.getCache();
       } catch (IOException e) {
         Assert.fail("exception starting locator", e);
diff --git a/geode-core/src/distributedTest/java/org/apache/geode/cache30/ReconnectWithCacheXMLDUnitTest.java b/geode-core/src/distributedTest/java/org/apache/geode/cache30/ReconnectWithCacheXMLDUnitTest.java
index 34d80fa..db50b44 100755
--- a/geode-core/src/distributedTest/java/org/apache/geode/cache30/ReconnectWithCacheXMLDUnitTest.java
+++ b/geode-core/src/distributedTest/java/org/apache/geode/cache30/ReconnectWithCacheXMLDUnitTest.java
@@ -29,6 +29,7 @@ import org.apache.geode.cache.server.CacheServer;
 import org.apache.geode.distributed.ConfigurationProperties;
 import org.apache.geode.distributed.ServerLauncherParameters;
 import org.apache.geode.distributed.internal.DistributionConfig;
+import org.apache.geode.distributed.internal.InternalDistributedSystem;
 import org.apache.geode.distributed.internal.membership.MembershipTestHook;
 import org.apache.geode.distributed.internal.membership.gms.MembershipManagerHelper;
 import org.apache.geode.internal.AvailablePortHelper;
@@ -100,6 +101,7 @@ public class ReconnectWithCacheXMLDUnitTest extends JUnit4CacheTestCase {
         .until(() -> cache.getReconnectedCache() != null);
 
     Cache newCache = cache.getReconnectedCache();
+    system = (InternalDistributedSystem) cache.getDistributedSystem();
     CacheServer server = newCache.getCacheServers().iterator().next();
     assertEquals(ServerLauncherParameters.INSTANCE.getPort().intValue(), server.getPort());
     assertEquals(20, server.getMaxConnections()); // this setting is in the XML file
diff --git a/geode-core/src/distributedTest/java/org/apache/geode/distributed/LocatorDUnitTest.java b/geode-core/src/distributedTest/java/org/apache/geode/distributed/LocatorDUnitTest.java
index 269d0ab..e5aaaa0 100644
--- a/geode-core/src/distributedTest/java/org/apache/geode/distributed/LocatorDUnitTest.java
+++ b/geode-core/src/distributedTest/java/org/apache/geode/distributed/LocatorDUnitTest.java
@@ -213,8 +213,6 @@ public class LocatorDUnitTest implements java.io.Serializable {
     properties.put(SECURITY_PEER_AUTH_INIT, "org.apache.geode.distributed.AuthInitializer.create");
     properties.put(SECURITY_PEER_AUTHENTICATOR,
         "org.apache.geode.distributed.MyAuthenticator.create");
-    properties.put(ENABLE_CLUSTER_CONFIGURATION, "false");
-    properties.put(USE_CLUSTER_CONFIGURATION, "false");
     addDSProps(properties);
     system = getConnectedDistributedSystem(properties);
     assertThat(system.getDistributedMember().getVmKind())
@@ -391,6 +389,7 @@ public class LocatorDUnitTest implements java.io.Serializable {
     properties.put(MEMBER_TIMEOUT, "2000");
     properties.put(LOG_LEVEL, logger.getLevel().name());
     properties.put(ENABLE_CLUSTER_CONFIGURATION, "false");
+    properties.put(USE_CLUSTER_CONFIGURATION, "false");
     properties.put(SSL_CIPHERS, "any");
     properties.put(SSL_PROTOCOLS, "any");
     properties.put(SSL_KEYSTORE, getSingleKeyKeystore());
@@ -450,6 +449,8 @@ public class LocatorDUnitTest implements java.io.Serializable {
     properties.put(SSL_TRUSTSTORE, getSingleKeyKeystore());
     properties.put(SSL_TRUSTSTORE_PASSWORD, "password");
     properties.put(SSL_REQUIRE_AUTHENTICATION, "true");
+    properties.put(USE_CLUSTER_CONFIGURATION, "false");
+    properties.put(ENABLE_CLUSTER_CONFIGURATION, "false");
     properties.put(SSL_ENABLED_COMPONENTS, SecurableCommunicationChannel.LOCATOR.getConstant());
 
     final String locators = hostname + "[" + port1 + "]";
@@ -846,7 +847,6 @@ public class LocatorDUnitTest implements java.io.Serializable {
     properties.put(DISABLE_AUTO_RECONNECT, "true");
     properties.put(MEMBER_TIMEOUT, "2000");
     properties.put(LOG_LEVEL, LogWriterUtils.getDUnitLogLevel());
-    properties.put(ENABLE_CLUSTER_CONFIGURATION, "false");
 
     addDSProps(properties);
 
@@ -1212,7 +1212,6 @@ public class LocatorDUnitTest implements java.io.Serializable {
       final Properties props = new Properties();
       props.setProperty(LOCATORS, locators);
       props.setProperty(ENABLE_NETWORK_PARTITION_DETECTION, "true");
-      props.put(ENABLE_CLUSTER_CONFIGURATION, "false");
 
       addDSProps(props);
       vm1.invoke(() -> {
@@ -1284,7 +1283,6 @@ public class LocatorDUnitTest implements java.io.Serializable {
     final String locators = host0 + "[" + port1 + "]," + host0 + "[" + port2 + "]";
 
     final Properties dsProps = getBasicProperties(locators);
-    dsProps.setProperty(ENABLE_CLUSTER_CONFIGURATION, "false");
     addDSProps(dsProps);
 
     startLocator(vm0, dsProps, port1);
@@ -1369,7 +1367,6 @@ public class LocatorDUnitTest implements java.io.Serializable {
     final Properties dsProps = getBasicProperties(locators);
     dsProps.setProperty(LOG_LEVEL, logger.getLevel().name());
     dsProps.setProperty(ENABLE_NETWORK_PARTITION_DETECTION, "true");
-    dsProps.setProperty(ENABLE_CLUSTER_CONFIGURATION, "false");
 
     addDSProps(dsProps);
     startLocator(vm0, dsProps, port1);
@@ -1674,7 +1671,6 @@ public class LocatorDUnitTest implements java.io.Serializable {
     VM vm = VM.getVM(0);
     final Properties properties =
         getBasicProperties(Host.getHost(0).getHostName() + "[" + port1 + "]");
-    properties.setProperty(ENABLE_CLUSTER_CONFIGURATION, "false");
     addDSProps(properties);
     if (stateFile.exists()) {
       assertThat(stateFile.delete()).isTrue();
@@ -1742,7 +1738,10 @@ public class LocatorDUnitTest implements java.io.Serializable {
   }
 
   // for child classes
-  protected void addDSProps(Properties p) {}
+  protected void addDSProps(Properties p) {
+    p.put(ENABLE_CLUSTER_CONFIGURATION, "false");
+    p.put(USE_CLUSTER_CONFIGURATION, "false");
+  }
 
   protected static InternalDistributedSystem getConnectedDistributedSystem(Properties properties) {
     if (system == null || !system.isConnected()) {
@@ -1841,7 +1840,6 @@ public class LocatorDUnitTest implements java.io.Serializable {
     Properties locProps = new Properties();
     locProps.setProperty(MCAST_PORT, "0");
     locProps.setProperty(MEMBER_TIMEOUT, "1000");
-    locProps.put(ENABLE_CLUSTER_CONFIGURATION, "false");
     addDSProps(locProps);
 
     startLocator(vm, locProps, port);
@@ -1853,8 +1851,6 @@ public class LocatorDUnitTest implements java.io.Serializable {
       Properties locProps1 = new Properties();
       locProps1.put(MCAST_PORT, "0");
       locProps1.put(LOG_LEVEL, logger.getLevel().name());
-      locProps1.put(ENABLE_CLUSTER_CONFIGURATION, "false");
-      locProps1.put(USE_CLUSTER_CONFIGURATION, "false");
       addDSProps(locProps1);
 
       startLocator(vm0, locProps1, port);
diff --git a/geode-core/src/distributedTest/java/org/apache/geode/distributed/LocatorUDPSecurityDUnitTest.java b/geode-core/src/distributedTest/java/org/apache/geode/distributed/LocatorUDPSecurityDUnitTest.java
index a7b7c11..33c9c74 100644
--- a/geode-core/src/distributedTest/java/org/apache/geode/distributed/LocatorUDPSecurityDUnitTest.java
+++ b/geode-core/src/distributedTest/java/org/apache/geode/distributed/LocatorUDPSecurityDUnitTest.java
@@ -35,6 +35,7 @@ import org.apache.geode.test.junit.categories.MembershipTest;
 public class LocatorUDPSecurityDUnitTest extends LocatorDUnitTest {
   @Override
   protected void addDSProps(Properties p) {
+    super.addDSProps(p);
     p.setProperty(SECURITY_UDP_DHALGO, "AES:128");
   }
 
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/distributed/internal/membership/MembershipJUnitTest.java b/geode-core/src/integrationTest/java/org/apache/geode/distributed/internal/membership/MembershipJUnitTest.java
index e6eb9ba..0c259f3 100755
--- a/geode-core/src/integrationTest/java/org/apache/geode/distributed/internal/membership/MembershipJUnitTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/distributed/internal/membership/MembershipJUnitTest.java
@@ -44,6 +44,7 @@ import org.apache.geode.distributed.internal.ClusterDistributionManager;
 import org.apache.geode.distributed.internal.DMStats;
 import org.apache.geode.distributed.internal.DistributionConfig;
 import org.apache.geode.distributed.internal.DistributionConfigImpl;
+import org.apache.geode.distributed.internal.InternalDistributedSystem;
 import org.apache.geode.distributed.internal.InternalLocator;
 import org.apache.geode.distributed.internal.SerialAckedMessage;
 import org.apache.geode.distributed.internal.membership.gms.GMSUtil;
@@ -146,8 +147,10 @@ public class MembershipJUnitTest {
         System.setProperty(GMSJoinLeave.BYPASS_DISCOVERY_PROPERTY, "true");
         DistributedMembershipListener listener1 = mock(DistributedMembershipListener.class);
         DMStats stats1 = mock(DMStats.class);
+        InternalDistributedSystem mockSystem = mock(InternalDistributedSystem.class);
+        when(mockSystem.getConfig()).thenReturn(config);
         System.out.println("creating 1st membership manager");
-        m1 = MemberFactory.newMembershipManager(listener1, config, transport, stats1,
+        m1 = MemberFactory.newMembershipManager(listener1, mockSystem, transport, stats1,
             SecurityServiceFactory.create());
         m1.startEventProcessing();
       } finally {
@@ -157,8 +160,10 @@ public class MembershipJUnitTest {
       // start the second membership manager
       DistributedMembershipListener listener2 = mock(DistributedMembershipListener.class);
       DMStats stats2 = mock(DMStats.class);
+      InternalDistributedSystem mockSystem = mock(InternalDistributedSystem.class);
+      when(mockSystem.getConfig()).thenReturn(config);
       System.out.println("creating 2nd membership manager");
-      m2 = MemberFactory.newMembershipManager(listener2, config, transport, stats2,
+      m2 = MemberFactory.newMembershipManager(listener2, mockSystem, transport, stats2,
           SecurityServiceFactory.create());
       m2.startEventProcessing();
 
@@ -287,8 +292,10 @@ public class MembershipJUnitTest {
         System.setProperty(GMSJoinLeave.BYPASS_DISCOVERY_PROPERTY, "true");
         DistributedMembershipListener listener1 = mock(DistributedMembershipListener.class);
         DMStats stats1 = mock(DMStats.class);
+        InternalDistributedSystem mockSystem = mock(InternalDistributedSystem.class);
+        when(mockSystem.getConfig()).thenReturn(config);
         System.out.println("creating 1st membership manager");
-        m1 = MemberFactory.newMembershipManager(listener1, config, transport, stats1,
+        m1 = MemberFactory.newMembershipManager(listener1, mockSystem, transport, stats1,
             SecurityServiceFactory.create());
         m1.startEventProcessing();
       } finally {
@@ -298,8 +305,10 @@ public class MembershipJUnitTest {
       // start the second membership manager
       DistributedMembershipListener listener2 = mock(DistributedMembershipListener.class);
       DMStats stats2 = mock(DMStats.class);
+      InternalDistributedSystem mockSystem = mock(InternalDistributedSystem.class);
+      when(mockSystem.getConfig()).thenReturn(config);
       System.out.println("creating 2nd membership manager");
-      m2 = MemberFactory.newMembershipManager(listener2, config, transport, stats2,
+      m2 = MemberFactory.newMembershipManager(listener2, mockSystem, transport, stats2,
           SecurityServiceFactory.create());
       m2.startEventProcessing();
 
diff --git a/geode-core/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/locator/GMSLocatorRecoveryJUnitTest.java b/geode-core/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/locator/GMSLocatorRecoveryJUnitTest.java
index 26090e4..eb647cb 100644
--- a/geode-core/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/locator/GMSLocatorRecoveryJUnitTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/distributed/internal/membership/gms/locator/GMSLocatorRecoveryJUnitTest.java
@@ -24,6 +24,7 @@ import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
 
 import java.io.File;
 import java.io.FileOutputStream;
@@ -43,6 +44,7 @@ import org.apache.geode.distributed.Locator;
 import org.apache.geode.distributed.internal.ClusterDistributionManager;
 import org.apache.geode.distributed.internal.DMStats;
 import org.apache.geode.distributed.internal.DistributionConfigImpl;
+import org.apache.geode.distributed.internal.InternalDistributedSystem;
 import org.apache.geode.distributed.internal.InternalLocator;
 import org.apache.geode.distributed.internal.LocatorStats;
 import org.apache.geode.distributed.internal.membership.DistributedMembershipListener;
@@ -174,13 +176,12 @@ public class GMSLocatorRecoveryJUnitTest {
 
       // start the first membership manager
       DistributedMembershipListener listener1 = mock(DistributedMembershipListener.class);
+      InternalDistributedSystem mockSystem = mock(InternalDistributedSystem.class);
+      when(mockSystem.getConfig()).thenReturn(config);
       DMStats stats1 = mock(DMStats.class);
-      m1 = MemberFactory.newMembershipManager(listener1, config, transport, stats1,
+      m1 = MemberFactory.newMembershipManager(listener1, mockSystem, transport, stats1,
           SecurityServiceFactory.create());
 
-      // hook up the locator to the membership manager
-      ((InternalLocator) l).getLocatorHandler().setMembershipManager(m1);
-
       GMSLocator l2 = new GMSLocator(SocketCreator.getLocalHost(),
           m1.getLocalMember().getHost() + "[" + port + "]", true, true, new LocatorStats(), "");
       l2.setViewFile(new File("l2.dat"));
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/ClusterDistributionManager.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/ClusterDistributionManager.java
index 470b0d1..9491835 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/ClusterDistributionManager.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/ClusterDistributionManager.java
@@ -775,7 +775,7 @@ public class ClusterDistributionManager implements DistributionManager {
       long start = System.currentTimeMillis();
 
       DMListener l = new DMListener(this);
-      membershipManager = MemberFactory.newMembershipManager(l, system.getConfig(), transport,
+      membershipManager = MemberFactory.newMembershipManager(l, system, transport,
           stats, system.getSecurityService());
 
       sb.append(System.currentTimeMillis() - start);
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 c253160..7ae729c 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
@@ -68,7 +68,6 @@ import org.apache.geode.distributed.internal.locks.GrantorRequestProcessor;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.distributed.internal.membership.MembershipManager;
 import org.apache.geode.distributed.internal.membership.QuorumChecker;
-import org.apache.geode.distributed.internal.membership.gms.Services;
 import org.apache.geode.distributed.internal.membership.gms.messenger.MembershipInformation;
 import org.apache.geode.distributed.internal.membership.gms.mgr.GMSMembershipManager;
 import org.apache.geode.internal.Assert;
@@ -751,9 +750,6 @@ public class InternalDistributedSystem extends DistributedSystem
         this.securityLogWriter.fine("SecurityLogWriter is created.");
       }
 
-      Services.setLogWriter(this.logWriter);
-      Services.setSecurityLogWriter(this.securityLogWriter);
-
       loggingSession.startSession();
 
       this.clock = new DSClock(this.isLoner);
@@ -2824,7 +2820,7 @@ public class InternalDistributedSystem extends DistributedSystem
         System.setProperty(InternalLocator.INHIBIT_DM_BANNER, inhibitBanner);
       }
       if (quorumChecker != null) {
-        mbrMgr.releaseQuorumChecker(quorumChecker);
+        mbrMgr.releaseQuorumChecker(quorumChecker, reconnectDS);
       }
     }
 
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/MemberFactory.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/MemberFactory.java
index 4579a9e..ffe0499 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/MemberFactory.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/MemberFactory.java
@@ -17,7 +17,7 @@ package org.apache.geode.distributed.internal.membership;
 import java.net.InetAddress;
 
 import org.apache.geode.distributed.internal.DMStats;
-import org.apache.geode.distributed.internal.DistributionConfig;
+import org.apache.geode.distributed.internal.InternalDistributedSystem;
 import org.apache.geode.distributed.internal.LocatorStats;
 import org.apache.geode.distributed.internal.membership.gms.GMSMemberFactory;
 import org.apache.geode.distributed.internal.membership.gms.NetLocator;
@@ -78,16 +78,17 @@ public class MemberFactory {
    * start using it.
    *
    * @param listener the listener to notify for callbacks
-   * @param config the configuration of connection to distributed system
    * @param transport holds configuration information that can be used by the manager to configure
    *        itself
    * @param stats are used for recording statistical communications information
    * @return a MembershipManager
    */
   public static MembershipManager newMembershipManager(DistributedMembershipListener listener,
-      DistributionConfig config, RemoteTransportConfig transport, DMStats stats,
+      InternalDistributedSystem system,
+      RemoteTransportConfig transport,
+      DMStats stats,
       SecurityService securityService) {
-    return services.newMembershipManager(listener, config, transport, stats, securityService);
+    return services.newMembershipManager(listener, system, transport, stats, securityService);
   }
 
   /**
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/MemberServices.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/MemberServices.java
index 42e423a..822dc0b 100755
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/MemberServices.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/MemberServices.java
@@ -17,7 +17,7 @@ package org.apache.geode.distributed.internal.membership;
 import java.net.InetAddress;
 
 import org.apache.geode.distributed.internal.DMStats;
-import org.apache.geode.distributed.internal.DistributionConfig;
+import org.apache.geode.distributed.internal.InternalDistributedSystem;
 import org.apache.geode.distributed.internal.LocatorStats;
 import org.apache.geode.distributed.internal.membership.gms.NetLocator;
 import org.apache.geode.internal.admin.remote.RemoteTransportConfig;
@@ -75,7 +75,9 @@ public interface MemberServices {
    * @return a MembershipManager
    */
   MembershipManager newMembershipManager(DistributedMembershipListener listener,
-      DistributionConfig config, RemoteTransportConfig transport, DMStats stats,
+      InternalDistributedSystem system,
+      RemoteTransportConfig transport,
+      DMStats stats,
       SecurityService securityService);
 
 
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/MembershipManager.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/MembershipManager.java
index a91f757..4ac997f 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/MembershipManager.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/MembershipManager.java
@@ -24,6 +24,7 @@ import org.apache.geode.SystemFailure;
 import org.apache.geode.distributed.DistributedMember;
 import org.apache.geode.distributed.internal.DMStats;
 import org.apache.geode.distributed.internal.DistributionMessage;
+import org.apache.geode.distributed.internal.InternalDistributedSystem;
 
 /**
  * A MembershipManager is responsible for reporting a MemberView, as well as having explicit
@@ -330,8 +331,10 @@ public interface MembershipManager {
    * you're all done using the quorum checker.
    *
    * @param checker the QuorumChecker instance
+   * @param distributedSystem the current distributed system
    */
-  void releaseQuorumChecker(QuorumChecker checker);
+  void releaseQuorumChecker(QuorumChecker checker,
+      InternalDistributedSystem distributedSystem);
 
   /**
    * return the coordinator for the view.
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/GMSMemberFactory.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/GMSMemberFactory.java
index 7a507fe..97ca01b 100755
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/GMSMemberFactory.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/GMSMemberFactory.java
@@ -20,8 +20,8 @@ import java.net.UnknownHostException;
 import org.apache.geode.GemFireConfigException;
 import org.apache.geode.SystemConnectException;
 import org.apache.geode.distributed.internal.DMStats;
-import org.apache.geode.distributed.internal.DistributionConfig;
 import org.apache.geode.distributed.internal.DistributionException;
+import org.apache.geode.distributed.internal.InternalDistributedSystem;
 import org.apache.geode.distributed.internal.LocatorStats;
 import org.apache.geode.distributed.internal.membership.DistributedMembershipListener;
 import org.apache.geode.distributed.internal.membership.MemberAttributes;
@@ -97,9 +97,10 @@ public class GMSMemberFactory implements MemberServices {
 
   @Override
   public MembershipManager newMembershipManager(DistributedMembershipListener listener,
-      DistributionConfig config, RemoteTransportConfig transport, DMStats stats,
+      InternalDistributedSystem system,
+      RemoteTransportConfig transport, DMStats stats,
       SecurityService securityService) throws DistributionException {
-    Services services = new Services(listener, config, transport, stats, securityService);
+    Services services = new Services(listener, system, transport, stats, securityService);
     try {
       services.init();
       services.start();
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/Services.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/Services.java
index fa0b14a..051e4aa 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/Services.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/Services.java
@@ -20,9 +20,10 @@ import org.apache.logging.log4j.Logger;
 
 import org.apache.geode.CancelCriterion;
 import org.apache.geode.ForcedDisconnectException;
+import org.apache.geode.LogWriter;
 import org.apache.geode.distributed.DistributedSystemDisconnectedException;
 import org.apache.geode.distributed.internal.DMStats;
-import org.apache.geode.distributed.internal.DistributionConfig;
+import org.apache.geode.distributed.internal.InternalDistributedSystem;
 import org.apache.geode.distributed.internal.InternalLocator;
 import org.apache.geode.distributed.internal.membership.DistributedMembershipListener;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
@@ -36,12 +37,10 @@ import org.apache.geode.distributed.internal.membership.gms.interfaces.JoinLeave
 import org.apache.geode.distributed.internal.membership.gms.interfaces.Locator;
 import org.apache.geode.distributed.internal.membership.gms.interfaces.Manager;
 import org.apache.geode.distributed.internal.membership.gms.interfaces.Messenger;
-import org.apache.geode.distributed.internal.membership.gms.locator.GMSLocator;
 import org.apache.geode.distributed.internal.membership.gms.membership.GMSJoinLeave;
 import org.apache.geode.distributed.internal.membership.gms.messenger.JGroupsMessenger;
 import org.apache.geode.distributed.internal.membership.gms.mgr.GMSMembershipManager;
 import org.apache.geode.internal.admin.remote.RemoteTransportConfig;
-import org.apache.geode.internal.logging.InternalLogWriter;
 import org.apache.geode.internal.logging.LogService;
 import org.apache.geode.internal.security.SecurityService;
 import org.apache.geode.internal.security.SecurityServiceFactory;
@@ -52,9 +51,6 @@ public class Services {
 
   private static final Logger logger = LogService.getLogger();
 
-  private static InternalLogWriter staticLogWriter;
-  private static InternalLogWriter staticSecurityLogWriter;
-
   private final Manager manager;
   private final JoinLeave joinLeave;
   private final HealthMonitor healthMon;
@@ -64,6 +60,7 @@ public class Services {
   private final DMStats stats;
   private final Stopper cancelCriterion;
   private final SecurityService securityService;
+  private final InternalDistributedSystem distributedSystem;
 
   private volatile boolean stopping;
   private volatile boolean stopped;
@@ -71,8 +68,8 @@ public class Services {
 
   private Locator locator;
 
-  private InternalLogWriter logWriter;
-  private InternalLogWriter securityLogWriter;
+  private LogWriter logWriter;
+  private LogWriter securityLogWriter;
 
   private final Timer timer = new Timer("Geode Membership Timer", true);
 
@@ -107,28 +104,27 @@ public class Services {
     this.messenger = null;
     this.securityService = SecurityServiceFactory.create();
     this.auth = null;
+    this.distributedSystem = null;
   }
 
-  public Services(DistributedMembershipListener listener, DistributionConfig config,
+  public Services(DistributedMembershipListener listener,
+      InternalDistributedSystem system,
       RemoteTransportConfig transport, DMStats stats, SecurityService securityService) {
+    this.distributedSystem = system;
     this.cancelCriterion = new Stopper();
     this.stats = stats;
-    this.config = new ServiceConfig(transport, config);
+    this.config = new ServiceConfig(transport, system.getConfig());
     this.manager = new GMSMembershipManager(listener);
     this.joinLeave = new GMSJoinLeave();
     this.healthMon = new GMSHealthMonitor();
+    this.logWriter = distributedSystem.getLogWriter();
     this.messenger = new JGroupsMessenger();
+    this.securityLogWriter = distributedSystem.getSecurityLogWriter();
     this.securityService = securityService;
     this.auth = new GMSAuthenticator();
   }
 
   protected void init() {
-    // InternalDistributedSystem establishes this log writer at boot time
-    // TODO fix this so that IDS doesn't know about Services
-    this.securityLogWriter = staticSecurityLogWriter;
-    staticSecurityLogWriter = null;
-    this.logWriter = staticLogWriter;
-    staticLogWriter = null;
     this.auth.init(this);
     this.messenger.init(this);
     this.manager.init(this);
@@ -249,23 +245,29 @@ public class Services {
     }
   }
 
-  public static void setLogWriter(InternalLogWriter writer) {
-    staticLogWriter = writer;
-  }
-
-  public static void setSecurityLogWriter(InternalLogWriter securityWriter) {
-    staticSecurityLogWriter = securityWriter;
+  public InternalDistributedSystem getDistributedSystem() {
+    return this.distributedSystem;
   }
 
   public SecurityService getSecurityService() {
     return this.securityService;
   }
 
-  public InternalLogWriter getLogWriter() {
+  /**
+   * returns the DistributedSystem's log writer
+   *
+   * @deprecated use a log4j-based LogService
+   */
+  public LogWriter getLogWriter() {
     return this.logWriter;
   }
 
-  public InternalLogWriter getSecurityLogWriter() {
+  /**
+   * returns the DistributedSystem's security log writer
+   *
+   * @deprecated use a log4j-based LogService
+   */
+  public LogWriter getSecurityLogWriter() {
     return this.securityLogWriter;
   }
 
@@ -360,13 +362,6 @@ public class Services {
     return !getConfig().getDistributionConfig().getDisableAutoReconnect();
   }
 
-  public byte[] getPublicKey(InternalDistributedMember mbr) {
-    if (this.locator != null) {
-      return ((GMSLocator) this.locator).getPublicKey(mbr);
-    }
-    return null;
-  }
-
   public class Stopper extends CancelCriterion {
     volatile String reasonForStopping = null;
 
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/auth/GMSAuthenticator.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/auth/GMSAuthenticator.java
index d4935eb..3f71813 100755
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/auth/GMSAuthenticator.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/auth/GMSAuthenticator.java
@@ -108,7 +108,7 @@ public class GMSAuthenticator implements Authenticator {
       return null;
     }
 
-    InternalLogWriter securityLogWriter = this.services.getSecurityLogWriter();
+    InternalLogWriter securityLogWriter = (InternalLogWriter) this.services.getSecurityLogWriter();
 
     if (credentials == null) {
       securityLogWriter.warning(String.format("Failed to find credentials from [%s]", member));
@@ -190,8 +190,9 @@ public class GMSAuthenticator implements Authenticator {
    */
   Properties getCredentials(DistributedMember member, Properties secProps) {
     String authMethod = secProps.getProperty(SECURITY_PEER_AUTH_INIT);
-    return Handshake.getCredentials(authMethod, secProps, member, true, services.getLogWriter(),
-        services.getSecurityLogWriter());
+    return Handshake.getCredentials(authMethod, secProps, member, true,
+        (InternalLogWriter) services.getLogWriter(),
+        (InternalLogWriter) services.getSecurityLogWriter());
   }
 
   /**
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/locator/GMSLocator.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/locator/GMSLocator.java
index a4afb92..659797a 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/locator/GMSLocator.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/locator/GMSLocator.java
@@ -165,20 +165,6 @@ public class GMSLocator implements Locator, NetLocator {
     recover();
   }
 
-  private synchronized void findServices() {
-    InternalDistributedSystem sys = InternalDistributedSystem.getAnyInstance();
-    if (sys != null && services == null) {
-      logger.info("Peer locator found distributed system " + sys);
-      setMembershipManager(sys.getDM().getMembershipManager());
-    }
-    if (services == null) {
-      try {
-        wait(10000);
-      } catch (InterruptedException ignored) {
-      }
-    }
-  }
-
   @Override
   public void installView(NetView view) {
     synchronized (this.registrants) {
@@ -222,7 +208,6 @@ public class GMSLocator implements Locator, NetLocator {
 
   private FindCoordinatorResponse processFindCoordinatorRequest(
       FindCoordinatorRequest findRequest) {
-    findServices();
     if (!findRequest.getDHAlgo().equals(securityUDPDHAlgo)) {
       return new FindCoordinatorResponse(
           "Rejecting findCoordinatorRequest, as member not configured same udp security("
@@ -251,7 +236,6 @@ public class GMSLocator implements Locator, NetLocator {
     // at this level we want to return the coordinator known to membership services,
     // which may be more up-to-date than the one known by the membership manager
     if (view == null) {
-      findServices();
       if (services == null) {
         // we must know this process's identity in order to respond
         return null;
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/messenger/GMSEncrypt.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/messenger/GMSEncrypt.java
index dabab16..82de1de 100755
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/messenger/GMSEncrypt.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/messenger/GMSEncrypt.java
@@ -35,6 +35,7 @@ import org.apache.geode.distributed.internal.membership.InternalDistributedMembe
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember.InternalDistributedMemberWrapper;
 import org.apache.geode.distributed.internal.membership.NetView;
 import org.apache.geode.distributed.internal.membership.gms.Services;
+import org.apache.geode.distributed.internal.membership.gms.locator.GMSLocator;
 
 public final class GMSEncrypt {
   // Parameters for the Diffie-Hellman key exchange
@@ -103,7 +104,11 @@ public final class GMSEncrypt {
   }
 
   private byte[] getPublicKeyIfIAmLocator(InternalDistributedMember mbr) {
-    return services.getPublicKey(mbr);
+    GMSLocator locator = (GMSLocator) services.getLocator();
+    if (locator != null) {
+      return locator.getPublicKey(mbr);
+    }
+    return null;
   }
 
   GMSEncrypt(Services services, String dhSKAlgo) throws Exception {
@@ -163,6 +168,9 @@ public final class GMSEncrypt {
     if (pk == null) {
       pk = (byte[]) view.getPublicKey(member);
     }
+    if (pk == null) {
+      throw new IllegalStateException("unable to find public key for " + member);
+    }
     return pk;
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/mgr/GMSMembershipManager.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/mgr/GMSMembershipManager.java
index aca2c60..d8f3353 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/mgr/GMSMembershipManager.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/membership/gms/mgr/GMSMembershipManager.java
@@ -1803,9 +1803,9 @@ public class GMSMembershipManager implements MembershipManager, Manager {
   }
 
   @Override
-  public void releaseQuorumChecker(QuorumChecker checker) {
+  public void releaseQuorumChecker(QuorumChecker checker,
+      InternalDistributedSystem system) {
     checker.suspend();
-    InternalDistributedSystem system = InternalDistributedSystem.getAnyInstance();
     if (system == null || !system.isConnected()) {
       checker.close();
     }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/tcp/Connection.java b/geode-core/src/main/java/org/apache/geode/internal/tcp/Connection.java
index 7f182d4..386a7a5 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/tcp/Connection.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/tcp/Connection.java
@@ -1568,7 +1568,11 @@ public class Connection implements Runnable {
         logger.debug("Stopping {} for {}", p2pReaderName(), remoteAddr);
       }
       if (this.isReceiver) {
-        initiateSuspicionIfSharedUnordered();
+        try {
+          initiateSuspicionIfSharedUnordered();
+        } catch (CancelException e) {
+          // shutting down
+        }
         if (!this.sharedResource) {
           this.conduit.getStats().incThreadOwnedReceivers(-1L, dominoCount.get());
         }
diff --git a/geode-dunit/src/main/java/org/apache/geode/test/dunit/Disconnect.java b/geode-dunit/src/main/java/org/apache/geode/test/dunit/Disconnect.java
index a0977f8..a6be437 100644
--- a/geode-dunit/src/main/java/org/apache/geode/test/dunit/Disconnect.java
+++ b/geode-dunit/src/main/java/org/apache/geode/test/dunit/Disconnect.java
@@ -18,6 +18,7 @@ import static org.apache.geode.test.dunit.Invoke.invokeInEveryVM;
 
 import org.apache.geode.admin.internal.AdminDistributedSystemImpl;
 import org.apache.geode.distributed.DistributedSystem;
+import org.apache.geode.distributed.Locator;
 import org.apache.geode.distributed.internal.InternalDistributedSystem;
 import org.apache.geode.internal.cache.GemFireCacheImpl;
 
@@ -49,5 +50,8 @@ public class Disconnect {
     if (ads != null) {
       ads.disconnect();
     }
+    if (Locator.hasLocator()) {
+      Locator.getLocator().stop();
+    }
   }
 }