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/12/07 16:54:47 UTC

[geode] branch develop updated: GEODE-5971: Refactor StatusClusterConfigServiceCommand to extend GfshCommand base type (#2960)

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 ce52674  GEODE-5971: Refactor StatusClusterConfigServiceCommand to extend GfshCommand base type (#2960)
ce52674 is described below

commit ce52674d70a5188737661de9512780c912c9fd7d
Author: Aditya Anchuri <aa...@pivotal.io>
AuthorDate: Fri Dec 7 08:54:38 2018 -0800

    GEODE-5971: Refactor StatusClusterConfigServiceCommand to extend GfshCommand base type (#2960)
    
    GEODE-5971: Refactor StartClusterConfigServiceCommand to extend GfshCommand base type
    * Remove unnecessary cleanup step
    * Add more test coverage to status-cluster-config, by shutting down a locator
    
    Signed-off-by: Ken Howe <kh...@pivotal.io>
    Signed-off-by: Aditya Anchuri <aa...@pivotal.io>
---
 ...StatusClusterConfigServiceCommandDUnitTest.java | 57 ++++++++++++++++++++++
 .../StatusClusterConfigServiceCommand.java         | 46 ++++++++---------
 .../FetchSharedConfigurationStatusFunction.java    |  2 +-
 3 files changed, 82 insertions(+), 23 deletions(-)

diff --git a/geode-assembly/src/distributedTest/java/org/apache/geode/management/internal/cli/commands/StatusClusterConfigServiceCommandDUnitTest.java b/geode-assembly/src/distributedTest/java/org/apache/geode/management/internal/cli/commands/StatusClusterConfigServiceCommandDUnitTest.java
new file mode 100644
index 0000000..3aa4e05
--- /dev/null
+++ b/geode-assembly/src/distributedTest/java/org/apache/geode/management/internal/cli/commands/StatusClusterConfigServiceCommandDUnitTest.java
@@ -0,0 +1,57 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package org.apache.geode.management.internal.cli.commands;
+
+import org.junit.BeforeClass;
+import org.junit.ClassRule;
+import org.junit.Test;
+
+import org.apache.geode.test.dunit.rules.ClusterStartupRule;
+import org.apache.geode.test.dunit.rules.MemberVM;
+import org.apache.geode.test.junit.rules.GfshCommandRule;
+
+public class StatusClusterConfigServiceCommandDUnitTest {
+  private static MemberVM locator1, locator2;
+
+  @ClassRule
+  public static ClusterStartupRule cluster = new ClusterStartupRule();
+
+  @ClassRule
+  public static GfshCommandRule gfsh = new GfshCommandRule();
+
+  @BeforeClass
+  public static void beforeClass() throws Exception {
+    locator1 = cluster.startLocatorVM(0, 0);
+    locator2 = cluster.startLocatorVM(1, locator1.getPort());
+
+    gfsh.connectAndVerify(locator1);
+  }
+
+  @Test
+  public void testStatusClusterConfigService() {
+    gfsh.executeAndAssertThat("status cluster-config-service")
+        .statusIsSuccess()
+        .tableHasRowCount("Name", 2)
+        .tableHasRowWithValues("Name", "Status", "locator-0", "RUNNING")
+        .tableHasRowWithValues("Name", "Status", "locator-1", "RUNNING");
+
+    locator2.stop();
+
+    gfsh.executeAndAssertThat("status cluster-config-service")
+        .statusIsSuccess()
+        .tableHasRowCount("Name", 1)
+        .tableHasRowWithValues("Name", "Status", "locator-0", "RUNNING");
+  }
+}
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/StatusClusterConfigServiceCommand.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/StatusClusterConfigServiceCommand.java
index fa47b6c..6b3cb4d 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/StatusClusterConfigServiceCommand.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/StatusClusterConfigServiceCommand.java
@@ -24,58 +24,60 @@ import org.apache.geode.cache.execute.ResultCollector;
 import org.apache.geode.distributed.DistributedMember;
 import org.apache.geode.internal.cache.InternalCache;
 import org.apache.geode.management.cli.CliMetaData;
-import org.apache.geode.management.cli.Result;
+import org.apache.geode.management.cli.GfshCommand;
 import org.apache.geode.management.cli.Result.Status;
 import org.apache.geode.management.internal.cli.CliUtil;
 import org.apache.geode.management.internal.cli.functions.CliFunctionResult;
 import org.apache.geode.management.internal.cli.functions.FetchSharedConfigurationStatusFunction;
 import org.apache.geode.management.internal.cli.i18n.CliStrings;
-import org.apache.geode.management.internal.cli.result.ResultBuilder;
-import org.apache.geode.management.internal.cli.result.TabularResultData;
+import org.apache.geode.management.internal.cli.result.model.ResultModel;
+import org.apache.geode.management.internal.cli.result.model.TabularResultModel;
 import org.apache.geode.management.internal.configuration.domain.SharedConfigurationStatus;
 import org.apache.geode.management.internal.security.ResourceOperation;
 import org.apache.geode.security.ResourcePermission.Operation;
 import org.apache.geode.security.ResourcePermission.Resource;
 
-public class StatusClusterConfigServiceCommand extends InternalGfshCommand {
-  private static final FetchSharedConfigurationStatusFunction fetchSharedConfigStatusFunction =
-      new FetchSharedConfigurationStatusFunction();
-
+public class StatusClusterConfigServiceCommand extends GfshCommand {
   @SuppressWarnings("unchecked")
   @CliCommand(value = CliStrings.STATUS_SHARED_CONFIG, help = CliStrings.STATUS_SHARED_CONFIG_HELP)
   @CliMetaData(relatedTopic = CliStrings.TOPIC_GEODE_LOCATOR)
   @ResourceOperation(resource = Resource.CLUSTER, operation = Operation.READ)
-  public Result statusSharedConfiguration() {
+  public ResultModel statusSharedConfiguration() {
     final InternalCache cache = (InternalCache) getCache();
     final Set<DistributedMember> locators = new HashSet<>(
         cache.getDistributionManager().getAllHostedLocatorsWithSharedConfiguration().keySet());
+
     if (locators.isEmpty()) {
-      return ResultBuilder.createInfoResult(CliStrings.NO_LOCATORS_WITH_SHARED_CONFIG);
-    } else {
-      return ResultBuilder.buildResult(getSharedConfigurationStatus(locators));
+      return ResultModel.createInfo(CliStrings.NO_LOCATORS_WITH_SHARED_CONFIG);
+    }
+
+    ResultModel resultModel = new ResultModel();
+    TabularResultModel tabularResultModel =
+        resultModel.addTable("Status of shared configuration on locators");
+    if (!populateSharedConfigurationStatus(locators, tabularResultModel)) {
+      resultModel.setStatus(Status.ERROR);
     }
+
+    return resultModel;
   }
 
-  private TabularResultData getSharedConfigurationStatus(Set<DistributedMember> locators) {
+  private boolean populateSharedConfigurationStatus(Set<DistributedMember> locators,
+      TabularResultModel tabularResultModel) {
     boolean isSharedConfigRunning = false;
     ResultCollector<?, ?> rc =
-        CliUtil.executeFunction(fetchSharedConfigStatusFunction, null, locators);
+        CliUtil.executeFunction(new FetchSharedConfigurationStatusFunction(), null, locators);
     List<CliFunctionResult> results = (List<CliFunctionResult>) rc.getResult();
-    TabularResultData table = ResultBuilder.createTabularResultData();
-    table.setHeader("Status of shared configuration on locators");
 
     for (CliFunctionResult result : results) {
-      table.accumulate(CliStrings.STATUS_SHARED_CONFIG_NAME_HEADER, result.getMemberIdOrName());
-      String status = (String) result.getSerializables()[0];
-      table.accumulate(CliStrings.STATUS_SHARED_CONFIG_STATUS, status);
+      tabularResultModel.accumulate(CliStrings.STATUS_SHARED_CONFIG_NAME_HEADER,
+          result.getMemberIdOrName());
+      String status = (String) result.getResultObject();
+      tabularResultModel.accumulate(CliStrings.STATUS_SHARED_CONFIG_STATUS, status);
       if (SharedConfigurationStatus.RUNNING.name().equals(status)) {
         isSharedConfigRunning = true;
       }
     }
 
-    if (!isSharedConfigRunning) {
-      table.setStatus(Status.ERROR);
-    }
-    return table;
+    return isSharedConfigRunning;
   }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/FetchSharedConfigurationStatusFunction.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/FetchSharedConfigurationStatusFunction.java
index 5a235a2..293b5ab 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/FetchSharedConfigurationStatusFunction.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/FetchSharedConfigurationStatusFunction.java
@@ -39,7 +39,7 @@ public class FetchSharedConfigurationStatusFunction implements InternalFunction
       memberId = member.getId();
     }
 
-    CliFunctionResult result = new CliFunctionResult(memberId, new String[] {status.name()});
+    CliFunctionResult result = new CliFunctionResult(memberId, status.name(), null);
     context.getResultSender().lastResult(result);
   }