You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by kh...@apache.org on 2018/05/08 17:25:26 UTC

[geode] branch develop updated: GEODE-2668: Better handling of configuration updates (#1892)

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

khowe 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 6284169  GEODE-2668: Better handling of configuration updates (#1892)
6284169 is described below

commit 62841692a06de682059529a28a73ed3ae9638ec8
Author: Kenneth Howe <kh...@pivotal.io>
AuthorDate: Tue May 8 10:25:22 2018 -0700

    GEODE-2668: Better handling of configuration updates (#1892)
    
    In cases where destroying GWRs may fail on some or all servers, control
    configuration updating based on state of --if-exists option.
    --if-exists == true --> update config
    --if-exists == false --> do not update config
    
    Added tests for edge cases with failures on servers.
---
 .../commands/DestroyGatewayReceiverCommand.java    |   7 +-
 .../DestroyGatewayReceiverCommandDUnitTest.java    | 122 ++++++++++++++++++++-
 2 files changed, 125 insertions(+), 4 deletions(-)

diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/DestroyGatewayReceiverCommand.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/DestroyGatewayReceiverCommand.java
index a7a6c8d..e5e0de8 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/DestroyGatewayReceiverCommand.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/DestroyGatewayReceiverCommand.java
@@ -57,7 +57,7 @@ public class DestroyGatewayReceiverCommand extends InternalGfshCommand {
       @CliOption(key = CliStrings.IFEXISTS, help = CliStrings.IFEXISTS_HELP,
           specifiedDefaultValue = "true", unspecifiedDefaultValue = "false") boolean ifExists) {
 
-    boolean persisted = false;
+    boolean persisted = true;
     Set<DistributedMember> members = getMembers(onGroups, onMember);
 
     List<CliFunctionResult> functionResults =
@@ -68,7 +68,9 @@ public class DestroyGatewayReceiverCommand extends InternalGfshCommand {
     // Only update the cluster config if the command is not executed on specific members.
     InternalConfigurationPersistenceService service =
         (InternalConfigurationPersistenceService) getConfigurationPersistenceService();
-    if (onMember == null && result.getStatus().equals(Result.Status.OK) && service != null) {
+    if (onMember != null || service == null) {
+      persisted = false;
+    } else if (result.getStatus().equals(Result.Status.OK) && service != null) {
       if (onGroups == null) {
         onGroups = new String[] {"cluster"};
       }
@@ -82,7 +84,6 @@ public class DestroyGatewayReceiverCommand extends InternalGfshCommand {
         }
         return cc;
       }));
-      persisted = true;
     }
 
     result.setCommandPersisted(persisted);
diff --git a/geode-wan/src/test/java/org/apache/geode/internal/cache/wan/wancommand/DestroyGatewayReceiverCommandDUnitTest.java b/geode-wan/src/test/java/org/apache/geode/internal/cache/wan/wancommand/DestroyGatewayReceiverCommandDUnitTest.java
index 949c665..83ef572 100644
--- a/geode-wan/src/test/java/org/apache/geode/internal/cache/wan/wancommand/DestroyGatewayReceiverCommandDUnitTest.java
+++ b/geode-wan/src/test/java/org/apache/geode/internal/cache/wan/wancommand/DestroyGatewayReceiverCommandDUnitTest.java
@@ -180,6 +180,113 @@ public class DestroyGatewayReceiverCommandDUnitTest {
   }
 
   @Test
+  public void destroyOnCluster_receiverExistsOnSubsetOfMembers_confgIsUpdated() {
+    Integer locator1Port = locatorSite1.getPort();
+    server3 = clusterStartupRule.startServerVM(3, locator1Port);
+    server4 = clusterStartupRule.startServerVM(4, locator1Port);
+    server5 = clusterStartupRule.startServerVM(5, locator1Port);
+
+    gfsh.executeAndAssertThat(createGatewayReceiverCommand("false")).statusIsSuccess()
+        .tableHasColumnWithExactValuesInAnyOrder("Member", "server-3", "server-4", "server-5")
+        .tableHasColumnWithValuesContaining("Status",
+            "GatewayReceiver created on member \"server-3\"",
+            "GatewayReceiver created on member \"server-4\"",
+            "GatewayReceiver created on member \"server-5\"");
+    verifyConfigHasGatewayReceiver("cluster");
+
+    VMProvider
+        .invokeInEveryMember(
+            () -> verifyReceiverCreationWithAttributes(true, 10000, 11000, "localhost", 100000,
+                512000, null, GatewayReceiver.DEFAULT_HOSTNAME_FOR_SENDERS),
+            server3, server4, server5);
+
+    CommandStringBuilder csb =
+        new CommandStringBuilder(DestroyGatewayReceiverCommand.DESTROY_GATEWAYRECEIVER)
+            .addOption(CliStrings.MEMBER, server3.getName());
+    gfsh.executeAndAssertThat(csb.toString()).statusIsSuccess()
+        .containsOutput("change is not persisted")
+        .tableHasColumnWithExactValuesInAnyOrder("Member", "server-3");
+    verifyConfigHasGatewayReceiver("cluster");
+
+    csb = new CommandStringBuilder(DestroyGatewayReceiverCommand.DESTROY_GATEWAYRECEIVER);
+    gfsh.executeAndAssertThat(csb.toString()).statusIsSuccess()
+        .tableHasColumnWithExactValuesInAnyOrder("Member", "server-3", "server-4", "server-5");
+    verifyConfigDoesNotHaveGatewayReceiver("cluster");
+
+    VMProvider.invokeInEveryMember(WANCommandUtils::verifyReceiverDoesNotExist, server3, server4,
+        server5);
+  }
+
+  @Test
+  public void destroyOnCluster_receiverExistsInConfigButNotOnMembers_errorConfigNotUpdated() {
+    Integer locator1Port = locatorSite1.getPort();
+    server3 = clusterStartupRule.startServerVM(3, locator1Port);
+
+    gfsh.executeAndAssertThat(createGatewayReceiverCommand("false")).statusIsSuccess()
+        .tableHasColumnWithExactValuesInAnyOrder("Member", "server-3")
+        .tableHasColumnWithValuesContaining("Status",
+            "GatewayReceiver created on member \"server-3\"");
+    verifyConfigHasGatewayReceiver("cluster");
+
+    VMProvider
+        .invokeInEveryMember(
+            () -> verifyReceiverCreationWithAttributes(true, 10000, 11000, "localhost", 100000,
+                512000, null, GatewayReceiver.DEFAULT_HOSTNAME_FOR_SENDERS),
+            server3/* , server4, server5 */);
+
+    CommandStringBuilder csb =
+        new CommandStringBuilder(DestroyGatewayReceiverCommand.DESTROY_GATEWAYRECEIVER)
+            .addOption(CliStrings.MEMBER, server3.getName());
+    gfsh.executeAndAssertThat(csb.toString()).statusIsSuccess()
+        .containsOutput("change is not persisted")
+        .tableHasColumnWithExactValuesInAnyOrder("Member", "server-3");
+    verifyConfigHasGatewayReceiver("cluster");
+
+    csb = new CommandStringBuilder(DestroyGatewayReceiverCommand.DESTROY_GATEWAYRECEIVER);
+    gfsh.executeAndAssertThat(csb.toString()).statusIsError()
+        .doesNotContainOutput("change is not persisted")
+        .tableHasColumnWithExactValuesInAnyOrder("Member", "server-3");
+    verifyConfigHasGatewayReceiver("cluster");
+
+    VMProvider.invokeInEveryMember(WANCommandUtils::verifyReceiverDoesNotExist, server3);
+  }
+
+  @Test
+  public void destroyOnCluster_receiverExistsInConfigButNotOnMembers_ifExistsConfigIsUpdated() {
+    Integer locator1Port = locatorSite1.getPort();
+    server3 = clusterStartupRule.startServerVM(3, locator1Port);
+
+    gfsh.executeAndAssertThat(createGatewayReceiverCommand("false")).statusIsSuccess()
+        .tableHasColumnWithExactValuesInAnyOrder("Member", "server-3")
+        .tableHasColumnWithValuesContaining("Status",
+            "GatewayReceiver created on member \"server-3\"");
+    verifyConfigHasGatewayReceiver("cluster");
+
+    VMProvider
+        .invokeInEveryMember(
+            () -> verifyReceiverCreationWithAttributes(true, 10000, 11000, "localhost", 100000,
+                512000, null, GatewayReceiver.DEFAULT_HOSTNAME_FOR_SENDERS),
+            server3/* , server4, server5 */);
+
+    CommandStringBuilder csb =
+        new CommandStringBuilder(DestroyGatewayReceiverCommand.DESTROY_GATEWAYRECEIVER)
+            .addOption(CliStrings.MEMBER, server3.getName());
+    gfsh.executeAndAssertThat(csb.toString()).statusIsSuccess()
+        .containsOutput("change is not persisted")
+        .tableHasColumnWithExactValuesInAnyOrder("Member", "server-3");
+    verifyConfigHasGatewayReceiver("cluster");
+
+    csb = new CommandStringBuilder(DestroyGatewayReceiverCommand.DESTROY_GATEWAYRECEIVER)
+        .addOption(CliStrings.IFEXISTS);
+    gfsh.executeAndAssertThat(csb.toString()).statusIsSuccess()
+        .doesNotContainOutput("change is not persisted")
+        .tableHasColumnWithExactValuesInAnyOrder("Member", "server-3");
+    verifyConfigDoesNotHaveGatewayReceiver("cluster");
+
+    VMProvider.invokeInEveryMember(WANCommandUtils::verifyReceiverDoesNotExist, server3);
+  }
+
+  @Test
   public void destroyUnstartedGatewayReceiver_destroysReceiverOnlyOnSpecificMembers() {
     Integer locator1Port = locatorSite1.getPort();
     server3 = clusterStartupRule.startServerVM(3, locator1Port);
@@ -212,7 +319,7 @@ public class DestroyGatewayReceiverCommandDUnitTest {
   }
 
   @Test
-  public void destroyWithoutGatewayReceivers_isError() {
+  public void destroyWithoutGatewayReceiverOnMember_isError() {
     Integer locator1Port = locatorSite1.getPort();
     server3 = clusterStartupRule.startServerVM(3, locator1Port);
     server4 = clusterStartupRule.startServerVM(4, locator1Port);
@@ -234,6 +341,19 @@ public class DestroyGatewayReceiverCommandDUnitTest {
   }
 
   @Test
+  public void destroyGatewayReceiverClusterNotInConfig_isError_noNotPersistMessage() {
+    Integer locator1Port = locatorSite1.getPort();
+    server3 = clusterStartupRule.startServerVM(3, locator1Port);
+    server4 = clusterStartupRule.startServerVM(4, locator1Port);
+
+    CommandStringBuilder csb =
+        new CommandStringBuilder(DestroyGatewayReceiverCommand.DESTROY_GATEWAYRECEIVER);
+    gfsh.executeAndAssertThat(csb.toString()).statusIsError()
+        .doesNotContainOutput("change is not persisted")
+        .tableHasColumnWithExactValuesInAnyOrder("Member", "server-3", "server-4");
+  }
+
+  @Test
   public void destroyIfExistsWithoutGatewayReceivers_isSkipping() {
     Integer locator1Port = locatorSite1.getPort();
     server3 = clusterStartupRule.startServerVM(3, locator1Port);

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