diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/CloseDurableCQsCommand.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/CloseDurableCQsCommand.java index c4b591655b4d..e1213e5c88f2 100644 --- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/CloseDurableCQsCommand.java +++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/CloseDurableCQsCommand.java @@ -25,25 +25,24 @@ import org.apache.geode.distributed.DistributedMember; 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.internal.cli.CliUtil; -import org.apache.geode.management.internal.cli.domain.MemberResult; +import org.apache.geode.management.cli.GfshCommand; +import org.apache.geode.management.internal.cli.functions.CliFunctionResult; import org.apache.geode.management.internal.cli.functions.CloseDurableCqFunction; 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.model.ResultModel; import org.apache.geode.management.internal.security.ResourceOperation; import org.apache.geode.security.ResourcePermission; -public class CloseDurableCQsCommand extends InternalGfshCommand { - DurableClientCommandsResultBuilder builder = new DurableClientCommandsResultBuilder(); +public class CloseDurableCQsCommand extends GfshCommand { @CliCommand(value = CliStrings.CLOSE_DURABLE_CQS, help = CliStrings.CLOSE_DURABLE_CQS__HELP) @CliMetaData() @ResourceOperation(resource = ResourcePermission.Resource.CLUSTER, operation = ResourcePermission.Operation.MANAGE, target = ResourcePermission.Target.QUERY) - public Result closeDurableCqs(@CliOption(key = CliStrings.CLOSE_DURABLE_CQS__DURABLE__CLIENT__ID, - mandatory = true, - help = CliStrings.CLOSE_DURABLE_CQS__DURABLE__CLIENT__ID__HELP) final String durableClientId, + public ResultModel closeDurableCqs( + @CliOption(key = CliStrings.CLOSE_DURABLE_CQS__DURABLE__CLIENT__ID, + mandatory = true, + help = CliStrings.CLOSE_DURABLE_CQS__DURABLE__CLIENT__ID__HELP) final String durableClientId, @CliOption(key = CliStrings.CLOSE_DURABLE_CQS__NAME, mandatory = true, help = CliStrings.CLOSE_DURABLE_CQS__NAME__HELP) final String cqName, @@ -55,29 +54,20 @@ public Result closeDurableCqs(@CliOption(key = CliStrings.CLOSE_DURABLE_CQS__DUR @CliOption(key = {CliStrings.GROUP, CliStrings.GROUPS}, help = CliStrings.CLOSE_DURABLE_CQS__GROUP__HELP, optionContext = ConverterHint.MEMBERGROUP) final String[] group) { - Result result; - try { - Set targetMembers = findMembers(group, memberNameOrId); - if (targetMembers.isEmpty()) { - return ResultBuilder.createUserErrorResult(CliStrings.NO_MEMBERS_FOUND_MESSAGE); - } + Set targetMembers = findMembers(group, memberNameOrId); - String[] params = new String[2]; - params[0] = durableClientId; - params[1] = cqName; - - final ResultCollector rc = - CliUtil.executeFunction(new CloseDurableCqFunction(), params, targetMembers); - final List results = (List) rc.getResult(); - String failureHeader = - CliStrings.format(CliStrings.CLOSE_DURABLE_CQS__FAILURE__HEADER, cqName, durableClientId); - String successHeader = - CliStrings.format(CliStrings.CLOSE_DURABLE_CQS__SUCCESS, cqName, durableClientId); - result = builder.buildResult(results, successHeader, failureHeader); - } catch (Exception e) { - result = ResultBuilder.createGemFireErrorResult(e.getMessage()); + if (targetMembers.isEmpty()) { + return ResultModel.createError(CliStrings.NO_MEMBERS_FOUND_MESSAGE); } - return result; + + String[] params = new String[2]; + params[0] = durableClientId; + params[1] = cqName; + + final ResultCollector rc = + executeFunction(new CloseDurableCqFunction(), params, targetMembers); + final List results = (List) rc.getResult(); + return ResultModel.createMemberStatusResult(results); } } diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/CloseDurableClientCommand.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/CloseDurableClientCommand.java index 4174fa501586..cf7306264557 100644 --- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/CloseDurableClientCommand.java +++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/CloseDurableClientCommand.java @@ -25,24 +25,22 @@ import org.apache.geode.distributed.DistributedMember; 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.internal.cli.CliUtil; -import org.apache.geode.management.internal.cli.domain.MemberResult; +import org.apache.geode.management.cli.GfshCommand; +import org.apache.geode.management.internal.cli.functions.CliFunctionResult; import org.apache.geode.management.internal.cli.functions.CloseDurableClientFunction; 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.model.ResultModel; import org.apache.geode.management.internal.security.ResourceOperation; import org.apache.geode.security.ResourcePermission; -public class CloseDurableClientCommand extends InternalGfshCommand { - DurableClientCommandsResultBuilder builder = new DurableClientCommandsResultBuilder(); +public class CloseDurableClientCommand extends GfshCommand { @CliCommand(value = CliStrings.CLOSE_DURABLE_CLIENTS, help = CliStrings.CLOSE_DURABLE_CLIENTS__HELP) @CliMetaData() @ResourceOperation(resource = ResourcePermission.Resource.CLUSTER, operation = ResourcePermission.Operation.MANAGE, target = ResourcePermission.Target.QUERY) - public Result closeDurableClient( + public ResultModel closeDurableClient( @CliOption(key = CliStrings.CLOSE_DURABLE_CLIENTS__CLIENT__ID, mandatory = true, help = CliStrings.CLOSE_DURABLE_CLIENTS__CLIENT__ID__HELP) final String durableClientId, @CliOption(key = {CliStrings.MEMBER, CliStrings.MEMBERS}, @@ -52,26 +50,16 @@ public Result closeDurableClient( help = CliStrings.COUNT_DURABLE_CQ_EVENTS__GROUP__HELP, optionContext = ConverterHint.MEMBERGROUP) final String[] group) { - Result result; - try { + Set targetMembers = findMembers(group, memberNameOrId); - Set targetMembers = findMembers(group, memberNameOrId); + if (targetMembers.isEmpty()) { + return ResultModel.createError(CliStrings.NO_MEMBERS_FOUND_MESSAGE); + } - if (targetMembers.isEmpty()) { - return ResultBuilder.createUserErrorResult(CliStrings.NO_MEMBERS_FOUND_MESSAGE); - } + final ResultCollector rc = + executeFunction(new CloseDurableClientFunction(), durableClientId, targetMembers); + final List results = (List) rc.getResult(); - final ResultCollector rc = - CliUtil.executeFunction(new CloseDurableClientFunction(), durableClientId, targetMembers); - final List results = (List) rc.getResult(); - String failureHeader = - CliStrings.format(CliStrings.CLOSE_DURABLE_CLIENTS__FAILURE__HEADER, durableClientId); - String successHeader = - CliStrings.format(CliStrings.CLOSE_DURABLE_CLIENTS__SUCCESS, durableClientId); - result = builder.buildResult(results, successHeader, failureHeader); - } catch (Exception e) { - result = ResultBuilder.createGemFireErrorResult(e.getMessage()); - } - return result; + return ResultModel.createMemberStatusResult(results); } } diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/CountDurableCQEventsCommand.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/CountDurableCQEventsCommand.java index 420b2567aba1..ac55c3b23b3b 100644 --- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/CountDurableCQEventsCommand.java +++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/CountDurableCQEventsCommand.java @@ -25,24 +25,24 @@ import org.apache.geode.distributed.DistributedMember; import org.apache.geode.management.cli.CliMetaData; import org.apache.geode.management.cli.ConverterHint; +import org.apache.geode.management.cli.GfshCommand; import org.apache.geode.management.cli.Result; -import org.apache.geode.management.internal.cli.CliUtil; -import org.apache.geode.management.internal.cli.domain.SubscriptionQueueSizeResult; +import org.apache.geode.management.internal.cli.functions.CliFunctionResult; import org.apache.geode.management.internal.cli.functions.GetSubscriptionQueueSizeFunction; 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.model.ResultModel; +import org.apache.geode.management.internal.cli.result.model.TabularResultModel; import org.apache.geode.management.internal.security.ResourceOperation; import org.apache.geode.security.ResourcePermission; -public class CountDurableCQEventsCommand extends InternalGfshCommand { - DurableClientCommandsResultBuilder builder = new DurableClientCommandsResultBuilder(); +public class CountDurableCQEventsCommand extends GfshCommand { @CliCommand(value = CliStrings.COUNT_DURABLE_CQ_EVENTS, help = CliStrings.COUNT_DURABLE_CQ_EVENTS__HELP) @CliMetaData() @ResourceOperation(resource = ResourcePermission.Resource.CLUSTER, operation = ResourcePermission.Operation.READ) - public Result countDurableCqEvents( + public ResultModel countDurableCqEvents( @CliOption(key = CliStrings.COUNT_DURABLE_CQ_EVENTS__DURABLE__CLIENT__ID, mandatory = true, help = CliStrings.COUNT_DURABLE_CQ_EVENTS__DURABLE__CLIENT__ID__HELP) final String durableClientId, @CliOption(key = CliStrings.COUNT_DURABLE_CQ_EVENTS__DURABLE__CQ__NAME, @@ -54,35 +54,31 @@ public Result countDurableCqEvents( help = CliStrings.COUNT_DURABLE_CQ_EVENTS__GROUP__HELP, optionContext = ConverterHint.MEMBERGROUP) final String[] group) { - Result result; - try { - Set targetMembers = findMembers(group, memberNameOrId); + Set targetMembers = findMembers(group, memberNameOrId); - if (targetMembers.isEmpty()) { - return ResultBuilder.createUserErrorResult(CliStrings.NO_MEMBERS_FOUND_MESSAGE); - } + if (targetMembers.isEmpty()) { + return ResultModel.createError(CliStrings.NO_MEMBERS_FOUND_MESSAGE); + } - String[] params = new String[2]; - params[0] = durableClientId; - params[1] = cqName; - final ResultCollector rc = - CliUtil.executeFunction(new GetSubscriptionQueueSizeFunction(), params, targetMembers); - final List funcResults = - (List) rc.getResult(); + String[] params = new String[2]; + params[0] = durableClientId; + params[1] = cqName; + final ResultCollector rc = + executeFunction(new GetSubscriptionQueueSizeFunction(), params, targetMembers); + final List funcResults = (List) rc.getResult(); - String queueSizeColumnName; + ResultModel result = new ResultModel(); + TabularResultModel table = result.addTable("subscription-queue-size"); + for (CliFunctionResult oneResult : funcResults) { + table.accumulate("Member", oneResult.getMemberIdOrName()); + table.accumulate("Status", oneResult.getStatus()); + table.accumulate("Queue Size", oneResult.getStatusMessage()); - if (cqName != null && !cqName.isEmpty()) { - queueSizeColumnName = CliStrings - .format(CliStrings.COUNT_DURABLE_CQ_EVENTS__SUBSCRIPTION__QUEUE__SIZE__CLIENT, cqName); - } else { - queueSizeColumnName = CliStrings.format( - CliStrings.COUNT_DURABLE_CQ_EVENTS__SUBSCRIPTION__QUEUE__SIZE__CLIENT, durableClientId); + if (!oneResult.isSuccessful()) { + result.setStatus(Result.Status.ERROR); } - result = builder.buildTableResultForQueueSize(funcResults, queueSizeColumnName); - } catch (Exception e) { - result = ResultBuilder.createGemFireErrorResult(e.getMessage()); } return result; } + } diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/DurableClientCommandsResultBuilder.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/DurableClientCommandsResultBuilder.java deleted file mode 100644 index 743602a5af46..000000000000 --- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/DurableClientCommandsResultBuilder.java +++ /dev/null @@ -1,164 +0,0 @@ -/* - * 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 java.util.HashMap; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.TreeMap; - -import org.apache.geode.management.cli.Result; -import org.apache.geode.management.internal.cli.domain.MemberResult; -import org.apache.geode.management.internal.cli.domain.SubscriptionQueueSizeResult; -import org.apache.geode.management.internal.cli.i18n.CliStrings; -import org.apache.geode.management.internal.cli.result.ErrorResultData; -import org.apache.geode.management.internal.cli.result.InfoResultData; -import org.apache.geode.management.internal.cli.result.ResultBuilder; -import org.apache.geode.management.internal.cli.result.TabularResultData; - -public class DurableClientCommandsResultBuilder { - public Result buildResult(List results, String successHeader, - String failureHeader) { - Result result; - boolean failure = true; - boolean partialFailure = false; - Map> errorMap = new HashMap<>(); - Map> successMap = new HashMap<>(); - Map> exceptionMap = new HashMap<>(); - - // Aggregate the results from the members - for (MemberResult memberResult : results) { - if (memberResult.isSuccessful()) { - failure = false; - groupByMessage(memberResult.getSuccessMessage(), memberResult.getMemberNameOrId(), - successMap); - } else { - if (memberResult.isOpPossible()) { - partialFailure = true; - groupByMessage(memberResult.getExceptionMessage(), memberResult.getMemberNameOrId(), - exceptionMap); - } else { - groupByMessage(memberResult.getErrorMessage(), memberResult.getMemberNameOrId(), - errorMap); - } - } - } - - if (!failure && !partialFailure) { - result = ResultBuilder.buildResult(buildSuccessData(successMap)); - } else { - result = ResultBuilder - .buildResult(buildFailureData(successMap, exceptionMap, errorMap, failureHeader)); - } - return result; - } - - Result buildTableResultForQueueSize(List results, - String queueSizeColumnName) { - Result result; - boolean failure = true; - - Map> failureMap = new HashMap<>(); - Map memberQueueSizeTable = new TreeMap<>(); - - // Aggregate the results from the members - for (SubscriptionQueueSizeResult memberResult : results) { - if (memberResult.isSuccessful()) { - failure = false; - memberQueueSizeTable.put(memberResult.getMemberNameOrId(), - memberResult.getSubscriptionQueueSize()); - } else { - groupByMessage(memberResult.getErrorMessage(), memberResult.getMemberNameOrId(), - failureMap); - } - } - - if (!failure) { - TabularResultData table = ResultBuilder.createTabularResultData(); - Set members = memberQueueSizeTable.keySet(); - - for (String member : members) { - long queueSize = memberQueueSizeTable.get(member); - table.accumulate(CliStrings.MEMBER, member); - table.accumulate(queueSizeColumnName, queueSize); - } - result = ResultBuilder.buildResult(table); - } else { - ErrorResultData erd = ResultBuilder.createErrorResultData(); - buildErrorResult(erd, failureMap); - result = ResultBuilder.buildResult(erd); - } - return result; - } - - void groupByMessage(String message, String memberNameOrId, Map> map) { - List members = map.get(message); - if (members == null) { - members = new LinkedList<>(); - } - members.add(memberNameOrId); - map.put(message, members); - } - - - private InfoResultData buildSuccessData(Map> successMap) { - InfoResultData ird = ResultBuilder.createInfoResultData(); - Set successMessages = successMap.keySet(); - - for (String successMessage : successMessages) { - ird.addLine(CliStrings.format(CliStrings.ACTION_SUCCEEDED_ON_MEMBER, successMessage)); - List successfulMembers = successMap.get(successMessage); - int num = 0; - for (String member : successfulMembers) { - ird.addLine("" + ++num + "." + member); - } - ird.addLine("\n"); - } - return ird; - } - - ErrorResultData buildFailureData(Map> successMap, - Map> exceptionMap, Map> errorMap, - String errorHeader) { - ErrorResultData erd = ResultBuilder.createErrorResultData(); - buildErrorResult(erd, successMap); - erd.addLine("\n"); - erd.addLine(errorHeader); - buildErrorResult(erd, exceptionMap); - buildErrorResult(erd, errorMap); - return erd; - } - - private void buildErrorResult(ErrorResultData erd, Map> resultMap) { - if (resultMap != null && !resultMap.isEmpty()) { - Set messages = resultMap.keySet(); - - for (String message : messages) { - erd.addLine("\n"); - erd.addLine(message); - erd.addLine(CliStrings.OCCURRED_ON_MEMBERS); - List members = resultMap.get(message); - int num = 0; - for (String member : members) { - ++num; - erd.addLine("" + num + "." + member); - } - } - } - } -} diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/ListDurableClientCQsCommand.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/ListDurableClientCQsCommand.java index 66c748dfbe46..74ad72035fcf 100644 --- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/ListDurableClientCQsCommand.java +++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/ListDurableClientCQsCommand.java @@ -15,11 +15,8 @@ package org.apache.geode.management.internal.cli.commands; -import java.util.HashMap; import java.util.List; -import java.util.Map; import java.util.Set; -import java.util.TreeMap; import org.springframework.shell.core.annotation.CliCommand; import org.springframework.shell.core.annotation.CliOption; @@ -28,24 +25,23 @@ import org.apache.geode.distributed.DistributedMember; import org.apache.geode.management.cli.CliMetaData; import org.apache.geode.management.cli.ConverterHint; +import org.apache.geode.management.cli.GfshCommand; import org.apache.geode.management.cli.Result; -import org.apache.geode.management.internal.cli.CliUtil; -import org.apache.geode.management.internal.cli.domain.DurableCqNamesResult; +import org.apache.geode.management.internal.cli.functions.CliFunctionResult; import org.apache.geode.management.internal.cli.functions.ListDurableCqNamesFunction; 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.security.ResourceOperation; import org.apache.geode.security.ResourcePermission; -public class ListDurableClientCQsCommand extends InternalGfshCommand { - DurableClientCommandsResultBuilder builder = new DurableClientCommandsResultBuilder(); +public class ListDurableClientCQsCommand extends GfshCommand { @CliCommand(value = CliStrings.LIST_DURABLE_CQS, help = CliStrings.LIST_DURABLE_CQS__HELP) @CliMetaData() @ResourceOperation(resource = ResourcePermission.Resource.CLUSTER, operation = ResourcePermission.Operation.READ) - public Result listDurableClientCQs( + public ResultModel listDurableClientCQs( @CliOption(key = CliStrings.LIST_DURABLE_CQS__DURABLECLIENTID, mandatory = true, help = CliStrings.LIST_DURABLE_CQS__DURABLECLIENTID__HELP) final String durableClientId, @@ -56,66 +52,32 @@ public Result listDurableClientCQs( @CliOption(key = {CliStrings.GROUP, CliStrings.GROUPS}, help = CliStrings.LIST_DURABLE_CQS__GROUP__HELP, optionContext = ConverterHint.MEMBERGROUP) final String[] group) { - Result result; - try { - boolean noResults = true; - Set targetMembers = findMembers(group, memberNameOrId); + Set targetMembers = findMembers(group, memberNameOrId); - if (targetMembers.isEmpty()) { - return ResultBuilder.createUserErrorResult(CliStrings.NO_MEMBERS_FOUND_MESSAGE); - } + if (targetMembers.isEmpty()) { + return ResultModel.createError(CliStrings.NO_MEMBERS_FOUND_MESSAGE); + } - final ResultCollector rc = - CliUtil.executeFunction(new ListDurableCqNamesFunction(), durableClientId, targetMembers); - final List results = (List) rc.getResult(); - Map> memberCqNamesMap = new TreeMap<>(); - Map> errorMessageNodes = new HashMap<>(); - Map> exceptionMessageNodes = new HashMap<>(); + final ResultCollector rc = + executeFunction(new ListDurableCqNamesFunction(), durableClientId, targetMembers); + final List> results = (List>) rc.getResult(); - for (DurableCqNamesResult memberResult : results) { - if (memberResult != null) { - if (memberResult.isSuccessful()) { - memberCqNamesMap.put(memberResult.getMemberNameOrId(), memberResult.getCqNamesList()); - } else { - if (memberResult.isOpPossible()) { - builder.groupByMessage(memberResult.getExceptionMessage(), - memberResult.getMemberNameOrId(), exceptionMessageNodes); - } else { - builder.groupByMessage(memberResult.getErrorMessage(), - memberResult.getMemberNameOrId(), errorMessageNodes); - } - } - } - } + ResultModel result = new ResultModel(); + TabularResultModel table = result.addTable("list-durable-client-cqs"); - if (!memberCqNamesMap.isEmpty()) { - TabularResultData table = ResultBuilder.createTabularResultData(); - Set members = memberCqNamesMap.keySet(); + for (List perMemberList : results) { + for (CliFunctionResult oneResult : perMemberList) { + table.accumulate("Member", oneResult.getMemberIdOrName()); + table.accumulate("Status", oneResult.getStatus()); + table.accumulate("CQ Name", oneResult.getStatusMessage()); - for (String member : members) { - boolean isFirst = true; - List cqNames = memberCqNamesMap.get(member); - for (String cqName : cqNames) { - if (isFirst) { - isFirst = false; - table.accumulate(CliStrings.MEMBER, member); - } else { - table.accumulate(CliStrings.MEMBER, ""); - } - table.accumulate(CliStrings.LIST_DURABLE_CQS__NAME, cqName); - } + if (!oneResult.isSuccessful()) { + result.setStatus(Result.Status.ERROR); } - result = ResultBuilder.buildResult(table); - } else { - String errorHeader = - CliStrings.format(CliStrings.LIST_DURABLE_CQS__FAILURE__HEADER, durableClientId); - result = ResultBuilder.buildResult( - builder.buildFailureData(null, exceptionMessageNodes, errorMessageNodes, errorHeader)); } - } catch (Exception e) { - result = ResultBuilder.createGemFireErrorResult(e.getMessage()); } + return result; } } diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/domain/DurableCqNamesResult.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/domain/DurableCqNamesResult.java deleted file mode 100644 index 7cfeed8f8b55..000000000000 --- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/domain/DurableCqNamesResult.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * 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.domain; - -import java.io.Serializable; -import java.util.ArrayList; -import java.util.List; - -/**** - * Data class used for sending back names for the durable client cq for a client - */ -public class DurableCqNamesResult extends MemberResult implements Serializable { - - private static final long serialVersionUID = 1L; - private List cqNames = new ArrayList(); - - public DurableCqNamesResult(final String memberNameOrId) { - super(memberNameOrId); - } - - public List getCqNamesList() { - return cqNames; - } - - public void setCqNamesList(List cqNamesList) { - this.cqNames.addAll(cqNamesList); - this.isSuccessful = true; - this.opPossible = true; - } - - public String toString() { - StringBuffer sb = new StringBuffer(); - sb.append(super.toString()); - for (String cqName : cqNames) { - sb.append("\nCqName : " + cqName); - } - return sb.toString(); - } -} diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/domain/MemberResult.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/domain/MemberResult.java deleted file mode 100644 index 0ab2706579ed..000000000000 --- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/domain/MemberResult.java +++ /dev/null @@ -1,110 +0,0 @@ -/* - * 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.domain; - -import java.io.Serializable; - -/*** - * Data class used to return the result of a function on a member. Typically to return the status of - * an action on a member. Not suitable if you wish to return specific data from member - * - */ -public class MemberResult implements Serializable { - - private static final long serialVersionUID = 1L; - protected String memberNameOrId; - protected boolean isSuccessful; - protected boolean opPossible; - protected String exceptionMessage; - protected String successMessage; - protected String errorMessage; - - - public MemberResult(String memberNameOrId) { - this.memberNameOrId = memberNameOrId; - this.isSuccessful = true; - this.opPossible = true; - } - - public MemberResult(String memberNameOrId, String errorMessage) { - this.memberNameOrId = memberNameOrId; - this.errorMessage = errorMessage; - this.opPossible = false; - this.isSuccessful = false; - } - - public String getMemberNameOrId() { - return memberNameOrId; - } - - public void setMemberNameOrId(String memberNameOrId) { - this.memberNameOrId = memberNameOrId; - } - - public boolean isSuccessful() { - return isSuccessful; - } - - public void setSuccessful(boolean isSuccessful) { - this.isSuccessful = isSuccessful; - } - - public String getExceptionMessage() { - return exceptionMessage; - } - - public void setExceptionMessage(String exceptionMessage) { - this.exceptionMessage = exceptionMessage; - this.opPossible = true; - this.isSuccessful = false; - } - - public boolean isOpPossible() { - return this.opPossible; - } - - public void setErrorMessage(String errorMessage) { - this.errorMessage = errorMessage; - this.opPossible = false; - this.isSuccessful = false; - } - - public String getErrorMessage() { - return this.errorMessage; - } - - public String toString() { - StringBuffer sb = new StringBuffer(); - sb.append("MemberNameOrId : "); - sb.append(this.memberNameOrId); - sb.append("\nSuccessfull : "); - sb.append(this.isSuccessful); - sb.append("\n isOpPossible"); - sb.append(this.isOpPossible()); - sb.append("Success Message : "); - sb.append(this.successMessage); - sb.append("\nException Message : "); - sb.append(this.exceptionMessage); - return sb.toString(); - } - - public String getSuccessMessage() { - return successMessage; - } - - public void setSuccessMessage(String successMessage) { - this.successMessage = successMessage; - } -} diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/domain/SubscriptionQueueSizeResult.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/domain/SubscriptionQueueSizeResult.java deleted file mode 100644 index 5f2b8d9d61f2..000000000000 --- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/domain/SubscriptionQueueSizeResult.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * 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.domain; - -/*** - * Data class used for sending back subscription-queue-size for a client or a cq - * - */ -public class SubscriptionQueueSizeResult extends MemberResult { - - private static final long serialVersionUID = 1L; - private long subscriptionQueueSize; - - public SubscriptionQueueSizeResult(String memberNameOrId) { - super(memberNameOrId); - } - - public long getSubscriptionQueueSize() { - return subscriptionQueueSize; - } - - public void setSubscriptionQueueSize(long queueSize) { - this.subscriptionQueueSize = queueSize; - super.isSuccessful = true; - super.opPossible = true; - } - - public String toString() { - StringBuffer sb = new StringBuffer(); - sb.append(super.toString()); - sb.append("\nsubscription-queue-size : "); - sb.append(this.subscriptionQueueSize); - return sb.toString(); - } - -} diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/CloseDurableClientFunction.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/CloseDurableClientFunction.java index 358c0fdd9d8a..53024422da54 100644 --- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/CloseDurableClientFunction.java +++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/CloseDurableClientFunction.java @@ -20,7 +20,6 @@ import org.apache.geode.internal.cache.tier.sockets.CacheClientNotifier; import org.apache.geode.internal.cache.tier.sockets.CacheClientProxy; import org.apache.geode.management.internal.cli.CliUtil; -import org.apache.geode.management.internal.cli.domain.MemberResult; import org.apache.geode.management.internal.cli.i18n.CliStrings; /*** @@ -37,39 +36,37 @@ public void execute(FunctionContext context) { final Cache cache = context.getCache(); final String memberNameOrId = CliUtil.getMemberNameOrId(cache.getDistributedSystem().getDistributedMember()); - MemberResult memberResult = new MemberResult(memberNameOrId); + context.getResultSender().lastResult(createFunctionResult(memberNameOrId, durableClientId)); + } + + private CliFunctionResult createFunctionResult(String memberNameOrId, String durableClientId) { try { CacheClientNotifier cacheClientNotifier = CacheClientNotifier.getInstance(); - if (cacheClientNotifier != null) { - CacheClientProxy ccp = cacheClientNotifier.getClientProxy(durableClientId); - if (ccp != null) { - boolean isClosed = cacheClientNotifier.closeDurableClientProxy(durableClientId); - if (isClosed) { - memberResult.setSuccessMessage( - CliStrings.format(CliStrings.CLOSE_DURABLE_CLIENTS__SUCCESS, durableClientId)); - } else { - memberResult.setErrorMessage( - CliStrings.format(CliStrings.NO_CLIENT_FOUND_WITH_CLIENT_ID, durableClientId)); - } - } else { - memberResult.setErrorMessage( - CliStrings.format(CliStrings.NO_CLIENT_FOUND_WITH_CLIENT_ID, durableClientId)); - } + if (cacheClientNotifier == null) { + return new CliFunctionResult(memberNameOrId, CliFunctionResult.StatusState.ERROR, + CliStrings.NO_CLIENT_FOUND); + } + + CacheClientProxy ccp = cacheClientNotifier.getClientProxy(durableClientId); + if (ccp == null) { + return new CliFunctionResult(memberNameOrId, CliFunctionResult.StatusState.ERROR, + CliStrings.format(CliStrings.NO_CLIENT_FOUND_WITH_CLIENT_ID, durableClientId)); + } + + boolean isClosed = cacheClientNotifier.closeDurableClientProxy(durableClientId); + if (isClosed) { + return new CliFunctionResult(memberNameOrId, CliFunctionResult.StatusState.OK, + CliStrings.format(CliStrings.CLOSE_DURABLE_CLIENTS__SUCCESS, durableClientId)); } else { - memberResult.setErrorMessage(CliStrings.NO_CLIENT_FOUND); + return new CliFunctionResult(memberNameOrId, CliFunctionResult.StatusState.ERROR, + CliStrings.format(CliStrings.NO_CLIENT_FOUND_WITH_CLIENT_ID, durableClientId)); } } catch (Exception e) { - memberResult.setExceptionMessage(e.getMessage()); - } finally { - context.getResultSender().lastResult(memberResult); + return new CliFunctionResult(memberNameOrId, CliFunctionResult.StatusState.ERROR, + e.getMessage()); } } - @Override - public String getId() { - return CloseDurableClientFunction.class.getName(); - } - } diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/CloseDurableCqFunction.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/CloseDurableCqFunction.java index b736ebd6e74e..85ed6738eb89 100644 --- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/CloseDurableCqFunction.java +++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/CloseDurableCqFunction.java @@ -20,7 +20,6 @@ import org.apache.geode.internal.cache.tier.sockets.CacheClientNotifier; import org.apache.geode.internal.cache.tier.sockets.CacheClientProxy; import org.apache.geode.management.internal.cli.CliUtil; -import org.apache.geode.management.internal.cli.domain.MemberResult; import org.apache.geode.management.internal.cli.i18n.CliStrings; /*** @@ -37,41 +36,40 @@ public void execute(FunctionContext context) { final Cache cache = context.getCache(); final String memberNameOrId = CliUtil.getMemberNameOrId(cache.getDistributedSystem().getDistributedMember()); - CacheClientNotifier cacheClientNotifier = CacheClientNotifier.getInstance(); String[] args = (String[]) context.getArguments(); String durableClientId = args[0]; String cqName = args[1]; - MemberResult memberResult = new MemberResult(memberNameOrId); + context.getResultSender() + .lastResult(createFunctionResult(memberNameOrId, durableClientId, cqName)); + } + + private CliFunctionResult createFunctionResult(String memberNameOrId, String durableClientId, + String cqName) { + CacheClientNotifier cacheClientNotifier = CacheClientNotifier.getInstance(); try { - if (cacheClientNotifier != null) { - CacheClientProxy cacheClientProxy = cacheClientNotifier.getClientProxy(durableClientId); - if (cacheClientProxy != null) { - if (cacheClientNotifier.closeClientCq(durableClientId, cqName)) { - memberResult.setSuccessMessage( - CliStrings.format(CliStrings.CLOSE_DURABLE_CQS__SUCCESS, cqName, durableClientId)); - } else { - memberResult.setErrorMessage(CliStrings.format( - CliStrings.CLOSE_DURABLE_CQS__UNABLE__TO__CLOSE__CQ, cqName, durableClientId)); - } + if (cacheClientNotifier == null) { + return new CliFunctionResult(memberNameOrId, CliFunctionResult.StatusState.ERROR, + CliStrings.NO_CLIENT_FOUND); + } - } else { - memberResult.setErrorMessage( - CliStrings.format(CliStrings.NO_CLIENT_FOUND_WITH_CLIENT_ID, durableClientId)); - } + CacheClientProxy cacheClientProxy = cacheClientNotifier.getClientProxy(durableClientId); + if (cacheClientProxy == null) { + return new CliFunctionResult(memberNameOrId, CliFunctionResult.StatusState.ERROR, + CliStrings.format(CliStrings.NO_CLIENT_FOUND_WITH_CLIENT_ID, durableClientId)); + } + + if (cacheClientNotifier.closeClientCq(durableClientId, cqName)) { + return new CliFunctionResult(memberNameOrId, CliFunctionResult.StatusState.OK, + CliStrings.format(CliStrings.CLOSE_DURABLE_CQS__SUCCESS, cqName, durableClientId)); } else { - memberResult.setErrorMessage(CliStrings.NO_CLIENT_FOUND); + return new CliFunctionResult(memberNameOrId, CliFunctionResult.StatusState.ERROR, + CliStrings.format(CliStrings.CLOSE_DURABLE_CQS__UNABLE__TO__CLOSE__CQ, cqName, + durableClientId)); } } catch (Exception e) { - memberResult.setExceptionMessage(e.getMessage()); - } finally { - context.getResultSender().lastResult(memberResult); + return new CliFunctionResult(memberNameOrId, e); } } - @Override - public String getId() { - return CloseDurableCqFunction.class.getName(); - } - } diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/GetSubscriptionQueueSizeFunction.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/GetSubscriptionQueueSizeFunction.java index b17a813678fd..4c7db2e5c433 100644 --- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/GetSubscriptionQueueSizeFunction.java +++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/GetSubscriptionQueueSizeFunction.java @@ -24,7 +24,6 @@ import org.apache.geode.internal.cache.tier.sockets.CacheClientNotifier; import org.apache.geode.internal.cache.tier.sockets.CacheClientProxy; import org.apache.geode.management.internal.cli.CliUtil; -import org.apache.geode.management.internal.cli.domain.SubscriptionQueueSizeResult; import org.apache.geode.management.internal.cli.i18n.CliStrings; /*** @@ -41,64 +40,64 @@ public void execute(FunctionContext context) { final String memberNameOrId = CliUtil.getMemberNameOrId(cache.getDistributedSystem().getDistributedMember()); String args[] = (String[]) context.getArguments(); - String durableClientId = null, cqName = null; - SubscriptionQueueSizeResult result = new SubscriptionQueueSizeResult(memberNameOrId); + String durableClientId = args[0]; + String cqName = args[1]; - durableClientId = args[0]; - cqName = args[1]; + context.getResultSender() + .lastResult(createFunctionResult(memberNameOrId, durableClientId, cqName)); + } + + private CliFunctionResult createFunctionResult(String memberNameOrId, String durableClientId, + String cqName) { try { CacheClientNotifier cacheClientNotifier = CacheClientNotifier.getInstance(); - if (cacheClientNotifier != null) { - CacheClientProxy cacheClientProxy = cacheClientNotifier.getClientProxy(durableClientId); - // Check if the client is present or not - if (cacheClientProxy != null) { - if (cqName != null && !cqName.isEmpty()) { - CqService cqService = cacheClientProxy.getCache().getCqService(); - if (cqService != null) { - CqQuery cqQuery = - cqService.getClientCqFromServer(cacheClientProxy.getProxyID(), cqName); - if (cqQuery != null) { - CqQueryVsdStats cqVsdStats = ((InternalCqQuery) cqQuery).getVsdStats(); + if (cacheClientNotifier == null) { + return new CliFunctionResult(memberNameOrId, CliFunctionResult.StatusState.ERROR, + CliStrings.NO_CLIENT_FOUND); + } + + CacheClientProxy cacheClientProxy = cacheClientNotifier.getClientProxy(durableClientId); + // Check if the client is present or not + if (cacheClientProxy == null) { + return new CliFunctionResult(memberNameOrId, CliFunctionResult.StatusState.ERROR, + CliStrings.format(CliStrings.NO_CLIENT_FOUND_WITH_CLIENT_ID, durableClientId)); + } + + if (cqName == null || cqName.isEmpty()) { + return new CliFunctionResult(memberNameOrId, CliFunctionResult.StatusState.OK, + Integer.toString(cacheClientNotifier.getDurableClientHAQueueSize(durableClientId))); + } + + CqService cqService = cacheClientProxy.getCache().getCqService(); + if (cqService == null) { + return new CliFunctionResult(memberNameOrId, CliFunctionResult.StatusState.ERROR, + CliStrings.COUNT_DURABLE_CQ_EVENTS__NO__CQS__REGISTERED); + } - if (cqVsdStats != null) { - long queueSize = cqVsdStats.getNumHAQueuedEvents(); - result.setSubscriptionQueueSize(queueSize); - } else { - result.setErrorMessage(CliStrings.format( - CliStrings.COUNT_DURABLE_CQ_EVENTS__DURABLE_CQ_STATS_NOT_FOUND, - durableClientId, cqName)); - } - } else { - result.setErrorMessage( - CliStrings.format(CliStrings.COUNT_DURABLE_CQ_EVENTS__DURABLE_CQ_NOT_FOUND, - durableClientId, cqName)); - } - } else { - result.setErrorMessage(CliStrings.COUNT_DURABLE_CQ_EVENTS__NO__CQS__REGISTERED); - } - } else { - result.setSubscriptionQueueSize( - cacheClientNotifier.getDurableClientHAQueueSize(durableClientId)); - } - } else { - result.setErrorMessage( - CliStrings.format(CliStrings.NO_CLIENT_FOUND_WITH_CLIENT_ID, durableClientId)); - } - } else { - result.setErrorMessage(CliStrings.NO_CLIENT_FOUND); + CqQuery cqQuery = cqService.getClientCqFromServer(cacheClientProxy.getProxyID(), cqName); + if (cqQuery == null) { + return new CliFunctionResult(memberNameOrId, CliFunctionResult.StatusState.ERROR, + CliStrings.format(CliStrings.COUNT_DURABLE_CQ_EVENTS__DURABLE_CQ_NOT_FOUND, + durableClientId, cqName)); } + + CqQueryVsdStats cqVsdStats = ((InternalCqQuery) cqQuery).getVsdStats(); + + if (cqVsdStats == null) { + return new CliFunctionResult(memberNameOrId, CliFunctionResult.StatusState.ERROR, + CliStrings.format( + CliStrings.COUNT_DURABLE_CQ_EVENTS__DURABLE_CQ_STATS_NOT_FOUND, + durableClientId, cqName)); + } + + long queueSize = cqVsdStats.getNumHAQueuedEvents(); + return new CliFunctionResult(memberNameOrId, CliFunctionResult.StatusState.OK, + Long.toString(queueSize)); } catch (Exception e) { - result.setExceptionMessage(e.getMessage()); - } finally { - context.getResultSender().lastResult(result); + return new CliFunctionResult(memberNameOrId, CliFunctionResult.StatusState.ERROR, + e.getMessage()); } } - - @Override - public String getId() { - return GetSubscriptionQueueSizeFunction.class.getName(); - } - } diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/ListDurableCqNamesFunction.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/ListDurableCqNamesFunction.java index 0d02ccd50e07..8d37f7ba95d0 100644 --- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/ListDurableCqNamesFunction.java +++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/ListDurableCqNamesFunction.java @@ -26,7 +26,6 @@ import org.apache.geode.internal.cache.tier.sockets.CacheClientNotifier; import org.apache.geode.internal.cache.tier.sockets.CacheClientProxy; import org.apache.geode.management.internal.cli.CliUtil; -import org.apache.geode.management.internal.cli.domain.DurableCqNamesResult; import org.apache.geode.management.internal.cli.i18n.CliStrings; /** @@ -54,38 +53,55 @@ public void execute(final FunctionContext context) { final Cache cache = context.getCache(); final DistributedMember member = cache.getDistributedSystem().getDistributedMember(); String memberNameOrId = CliUtil.getMemberNameOrId(member); - DurableCqNamesResult result = new DurableCqNamesResult(memberNameOrId); String durableClientId = (String) context.getArguments(); + context.getResultSender().lastResult(createFunctionResult(memberNameOrId, durableClientId)); + } + + private List createFunctionResult(String memberNameOrId, + String durableClientId) { + List results = new ArrayList<>(); + try { CacheClientNotifier ccn = CacheClientNotifier.getInstance(); - if (ccn != null) { - CacheClientProxy ccp = ccn.getClientProxy(durableClientId); - if (ccp != null) { - CqService cqService = ccp.getCache().getCqService(); - if (cqService != null && cqService.isRunning()) { - List durableCqNames = cqService.getAllDurableClientCqs(ccp.getProxyID()); - if (durableCqNames != null && !durableCqNames.isEmpty()) { - result.setCqNamesList(new ArrayList(durableCqNames)); - } else { - result.setErrorMessage(CliStrings - .format(CliStrings.LIST_DURABLE_CQS__NO__CQS__FOR__CLIENT, durableClientId)); - } - } else { - result.setErrorMessage(CliStrings.LIST_DURABLE_CQS__NO__CQS__REGISTERED); - } - } else { - result.setErrorMessage( - CliStrings.format(CliStrings.NO_CLIENT_FOUND_WITH_CLIENT_ID, durableClientId)); - } - } else { - result.setErrorMessage(CliStrings.NO_CLIENT_FOUND); + if (ccn == null) { + results.add(new CliFunctionResult(memberNameOrId, CliFunctionResult.StatusState.ERROR, + CliStrings.NO_CLIENT_FOUND)); + return results; + } + + CacheClientProxy ccp = ccn.getClientProxy(durableClientId); + if (ccp == null) { + results.add(new CliFunctionResult(memberNameOrId, CliFunctionResult.StatusState.ERROR, + CliStrings.format(CliStrings.NO_CLIENT_FOUND_WITH_CLIENT_ID, durableClientId))); + return results; + } + + CqService cqService = ccp.getCache().getCqService(); + if (cqService == null || !cqService.isRunning()) { + results.add(new CliFunctionResult(memberNameOrId, CliFunctionResult.StatusState.ERROR, + CliStrings.LIST_DURABLE_CQS__NO__CQS__REGISTERED)); + return results; + } + + List durableCqNames = cqService.getAllDurableClientCqs(ccp.getProxyID()); + if (durableCqNames == null || durableCqNames.isEmpty()) { + results.add(new CliFunctionResult(memberNameOrId, CliFunctionResult.StatusState.ERROR, + CliStrings + .format(CliStrings.LIST_DURABLE_CQS__NO__CQS__FOR__CLIENT, durableClientId))); + return results; + } + + for (String cqName : durableCqNames) { + results.add(new CliFunctionResult(memberNameOrId, CliFunctionResult.StatusState.OK, + cqName)); } + return results; } catch (Exception e) { - result.setExceptionMessage(e.getMessage()); - } finally { - context.getResultSender().lastResult(result); + results.add(new CliFunctionResult(memberNameOrId, CliFunctionResult.StatusState.ERROR, + e.getMessage())); + return results; } } } diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/i18n/CliStrings.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/i18n/CliStrings.java index 0ec823027ce5..a7cbd1615509 100644 --- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/i18n/CliStrings.java +++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/i18n/CliStrings.java @@ -2979,7 +2979,7 @@ public class CliStrings { public static final String LIST_DURABLE_CQS__EXCEPTION__OCCURRED__ON = "Members with exceptions while retrieving durable cqs."; public static final String LIST_DURABLE_CQS__NO__CQS__REGISTERED = - "No durable cq's registered on this member."; + "No durable cqs registered on this member."; public static final String LIST_DURABLE_CQS__NAME = "durable-cq-name"; public static final String LIST_DURABLE_CQS__FAILURE__HEADER = "Unable to list durable-cqs for durable-client-id : \"{0}\" due to following reasons."; 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 4cc865de8437..e73b2028e19a 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 @@ -508,21 +508,18 @@ org/apache/geode/management/internal/cli/domain/DiskStoreDetails$CacheServerDeta org/apache/geode/management/internal/cli/domain/DiskStoreDetails$DiskDirDetails,false,absolutePath:java/lang/String,size:int org/apache/geode/management/internal/cli/domain/DiskStoreDetails$GatewayDetails,false,id:java/lang/String,persistent:boolean org/apache/geode/management/internal/cli/domain/DiskStoreDetails$RegionDetails,false,fullPath:java/lang/String,name:java/lang/String,overflowToDisk:boolean,persistent:boolean -org/apache/geode/management/internal/cli/domain/DurableCqNamesResult,true,1,cqNames:java/util/List org/apache/geode/management/internal/cli/domain/EvictionAttributesInfo,true,1,evictionAction:java/lang/String,evictionAlgorithm:java/lang/String,evictionMaxValue:int,nonDefaultAttributes:java/util/Map org/apache/geode/management/internal/cli/domain/FixedPartitionAttributesInfo,true,1,isPrimary:boolean,numBuckets:int,partitionName:java/lang/String org/apache/geode/management/internal/cli/domain/IndexDetails,true,-2198907141534201288,fromClause:java/lang/String,indexName:java/lang/String,indexStatisticsDetails:org/apache/geode/management/internal/cli/domain/IndexDetails$IndexStatisticsDetails,indexType:org/apache/geode/cache/query/IndexType,indexedExpression:java/lang/String,isValid:boolean,memberId:java/lang/String,memberName:java/lang/String,projectionAttributes:java/lang/String,regionName:java/lang/String,regionPath:java/lang/String org/apache/geode/management/internal/cli/domain/IndexDetails$IndexStatisticsDetails,false,numberOfKeys:java/lang/Long,numberOfUpdates:java/lang/Long,numberOfValues:java/lang/Long,totalUpdateTime:java/lang/Long,totalUses:java/lang/Long org/apache/geode/management/internal/cli/domain/MemberConfigurationInfo,false,cacheAttributes:java/util/Map,cacheServerAttributes:java/util/List,gfePropsRuntime:java/util/Map,gfePropsSetFromFile:java/util/Map,gfePropsSetUsingApi:java/util/Map,gfePropsSetWithDefaults:java/util/Map,jvmInputArguments:java/util/List,pdxAttributes:java/util/Map,systemProperties:java/util/Properties org/apache/geode/management/internal/cli/domain/MemberInformation,true,1,cacheServerList:java/util/List,cacheXmlFilePath:java/lang/String,clientCount:int,cpuUsage:double,groups:java/lang/String,heapUsage:java/lang/String,host:java/lang/String,hostedRegions:java/util/Set,id:java/lang/String,initHeapSize:java/lang/String,isServer:boolean,locatorBindAddress:java/lang/String,locatorPort:int,locators:java/lang/String,logFilePath:java/lang/String,maxHeapSize:java/lang/String,name:java/lang/String,offHeapMemorySize:java/lang/String,processId:java/lang/String,serverBindAddress:java/lang/String,statArchiveFilePath:java/lang/String,workingDirPath:java/lang/String -org/apache/geode/management/internal/cli/domain/MemberResult,true,1,errorMessage:java/lang/String,exceptionMessage:java/lang/String,isSuccessful:boolean,memberNameOrId:java/lang/String,opPossible:boolean,successMessage:java/lang/String org/apache/geode/management/internal/cli/domain/PartitionAttributesInfo,true,1,colocatedWith:java/lang/String,fpaInfoList:java/util/List,localMaxMemory:int,nonDefaultAttributes:java/util/Map,partitionResolverName:java/lang/String,recoveryDelay:long,redundantCopies:int,startupRecoveryDelay:long,totalNumBuckets:int org/apache/geode/management/internal/cli/domain/RegionAttributesInfo,true,336184564012988487,asyncEventQueueIDs:java/util/Set,cacheListenerClassNames:java/util/List,cacheLoaderClassName:java/lang/String,cacheWriterClassName:java/lang/String,cloningEnabled:boolean,compressorClassName:java/lang/String,concurrencyChecksEnabled:boolean,concurrencyLevel:int,customExpiryIdleTimeoutClass:java/lang/String,customExpiryTTLClass:java/lang/String,dataPolicy:org/apache/geode/cache/DataPolicy,diskStoreName:java/lang/String,enableAsyncConflation:boolean,enableSubscriptionConflation:boolean,entryIdleTimeout:int,entryIdleTimeoutAction:java/lang/String,entryTimeToLive:int,entryTimeToLiveAction:java/lang/String,evictionAttributesInfo:org/apache/geode/management/internal/cli/domain/EvictionAttributesInfo,gatewaySenderIDs:java/util/Set,ignoreJTA:boolean,indexMaintenanceSynchronous:boolean,initialCapacity:int,isLockGrantor:boolean,loadFactor:float,multicastEnabled:boolean,nonDefaultAttributes:java/util/Map,offHeap:boolean,partitionAttributesInfo:org/apache/geode/management/internal/cli/domain/PartitionAttributesInfo,poolName:java/lang/String,regionIdleTimeout:int,regionIdleTimeoutAction:java/lang/String,regionTimeToLive:int,regionTimeToLiveAction:java/lang/String,scope:org/apache/geode/cache/Scope,statisticsEnabled:boolean org/apache/geode/management/internal/cli/domain/RegionDescription,true,6461449275798378332,cndEvictionAttributes:java/util/Map,cndPartitionAttributes:java/util/Map,cndRegionAttributes:java/util/Map,dataPolicy:org/apache/geode/cache/DataPolicy,isAccessor:boolean,isLocal:boolean,isPartition:boolean,isPersistent:boolean,isReplicate:boolean,name:java/lang/String,regionDescPerMemberMap:java/util/Map,scope:org/apache/geode/cache/Scope org/apache/geode/management/internal/cli/domain/RegionDescriptionPerMember,true,1,hostingMember:java/lang/String,isAccessor:boolean,name:java/lang/String,regionAttributesInfo:org/apache/geode/management/internal/cli/domain/RegionAttributesInfo,size:int org/apache/geode/management/internal/cli/domain/RegionInformation,true,1,dataPolicy:org/apache/geode/cache/DataPolicy,isRoot:boolean,name:java/lang/String,parentRegion:java/lang/String,path:java/lang/String,scope:org/apache/geode/cache/Scope,subRegionInformationSet:java/util/Set org/apache/geode/management/internal/cli/domain/StackTracesPerMember,true,1,memberNameOrId:java/lang/String,stackTraces:byte[] -org/apache/geode/management/internal/cli/domain/SubscriptionQueueSizeResult,true,1,subscriptionQueueSize:long org/apache/geode/management/internal/cli/exceptions/EntityExistsException,false org/apache/geode/management/internal/cli/exceptions/EntityNotFoundException,false,statusOK:boolean org/apache/geode/management/internal/cli/functions/AlterRuntimeConfigFunction,true,1 diff --git a/geode-cq/src/distributedTest/java/org/apache/geode/management/internal/cli/commands/DurableClientCommandsDUnitTest.java b/geode-cq/src/distributedTest/java/org/apache/geode/management/internal/cli/commands/DurableClientCommandsDUnitTest.java index 73664a83b318..a06c97aced66 100644 --- a/geode-cq/src/distributedTest/java/org/apache/geode/management/internal/cli/commands/DurableClientCommandsDUnitTest.java +++ b/geode-cq/src/distributedTest/java/org/apache/geode/management/internal/cli/commands/DurableClientCommandsDUnitTest.java @@ -16,9 +16,9 @@ import static org.apache.geode.distributed.ConfigurationProperties.DURABLE_CLIENT_ID; import static org.apache.geode.distributed.ConfigurationProperties.DURABLE_CLIENT_TIMEOUT; -import static org.apache.geode.distributed.ConfigurationProperties.LOG_LEVEL; import static org.apache.geode.distributed.ConfigurationProperties.MCAST_PORT; import static org.apache.geode.test.awaitility.GeodeAwaitility.await; +import static org.assertj.core.api.Assertions.assertThat; import java.util.Properties; @@ -30,17 +30,20 @@ import org.apache.geode.cache.Region; import org.apache.geode.cache.RegionShortcut; import org.apache.geode.cache.client.ClientCacheFactory; +import org.apache.geode.cache.client.Pool; +import org.apache.geode.cache.client.PoolFactory; +import org.apache.geode.cache.client.PoolManager; import org.apache.geode.cache.query.CqAttributesFactory; import org.apache.geode.cache.query.CqException; import org.apache.geode.cache.query.CqExistsException; import org.apache.geode.cache.query.QueryService; import org.apache.geode.cache.query.RegionNotFoundException; import org.apache.geode.cache.query.data.Portfolio; -import org.apache.geode.distributed.ConfigurationProperties; import org.apache.geode.distributed.internal.InternalDistributedSystem; -import org.apache.geode.internal.AvailablePortHelper; import org.apache.geode.internal.cache.InternalCache; +import org.apache.geode.management.cli.Result; import org.apache.geode.management.internal.cli.i18n.CliStrings; +import org.apache.geode.management.internal.cli.result.CommandResult; import org.apache.geode.management.internal.cli.util.CommandStringBuilder; import org.apache.geode.test.dunit.Host; import org.apache.geode.test.dunit.VM; @@ -55,13 +58,15 @@ @SuppressWarnings("serial") public class DurableClientCommandsDUnitTest { - private static final String REGION_NAME = "stocks"; + private static final String STOCKS_REGION = "stocks"; + private static final String BONDS_REGION = "bonds"; private static final String CQ1 = "cq1"; private static final String CQ2 = "cq2"; private static final String CQ3 = "cq3"; private static final String CLIENT_NAME = "dc1"; + private static final String CQ_GROUP = "cq-group"; - private MemberVM locator, server; + private MemberVM locator; private ClientVM client; @@ -73,19 +78,19 @@ public class DurableClientCommandsDUnitTest { @Before public void setup() throws Exception { - int jmxPort = AvailablePortHelper.getRandomAvailableTCPPort(); - Properties props = new Properties(); - props.setProperty(LOG_LEVEL, "fine"); - props.setProperty(ConfigurationProperties.JMX_MANAGER_HOSTNAME_FOR_CLIENTS, "localhost"); - props.setProperty(ConfigurationProperties.JMX_MANAGER_PORT, "" + jmxPort); - locator = lsRule.startLocatorVM(0, props); + locator = lsRule.startLocatorVM(0); int locatorPort = locator.getPort(); - server = lsRule.startServerVM(1, - thisServer -> thisServer.withRegion(RegionShortcut.REPLICATE, REGION_NAME) + lsRule.startServerVM(1, + thisServer -> thisServer.withRegion(RegionShortcut.REPLICATE, STOCKS_REGION) + .withProperty("groups", CQ_GROUP) .withConnectionToLocator(locatorPort)); - client = lsRule.startClientVM(2, getClientProps(CLIENT_NAME, "300"), (ccf) -> { + lsRule.startServerVM(2, + thisServer -> thisServer.withRegion(RegionShortcut.REPLICATE, BONDS_REGION) + .withConnectionToLocator(locatorPort)); + + client = lsRule.startClientVM(3, getClientProps(CLIENT_NAME, "300"), (ccf) -> { ccf.setPoolSubscriptionEnabled(true); ccf.addPoolLocator("localhost", locatorPort); }); @@ -95,15 +100,18 @@ public void setup() throws Exception { @Test - public void testListDurableClientCqs() { + public void testListDurableClientCqsForOneGroup() { setupCqs(); CommandStringBuilder csb = new CommandStringBuilder(CliStrings.LIST_DURABLE_CQS); csb.addOption(CliStrings.LIST_DURABLE_CQS__DURABLECLIENTID, CLIENT_NAME); + csb.addOption(CliStrings.GROUP, CQ_GROUP); String commandString = csb.toString(); - gfsh.executeAndAssertThat(commandString).statusIsSuccess().containsOutput(CQ1) - .containsOutput(CQ2).containsOutput(CQ3); + gfsh.executeAndAssertThat(commandString).statusIsSuccess() + .hasTableSection() + .hasColumn("CQ Name") + .containsExactlyInAnyOrder("cq1", "cq2", "cq3"); closeCq(CQ1); closeCq(CQ2); @@ -112,9 +120,45 @@ public void testListDurableClientCqs() { csb = new CommandStringBuilder(CliStrings.LIST_DURABLE_CQS); csb.addOption(CliStrings.LIST_DURABLE_CQS__DURABLECLIENTID, CLIENT_NAME); commandString = csb.toString(); - String errorMessage = - CliStrings.format(CliStrings.LIST_DURABLE_CQS__NO__CQS__FOR__CLIENT, CLIENT_NAME); - gfsh.executeAndAssertThat(commandString).statusIsError().containsOutput(errorMessage); + + gfsh.executeAndAssertThat(commandString).statusIsError() + .hasTableSection() + .hasColumn("CQ Name") + .containsExactlyInAnyOrder( + CliStrings.format(CliStrings.LIST_DURABLE_CQS__NO__CQS__FOR__CLIENT, CLIENT_NAME), + CliStrings.format(CliStrings.LIST_DURABLE_CQS__NO__CQS__REGISTERED)); + } + + @Test + public void testListDurableClientCqsWhenNoneExist() { + CommandStringBuilder csb = new CommandStringBuilder(CliStrings.LIST_DURABLE_CQS); + csb.addOption(CliStrings.LIST_DURABLE_CQS__DURABLECLIENTID, CLIENT_NAME); + String commandString = csb.toString(); + + gfsh.executeAndAssertThat(commandString).statusIsError() + .hasTableSection() + .hasColumn("CQ Name") + .containsExactlyInAnyOrder( + CliStrings.format(CliStrings.NO_CLIENT_FOUND_WITH_CLIENT_ID, CLIENT_NAME), + CliStrings.format(CliStrings.NO_CLIENT_FOUND_WITH_CLIENT_ID, CLIENT_NAME)); + } + + @Test + public void testListDurableClientCqsWithMixedResults() { + setupCqs(); + + CommandStringBuilder csb = new CommandStringBuilder(CliStrings.LIST_DURABLE_CQS); + csb.addOption(CliStrings.LIST_DURABLE_CQS__DURABLECLIENTID, CLIENT_NAME); + String commandString = csb.toString(); + + gfsh.executeAndAssertThat(commandString).statusIsError() + .hasTableSection() + .hasColumn("CQ Name") + .containsExactlyInAnyOrder("cq1", "cq2", "cq3", "No client found with client-id : dc1"); + + closeCq(CQ1); + closeCq(CQ2); + closeCq(CQ3); } @Test @@ -124,10 +168,14 @@ public void testCloseDurableClients() { CommandStringBuilder csb = new CommandStringBuilder(CliStrings.CLOSE_DURABLE_CLIENTS); csb.addOption(CliStrings.CLOSE_DURABLE_CLIENTS__CLIENT__ID, CLIENT_NAME); + csb.addOption(CliStrings.GROUP, CQ_GROUP); String commandString = csb.toString(); await().untilAsserted(() -> { - gfsh.executeAndAssertThat(commandString).statusIsSuccess(); + gfsh.executeAndAssertThat(commandString).statusIsSuccess() + .hasTableSection() + .hasColumn("Message") + .containsExactlyInAnyOrder("Closed the durable client : \"dc1\"."); }); String errorMessage = CliStrings.format(CliStrings.NO_CLIENT_FOUND_WITH_CLIENT_ID, CLIENT_NAME); @@ -144,35 +192,42 @@ public void testCloseDurableCQ() { csb.addOption(CliStrings.CLOSE_DURABLE_CQS__NAME, CQ1); String commandString = csb.toString(); - gfsh.executeAndAssertThat(commandString).statusIsSuccess(); - - csb = new CommandStringBuilder(CliStrings.CLOSE_DURABLE_CQS); - csb.addOption(CliStrings.CLOSE_DURABLE_CQS__DURABLE__CLIENT__ID, CLIENT_NAME); - csb.addOption(CliStrings.CLOSE_DURABLE_CQS__NAME, CQ1); - commandString = csb.toString(); + CommandResult result = gfsh.executeCommand(commandString); + assertThat(result.getStatus()).isEqualTo(Result.Status.OK); + assertThat(result.getTableColumnValues("Message")).containsExactlyInAnyOrder( + "Closed the durable cq : \"cq1\" for the durable client : \"dc1\".", + "No client found with client-id : dc1"); - gfsh.executeAndAssertThat(commandString).statusIsError(); + result = gfsh.executeCommand(commandString); + assertThat(result.getStatus()).isEqualTo(Result.Status.ERROR); } @Test public void testCountSubscriptionQueueSize() { setupCqs(); - doPuts(REGION_NAME, Host.getHost(0).getVM(1)); + doPuts(STOCKS_REGION, Host.getHost(0).getVM(1)); CommandStringBuilder csb = new CommandStringBuilder(CliStrings.COUNT_DURABLE_CQ_EVENTS); csb.addOption(CliStrings.COUNT_DURABLE_CQ_EVENTS__DURABLE__CLIENT__ID, CLIENT_NAME); + csb.addOption(CliStrings.GROUP, CQ_GROUP); String commandString = csb.toString(); - gfsh.executeAndAssertThat(commandString).statusIsSuccess().containsOutput("4"); - + gfsh.executeAndAssertThat(commandString).statusIsSuccess() + .hasTableSection() + .hasColumn("Queue Size") + .containsExactlyInAnyOrder("4"); csb = new CommandStringBuilder(CliStrings.COUNT_DURABLE_CQ_EVENTS); csb.addOption(CliStrings.COUNT_DURABLE_CQ_EVENTS__DURABLE__CLIENT__ID, CLIENT_NAME); csb.addOption(CliStrings.COUNT_DURABLE_CQ_EVENTS__DURABLE__CQ__NAME, CQ3); + csb.addOption(CliStrings.GROUP, CQ_GROUP); commandString = csb.toString(); - gfsh.executeAndAssertThat(commandString).statusIsSuccess(); + gfsh.executeAndAssertThat(commandString).statusIsSuccess() + .hasTableSection() + .hasColumn("Queue Size") + .containsExactlyInAnyOrder("0"); // CLOSE all the cqs closeCq(CQ1); @@ -235,15 +290,21 @@ private void closeCq(final String cqName) { } private void setupCqs() { + int locatorPort = locator.getPort(); client.invoke(() -> { - QueryService qs = ClusterStartupRule.getClientCache().getQueryService(); + PoolFactory poolFactory = PoolManager.createFactory().setServerGroup(CQ_GROUP); + poolFactory.addLocator("localhost", locatorPort); + poolFactory.setSubscriptionEnabled(true); + Pool pool = poolFactory.create("DEFAULT"); + + QueryService qs = pool.getQueryService(); CqAttributesFactory cqAf = new CqAttributesFactory(); try { - qs.newCq(CQ1, "select * from /" + REGION_NAME, cqAf.create(), true).execute(); - qs.newCq(CQ2, "select * from /" + REGION_NAME + " where id = 1", cqAf.create(), true) + qs.newCq(CQ1, "select * from /" + STOCKS_REGION, cqAf.create(), true).execute(); + qs.newCq(CQ2, "select * from /" + STOCKS_REGION + " where id = 1", cqAf.create(), true) .execute(); - qs.newCq(CQ3, "select * from /" + REGION_NAME + " where id > 2", cqAf.create(), true) + qs.newCq(CQ3, "select * from /" + STOCKS_REGION + " where id > 2", cqAf.create(), true) .execute(); } catch (CqException | CqExistsException | RegionNotFoundException e) { throw new RuntimeException(e);