You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by ji...@apache.org on 2018/05/22 15:58:07 UTC
[geode] branch develop updated: GEODE-5011: ResultModel can add a table that takes a list of CliFunct… (#1972)
This is an automated email from the ASF dual-hosted git repository.
jinmeiliao 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 3af0a82 GEODE-5011: ResultModel can add a table that takes a list of CliFunct… (#1972)
3af0a82 is described below
commit 3af0a825c828a51d2acd38fb08726c5d80f486b1
Author: jinmeiliao <ji...@pivotal.io>
AuthorDate: Tue May 22 08:58:01 2018 -0700
GEODE-5011: ResultModel can add a table that takes a list of CliFunct… (#1972)
* change status flag from "IGNORED" to "IGNORABLE"
---
.../internal/cli/functions/CliFunctionResult.java | 29 ++---
.../functions/DestroyGatewayReceiverFunction.java | 2 +-
.../cli/functions/DestroyIndexFunction.java | 4 +-
.../internal/cli/result/model/ResultModel.java | 39 ++++--
.../internal/cli/result/model/ResultModelTest.java | 133 +++++++++++++++++++++
5 files changed, 169 insertions(+), 38 deletions(-)
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/CliFunctionResult.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/CliFunctionResult.java
index 9aeaa7b..b649480 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/CliFunctionResult.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/CliFunctionResult.java
@@ -37,7 +37,7 @@ public class CliFunctionResult implements Comparable<CliFunctionResult>, DataSer
private StatusState state;
public enum StatusState {
- OK, ERROR, IGNORED
+ OK, ERROR, IGNORABLE
}
@Deprecated
@@ -131,16 +131,16 @@ public class CliFunctionResult implements Comparable<CliFunctionResult>, DataSer
return (String) this.serializables[0];
}
- public String getStatus(boolean allowIgnorableFailures) {
- if (!allowIgnorableFailures && state == StatusState.IGNORED) {
- return StatusState.ERROR.name();
+ public String getStatus(boolean skipIgnore) {
+ if (state == StatusState.IGNORABLE) {
+ return skipIgnore ? "IGNORED" : "ERROR";
}
- return getStatus();
+ return state.name();
}
public String getStatus() {
- return state.name();
+ return getStatus(true);
}
public String getStatusMessage() {
@@ -258,22 +258,7 @@ public class CliFunctionResult implements Comparable<CliFunctionResult>, DataSer
}
public boolean isIgnorableFailure() {
- return this.state == StatusState.IGNORED;
- }
-
- /**
- * Use this to signal that an operation failed but it might be OK to ignore. This is intended to
- * obviate the need to send a 'skip-if-exists' or 'if-not-exists' flag to any relevant function
- * and allows the caller to now decide how to handle the result.
- * <p/>
- * An {@code IllegalStateException} will be thrown if the state of this {@code CliFunctionResult}
- * is not already error.
- */
- public void setIgnorableFailure() {
- if (isSuccessful()) {
- throw new IllegalStateException("Cannot call setIgnorableFailure when state == OK");
- }
- this.state = StatusState.IGNORED;
+ return this.state == StatusState.IGNORABLE;
}
@Deprecated
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/DestroyGatewayReceiverFunction.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/DestroyGatewayReceiverFunction.java
index 46cff54..9b96193 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/DestroyGatewayReceiverFunction.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/DestroyGatewayReceiverFunction.java
@@ -58,7 +58,7 @@ public class DestroyGatewayReceiverFunction extends CliFunction {
}
}
}
- return new CliFunctionResult(memberNameOrId, StatusState.IGNORED,
+ return new CliFunctionResult(memberNameOrId, StatusState.IGNORABLE,
"Gateway receiver not found.");
}
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/DestroyIndexFunction.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/DestroyIndexFunction.java
index 3d56eed..7d445e1 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/DestroyIndexFunction.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/DestroyIndexFunction.java
@@ -58,7 +58,7 @@ public class DestroyIndexFunction extends CliFunction {
result = new CliFunctionResult(memberId, CliFunctionResult.StatusState.OK,
"Destroyed index " + indexName + " on region " + regionPath);
} else {
- result = new CliFunctionResult(memberId, CliFunctionResult.StatusState.IGNORED,
+ result = new CliFunctionResult(memberId, CliFunctionResult.StatusState.IGNORABLE,
CliStrings.format(CliStrings.DESTROY_INDEX__INDEX__NOT__FOUND, indexName));
}
}
@@ -77,7 +77,7 @@ public class DestroyIndexFunction extends CliFunction {
result = new CliFunctionResult(memberId, CliFunctionResult.StatusState.OK,
"Destroyed index " + indexName);
} else {
- result = new CliFunctionResult(memberId, CliFunctionResult.StatusState.IGNORED,
+ result = new CliFunctionResult(memberId, CliFunctionResult.StatusState.IGNORABLE,
CliStrings.format(CliStrings.DESTROY_INDEX__INDEX__NOT__FOUND, indexName));
}
}
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/result/model/ResultModel.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/result/model/ResultModel.java
index 65fa663..a7059d9 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/result/model/ResultModel.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/result/model/ResultModel.java
@@ -203,6 +203,29 @@ public class ResultModel {
return section;
}
+ public TabularResultModel addTableAndSetStatus(String namedSection,
+ List<CliFunctionResult> functionResults, boolean skipIgnored) {
+ Object model = sections.get(namedSection);
+ if (model != null) {
+ throw new IllegalStateException(
+ "Section already exists. Can't overwrite it with this new content.");
+ }
+ TabularResultModel section = this.addTable(namedSection);
+ boolean atLeastOneSuccess = false;
+ section.setColumnHeader("Member", "Status", "Message");
+ for (CliFunctionResult functionResult : functionResults) {
+ section.addRow(functionResult.getMemberIdOrName(), functionResult.getStatus(skipIgnored),
+ functionResult.getStatusMessage());
+ if (functionResult.isSuccessful()) {
+ atLeastOneSuccess = true;
+ } else if (functionResult.isIgnorableFailure() && skipIgnored) {
+ atLeastOneSuccess = true;
+ }
+ }
+ setStatus(atLeastOneSuccess ? Result.Status.OK : Result.Status.ERROR);
+ return section;
+ }
+
@JsonIgnore
public List<TabularResultModel> getTableSections() {
return sections.values().stream().filter(TabularResultModel.class::isInstance)
@@ -312,21 +335,11 @@ public class ResultModel {
public static ResultModel createMemberStatusResult(List<CliFunctionResult> functionResults,
String header, String footer, boolean ignoreIfFailed) {
ResultModel result = new ResultModel();
- boolean atLeastOneSuccess = ignoreIfFailed;
- TabularResultModel tabularResultModel = result.addTable(MEMBER_STATUS_SECTION);
+
+ TabularResultModel tabularResultModel =
+ result.addTableAndSetStatus(MEMBER_STATUS_SECTION, functionResults, ignoreIfFailed);
tabularResultModel.setHeader(header);
tabularResultModel.setFooter(footer);
- tabularResultModel.setColumnHeader("Member", "Status", "Message");
- for (CliFunctionResult functionResult : functionResults) {
- tabularResultModel.addRow(functionResult.getMemberIdOrName(),
- functionResult.getStatus(ignoreIfFailed), functionResult.getStatusMessage());
- if (functionResult.isSuccessful()) {
- atLeastOneSuccess = true;
- }
- }
- if (!atLeastOneSuccess) {
- result.setStatus(Result.Status.ERROR);
- }
return result;
}
}
diff --git a/geode-core/src/test/java/org/apache/geode/management/internal/cli/result/model/ResultModelTest.java b/geode-core/src/test/java/org/apache/geode/management/internal/cli/result/model/ResultModelTest.java
new file mode 100644
index 0000000..6d15736
--- /dev/null
+++ b/geode-core/src/test/java/org/apache/geode/management/internal/cli/result/model/ResultModelTest.java
@@ -0,0 +1,133 @@
+/*
+ * 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.result.model;
+
+import static org.apache.geode.management.internal.cli.functions.CliFunctionResult.StatusState.ERROR;
+import static org.apache.geode.management.internal.cli.functions.CliFunctionResult.StatusState.IGNORABLE;
+import static org.apache.geode.management.internal.cli.functions.CliFunctionResult.StatusState.OK;
+import static org.assertj.core.api.Assertions.assertThat;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+
+import org.apache.geode.management.cli.Result;
+import org.apache.geode.management.internal.cli.functions.CliFunctionResult;
+import org.apache.geode.test.junit.categories.UnitTest;
+
+
+@Category(UnitTest.class)
+public class ResultModelTest {
+
+ private ResultModel result;
+ private TabularResultModel table;
+
+ @Before
+ public void setUp() throws Exception {
+ result = new ResultModel();
+ }
+
+ @Test
+ public void setContentAllOK() {
+ List<CliFunctionResult> results = new ArrayList<>();
+ results.add(new CliFunctionResult("member1", OK, "success"));
+ results.add(new CliFunctionResult("member2", OK, "success"));
+ table = result.addTableAndSetStatus("table1", results, true);
+ assertThat(result.getStatus()).isEqualTo(Result.Status.OK);
+ assertThat(table.getContent().get("Status").toString()).isEqualTo("[OK, OK]");
+
+ table = result.addTableAndSetStatus("table2", results, false);
+ assertThat(result.getStatus()).isEqualTo(Result.Status.OK);
+ assertThat(table.getContent().get("Status").toString()).isEqualTo("[OK, OK]");
+ }
+
+ @Test
+ public void setContentAllError() {
+ List<CliFunctionResult> results = new ArrayList<>();
+ results.add(new CliFunctionResult("member1", ERROR, "failed"));
+ results.add(new CliFunctionResult("member2", ERROR, "failed"));
+
+ table = result.addTableAndSetStatus("table1", results, true);
+ assertThat(result.getStatus()).isEqualTo(Result.Status.ERROR);
+ assertThat(table.getContent().get("Status").toString()).isEqualTo("[ERROR, ERROR]");
+
+ table = result.addTableAndSetStatus("table2", results, false);
+ assertThat(result.getStatus()).isEqualTo(Result.Status.ERROR);
+ assertThat(table.getContent().get("Status").toString()).isEqualTo("[ERROR, ERROR]");
+ }
+
+ @Test
+ public void setContentAllIgnorable() {
+ List<CliFunctionResult> results = new ArrayList<>();
+ results.add(new CliFunctionResult("member1", IGNORABLE, "can be ignored"));
+ results.add(new CliFunctionResult("member2", IGNORABLE, "can be ignored"));
+
+ table = result.addTableAndSetStatus("table1", results, true);
+ assertThat(result.getStatus()).isEqualTo(Result.Status.OK);
+ assertThat(table.getContent().get("Status").toString()).isEqualTo("[IGNORED, IGNORED]");
+
+ table = result.addTableAndSetStatus("table2", results, false);
+ assertThat(result.getStatus()).isEqualTo(Result.Status.ERROR);
+ assertThat(table.getContent().get("Status").toString()).isEqualTo("[ERROR, ERROR]");
+ }
+
+ @Test
+ public void setContentOKAndError() {
+ List<CliFunctionResult> results = new ArrayList<>();
+ results.add(new CliFunctionResult("member1", OK, "success"));
+ results.add(new CliFunctionResult("member2", ERROR, "failed"));
+
+ table = result.addTableAndSetStatus("table1", results, true);
+ assertThat(result.getStatus()).isEqualTo(Result.Status.OK);
+ assertThat(table.getContent().get("Status").toString()).isEqualTo("[OK, ERROR]");
+
+ table = result.addTableAndSetStatus("table2", results, false);
+ assertThat(result.getStatus()).isEqualTo(Result.Status.OK);
+ assertThat(table.getContent().get("Status").toString()).isEqualTo("[OK, ERROR]");
+ }
+
+ @Test
+ public void setContentOKAndIgnore() {
+ List<CliFunctionResult> results = new ArrayList<>();
+ results.add(new CliFunctionResult("member1", OK, "success"));
+ results.add(new CliFunctionResult("member2", IGNORABLE, "can be ignored"));
+ table = result.addTableAndSetStatus("table1", results, true);
+ assertThat(result.getStatus()).isEqualTo(Result.Status.OK);
+ assertThat(table.getContent().get("Status").toString()).isEqualTo("[OK, IGNORED]");
+
+ table = result.addTableAndSetStatus("table2", results, false);
+ assertThat(result.getStatus()).isEqualTo(Result.Status.OK);
+ assertThat(table.getContent().get("Status").toString()).isEqualTo("[OK, ERROR]");
+ }
+
+ @Test
+ public void setContentErrorAndIgnore() {
+ List<CliFunctionResult> results = new ArrayList<>();
+ results.add(new CliFunctionResult("member1", ERROR, "failed"));
+ results.add(new CliFunctionResult("member2", IGNORABLE, "can be ignored"));
+
+ table = result.addTableAndSetStatus("table1", results, true);
+ assertThat(result.getStatus()).isEqualTo(Result.Status.OK);
+ assertThat(table.getContent().get("Status").toString()).isEqualTo("[ERROR, IGNORED]");
+
+ table = result.addTableAndSetStatus("table2", results, false);
+ assertThat(result.getStatus()).isEqualTo(Result.Status.ERROR);
+ assertThat(table.getContent().get("Status").toString()).isEqualTo("[ERROR, ERROR]");
+ }
+}
--
To stop receiving notification emails like this one, please contact
jinmeiliao@apache.org.