You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by pr...@apache.org on 2018/04/17 16:39:07 UTC

[geode] branch develop updated: GEODE-4959: Add --if-not-exists option to create gateway receiver com… (#1770)

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

prhomberg 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 4dff0cd  GEODE-4959: Add --if-not-exists option to create gateway receiver com… (#1770)
4dff0cd is described below

commit 4dff0cde9c3abca2dad03897c055e9c443a81b60
Author: Patrick Rhomberg <pr...@pivotal.io>
AuthorDate: Tue Apr 17 09:39:01 2018 -0700

    GEODE-4959: Add --if-not-exists option to create gateway receiver com… (#1770)
    
    * GEODE-4959: Add --if-not-exists option to create gateway receiver command.
    * Command will now raise an error if a gateway receiver cannot be created on every member
    * This error will *not* be raised if a gateway receiver already exists on a given member.
    * Cleanup test class.
    * Add setStatus to CommandResult
---
 .../cli/commands/CreateGatewayReceiverCommand.java |  20 ++-
 .../functions/GatewayReceiverCreateFunction.java   |  33 ++++-
 .../cli/functions/GatewayReceiverFunctionArgs.java |   8 +-
 .../internal/cli/result/CommandResult.java         |   4 +
 .../sanctioned-geode-core-serializables.txt        |   2 +-
 .../cache/wan/GatewayReceiverFactoryImpl.java      |  14 +-
 .../CreateGatewayReceiverCommandDUnitTest.java     | 152 ++++++++++++++-------
 7 files changed, 170 insertions(+), 63 deletions(-)

diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/CreateGatewayReceiverCommand.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/CreateGatewayReceiverCommand.java
index 9be9ef3..0e724a4 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/CreateGatewayReceiverCommand.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/CreateGatewayReceiverCommand.java
@@ -27,6 +27,7 @@ import org.apache.geode.distributed.internal.InternalClusterConfigurationService
 import org.apache.geode.management.cli.CliMetaData;
 import org.apache.geode.management.cli.ConverterHint;
 import org.apache.geode.management.cli.Result;
+import org.apache.geode.management.cli.Result.Status;
 import org.apache.geode.management.internal.cli.AbstractCliAroundInterceptor;
 import org.apache.geode.management.internal.cli.GfshParseResult;
 import org.apache.geode.management.internal.cli.functions.CliFunctionResult;
@@ -77,11 +78,14 @@ public class CreateGatewayReceiverCommand extends InternalGfshCommand {
           help = CliStrings.CREATE_GATEWAYRECEIVER__GATEWAYTRANSPORTFILTER__HELP) String[] gatewayTransportFilters,
 
       @CliOption(key = CliStrings.CREATE_GATEWAYRECEIVER__HOSTNAMEFORSENDERS,
-          help = CliStrings.CREATE_GATEWAYRECEIVER__HOSTNAMEFORSENDERS__HELP) String hostnameForSenders) {
+          help = CliStrings.CREATE_GATEWAYRECEIVER__HOSTNAMEFORSENDERS__HELP) String hostnameForSenders,
 
-    GatewayReceiverFunctionArgs gatewayReceiverFunctionArgs =
-        new GatewayReceiverFunctionArgs(manualStart, startPort, endPort, bindAddress,
-            socketBufferSize, maximumTimeBetweenPings, gatewayTransportFilters, hostnameForSenders);
+      @CliOption(key = {CliStrings.IFNOTEXISTS}, help = CliStrings.PUT__PUTIFNOTEXISTS__HELP,
+          specifiedDefaultValue = "true", unspecifiedDefaultValue = "false") Boolean ifNotExists) {
+
+    GatewayReceiverFunctionArgs gatewayReceiverFunctionArgs = new GatewayReceiverFunctionArgs(
+        manualStart, startPort, endPort, bindAddress, socketBufferSize, maximumTimeBetweenPings,
+        gatewayTransportFilters, hostnameForSenders, ifNotExists);
 
     Set<DistributedMember> membersToCreateGatewayReceiverOn = getMembers(onGroups, onMember);
 
@@ -90,12 +94,20 @@ public class CreateGatewayReceiverCommand extends InternalGfshCommand {
             gatewayReceiverFunctionArgs, membersToCreateGatewayReceiverOn);
 
     CommandResult result = ResultBuilder.buildResult(gatewayReceiverCreateResults);
+
     XmlEntity xmlEntity = findXmlEntity(gatewayReceiverCreateResults);
     // no xml needs to be updated, simply return
     if (xmlEntity == null) {
       return result;
     }
 
+    boolean allSuccessful = gatewayReceiverCreateResults.stream()
+        .map(CliFunctionResult::isSuccessful).reduce(true, (x, y) -> x && y);
+    if (!allSuccessful) {
+      result.setStatus(Status.ERROR);
+      return result;
+    }
+
     // has xml but unable to persist to cluster config, need to print warning message and return
     if (onMember != null || getConfigurationService() == null) {
       result.setCommandPersisted(false);
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/GatewayReceiverCreateFunction.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/GatewayReceiverCreateFunction.java
index c984dbe..905b200 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/GatewayReceiverCreateFunction.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/GatewayReceiverCreateFunction.java
@@ -37,6 +37,9 @@ import org.apache.geode.management.internal.configuration.domain.XmlEntity;
  * The function to a create GatewayReceiver using given configuration parameters.
  */
 public class GatewayReceiverCreateFunction implements InternalFunction {
+  public static final String A_GATEWAY_RECEIVER_ALREADY_EXISTS_ON_THIS_MEMBER =
+      "A Gateway Receiver already exists on this member.";
+
 
   private static final Logger logger = LogService.getLogger();
 
@@ -56,11 +59,28 @@ public class GatewayReceiverCreateFunction implements InternalFunction {
     GatewayReceiverFunctionArgs gatewayReceiverCreateArgs =
         (GatewayReceiverFunctionArgs) context.getArguments();
 
+    // Exit early if a receiver already exists.
+    // Consider this a failure unless --if-not-exists was provided.
+    if (gatewayReceiverExists(cache)) {
+      CliFunctionResult result;
+      if (gatewayReceiverCreateArgs.getIfNotExists()) {
+        result = new CliFunctionResult(memberNameOrId, true,
+            "Skipping: " + A_GATEWAY_RECEIVER_ALREADY_EXISTS_ON_THIS_MEMBER);
+      } else {
+        Exception illegalState =
+            new IllegalStateException(A_GATEWAY_RECEIVER_ALREADY_EXISTS_ON_THIS_MEMBER);
+        result = new CliFunctionResult(memberNameOrId, illegalState, illegalState.getMessage());
+      }
+      resultSender.lastResult(result);
+      return;
+    }
+
+
     try {
       GatewayReceiver createdGatewayReceiver =
           createGatewayReceiver(cache, gatewayReceiverCreateArgs);
 
-      Map<String, String> attributes = new HashMap<String, String>();
+      Map<String, String> attributes = new HashMap<>();
       if (gatewayReceiverCreateArgs.getStartPort() != null) {
         attributes.put("start-port", gatewayReceiverCreateArgs.getStartPort().toString());
       }
@@ -75,7 +95,7 @@ public class GatewayReceiverCreateFunction implements InternalFunction {
       resultSender.lastResult(new CliFunctionResult(memberNameOrId, xmlEntity,
           CliStrings.format(
               CliStrings.CREATE_GATEWAYRECEIVER__MSG__GATEWAYRECEIVER_CREATED_ON_0_ONPORT_1,
-              new Object[] {memberNameOrId, createdGatewayReceiver.getPort()})));
+              memberNameOrId, createdGatewayReceiver.getPort())));
     } catch (IllegalStateException e) {
       // no need to log the stack trace
       resultSender.lastResult(new CliFunctionResult(memberNameOrId, e, e.getMessage()));
@@ -86,10 +106,7 @@ public class GatewayReceiverCreateFunction implements InternalFunction {
 
   }
 
-  /**
-   * GatewayReceiver creation happens here.
-   *
-   */
+  /** GatewayReceiver creation happens here. */
   GatewayReceiver createGatewayReceiver(Cache cache,
       GatewayReceiverFunctionArgs gatewayReceiverCreateArgs)
       throws IllegalAccessException, InstantiationException, ClassNotFoundException {
@@ -151,6 +168,10 @@ public class GatewayReceiverCreateFunction implements InternalFunction {
     return ClassPathLoader.getLatest().forName(className).newInstance();
   }
 
+  private boolean gatewayReceiverExists(Cache cache) {
+    return cache.getGatewayReceivers() != null && !cache.getGatewayReceivers().isEmpty();
+  }
+
   @Override
   public String getId() {
     return ID;
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/GatewayReceiverFunctionArgs.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/GatewayReceiverFunctionArgs.java
index 72bcb83..e3e6bf7 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/GatewayReceiverFunctionArgs.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/GatewayReceiverFunctionArgs.java
@@ -38,9 +38,11 @@ public class GatewayReceiverFunctionArgs implements Serializable {
 
   private final String hostnameForSenders;
 
+  private final Boolean ifNotExists;
+
   public GatewayReceiverFunctionArgs(Boolean manualStart, Integer startPort, Integer endPort,
       String bindAddress, Integer socketBufferSize, Integer maximumTimeBetweenPings,
-      String[] gatewayTransportFilters, String hostnameForSenders) {
+      String[] gatewayTransportFilters, String hostnameForSenders, Boolean ifNotExists) {
     this.manualStart = manualStart;
     this.startPort = startPort;
     this.endPort = endPort;
@@ -49,6 +51,7 @@ public class GatewayReceiverFunctionArgs implements Serializable {
     this.maximumTimeBetweenPings = maximumTimeBetweenPings;
     this.gatewayTransportFilters = gatewayTransportFilters;
     this.hostnameForSenders = hostnameForSenders;
+    this.ifNotExists = ifNotExists;
   }
 
   public Boolean isManualStart() {
@@ -83,4 +86,7 @@ public class GatewayReceiverFunctionArgs implements Serializable {
     return hostnameForSenders;
   }
 
+  public Boolean getIfNotExists() {
+    return ifNotExists;
+  }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/result/CommandResult.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/result/CommandResult.java
index 31a57d4..cfd4f64 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/result/CommandResult.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/result/CommandResult.java
@@ -87,6 +87,10 @@ public class CommandResult implements Result {
     return this.status;
   }
 
+  public void setStatus(Status status) {
+    this.status = status;
+  }
+
   public ResultData getResultData() {
     return ResultBuilder.getReadOnlyResultData(resultData);
   }
diff --git a/geode-core/src/main/resources/org/apache/geode/internal/sanctioned-geode-core-serializables.txt b/geode-core/src/main/resources/org/apache/geode/internal/sanctioned-geode-core-serializables.txt
index 98fa997..7f9cc5d 100644
--- a/geode-core/src/main/resources/org/apache/geode/internal/sanctioned-geode-core-serializables.txt
+++ b/geode-core/src/main/resources/org/apache/geode/internal/sanctioned-geode-core-serializables.txt
@@ -544,7 +544,7 @@ org/apache/geode/management/internal/cli/functions/FetchRegionAttributesFunction
 org/apache/geode/management/internal/cli/functions/FetchSharedConfigurationStatusFunction,true,1
 org/apache/geode/management/internal/cli/functions/GarbageCollectionFunction,true,1
 org/apache/geode/management/internal/cli/functions/GatewayReceiverCreateFunction,true,8746830191680509335
-org/apache/geode/management/internal/cli/functions/GatewayReceiverFunctionArgs,true,-5158224572470173267,bindAddress:java/lang/String,endPort:java/lang/Integer,gatewayTransportFilters:java/lang/String[],hostnameForSenders:java/lang/String,manualStart:java/lang/Boolean,maximumTimeBetweenPings:java/lang/Integer,socketBufferSize:java/lang/Integer,startPort:java/lang/Integer
+org/apache/geode/management/internal/cli/functions/GatewayReceiverFunctionArgs,true,-5158224572470173267,bindAddress:java/lang/String,endPort:java/lang/Integer,gatewayTransportFilters:java/lang/String[],hostnameForSenders:java/lang/String,ifNotExists:java/lang/Boolean,manualStart:java/lang/Boolean,maximumTimeBetweenPings:java/lang/Integer,socketBufferSize:java/lang/Integer,startPort:java/lang/Integer
 org/apache/geode/management/internal/cli/functions/GatewaySenderCreateFunction,true,8746830191680509335
 org/apache/geode/management/internal/cli/functions/GatewaySenderDestroyFunction,true,1
 org/apache/geode/management/internal/cli/functions/GatewaySenderDestroyFunctionArgs,true,3848480256348119530,id:java/lang/String,ifExists:boolean
diff --git a/geode-wan/src/main/java/org/apache/geode/internal/cache/wan/GatewayReceiverFactoryImpl.java b/geode-wan/src/main/java/org/apache/geode/internal/cache/wan/GatewayReceiverFactoryImpl.java
index be2aeff..ce08418 100644
--- a/geode-wan/src/main/java/org/apache/geode/internal/cache/wan/GatewayReceiverFactoryImpl.java
+++ b/geode-wan/src/main/java/org/apache/geode/internal/cache/wan/GatewayReceiverFactoryImpl.java
@@ -14,6 +14,8 @@
  */
 package org.apache.geode.internal.cache.wan;
 
+import static org.apache.geode.management.internal.cli.functions.GatewayReceiverCreateFunction.A_GATEWAY_RECEIVER_ALREADY_EXISTS_ON_THIS_MEMBER;
+
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
@@ -60,51 +62,61 @@ public class GatewayReceiverFactoryImpl implements GatewayReceiverFactory {
     this.cache = cache;
   }
 
+  @Override
   public GatewayReceiverFactory addGatewayTransportFilter(GatewayTransportFilter filter) {
     this.filters.add(filter);
     return this;
   }
 
+  @Override
   public GatewayReceiverFactory removeGatewayTransportFilter(GatewayTransportFilter filter) {
     this.filters.remove(filter);
     return this;
   }
 
+  @Override
   public GatewayReceiverFactory setMaximumTimeBetweenPings(int time) {
     this.timeBetPings = time;
     return this;
   }
 
+  @Override
   public GatewayReceiverFactory setStartPort(int port) {
     this.startPort = port;
     return this;
   }
 
+  @Override
   public GatewayReceiverFactory setEndPort(int port) {
     this.endPort = port;
     return this;
   }
 
+  @Override
   public GatewayReceiverFactory setSocketBufferSize(int size) {
     this.socketBuffSize = size;
     return this;
   }
 
+  @Override
   public GatewayReceiverFactory setBindAddress(String address) {
     this.bindAdd = address;
     return this;
   }
 
+  @Override
   public GatewayReceiverFactory setHostnameForSenders(String address) {
     this.hostnameForSenders = address;
     return this;
   }
 
+  @Override
   public GatewayReceiverFactory setManualStart(boolean start) {
     this.manualStart = start;
     return this;
   }
 
+  @Override
   public GatewayReceiver create() {
     if (this.startPort > this.endPort) {
       throw new IllegalStateException(
@@ -113,7 +125,7 @@ public class GatewayReceiverFactoryImpl implements GatewayReceiverFactory {
 
     if ((this.cache.getGatewayReceivers() != null)
         && (!this.cache.getGatewayReceivers().isEmpty())) {
-      throw new IllegalStateException("A Gateway Receiver already exists on this member.");
+      throw new IllegalStateException(A_GATEWAY_RECEIVER_ALREADY_EXISTS_ON_THIS_MEMBER);
     }
 
     GatewayReceiver recv = null;
diff --git a/geode-wan/src/test/java/org/apache/geode/internal/cache/wan/wancommand/CreateGatewayReceiverCommandDUnitTest.java b/geode-wan/src/test/java/org/apache/geode/internal/cache/wan/wancommand/CreateGatewayReceiverCommandDUnitTest.java
index ef2b822..4b1ac2f 100644
--- a/geode-wan/src/test/java/org/apache/geode/internal/cache/wan/wancommand/CreateGatewayReceiverCommandDUnitTest.java
+++ b/geode-wan/src/test/java/org/apache/geode/internal/cache/wan/wancommand/CreateGatewayReceiverCommandDUnitTest.java
@@ -22,6 +22,8 @@ import static org.apache.geode.internal.cache.wan.wancommand.WANCommandUtils.get
 import static org.apache.geode.internal.cache.wan.wancommand.WANCommandUtils.verifyGatewayReceiverProfile;
 import static org.apache.geode.internal.cache.wan.wancommand.WANCommandUtils.verifyGatewayReceiverServerLocations;
 import static org.apache.geode.internal.cache.wan.wancommand.WANCommandUtils.verifyReceiverCreationWithAttributes;
+import static org.apache.geode.management.internal.cli.functions.GatewayReceiverCreateFunction.A_GATEWAY_RECEIVER_ALREADY_EXISTS_ON_THIS_MEMBER;
+import static org.apache.geode.management.internal.cli.i18n.CliStrings.CREATE_GATEWAYRECEIVER;
 import static org.apache.geode.management.internal.cli.i18n.CliStrings.GROUP;
 import static org.apache.geode.test.junit.rules.VMProvider.invokeInEveryMember;
 import static org.assertj.core.api.Assertions.assertThat;
@@ -78,12 +80,70 @@ public class CreateGatewayReceiverCommandDUnitTest {
     gfsh.connectAndVerify(locatorSite1);
   }
 
+  @Test
+  public void twoGatewayReceiversCannotCoexist() {
+    Integer locator1Port = locatorSite1.getPort();
+    server1 = clusterStartupRule.startServerVM(1, locator1Port);
+    String command = CREATE_GATEWAYRECEIVER;
+    gfsh.executeAndAssertThat(command).statusIsSuccess()
+        .tableHasColumnWithExactValuesInAnyOrder("Member", SERVER_1)
+        .tableHasColumnWithValuesContaining("Status",
+            "GatewayReceiver created on member \"" + SERVER_1 + "\"");
+    gfsh.executeAndAssertThat(command).statusIsError()
+        .tableHasColumnWithExactValuesInAnyOrder("Member", SERVER_1)
+        .tableHasColumnWithValuesContaining("Status", "ERROR: java.lang.IllegalStateException: "
+            + A_GATEWAY_RECEIVER_ALREADY_EXISTS_ON_THIS_MEMBER);
+  }
+
+  @Test
+  public void commandFailsIfAnyReceiverFailsToCreateWithoutSkipOption() {
+    // Create a receiver on one server (but not all) so that the command to create receivers on all
+    // will fail on one (but not all). Such a failure should be reported as a failure to GFSH,
+    // unless --skip-if-exists is present.
+    Integer locator1Port = locatorSite1.getPort();
+    server1 = clusterStartupRule.startServerVM(1, locator1Port);
+    server2 = clusterStartupRule.startServerVM(2, locator1Port);
+    String createOnS1 = CREATE_GATEWAYRECEIVER + " --member=" + server1.getName();
+    String createOnBoth = CREATE_GATEWAYRECEIVER;
+    gfsh.executeAndAssertThat(createOnS1).statusIsSuccess()
+        .tableHasColumnWithExactValuesInAnyOrder("Member", SERVER_1)
+        .tableHasColumnWithValuesContaining("Status",
+            "GatewayReceiver created on member \"" + SERVER_1 + "\"");
+    gfsh.executeAndAssertThat(createOnBoth).statusIsError()
+        .tableHasColumnWithExactValuesInAnyOrder("Member", SERVER_1, SERVER_2)
+        .tableHasColumnWithValuesContaining("Status",
+            "ERROR: java.lang.IllegalStateException: "
+                + A_GATEWAY_RECEIVER_ALREADY_EXISTS_ON_THIS_MEMBER,
+            "GatewayReceiver created on member \"" + SERVER_2 + "\"");
+  }
+
+  @Test
+  public void commandSucceedsWhenReceiversAlreadyExistWhenSkipOptionIsPresent() {
+    // Create a receiver on one server (but not all) so that the command to create receivers on all
+    // will fail on one (but not all). Such a failure should be reported as a failure to GFSH,
+    // unless --skip-if-exists is present.
+    Integer locator1Port = locatorSite1.getPort();
+    server1 = clusterStartupRule.startServerVM(1, locator1Port);
+    server2 = clusterStartupRule.startServerVM(2, locator1Port);
+    String createOnS1 = CREATE_GATEWAYRECEIVER + " --member=" + server1.getName();
+    String createOnBoth = CREATE_GATEWAYRECEIVER + " --if-not-exists";
+    gfsh.executeAndAssertThat(createOnS1).statusIsSuccess()
+        .tableHasColumnWithExactValuesInAnyOrder("Member", SERVER_1)
+        .tableHasColumnWithValuesContaining("Status",
+            "GatewayReceiver created on member \"" + SERVER_1 + "\"");
+    gfsh.executeAndAssertThat(createOnBoth).statusIsSuccess()
+        .tableHasColumnWithExactValuesInAnyOrder("Member", SERVER_1, SERVER_2)
+        .tableHasColumnWithValuesContaining("Status",
+            "Skipping: " + A_GATEWAY_RECEIVER_ALREADY_EXISTS_ON_THIS_MEMBER,
+            "GatewayReceiver created on member \"" + SERVER_2 + "\"");
+  }
+
   /**
    * GatewayReceiver with given attributes. Error scenario where the user tries to create more than
    * one receiver per member.
    */
   @Test
-  public void testCreateGatewayReceiverErrorWhenGatewayReceiverAlreadyExists() throws Exception {
+  public void testCreateGatewayReceiverErrorWhenGatewayReceiverAlreadyExists() {
     Integer locator1Port = locatorSite1.getPort();
     server1 = clusterStartupRule.startServerVM(1, locator1Port);
     server2 = clusterStartupRule.startServerVM(2, locator1Port);
@@ -103,18 +163,21 @@ public class CreateGatewayReceiverCommandDUnitTest {
             "GatewayReceiver created on member \"" + SERVER_2 + "\"",
             "GatewayReceiver created on member \"" + SERVER_3 + "\"");
 
-    invokeInEveryMember(() -> {
-      verifyReceiverCreationWithAttributes(!GatewayReceiver.DEFAULT_MANUAL_START, 10000, 11000,
-          "localhost", 100000, 512000, null, GatewayReceiver.DEFAULT_HOSTNAME_FOR_SENDERS);
-    }, server1, server2, server3);
+    invokeInEveryMember(
+        () -> verifyReceiverCreationWithAttributes(!GatewayReceiver.DEFAULT_MANUAL_START, 10000,
+            11000, "localhost", 100000, 512000, null, GatewayReceiver.DEFAULT_HOSTNAME_FOR_SENDERS),
+        server1, server2, server3);
 
     // This should fail as there's already a gateway receiver created on the member.
     gfsh.executeAndAssertThat(command).statusIsError()
         .tableHasColumnWithExactValuesInAnyOrder("Member", SERVER_1, SERVER_2, SERVER_3)
         .tableHasColumnWithExactValuesInAnyOrder("Status",
-            "ERROR: java.lang.IllegalStateException: A Gateway Receiver already exists on this member.",
-            "ERROR: java.lang.IllegalStateException: A Gateway Receiver already exists on this member.",
-            "ERROR: java.lang.IllegalStateException: A Gateway Receiver already exists on this member.");
+            "ERROR: java.lang.IllegalStateException: "
+                + A_GATEWAY_RECEIVER_ALREADY_EXISTS_ON_THIS_MEMBER,
+            "ERROR: java.lang.IllegalStateException: "
+                + A_GATEWAY_RECEIVER_ALREADY_EXISTS_ON_THIS_MEMBER,
+            "ERROR: java.lang.IllegalStateException: "
+                + A_GATEWAY_RECEIVER_ALREADY_EXISTS_ON_THIS_MEMBER);
   }
 
   /**
@@ -156,7 +219,7 @@ public class CreateGatewayReceiverCommandDUnitTest {
    * GatewayReceiver with given attributes
    */
   @Test
-  public void testCreateGatewayReceiver() throws Exception {
+  public void testCreateGatewayReceiver() {
     Integer locator1Port = locatorSite1.getPort();
     server1 = clusterStartupRule.startServerVM(1, locator1Port);
     server2 = clusterStartupRule.startServerVM(2, locator1Port);
@@ -176,10 +239,9 @@ public class CreateGatewayReceiverCommandDUnitTest {
             "GatewayReceiver created on member \"" + SERVER_2 + "\"",
             "GatewayReceiver created on member \"" + SERVER_3 + "\"");
 
-    invokeInEveryMember(() -> {
-      verifyReceiverCreationWithAttributes(false, 10000, 11000, "localhost", 100000, 512000, null,
-          GatewayReceiver.DEFAULT_HOSTNAME_FOR_SENDERS);
-    }, server1, server2, server3);
+    invokeInEveryMember(() -> verifyReceiverCreationWithAttributes(false, 10000, 11000, "localhost",
+        100000, 512000, null, GatewayReceiver.DEFAULT_HOSTNAME_FOR_SENDERS), server1, server2,
+        server3);
   }
 
   /**
@@ -419,7 +481,7 @@ public class CreateGatewayReceiverCommandDUnitTest {
    * GatewayReceiver with given attributes and a single GatewayTransportFilter.
    */
   @Test
-  public void testCreateGatewayReceiverWithGatewayTransportFilter() throws Exception {
+  public void testCreateGatewayReceiverWithGatewayTransportFilter() {
     Integer locator1Port = locatorSite1.getPort();
     server1 = clusterStartupRule.startServerVM(1, locator1Port);
     server2 = clusterStartupRule.startServerVM(2, locator1Port);
@@ -443,17 +505,17 @@ public class CreateGatewayReceiverCommandDUnitTest {
 
     List<String> transportFilters = new ArrayList<>();
     transportFilters.add("org.apache.geode.cache30.MyGatewayTransportFilter1");
-    invokeInEveryMember(() -> {
-      verifyReceiverCreationWithAttributes(true, 10000, 11000, "localhost", 100000, 512000,
-          transportFilters, GatewayReceiver.DEFAULT_HOSTNAME_FOR_SENDERS);
-    }, server1, server2, server3);
+    invokeInEveryMember(
+        () -> verifyReceiverCreationWithAttributes(true, 10000, 11000, "localhost", 100000, 512000,
+            transportFilters, GatewayReceiver.DEFAULT_HOSTNAME_FOR_SENDERS),
+        server1, server2, server3);
   }
 
   /**
    * GatewayReceiver with given attributes and multiple GatewayTransportFilters.
    */
   @Test
-  public void testCreateGatewayReceiverWithMultipleGatewayTransportFilters() throws Exception {
+  public void testCreateGatewayReceiverWithMultipleGatewayTransportFilters() {
     Integer locator1Port = locatorSite1.getPort();
     server1 = clusterStartupRule.startServerVM(1, locator1Port);
     server2 = clusterStartupRule.startServerVM(2, locator1Port);
@@ -478,18 +540,16 @@ public class CreateGatewayReceiverCommandDUnitTest {
     transportFilters.add("org.apache.geode.cache30.MyGatewayTransportFilter1");
     transportFilters.add("org.apache.geode.cache30.MyGatewayTransportFilter2");
 
-    invokeInEveryMember(() -> {
-      verifyReceiverCreationWithAttributes(!GatewayReceiver.DEFAULT_MANUAL_START, 10000, 11000,
-          "localhost", 100000, 512000, transportFilters,
-          GatewayReceiver.DEFAULT_HOSTNAME_FOR_SENDERS);
-    }, server1, server2, server3);
+    invokeInEveryMember(() -> verifyReceiverCreationWithAttributes(
+        !GatewayReceiver.DEFAULT_MANUAL_START, 10000, 11000, "localhost", 100000, 512000,
+        transportFilters, GatewayReceiver.DEFAULT_HOSTNAME_FOR_SENDERS), server1, server2, server3);
   }
 
   /**
    * GatewayReceiver with given attributes on the given member.
    */
   @Test
-  public void testCreateGatewayReceiverOnSingleMember() throws Exception {
+  public void testCreateGatewayReceiverOnSingleMember() {
     Integer locator1Port = locatorSite1.getPort();
     server1 = clusterStartupRule.startServerVM(1, locator1Port);
     server2 = clusterStartupRule.startServerVM(2, locator1Port);
@@ -510,10 +570,8 @@ public class CreateGatewayReceiverCommandDUnitTest {
         .tableHasColumnWithValuesContaining("Status",
             "GatewayReceiver created on member \"" + SERVER_1 + "\"");
 
-    invokeInEveryMember(() -> {
-      verifyReceiverCreationWithAttributes(false, 10000, 11000, "localhost", 100000, 512000, null,
-          GatewayReceiver.DEFAULT_HOSTNAME_FOR_SENDERS);
-    }, server1);
+    invokeInEveryMember(() -> verifyReceiverCreationWithAttributes(false, 10000, 11000, "localhost",
+        100000, 512000, null, GatewayReceiver.DEFAULT_HOSTNAME_FOR_SENDERS), server1);
 
     invokeInEveryMember(() -> {
       Cache cache = ClusterStartupRule.getCache();
@@ -525,7 +583,7 @@ public class CreateGatewayReceiverCommandDUnitTest {
    * GatewayReceiver with given attributes on multiple members.
    */
   @Test
-  public void testCreateGatewayReceiverOnMultipleMembers() throws Exception {
+  public void testCreateGatewayReceiverOnMultipleMembers() {
     Integer locator1Port = locatorSite1.getPort();
     server1 = clusterStartupRule.startServerVM(1, locator1Port);
     server2 = clusterStartupRule.startServerVM(2, locator1Port);
@@ -548,10 +606,8 @@ public class CreateGatewayReceiverCommandDUnitTest {
             "GatewayReceiver created on member \"" + SERVER_1 + "\"",
             "GatewayReceiver created on member \"" + SERVER_2 + "\"");
 
-    invokeInEveryMember(() -> {
-      verifyReceiverCreationWithAttributes(false, 10000, 11000, "localhost", 100000, 512000, null,
-          GatewayReceiver.DEFAULT_HOSTNAME_FOR_SENDERS);
-    }, server1, server2);
+    invokeInEveryMember(() -> verifyReceiverCreationWithAttributes(false, 10000, 11000, "localhost",
+        100000, 512000, null, GatewayReceiver.DEFAULT_HOSTNAME_FOR_SENDERS), server1, server2);
 
     invokeInEveryMember(() -> {
       Cache cache = ClusterStartupRule.getCache();
@@ -563,7 +619,7 @@ public class CreateGatewayReceiverCommandDUnitTest {
    * GatewayReceiver with given attributes on the given group.
    */
   @Test
-  public void testCreateGatewayReceiverOnGroup() throws Exception {
+  public void testCreateGatewayReceiverOnGroup() {
     String groups = "receiverGroup1";
     Integer locator1Port = locatorSite1.getPort();
     server1 = startServerWithGroups(1, groups, locator1Port);
@@ -585,10 +641,9 @@ public class CreateGatewayReceiverCommandDUnitTest {
             "GatewayReceiver created on member \"" + SERVER_2 + "\"",
             "GatewayReceiver created on member \"" + SERVER_3 + "\"");
 
-    invokeInEveryMember(() -> {
-      verifyReceiverCreationWithAttributes(false, 10000, 11000, "localhost", 100000, 512000, null,
-          GatewayReceiver.DEFAULT_HOSTNAME_FOR_SENDERS);
-    }, server1, server2, server3);
+    invokeInEveryMember(() -> verifyReceiverCreationWithAttributes(false, 10000, 11000, "localhost",
+        100000, 512000, null, GatewayReceiver.DEFAULT_HOSTNAME_FOR_SENDERS), server1, server2,
+        server3);
   }
 
   /**
@@ -596,7 +651,7 @@ public class CreateGatewayReceiverCommandDUnitTest {
    * group.
    */
   @Test
-  public void testCreateGatewayReceiverOnGroupScenario2() throws Exception {
+  public void testCreateGatewayReceiverOnGroupScenario2() {
     String group1 = "receiverGroup1";
     String group2 = "receiverGroup2";
     Integer locator1Port = locatorSite1.getPort();
@@ -618,10 +673,8 @@ public class CreateGatewayReceiverCommandDUnitTest {
             "GatewayReceiver created on member \"" + SERVER_1 + "\"",
             "GatewayReceiver created on member \"" + SERVER_2 + "\"");
 
-    invokeInEveryMember(() -> {
-      verifyReceiverCreationWithAttributes(false, 10000, 11000, "localhost", 100000, 512000, null,
-          GatewayReceiver.DEFAULT_HOSTNAME_FOR_SENDERS);
-    }, server1, server2);
+    invokeInEveryMember(() -> verifyReceiverCreationWithAttributes(false, 10000, 11000, "localhost",
+        100000, 512000, null, GatewayReceiver.DEFAULT_HOSTNAME_FOR_SENDERS), server1, server2);
 
     invokeInEveryMember(() -> {
       Cache cache = ClusterStartupRule.getCache();
@@ -633,7 +686,7 @@ public class CreateGatewayReceiverCommandDUnitTest {
    * GatewayReceiver with given attributes on multiple groups.
    */
   @Test
-  public void testCreateGatewayReceiverOnMultipleGroups() throws Exception {
+  public void testCreateGatewayReceiverOnMultipleGroups() {
     Integer locator1Port = locatorSite1.getPort();
     server1 = startServerWithGroups(1, "receiverGroup1", locator1Port);
     server2 = startServerWithGroups(2, "receiverGroup1", locator1Port);
@@ -654,10 +707,9 @@ public class CreateGatewayReceiverCommandDUnitTest {
             "GatewayReceiver created on member \"" + SERVER_2 + "\"",
             "GatewayReceiver created on member \"" + SERVER_3 + "\"");
 
-    invokeInEveryMember(() -> {
-      verifyReceiverCreationWithAttributes(false, 10000, 11000, "localhost", 100000, 512000, null,
-          GatewayReceiver.DEFAULT_HOSTNAME_FOR_SENDERS);
-    }, server1, server2, server3);
+    invokeInEveryMember(() -> verifyReceiverCreationWithAttributes(false, 10000, 11000, "localhost",
+        100000, 512000, null, GatewayReceiver.DEFAULT_HOSTNAME_FOR_SENDERS), server1, server2,
+        server3);
   }
 
   private String getHostName() throws Exception {
@@ -668,7 +720,7 @@ public class CreateGatewayReceiverCommandDUnitTest {
     return InetAddress.getLocalHost().getHostAddress();
   }
 
-  private MemberVM startServerWithGroups(int index, String groups, int locPort) throws Exception {
+  private MemberVM startServerWithGroups(int index, String groups, int locPort) {
     Properties props = new Properties();
     props.setProperty(GROUPS, groups);
     return clusterStartupRule.startServerVM(index, props, locPort);

-- 
To stop receiving notification emails like this one, please contact
prhomberg@apache.org.