You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by dh...@apache.org on 2019/08/21 00:23:29 UTC

[geode] branch develop updated: GEODE-7099: Clean up MeterSubregistryReconnectDistributedTest (#3942)

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

dhemery 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 5a6c1f8  GEODE-7099: Clean up MeterSubregistryReconnectDistributedTest (#3942)
5a6c1f8 is described below

commit 5a6c1f8ae14f661d8788c7e5e1a78d39385c2061
Author: Dale Emery <de...@pivotal.io>
AuthorDate: Tue Aug 20 17:23:00 2019 -0700

    GEODE-7099: Clean up MeterSubregistryReconnectDistributedTest (#3942)
    
    Co-authored-by: Dale Emery <de...@pivotal.io>
    Co-authored-by: Kirk Lund <kl...@apache.org>
---
 .../MeterSubregistryReconnectDistributedTest.java  | 127 +++++++++++----------
 1 file changed, 65 insertions(+), 62 deletions(-)

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 d08a7a4..73cae54 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
@@ -25,14 +25,15 @@ import static org.apache.geode.distributed.internal.membership.gms.MembershipMan
 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;
-import static org.apache.geode.test.dunit.VM.getController;
 import static org.apache.geode.test.dunit.VM.getVM;
-import static org.apache.geode.test.dunit.VM.toArray;
 import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.spy;
 
 import java.io.File;
 import java.io.Serializable;
 import java.util.Properties;
+import java.util.function.Consumer;
 
 import io.micrometer.core.instrument.MeterRegistry;
 import io.micrometer.core.instrument.composite.CompositeMeterRegistry;
@@ -51,7 +52,6 @@ import org.apache.geode.internal.cache.InternalCache;
 import org.apache.geode.test.dunit.VM;
 import org.apache.geode.test.dunit.rules.DistributedRule;
 import org.apache.geode.test.junit.rules.serializable.SerializableTemporaryFolder;
-import org.apache.geode.test.junit.rules.serializable.SerializableTestName;
 
 public class MeterSubregistryReconnectDistributedTest implements Serializable {
 
@@ -60,18 +60,16 @@ public class MeterSubregistryReconnectDistributedTest implements Serializable {
   private static LocatorLauncher locatorLauncher;
 
   private static InternalDistributedSystem system;
-  private static MeterRegistry addedSubregistry;
-  private static MeterRegistry discoveredSubregistry;
 
   private VM locatorVM;
-  private VM server1VM;
-  private VM server2VM;
+  private VM otherServer;
 
-  private String locatorName;
-  private String server1Name;
-  private String server2Name;
+  private static final String LOCATOR_NAME = "locator";
+  private static final String OTHER_SERVER_NAME = "other-server";
+  private static final String NAME_OF_SERVER_TO_RECONNECT = "server-to-reconnect";
 
   private File locatorDir;
+  private int locatorPort;
 
   @Rule
   public DistributedRule distributedRule = new DistributedRule();
@@ -79,25 +77,14 @@ public class MeterSubregistryReconnectDistributedTest implements Serializable {
   @Rule
   public SerializableTemporaryFolder temporaryFolder = new SerializableTemporaryFolder();
 
-  @Rule
-  public SerializableTestName testName = new SerializableTestName();
-
   @Before
   public void setUp() throws Exception {
-    locatorName = "locator-" + testName.getMethodName();
-    server1Name = "server-" + testName.getMethodName() + "-1";
-    server2Name = "server-" + testName.getMethodName() + "-2";
-
     locatorVM = getVM(0);
-    server1VM = getVM(1);
-    server2VM = getController();
-
-    locatorDir = temporaryFolder.newFolder(locatorName);
+    otherServer = getVM(1);
 
-    int locatorPort = locatorVM.invoke(() -> createLocator());
-
-    server1VM.invoke(() -> createServer(server1Name, locatorPort));
-    server2VM.invoke(() -> createServer(server2Name, locatorPort));
+    locatorDir = temporaryFolder.newFolder(LOCATOR_NAME);
+    locatorPort = locatorVM.invoke(this::createLocator);
+    otherServer.invoke(() -> createServer(OTHER_SERVER_NAME));
 
     addIgnoredException(ForcedDisconnectException.class);
     addIgnoredException("Possible loss of quorum");
@@ -111,46 +98,54 @@ public class MeterSubregistryReconnectDistributedTest implements Serializable {
       system = null;
     });
 
-    for (VM vm : toArray(server1VM, server2VM)) {
-      vm.invoke(() -> {
-        system.disconnect();
-        system = null;
-      });
-    }
+    otherServer.invoke(() -> {
+      system.disconnect();
+      system = null;
+    });
+
+    system.disconnect();
   }
 
   @Test
-  public void meterSubregistryIsUsedAfterReconnect() {
-    locatorVM.invoke(() -> {
-      assertThat(system.getDistributionManager().getDistributionManagerIds()).hasSize(3);
-    });
+  public void reconnect_restoresOnlySubregistriesFromCacheFactory() throws InterruptedException {
+    MeterRegistry subregistryFromCacheFactory = meterRegistryFrom("CacheFactory");
+    MeterRegistry subregistryFromPublishingService = meterRegistryFrom("MetricsPublishingService");
 
-    server2VM.invoke(() -> {
-      GMSMembershipManager membershipManager = (GMSMembershipManager) getMembershipManager(system);
-      membershipManager.getGMSManager()
-          .forceDisconnect("Forcing disconnect in " + testName.getMethodName());
+    Consumer<CompositeMeterRegistry> addSubregistryViaPublishingService =
+        compositeMeterRegistry -> compositeMeterRegistry.add(subregistryFromPublishingService);
 
-      await().until(() -> system.isReconnecting());
-      system.waitUntilReconnected(TIMEOUT, MILLISECONDS);
-      assertThat(system.getReconnectedSystem()).isNotSameAs(system);
-    });
+    Consumer<CacheFactory> addSubregistryViaCacheFactory =
+        cacheFactory -> cacheFactory.addMeterSubregistry(subregistryFromCacheFactory);
 
-    locatorVM.invoke(() -> {
-      assertThat(system.getDistributionManager().getDistributionManagerIds()).hasSize(3);
-    });
+    createServer(NAME_OF_SERVER_TO_RECONNECT,
+        addSubregistryViaCacheFactory,
+        addSubregistryViaPublishingService);
 
-    server2VM.invoke(() -> {
-      system = (InternalDistributedSystem) system.getReconnectedSystem();
-      InternalCache cache = system.getCache();
-      CompositeMeterRegistry compositeMeterRegistry =
-          (CompositeMeterRegistry) cache.getMeterRegistry();
-      assertThat(compositeMeterRegistry.getRegistries()).containsOnly(addedSubregistry);
-    });
+    reconnect();
+
+    assertThat(cacheMeterRegistry().getRegistries())
+        .contains(subregistryFromCacheFactory)
+        .doesNotContain(subregistryFromPublishingService);
+  }
+
+  private CompositeMeterRegistry cacheMeterRegistry() {
+    InternalCache cache = system.getCache();
+    return (CompositeMeterRegistry) cache.getMeterRegistry();
+  }
+
+  private void reconnect() throws InterruptedException {
+    GMSMembershipManager membershipManager = (GMSMembershipManager) getMembershipManager(system);
+    membershipManager.getGMSManager().forceDisconnect("Forcing disconnect in test");
+
+    await().until(() -> system.isReconnecting());
+    system.waitUntilReconnected(TIMEOUT, MILLISECONDS);
+
+    system = (InternalDistributedSystem) system.getReconnectedSystem();
   }
 
   private int createLocator() {
     LocatorLauncher.Builder builder = new LocatorLauncher.Builder();
-    builder.setMemberName(locatorName);
+    builder.setMemberName(LOCATOR_NAME);
     builder.setWorkingDirectory(locatorDir.getAbsolutePath());
     builder.setPort(0);
     builder.set(DISABLE_AUTO_RECONNECT, "false");
@@ -166,7 +161,14 @@ public class MeterSubregistryReconnectDistributedTest implements Serializable {
     return locatorLauncher.getPort();
   }
 
-  private void createServer(String serverName, int locatorPort) {
+  private void createServer(String serverName) {
+    createServer(serverName, cacheFactory -> {
+    }, compositeMeterRegistry -> {
+    });
+  }
+
+  private void createServer(String serverName, Consumer<CacheFactory> cacheInitializer,
+      Consumer<CompositeMeterRegistry> registryInitializer) {
     Properties configProperties = new Properties();
     configProperties.setProperty(LOCATORS, "localHost[" + locatorPort + "]");
     configProperties.setProperty(DISABLE_AUTO_RECONNECT, "false");
@@ -175,21 +177,22 @@ public class MeterSubregistryReconnectDistributedTest implements Serializable {
     configProperties.setProperty(MEMBER_TIMEOUT, "2000");
     configProperties.setProperty(NAME, serverName);
 
-    addedSubregistry = new SimpleMeterRegistry();
-
     CacheFactory cacheFactory = new CacheFactory(configProperties);
-    cacheFactory.addMeterSubregistry(addedSubregistry);
+    cacheInitializer.accept(cacheFactory);
 
     InternalCache cache = (InternalCache) cacheFactory.create();
 
     CompositeMeterRegistry compositeMeterRegistry =
         (CompositeMeterRegistry) cache.getMeterRegistry();
-    assertThat(compositeMeterRegistry.getRegistries()).contains(addedSubregistry);
 
-    // same as a discovered ServerLoader that created a subregistry
-    discoveredSubregistry = new SimpleMeterRegistry();
-    compositeMeterRegistry.add(discoveredSubregistry);
+    registryInitializer.accept(compositeMeterRegistry);
 
     system = cache.getInternalDistributedSystem();
   }
+
+  private static MeterRegistry meterRegistryFrom(String registrySource) {
+    SimpleMeterRegistry registry = spy(SimpleMeterRegistry.class);
+    doReturn("Subregistry added by " + registrySource).when(registry).toString();
+    return registry;
+  }
 }