http://git-wip-us.apache.org/repos/asf/geode/blob/451d12e8/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/FunctionCommands.java ---------------------------------------------------------------------- diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/FunctionCommands.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/FunctionCommands.java index c04820e..21d89c1 100644 --- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/FunctionCommands.java +++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/FunctionCommands.java @@ -14,6 +14,20 @@ */ package org.apache.geode.management.internal.cli.commands; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; +import java.util.stream.Stream; + +import org.apache.commons.lang.BooleanUtils; +import org.springframework.shell.core.annotation.CliCommand; +import org.springframework.shell.core.annotation.CliOption; + import org.apache.geode.SystemFailure; import org.apache.geode.cache.Region; import org.apache.geode.cache.execute.Execution; @@ -40,7 +54,6 @@ import org.apache.geode.management.internal.cli.functions.ListFunctionFunction; import org.apache.geode.management.internal.cli.functions.UnregisterFunction; import org.apache.geode.management.internal.cli.functions.UserFunctionExecution; import org.apache.geode.management.internal.cli.i18n.CliStrings; -import org.apache.geode.management.internal.cli.result.CommandResultException; import org.apache.geode.management.internal.cli.result.CompositeResultData; import org.apache.geode.management.internal.cli.result.ErrorResultData; import org.apache.geode.management.internal.cli.result.ResultBuilder; @@ -48,18 +61,7 @@ import org.apache.geode.management.internal.cli.result.TabularResultData; import org.apache.geode.management.internal.security.ResourceOperation; import org.apache.geode.security.ResourcePermission.Operation; import org.apache.geode.security.ResourcePermission.Resource; -import org.springframework.shell.core.annotation.CliAvailabilityIndicator; -import org.springframework.shell.core.annotation.CliCommand; -import org.springframework.shell.core.annotation.CliOption; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Set; +import org.apache.geode.security.ResourcePermission.Target; /** * @since GemFire 7.0 @@ -77,25 +79,18 @@ public class FunctionCommands implements GfshCommand { @CliOption(key = CliStrings.EXECUTE_FUNCTION__ID, mandatory = true, help = CliStrings.EXECUTE_FUNCTION__ID__HELP) String functionId, @CliOption(key = {CliStrings.GROUP, CliStrings.GROUPS}, - unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, optionContext = ConverterHint.MEMBERGROUP, help = CliStrings.EXECUTE_FUNCTION__ONGROUPS__HELP) String[] onGroups, - @CliOption(key = CliStrings.MEMBER, - unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, - optionContext = ConverterHint.MEMBERIDNAME, + @CliOption(key = CliStrings.MEMBER, optionContext = ConverterHint.MEMBERIDNAME, help = CliStrings.EXECUTE_FUNCTION__ONMEMBER__HELP) String onMember, @CliOption(key = CliStrings.EXECUTE_FUNCTION__ONREGION, - unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, optionContext = ConverterHint.REGION_PATH, help = CliStrings.EXECUTE_FUNCTION__ONREGION__HELP) String onRegion, @CliOption(key = CliStrings.EXECUTE_FUNCTION__ARGUMENTS, - unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, help = CliStrings.EXECUTE_FUNCTION__ARGUMENTS__HELP) String[] arguments, @CliOption(key = CliStrings.EXECUTE_FUNCTION__RESULTCOLLECTOR, - unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, help = CliStrings.EXECUTE_FUNCTION__RESULTCOLLECTOR__HELP) String resultCollector, @CliOption(key = CliStrings.EXECUTE_FUNCTION__FILTER, - unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, help = CliStrings.EXECUTE_FUNCTION__FILTER__HELP) String filterString) { Result result = null; @@ -105,8 +100,8 @@ public class FunctionCommands implements GfshCommand { resultTable.setHeader(headerText); ResultCollector resultCollectorInstance = null; Function function; - Set<String> filters = new HashSet<String>(); - Execution execution = null; + Set<String> filters = new HashSet<>(); + Execution execution; if (functionId != null) { functionId = functionId.trim(); } @@ -130,31 +125,8 @@ public class FunctionCommands implements GfshCommand { return result; } - if (onRegion != null && onMember != null && onGroups != null) { - ErrorResultData errorResultData = - ResultBuilder.createErrorResultData().setErrorCode(ResultBuilder.ERRORCODE_DEFAULT) - .addLine(CliStrings.EXECUTE_FUNCTION__MSG__OPTIONS); - result = ResultBuilder.buildResult(errorResultData); - return result; - } else if (onRegion != null && onMember != null) { - ErrorResultData errorResultData = - ResultBuilder.createErrorResultData().setErrorCode(ResultBuilder.ERRORCODE_DEFAULT) - .addLine(CliStrings.EXECUTE_FUNCTION__MSG__OPTIONS); - result = ResultBuilder.buildResult(errorResultData); - return result; - } else if (onMember != null && onGroups != null) { - ErrorResultData errorResultData = - ResultBuilder.createErrorResultData().setErrorCode(ResultBuilder.ERRORCODE_DEFAULT) - .addLine(CliStrings.EXECUTE_FUNCTION__MSG__OPTIONS); - result = ResultBuilder.buildResult(errorResultData); - return result; - } else if (onRegion != null && onGroups != null) { - ErrorResultData errorResultData = - ResultBuilder.createErrorResultData().setErrorCode(ResultBuilder.ERRORCODE_DEFAULT) - .addLine(CliStrings.EXECUTE_FUNCTION__MSG__OPTIONS); - result = ResultBuilder.buildResult(errorResultData); - return result; - } else if (onRegion != null && onMember != null && onGroups != null) { + if (isMoreThanOneIsTrue(onRegion != null, onMember != null, onGroups != null)) { + // Provide Only one of region/member/groups ErrorResultData errorResultData = ResultBuilder.createErrorResultData().setErrorCode(ResultBuilder.ERRORCODE_DEFAULT) .addLine(CliStrings.EXECUTE_FUNCTION__MSG__OPTIONS); @@ -218,7 +190,7 @@ public class FunctionCommands implements GfshCommand { boolean matchFound = false; if (membersName.length > 0) { - while (it.hasNext() && matchFound == false) { + while (it.hasNext() && !matchFound) { DistributedMember dsmember = (DistributedMember) it.next(); for (String memberName : membersName) { if (MBeanJMXAdapter.getMemberNameOrId(dsmember).equals(memberName)) { @@ -229,7 +201,7 @@ public class FunctionCommands implements GfshCommand { } } } - if (matchFound == true) { + if (matchFound) { executeAndGetResults(functionId, filterString, resultCollector, arguments, cache, member, resultTable, onRegion); return ResultBuilder.buildResult(resultTable); @@ -276,7 +248,7 @@ public class FunctionCommands implements GfshCommand { } } else if (onGroups != null) { // execute on group members - Set<DistributedMember> dsMembers = new HashSet<DistributedMember>(); + Set<DistributedMember> dsMembers = new HashSet<>(); for (String grp : onGroups) { dsMembers.addAll(cache.getDistributedSystem().getGroupMembers(grp)); } @@ -310,26 +282,6 @@ public class FunctionCommands implements GfshCommand { } return ResultBuilder.buildResult(resultTable); } - } catch (InstantiationException e) { - ErrorResultData errorResultData = ResultBuilder.createErrorResultData() - .setErrorCode(ResultBuilder.ERRORCODE_DEFAULT).addLine(e.getMessage()); - result = ResultBuilder.buildResult(errorResultData); - return result; - } catch (IllegalAccessException e) { - ErrorResultData errorResultData = ResultBuilder.createErrorResultData() - .setErrorCode(ResultBuilder.ERRORCODE_DEFAULT).addLine(e.getMessage()); - result = ResultBuilder.buildResult(errorResultData); - return result; - } catch (IllegalArgumentException e) { - ErrorResultData errorResultData = ResultBuilder.createErrorResultData() - .setErrorCode(ResultBuilder.ERRORCODE_DEFAULT).addLine(e.getMessage()); - result = ResultBuilder.buildResult(errorResultData); - return result; - } catch (SecurityException e) { - ErrorResultData errorResultData = ResultBuilder.createErrorResultData() - .setErrorCode(ResultBuilder.ERRORCODE_DEFAULT).addLine(e.getMessage()); - result = ResultBuilder.buildResult(errorResultData); - return result; } catch (Exception e) { ErrorResultData errorResultData = ResultBuilder.createErrorResultData() .setErrorCode(ResultBuilder.ERRORCODE_DEFAULT).addLine(e.getMessage()); @@ -340,10 +292,14 @@ public class FunctionCommands implements GfshCommand { return result; } + private boolean isMoreThanOneIsTrue(Boolean... values) { + return Stream.of(values).mapToInt(BooleanUtils::toInteger).sum() > 1; + } + void executeAndGetResults(String functionId, String filterString, String resultCollector, String[] arguments, InternalCache cache, DistributedMember member, TabularResultData resultTable, String onRegion) { - StringBuilder resultMessege = new StringBuilder(); + StringBuilder resultMessage = new StringBuilder(); try { Function function = new UserFunctionExecution(); Object[] args = new Object[5]; @@ -355,7 +311,7 @@ public class FunctionCommands implements GfshCommand { args[2] = resultCollector; } if (arguments != null && arguments.length > 0) { - args[3] = new String(); + args[3] = ""; for (String str : arguments) { // send via CSV separated value format if (str != null) { @@ -372,30 +328,25 @@ public class FunctionCommands implements GfshCommand { for (Object resultObj : results) { if (resultObj != null) { if (resultObj instanceof String) { - resultMessege.append(((String) resultObj)); + resultMessage.append(((String) resultObj)); } else if (resultObj instanceof Exception) { - resultMessege.append(((Exception) resultObj).getMessage()); + resultMessage.append(((Exception) resultObj).getMessage()); } else { - resultMessege.append(resultObj); + resultMessage.append(resultObj); } } } } - toTabularResultData(resultTable, member.getId(), resultMessege.toString()); + toTabularResultData(resultTable, member.getId(), resultMessage.toString()); } else { toTabularResultData(resultTable, member.getId(), CliStrings.EXECUTE_FUNCTION__MSG__ERROR_IN_RETRIEVING_EXECUTOR); } - } catch (FunctionException e) { - resultMessege.append(CliStrings.format( - CliStrings.EXECUTE_FUNCTION__MSG__COULD_NOT_EXECUTE_FUNCTION_0_ON_MEMBER_1_ERROR_2, - functionId, member.getId(), e.getMessage())); - toTabularResultData(resultTable, member.getId(), resultMessege.toString()); } catch (Exception e) { - resultMessege.append(CliStrings.format( + resultMessage.append(CliStrings.format( CliStrings.EXECUTE_FUNCTION__MSG__COULD_NOT_EXECUTE_FUNCTION_0_ON_MEMBER_1_ERROR_2, functionId, member.getId(), e.getMessage())); - toTabularResultData(resultTable, member.getId(), resultMessege.toString()); + toTabularResultData(resultTable, member.getId(), resultMessage.toString()); } } @@ -409,23 +360,20 @@ public class FunctionCommands implements GfshCommand { @CliCommand(value = CliStrings.DESTROY_FUNCTION, help = CliStrings.DESTROY_FUNCTION__HELP) @CliMetaData(relatedTopic = {CliStrings.TOPIC_GEODE_FUNCTION}, interceptor = "org.apache.geode.management.internal.cli.commands.FunctionCommands$Interceptor") - @ResourceOperation(resource = Resource.DATA, operation = Operation.MANAGE) + @ResourceOperation(resource = Resource.CLUSTER, operation = Operation.MANAGE, target = Target.JAR) // TODO: Add optioncontext for functionId public Result destroyFunction( @CliOption(key = CliStrings.DESTROY_FUNCTION__ID, mandatory = true, help = CliStrings.DESTROY_FUNCTION__HELP) String functionId, @CliOption(key = {CliStrings.GROUP, CliStrings.GROUPS}, - unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, optionContext = ConverterHint.MEMBERGROUP, help = CliStrings.DESTROY_FUNCTION__ONGROUPS__HELP) String[] groups, - @CliOption(key = CliStrings.MEMBER, - unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, - optionContext = ConverterHint.MEMBERIDNAME, + @CliOption(key = CliStrings.MEMBER, optionContext = ConverterHint.MEMBERIDNAME, help = CliStrings.DESTROY_FUNCTION__ONMEMBER__HELP) String memberId) { - Result result = null; + Result result; try { InternalCache cache = getCache(); - Set<DistributedMember> dsMembers = new HashSet<DistributedMember>(); + Set<DistributedMember> dsMembers = new HashSet<>(); if (groups != null && memberId != null) { return ResultBuilder .createUserErrorResult(CliStrings.DESTROY_FUNCTION__MSG__PROVIDE_OPTION); @@ -489,7 +437,7 @@ public class FunctionCommands implements GfshCommand { // unregister on a set of of members Function unregisterFunction = new UnregisterFunction(); FunctionService.registerFunction(unregisterFunction); - List resultList = null; + List resultList; if (DsMembers.isEmpty()) { return ResultBuilder.createInfoResult("No members for execution"); @@ -564,9 +512,9 @@ public class FunctionCommands implements GfshCommand { } else if (result.isSuccessful()) { String[] strings = (String[]) result.getSerializables(); Arrays.sort(strings); - for (int i = 0; i < strings.length; i++) { + for (String string : strings) { tabularData.accumulate("Member", result.getMemberIdOrName()); - tabularData.accumulate("Function", strings[i]); + tabularData.accumulate("Function", string); accumulatedData = true; } }
http://git-wip-us.apache.org/repos/asf/geode/blob/451d12e8/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/GfshCommand.java ---------------------------------------------------------------------- diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/GfshCommand.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/GfshCommand.java index 86296b4..88f730e 100644 --- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/GfshCommand.java +++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/GfshCommand.java @@ -14,7 +14,14 @@ */ package org.apache.geode.management.internal.cli.commands; +import java.io.PrintWriter; +import java.io.StringWriter; +import java.util.HashSet; +import java.util.Set; + import org.apache.commons.lang.StringUtils; +import org.springframework.shell.core.CommandMarker; + import org.apache.geode.cache.CacheFactory; import org.apache.geode.cache.execute.Execution; import org.apache.geode.cache.execute.Function; @@ -23,17 +30,12 @@ import org.apache.geode.distributed.DistributedMember; import org.apache.geode.distributed.internal.ClusterConfigurationService; import org.apache.geode.distributed.internal.InternalLocator; import org.apache.geode.internal.cache.InternalCache; +import org.apache.geode.internal.security.SecurityService; import org.apache.geode.management.cli.CliMetaData; import org.apache.geode.management.cli.Result; import org.apache.geode.management.internal.cli.i18n.CliStrings; import org.apache.geode.management.internal.cli.shell.Gfsh; import org.apache.geode.management.internal.cli.util.MemberNotFoundException; -import org.springframework.shell.core.CommandMarker; - -import java.io.PrintWriter; -import java.io.StringWriter; -import java.util.HashSet; -import java.util.Set; /** * Encapsulates common functionality for implementing command classes for the Geode shell (gfsh). @@ -102,6 +104,10 @@ public interface GfshCommand extends CommandMarker { return (InternalCache) CacheFactory.getAnyInstance(); } + default SecurityService getSecurityService() { + return getCache().getSecurityService(); + } + default Gfsh getGfsh() { return Gfsh.getCurrentInstance(); } @@ -129,7 +135,7 @@ public interface GfshCommand extends CommandMarker { */ @Deprecated default Set<DistributedMember> getMembers(final InternalCache cache) { - Set<DistributedMember> members = new HashSet<DistributedMember>(cache.getMembers()); + Set<DistributedMember> members = new HashSet<>(cache.getMembers()); members.add(cache.getDistributedSystem().getDistributedMember()); return members; } http://git-wip-us.apache.org/repos/asf/geode/blob/451d12e8/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/IndexCommands.java ---------------------------------------------------------------------- diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/IndexCommands.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/IndexCommands.java index 4d8d5fe..4734b4c 100644 --- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/IndexCommands.java +++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/IndexCommands.java @@ -14,7 +14,20 @@ */ package org.apache.geode.management.internal.cli.commands; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.TreeSet; +import java.util.concurrent.atomic.AtomicReference; + import org.apache.commons.lang.ArrayUtils; +import org.springframework.shell.core.annotation.CliCommand; +import org.springframework.shell.core.annotation.CliOption; + import org.apache.geode.SystemFailure; import org.apache.geode.cache.Cache; import org.apache.geode.cache.CacheFactory; @@ -23,7 +36,6 @@ import org.apache.geode.cache.execute.Execution; import org.apache.geode.cache.execute.FunctionInvocationTargetException; import org.apache.geode.cache.execute.ResultCollector; import org.apache.geode.distributed.DistributedMember; -import org.apache.geode.internal.cache.InternalCache; import org.apache.geode.internal.cache.execute.AbstractExecution; import org.apache.geode.internal.lang.StringUtils; import org.apache.geode.management.cli.CliMetaData; @@ -47,18 +59,7 @@ import org.apache.geode.management.internal.configuration.domain.XmlEntity; import org.apache.geode.management.internal.security.ResourceOperation; import org.apache.geode.security.ResourcePermission.Operation; import org.apache.geode.security.ResourcePermission.Resource; -import org.springframework.shell.core.annotation.CliCommand; -import org.springframework.shell.core.annotation.CliOption; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.TreeSet; -import java.util.concurrent.atomic.AtomicReference; +import org.apache.geode.security.ResourcePermission.Target; /** * The IndexCommands class encapsulates all GemFire shell (Gfsh) commands related to indexes defined @@ -80,10 +81,9 @@ public class IndexCommands implements GfshCommand { Collections.synchronizedSet(new HashSet<IndexInfo>()); @CliCommand(value = CliStrings.LIST_INDEX, help = CliStrings.LIST_INDEX__HELP) - @CliMetaData(shellOnly = false, - relatedTopic = {CliStrings.TOPIC_GEODE_REGION, CliStrings.TOPIC_GEODE_DATA}) - @ResourceOperation(resource = Resource.CLUSTER, operation = Operation.READ) - public Result listIndex(@CliOption(key = CliStrings.LIST_INDEX__STATS, mandatory = false, + @CliMetaData(relatedTopic = {CliStrings.TOPIC_GEODE_REGION, CliStrings.TOPIC_GEODE_DATA}) + @ResourceOperation(resource = Resource.CLUSTER, operation = Operation.READ, target = Target.QUERY) + public Result listIndex(@CliOption(key = CliStrings.LIST_INDEX__STATS, specifiedDefaultValue = "true", unspecifiedDefaultValue = "false", help = CliStrings.LIST_INDEX__STATS__HELP) final boolean showStats) { try { @@ -114,7 +114,7 @@ public class IndexCommands implements GfshCommand { functionExecutor.execute(new ListIndexFunction()); final List<?> results = (List<?>) resultsCollector.getResult(); - final List<IndexDetails> indexDetailsList = new ArrayList<IndexDetails>(results.size()); + final List<IndexDetails> indexDetailsList = new ArrayList<>(results.size()); for (Object result : results) { if (result instanceof Set) { // ignore FunctionInvocationTargetExceptions and other Exceptions @@ -161,9 +161,10 @@ public class IndexCommands implements GfshCommand { } @CliCommand(value = CliStrings.CREATE_INDEX, help = CliStrings.CREATE_INDEX__HELP) - @CliMetaData(shellOnly = false, - relatedTopic = {CliStrings.TOPIC_GEODE_REGION, CliStrings.TOPIC_GEODE_DATA}) + @CliMetaData(relatedTopic = {CliStrings.TOPIC_GEODE_REGION, CliStrings.TOPIC_GEODE_DATA}) // TODO : Add optionContext for indexName + @ResourceOperation(resource = Resource.CLUSTER, operation = Operation.MANAGE, + target = Target.QUERY) public Result createIndex(@CliOption(key = CliStrings.CREATE_INDEX__NAME, mandatory = true, help = CliStrings.CREATE_INDEX__NAME__HELP) final String indexName, @@ -174,26 +175,25 @@ public class IndexCommands implements GfshCommand { optionContext = ConverterHint.REGION_PATH, help = CliStrings.CREATE_INDEX__REGION__HELP) String regionPath, - @CliOption(key = {CliStrings.MEMBER, CliStrings.MEMBERS}, mandatory = false, + @CliOption(key = {CliStrings.MEMBER, CliStrings.MEMBERS}, optionContext = ConverterHint.MEMBERIDNAME, help = CliStrings.CREATE_INDEX__MEMBER__HELP) final String[] memberNameOrID, - @CliOption(key = CliStrings.CREATE_INDEX__TYPE, mandatory = false, - unspecifiedDefaultValue = "range", optionContext = ConverterHint.INDEX_TYPE, + @CliOption(key = CliStrings.CREATE_INDEX__TYPE, unspecifiedDefaultValue = "range", + optionContext = ConverterHint.INDEX_TYPE, help = CliStrings.CREATE_INDEX__TYPE__HELP) final String indexType, - @CliOption(key = {CliStrings.GROUP, CliStrings.GROUPS}, mandatory = false, + @CliOption(key = {CliStrings.GROUP, CliStrings.GROUPS}, optionContext = ConverterHint.MEMBERGROUP, help = CliStrings.CREATE_INDEX__GROUP__HELP) final String[] group) { - Result result = null; + Result result; AtomicReference<XmlEntity> xmlEntity = new AtomicReference<>(); - getCache().getSecurityService().authorizeRegionManage(regionPath); try { final Cache cache = CacheFactory.getAnyInstance(); - int idxType = IndexInfo.RANGE_INDEX; + int idxType; // Index type check if ("range".equalsIgnoreCase(indexType)) { @@ -235,8 +235,8 @@ public class IndexCommands implements GfshCommand { CliUtil.executeFunction(createIndexFunction, indexInfo, targetMembers); final List<Object> funcResults = (List<Object>) rc.getResult(); - final Set<String> successfulMembers = new TreeSet<String>(); - final Map<String, Set<String>> indexOpFailMap = new HashMap<String, Set<String>>(); + final Set<String> successfulMembers = new TreeSet<>(); + final Map<String, Set<String>> indexOpFailMap = new HashMap<>(); for (final Object funcResult : funcResults) { if (funcResult instanceof CliFunctionResult) { @@ -253,7 +253,7 @@ public class IndexCommands implements GfshCommand { Set<String> failedMembers = indexOpFailMap.get(exceptionMessage); if (failedMembers == null) { - failedMembers = new TreeSet<String>(); + failedMembers = new TreeSet<>(); } failedMembers.add(cliFunctionResult.getMemberIdOrName()); indexOpFailMap.put(exceptionMessage, failedMembers); @@ -314,25 +314,25 @@ public class IndexCommands implements GfshCommand { } @CliCommand(value = CliStrings.DESTROY_INDEX, help = CliStrings.DESTROY_INDEX__HELP) - @CliMetaData(shellOnly = false, - relatedTopic = {CliStrings.TOPIC_GEODE_REGION, CliStrings.TOPIC_GEODE_DATA}) - public Result destroyIndex(@CliOption(key = CliStrings.DESTROY_INDEX__NAME, mandatory = false, - unspecifiedDefaultValue = "", - help = CliStrings.DESTROY_INDEX__NAME__HELP) final String indexName, - - @CliOption(key = CliStrings.DESTROY_INDEX__REGION, mandatory = false, - optionContext = ConverterHint.REGION_PATH, + @CliMetaData(relatedTopic = {CliStrings.TOPIC_GEODE_REGION, CliStrings.TOPIC_GEODE_DATA}) + @ResourceOperation(resource = Resource.CLUSTER, operation = Operation.MANAGE, + target = Target.QUERY) + public Result destroyIndex( + @CliOption(key = CliStrings.DESTROY_INDEX__NAME, unspecifiedDefaultValue = "", + help = CliStrings.DESTROY_INDEX__NAME__HELP) final String indexName, + + @CliOption(key = CliStrings.DESTROY_INDEX__REGION, optionContext = ConverterHint.REGION_PATH, help = CliStrings.DESTROY_INDEX__REGION__HELP) final String regionPath, - @CliOption(key = {CliStrings.MEMBER, CliStrings.MEMBERS}, mandatory = false, + @CliOption(key = {CliStrings.MEMBER, CliStrings.MEMBERS}, optionContext = ConverterHint.MEMBERIDNAME, help = CliStrings.DESTROY_INDEX__MEMBER__HELP) final String[] memberNameOrID, - @CliOption(key = {CliStrings.GROUP, CliStrings.GROUPS}, mandatory = false, + @CliOption(key = {CliStrings.GROUP, CliStrings.GROUPS}, optionContext = ConverterHint.MEMBERGROUP, help = CliStrings.DESTROY_INDEX__GROUP__HELP) final String[] group) { - Result result = null; + Result result; if (StringUtils.isBlank(indexName) && StringUtils.isBlank(regionPath) && ArrayUtils.isEmpty(group) && ArrayUtils.isEmpty(memberNameOrID)) { @@ -340,18 +340,11 @@ public class IndexCommands implements GfshCommand { CliStrings.format(CliStrings.PROVIDE_ATLEAST_ONE_OPTION, CliStrings.DESTROY_INDEX)); } - String regionName = null; final Cache cache = CacheFactory.getAnyInstance(); - - // If a regionName is specified, then authorize data manage on the regionName, otherwise, it - // requires data manage permission on all regions - if (StringUtils.isNotBlank(regionPath)) { + String regionName = null; + if (regionPath != null) { regionName = regionPath.startsWith("/") ? regionPath.substring(1) : regionPath; - getCache().getSecurityService().authorizeRegionManage(regionName); - } else { - getCache().getSecurityService().authorizeDataManage(); } - IndexInfo indexInfo = new IndexInfo(indexName, regionName); Set<DistributedMember> targetMembers = CliUtil.findMembers(group, memberNameOrID); @@ -362,8 +355,8 @@ public class IndexCommands implements GfshCommand { ResultCollector rc = CliUtil.executeFunction(destroyIndexFunction, indexInfo, targetMembers); List<Object> funcResults = (List<Object>) rc.getResult(); - Set<String> successfulMembers = new TreeSet<String>(); - Map<String, Set<String>> indexOpFailMap = new HashMap<String, Set<String>>(); + Set<String> successfulMembers = new TreeSet<>(); + Map<String, Set<String>> indexOpFailMap = new HashMap<>(); AtomicReference<XmlEntity> xmlEntity = new AtomicReference<>(); for (Object funcResult : funcResults) { @@ -383,7 +376,7 @@ public class IndexCommands implements GfshCommand { Set<String> failedMembers = indexOpFailMap.get(exceptionMessage); if (failedMembers == null) { - failedMembers = new TreeSet<String>(); + failedMembers = new TreeSet<>(); } failedMembers.add(cliFunctionResult.getMemberIdOrName()); indexOpFailMap.put(exceptionMessage, failedMembers); @@ -451,9 +444,10 @@ public class IndexCommands implements GfshCommand { } @CliCommand(value = CliStrings.DEFINE_INDEX, help = CliStrings.DEFINE_INDEX__HELP) - @CliMetaData(shellOnly = false, - relatedTopic = {CliStrings.TOPIC_GEODE_REGION, CliStrings.TOPIC_GEODE_DATA}) + @CliMetaData(relatedTopic = {CliStrings.TOPIC_GEODE_REGION, CliStrings.TOPIC_GEODE_DATA}) // TODO : Add optionContext for indexName + @ResourceOperation(resource = Resource.CLUSTER, operation = Operation.MANAGE, + target = Target.QUERY) public Result defineIndex(@CliOption(key = CliStrings.DEFINE_INDEX_NAME, mandatory = true, help = CliStrings.DEFINE_INDEX__HELP) final String indexName, @@ -464,16 +458,14 @@ public class IndexCommands implements GfshCommand { optionContext = ConverterHint.REGION_PATH, help = CliStrings.DEFINE_INDEX__REGION__HELP) String regionPath, - @CliOption(key = CliStrings.DEFINE_INDEX__TYPE, mandatory = false, - unspecifiedDefaultValue = "range", optionContext = ConverterHint.INDEX_TYPE, + @CliOption(key = CliStrings.DEFINE_INDEX__TYPE, unspecifiedDefaultValue = "range", + optionContext = ConverterHint.INDEX_TYPE, help = CliStrings.DEFINE_INDEX__TYPE__HELP) final String indexType) { - Result result = null; + Result result; XmlEntity xmlEntity = null; - getCache().getSecurityService().authorizeRegionManage(regionPath); - - int idxType = IndexInfo.RANGE_INDEX; + int idxType; // Index type check if ("range".equalsIgnoreCase(indexType)) { @@ -518,21 +510,21 @@ public class IndexCommands implements GfshCommand { } @CliCommand(value = CliStrings.CREATE_DEFINED_INDEXES, help = CliStrings.CREATE_DEFINED__HELP) - @CliMetaData(shellOnly = false, - relatedTopic = {CliStrings.TOPIC_GEODE_REGION, CliStrings.TOPIC_GEODE_DATA}) - @ResourceOperation(resource = Resource.DATA, operation = Operation.MANAGE) + @CliMetaData(relatedTopic = {CliStrings.TOPIC_GEODE_REGION, CliStrings.TOPIC_GEODE_DATA}) + @ResourceOperation(resource = Resource.CLUSTER, operation = Operation.MANAGE, + target = Target.QUERY) // TODO : Add optionContext for indexName public Result createDefinedIndexes( - @CliOption(key = {CliStrings.MEMBER, CliStrings.MEMBERS}, mandatory = false, + @CliOption(key = {CliStrings.MEMBER, CliStrings.MEMBERS}, optionContext = ConverterHint.MEMBERIDNAME, help = CliStrings.CREATE_DEFINED_INDEXES__MEMBER__HELP) final String[] memberNameOrID, - @CliOption(key = {CliStrings.GROUP, CliStrings.GROUPS}, mandatory = false, + @CliOption(key = {CliStrings.GROUP, CliStrings.GROUPS}, optionContext = ConverterHint.MEMBERGROUP, help = CliStrings.CREATE_DEFINED_INDEXES__GROUP__HELP) final String[] group) { - Result result = null; + Result result; AtomicReference<XmlEntity> xmlEntity = new AtomicReference<>(); if (indexDefinitions.isEmpty()) { @@ -553,8 +545,8 @@ public class IndexCommands implements GfshCommand { CliUtil.executeFunction(createDefinedIndexesFunction, indexDefinitions, targetMembers); final List<Object> funcResults = (List<Object>) rc.getResult(); - final Set<String> successfulMembers = new TreeSet<String>(); - final Map<String, Set<String>> indexOpFailMap = new HashMap<String, Set<String>>(); + final Set<String> successfulMembers = new TreeSet<>(); + final Map<String, Set<String>> indexOpFailMap = new HashMap<>(); for (final Object funcResult : funcResults) { if (funcResult instanceof CliFunctionResult) { @@ -571,7 +563,7 @@ public class IndexCommands implements GfshCommand { Set<String> failedMembers = indexOpFailMap.get(exceptionMessage); if (failedMembers == null) { - failedMembers = new TreeSet<String>(); + failedMembers = new TreeSet<>(); } failedMembers.add(cliFunctionResult.getMemberIdOrName()); indexOpFailMap.put(exceptionMessage, failedMembers); @@ -624,9 +616,9 @@ public class IndexCommands implements GfshCommand { } @CliCommand(value = CliStrings.CLEAR_DEFINED_INDEXES, help = CliStrings.CLEAR_DEFINED__HELP) - @CliMetaData(shellOnly = false, - relatedTopic = {CliStrings.TOPIC_GEODE_REGION, CliStrings.TOPIC_GEODE_DATA}) - @ResourceOperation(resource = Resource.DATA, operation = Operation.MANAGE) + @CliMetaData(relatedTopic = {CliStrings.TOPIC_GEODE_REGION, CliStrings.TOPIC_GEODE_DATA}) + @ResourceOperation(resource = Resource.CLUSTER, operation = Operation.MANAGE, + target = Target.QUERY) // TODO : Add optionContext for indexName public Result clearDefinedIndexes() { indexDefinitions.clear(); http://git-wip-us.apache.org/repos/asf/geode/blob/451d12e8/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/MiscellaneousCommands.java ---------------------------------------------------------------------- diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/MiscellaneousCommands.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/MiscellaneousCommands.java index 637fa0e..1415bc6 100644 --- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/MiscellaneousCommands.java +++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/MiscellaneousCommands.java @@ -14,7 +14,41 @@ */ package org.apache.geode.management.internal.cli.commands; +import java.io.BufferedInputStream; +import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.io.PrintWriter; +import java.text.MessageFormat; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; +import java.util.concurrent.Callable; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; +import java.util.zip.DataFormatException; +import java.util.zip.GZIPInputStream; + +import javax.management.ObjectName; + import org.apache.commons.lang.StringUtils; +import org.apache.logging.log4j.Logger; +import org.springframework.shell.core.annotation.CliCommand; +import org.springframework.shell.core.annotation.CliOption; + import org.apache.geode.LogWriter; import org.apache.geode.cache.execute.Execution; import org.apache.geode.cache.execute.Function; @@ -60,7 +94,6 @@ import org.apache.geode.management.internal.cli.functions.NetstatFunction.Netsta import org.apache.geode.management.internal.cli.functions.ShutDownFunction; import org.apache.geode.management.internal.cli.i18n.CliStrings; import org.apache.geode.management.internal.cli.remote.CommandExecutionContext; -import org.apache.geode.management.internal.cli.result.CommandResultException; import org.apache.geode.management.internal.cli.result.CompositeResultData; import org.apache.geode.management.internal.cli.result.CompositeResultData.SectionResultData; import org.apache.geode.management.internal.cli.result.ErrorResultData; @@ -72,39 +105,6 @@ import org.apache.geode.management.internal.cli.result.TabularResultData; import org.apache.geode.management.internal.security.ResourceOperation; import org.apache.geode.security.ResourcePermission.Operation; import org.apache.geode.security.ResourcePermission.Resource; -import org.apache.logging.log4j.Logger; -import org.springframework.shell.core.annotation.CliAvailabilityIndicator; -import org.springframework.shell.core.annotation.CliCommand; -import org.springframework.shell.core.annotation.CliOption; - -import java.io.BufferedInputStream; -import java.io.ByteArrayInputStream; -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.OutputStream; -import java.io.PrintWriter; -import java.text.MessageFormat; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Set; -import java.util.concurrent.Callable; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.Future; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.TimeoutException; -import java.util.zip.DataFormatException; -import java.util.zip.GZIPInputStream; -import javax.management.ObjectName; /** * @since GemFire 7.0 @@ -172,7 +172,7 @@ public class MiscellaneousCommands implements GfshCommand { return ResultBuilder.createInfoResult(CliStrings.SHUTDOWN__MSG__IMPROPER_TIMEOUT); } - // convert to mili-seconds + // convert to milliseconds long timeout = userSpecifiedTimeout * 1000; InternalCache cache = getCache(); @@ -211,7 +211,7 @@ public class MiscellaneousCommands implements GfshCommand { } for (DistributedMember locator : locators) { - Set<DistributedMember> lsSet = new HashSet<DistributedMember>(); + Set<DistributedMember> lsSet = new HashSet<>(); lsSet.add(locator); long elapsedTime = shutDownNodeWithTimeOut(timeout, lsSet); timeout = timeout - elapsedTime; @@ -224,7 +224,7 @@ public class MiscellaneousCommands implements GfshCommand { return ResultBuilder.createInfoResult("Shutdown is triggered"); } // now shut down this manager - Set<DistributedMember> mgrSet = new HashSet<DistributedMember>(); + Set<DistributedMember> mgrSet = new HashSet<>(); mgrSet.add(manager); // No need to check further timeout as this is the last node we will be // shutting down @@ -290,18 +290,16 @@ public class MiscellaneousCommands implements GfshCommand { @ResourceOperation(resource = Resource.CLUSTER, operation = Operation.MANAGE) public Result gc( @CliOption(key = {CliStrings.GROUP, CliStrings.GROUPS}, - unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, help = CliStrings.GC__GROUP__HELP) String[] groups, @CliOption(key = CliStrings.MEMBER, optionContext = ConverterHint.ALL_MEMBER_IDNAME, - unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, help = CliStrings.GC__MEMBER__HELP) String memberId) { InternalCache cache = getCache(); - Result result = null; + Result result; CompositeResultData gcResultTable = ResultBuilder.createCompositeResultData(); TabularResultData resultTable = gcResultTable.addSection().addTable("Table1"); String headerText = "GC Summary"; resultTable.setHeader(headerText); - Set<DistributedMember> dsMembers = new HashSet<DistributedMember>(); + Set<DistributedMember> dsMembers = new HashSet<>(); if (memberId != null && memberId.length() > 0) { DistributedMember member = CliUtil.getDistributedMemberByNameOrId(memberId); if (member == null) { @@ -328,13 +326,12 @@ public class MiscellaneousCommands implements GfshCommand { Result executeAndBuildResult(TabularResultData resultTable, Set<DistributedMember> dsMembers) { try { - List<?> resultList = null; + List<?> resultList; Function garbageCollectionFunction = new GarbageCollectionFunction(); resultList = (List<?>) CliUtil.executeFunction(garbageCollectionFunction, null, dsMembers).getResult(); - for (int i = 0; i < resultList.size(); i++) { - Object object = resultList.get(i); + for (Object object : resultList) { if (object instanceof Exception) { LogWrapper.getInstance().fine("Exception in GC " + ((Throwable) object).getMessage(), ((Throwable) object)); @@ -380,24 +377,20 @@ public class MiscellaneousCommands implements GfshCommand { @ResourceOperation(resource = Resource.CLUSTER, operation = Operation.READ) // TODO : Verify the auto-completion for multiple values. public Result netstat( - @CliOption(key = {CliStrings.MEMBER, CliStrings.MEMBERS}, mandatory = false, - unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, + @CliOption(key = {CliStrings.MEMBER, CliStrings.MEMBERS}, optionContext = ConverterHint.ALL_MEMBER_IDNAME, help = CliStrings.NETSTAT__MEMBER__HELP) String[] members, - @CliOption(key = CliStrings.GROUP, mandatory = false, - unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, - optionContext = ConverterHint.MEMBERGROUP, + @CliOption(key = CliStrings.GROUP, optionContext = ConverterHint.MEMBERGROUP, help = CliStrings.NETSTAT__GROUP__HELP) String group, @CliOption(key = CliStrings.NETSTAT__FILE, - unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, help = CliStrings.NETSTAT__FILE__HELP) String saveAs, @CliOption(key = CliStrings.NETSTAT__WITHLSOF, specifiedDefaultValue = "true", unspecifiedDefaultValue = "false", help = CliStrings.NETSTAT__WITHLSOF__HELP) boolean withlsof) { - Result result = null; + Result result; - Map<String, DistributedMember> hostMemberMap = new HashMap<String, DistributedMember>(); - Map<String, List<String>> hostMemberListMap = new HashMap<String, List<String>>(); + Map<String, DistributedMember> hostMemberMap = new HashMap<>(); + Map<String, List<String>> hostMemberListMap = new HashMap<>(); try { if (members != null && members.length > 0 && group != null) { @@ -410,7 +403,7 @@ public class MiscellaneousCommands implements GfshCommand { InternalDistributedSystem system = InternalDistributedSystem.getConnectedInstance(); if (members != null) { - Set<String> notFoundMembers = new HashSet<String>(); + Set<String> notFoundMembers = new HashSet<>(); for (String memberIdOrName : members) { Set<DistributedMember> membersToExecuteOn = CliUtil.getAllMembers(system); boolean memberFound = false; @@ -435,7 +428,7 @@ public class MiscellaneousCommands implements GfshCommand { new Object[] {CliUtil.collectionToString(notFoundMembers, -1)})); } } else { - Set<DistributedMember> membersToExecuteOn = null; + Set<DistributedMember> membersToExecuteOn; if (group != null) { membersToExecuteOn = system.getGroupMembers(group); } else { @@ -453,7 +446,7 @@ public class MiscellaneousCommands implements GfshCommand { } } - String lineSeparatorToUse = null; + String lineSeparatorToUse; lineSeparatorToUse = CommandExecutionContext.getShellLineSeparator(); if (lineSeparatorToUse == null) { lineSeparatorToUse = GfshParser.LINE_SEPARATOR; @@ -461,13 +454,12 @@ public class MiscellaneousCommands implements GfshCommand { NetstatFunctionArgument nfa = new NetstatFunctionArgument(lineSeparatorToUse, withlsof); if (!hostMemberMap.isEmpty()) { - Set<DistributedMember> membersToExecuteOn = - new HashSet<DistributedMember>(hostMemberMap.values()); + Set<DistributedMember> membersToExecuteOn = new HashSet<>(hostMemberMap.values()); ResultCollector<?, ?> netstatResult = CliUtil.executeFunction(NetstatFunction.INSTANCE, nfa, membersToExecuteOn); List<?> resultList = (List<?>) netstatResult.getResult(); - for (int i = 0; i < resultList.size(); i++) { - NetstatFunctionResult netstatFunctionResult = (NetstatFunctionResult) resultList.get(i); + for (Object aResultList : resultList) { + NetstatFunctionResult netstatFunctionResult = (NetstatFunctionResult) aResultList; DeflaterInflaterData deflaterInflaterData = netstatFunctionResult.getCompressedBytes(); try { String remoteHost = netstatFunctionResult.getHost(); @@ -528,9 +520,9 @@ public class MiscellaneousCommands implements GfshCommand { } // Maintain all members for a host - display purpose - List<String> list = null; + List<String> list; if (!hostMemberListMap.containsKey(host)) { - list = new ArrayList<String>(); + list = new ArrayList<>(); hostMemberListMap.put(host, list); } else { list = hostMemberListMap.get(host); @@ -539,13 +531,13 @@ public class MiscellaneousCommands implements GfshCommand { } @CliCommand(value = CliStrings.SHOW_DEADLOCK, help = CliStrings.SHOW_DEADLOCK__HELP) - @CliMetaData(shellOnly = false, relatedTopic = {CliStrings.TOPIC_GEODE_DEBUG_UTIL}) + @CliMetaData(relatedTopic = {CliStrings.TOPIC_GEODE_DEBUG_UTIL}) @ResourceOperation(resource = Resource.CLUSTER, operation = Operation.READ) public Result showDeadlock(@CliOption(key = CliStrings.SHOW_DEADLOCK__DEPENDENCIES__FILE, help = CliStrings.SHOW_DEADLOCK__DEPENDENCIES__FILE__HELP, mandatory = true) String filename) { - Result result = null; + Result result; try { if (!filename.endsWith(".txt")) { return ResultBuilder @@ -590,20 +582,19 @@ public class MiscellaneousCommands implements GfshCommand { } @CliCommand(value = CliStrings.SHOW_LOG, help = CliStrings.SHOW_LOG_HELP) - @CliMetaData(shellOnly = false, relatedTopic = {CliStrings.TOPIC_GEODE_DEBUG_UTIL}) + @CliMetaData(relatedTopic = {CliStrings.TOPIC_GEODE_DEBUG_UTIL}) @ResourceOperation(resource = Resource.CLUSTER, operation = Operation.READ) public Result showLog( @CliOption(key = CliStrings.MEMBER, optionContext = ConverterHint.ALL_MEMBER_IDNAME, - unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, help = CliStrings.SHOW_LOG_MEMBER_HELP, mandatory = true) String memberNameOrId, @CliOption(key = CliStrings.SHOW_LOG_LINE_NUM, unspecifiedDefaultValue = "0", - help = CliStrings.SHOW_LOG_LINE_NUM_HELP, mandatory = false) int numberOfLines) { - Result result = null; + help = CliStrings.SHOW_LOG_LINE_NUM_HELP) int numberOfLines) { + Result result; try { InternalCache cache = getCache(); SystemManagementService service = (SystemManagementService) ManagementService.getExistingManagementService(cache); - MemberMXBean bean = null; + MemberMXBean bean; DistributedMember memberToBeInvoked = CliUtil.getDistributedMemberByNameOrId(memberNameOrId); if (memberToBeInvoked != null) { String memberId = memberToBeInvoked.getId(); @@ -655,7 +646,7 @@ public class MiscellaneousCommands implements GfshCommand { * Current implementation supports writing it to a file and returning the location of the file */ @CliCommand(value = CliStrings.EXPORT_STACKTRACE, help = CliStrings.EXPORT_STACKTRACE__HELP) - @CliMetaData(shellOnly = false, relatedTopic = {CliStrings.TOPIC_GEODE_DEBUG_UTIL}) + @CliMetaData(relatedTopic = {CliStrings.TOPIC_GEODE_DEBUG_UTIL}) @ResourceOperation(resource = Resource.CLUSTER, operation = Operation.READ) public Result exportStackTrace(@CliOption(key = {CliStrings.MEMBER, CliStrings.MEMBERS}, optionContext = ConverterHint.ALL_MEMBER_IDNAME, @@ -671,7 +662,7 @@ public class MiscellaneousCommands implements GfshCommand { unspecifiedDefaultValue = "false", help = CliStrings.EXPORT_STACKTRACE__FAIL__IF__FILE__PRESENT__HELP) boolean failIfFilePresent) { - Result result = null; + Result result; StringBuffer filePrefix = new StringBuffer("stacktrace"); if (fileName == null) { @@ -690,7 +681,7 @@ public class MiscellaneousCommands implements GfshCommand { InfoResultData resultData = ResultBuilder.createInfoResultData(); - Map<String, byte[]> dumps = new HashMap<String, byte[]>(); + Map<String, byte[]> dumps = new HashMap<>(); Set<DistributedMember> targetMembers = CliUtil.findMembers(group, memberNameOrId); if (targetMembers.isEmpty()) { return ResultBuilder.createUserErrorResult(CliStrings.NO_MEMBERS_FOUND_MESSAGE); @@ -735,7 +726,7 @@ public class MiscellaneousCommands implements GfshCommand { return ResultBuilder .createShellClientAbortOperationResult(CliStrings.EXPORT_STACKTRACE_MSG_ABORTING); } else { - // we dont to show any info result + // we don't to show any info result return ResultBuilder.createInfoResult(""); } } @@ -750,17 +741,15 @@ public class MiscellaneousCommands implements GfshCommand { * @throws IOException */ private String writeStacksToFile(Map<String, byte[]> dumps, String fileName) throws IOException { - String filePath = null; - OutputStream os = null; - PrintWriter ps = null; - File outputFile = null; + String filePath; + PrintWriter ps; + File outputFile; - try { - outputFile = new File(fileName); - os = new FileOutputStream(outputFile); + outputFile = new File(fileName); + try (OutputStream os = new FileOutputStream(outputFile)) { ps = new PrintWriter(os); - for (Map.Entry<String, byte[]> entry : dumps.entrySet()) { + for (Entry<String, byte[]> entry : dumps.entrySet()) { ps.append("*** Stack-trace for member " + entry.getKey() + " ***"); ps.flush(); GZIPInputStream zipIn = new GZIPInputStream(new ByteArrayInputStream(entry.getValue())); @@ -774,15 +763,13 @@ public class MiscellaneousCommands implements GfshCommand { } ps.flush(); filePath = outputFile.getCanonicalPath(); - } finally { - os.close(); } return filePath; } @CliCommand(value = CliStrings.SHOW_METRICS, help = CliStrings.SHOW_METRICS__HELP) - @CliMetaData(shellOnly = false, relatedTopic = {CliStrings.TOPIC_GEODE_STATISTICS}) + @CliMetaData(relatedTopic = {CliStrings.TOPIC_GEODE_STATISTICS}) @ResourceOperation(resource = Resource.CLUSTER, operation = Operation.READ) public Result showMetrics( @CliOption(key = {CliStrings.MEMBER}, optionContext = ConverterHint.ALL_MEMBER_IDNAME, @@ -796,7 +783,7 @@ public class MiscellaneousCommands implements GfshCommand { @CliOption(key = {CliStrings.SHOW_METRICS__CATEGORY}, help = CliStrings.SHOW_METRICS__CATEGORY__HELP) String[] categories) { - Result result = null; + Result result; try { if (export_to_report_to != null && !export_to_report_to.isEmpty()) { @@ -873,11 +860,10 @@ public class MiscellaneousCommands implements GfshCommand { * @return ResultData with required System wide statistics or ErrorResultData if DS MBean is not * found to gather metrics */ - private ResultData getSystemWideMetrics(String export_to_report_to, String[] categoriesArr) - throws Exception { + private ResultData getSystemWideMetrics(String export_to_report_to, String[] categoriesArr) { final InternalCache cache = getCache(); - final ManagementService managmentService = ManagementService.getManagementService(cache); - DistributedSystemMXBean dsMxBean = managmentService.getDistributedSystemMXBean(); + final ManagementService managementService = ManagementService.getManagementService(cache); + DistributedSystemMXBean dsMxBean = managementService.getDistributedSystemMXBean(); StringBuilder csvBuilder = null; if (dsMxBean != null) { @@ -898,7 +884,7 @@ public class MiscellaneousCommands implements GfshCommand { if (categoriesArr != null && categoriesArr.length != 0) { Set<String> categories = createSet(categoriesArr); - Set<String> checkSet = new HashSet<String>(categoriesMap.keySet()); + Set<String> checkSet = new HashSet<>(categoriesMap.keySet()); Set<String> userCategories = getSetDifference(categories, checkSet); // Checking if the categories specified by the user are valid or not @@ -923,12 +909,12 @@ public class MiscellaneousCommands implements GfshCommand { } metricsTable.setHeader("Cluster-wide Metrics"); - if (categoriesMap.get("cluster").booleanValue()) { + if (categoriesMap.get("cluster")) { writeToTableAndCsv(metricsTable, "cluster", "totalHeapSize", dsMxBean.getTotalHeapSize(), csvBuilder); } - if (categoriesMap.get("cache").booleanValue()) { + if (categoriesMap.get("cache")) { writeToTableAndCsv(metricsTable, "cache", "totalRegionEntryCount", dsMxBean.getTotalRegionEntryCount(), csvBuilder); writeToTableAndCsv(metricsTable, "", "totalRegionCount", dsMxBean.getTotalRegionCount(), @@ -939,7 +925,7 @@ public class MiscellaneousCommands implements GfshCommand { csvBuilder); } - if (categoriesMap.get("diskstore").booleanValue()) { + if (categoriesMap.get("diskstore")) { writeToTableAndCsv(metricsTable, "diskstore", "totalDiskUsage", dsMxBean.getTotalDiskUsage(), csvBuilder); // deadcoded to workaround bug 46397 writeToTableAndCsv(metricsTable, ""/* 46608 */, "diskReadsRate", @@ -952,7 +938,7 @@ public class MiscellaneousCommands implements GfshCommand { dsMxBean.getTotalBackupInProgress(), csvBuilder); } - if (categoriesMap.get("query").booleanValue()) { + if (categoriesMap.get("query")) { writeToTableAndCsv(metricsTable, "query", "activeCQCount", dsMxBean.getActiveCQCount(), csvBuilder); writeToTableAndCsv(metricsTable, "", "queryRequestRate", dsMxBean.getQueryRequestRate(), @@ -988,7 +974,7 @@ public class MiscellaneousCommands implements GfshCommand { ObjectName memberMBeanName = managementService.getMemberMBeanName(distributedMember); MemberMXBean memberMxBean = managementService.getMBeanInstance(memberMBeanName, MemberMXBean.class); - ObjectName csMxBeanName = null; + ObjectName csMxBeanName; CacheServerMXBean csMxBean = null; if (memberMxBean != null) { @@ -1028,7 +1014,7 @@ public class MiscellaneousCommands implements GfshCommand { if (categoriesArr != null && categoriesArr.length != 0) { Set<String> categories = createSet(categoriesArr); - Set<String> checkSet = new HashSet<String>(categoriesMap.keySet()); + Set<String> checkSet = new HashSet<>(categoriesMap.keySet()); Set<String> userCategories = getSetDifference(categories, checkSet); // Checking if the categories specified by the user are valid or not @@ -1056,7 +1042,7 @@ public class MiscellaneousCommands implements GfshCommand { */ // member, jvm, region, serialization, communication, function, transaction, diskstore, lock, // eviction, distribution - if (categoriesMap.get("member").booleanValue()) { + if (categoriesMap.get("member")) { writeToTableAndCsv(metricsTable, "member", "upTime", memberMxBean.getMemberUpTime(), csvBuilder); writeToTableAndCsv(metricsTable, "", "cpuUsage", memberMxBean.getCpuUsage(), csvBuilder); @@ -1068,7 +1054,7 @@ public class MiscellaneousCommands implements GfshCommand { /* * JVM Metrics */ - if (categoriesMap.get("jvm").booleanValue()) { + if (categoriesMap.get("jvm")) { writeToTableAndCsv(metricsTable, "jvm ", "jvmThreads ", jvmMetrics.getTotalThreads(), csvBuilder); writeToTableAndCsv(metricsTable, "", "fileDescriptorLimit", @@ -1079,7 +1065,7 @@ public class MiscellaneousCommands implements GfshCommand { /* * Member wide region metrics */ - if (categoriesMap.get("region").booleanValue()) { + if (categoriesMap.get("region")) { writeToTableAndCsv(metricsTable, "region ", "totalRegionCount ", memberMxBean.getTotalRegionCount(), csvBuilder); String[] regionNames = memberMxBean.listRegions(); @@ -1120,7 +1106,7 @@ public class MiscellaneousCommands implements GfshCommand { csvBuilder); writeToTableAndCsv(metricsTable, "", "putAllAvgLatency", memberMxBean.getPutAllAvgLatency(), csvBuilder); - // Not available from stats. After Stats re-org it will be avaialble + // Not available from stats. After Stats re-org it will be available // writeToTableAndCsv(metricsTable, "", "getAllAvgLatency", // memberMxBean.getGetAllAvgLatency(), csvBuilder); writeToTableAndCsv(metricsTable, "", "totalMissCount", memberMxBean.getTotalMissCount(), @@ -1140,7 +1126,7 @@ public class MiscellaneousCommands implements GfshCommand { /* * SERIALIZATION */ - if (categoriesMap.get("serialization").booleanValue()) { + if (categoriesMap.get("serialization")) { writeToTableAndCsv(metricsTable, "serialization", "serializationRate", memberMxBean.getSerializationRate(), csvBuilder); writeToTableAndCsv(metricsTable, "", "serializationLatency", @@ -1160,7 +1146,7 @@ public class MiscellaneousCommands implements GfshCommand { /* * Communication Metrics */ - if (categoriesMap.get("communication").booleanValue()) { + if (categoriesMap.get("communication")) { writeToTableAndCsv(metricsTable, "communication", "bytesSentRate", memberMxBean.getBytesSentRate(), csvBuilder); writeToTableAndCsv(metricsTable, "", "bytesReceivedRate", @@ -1177,23 +1163,20 @@ public class MiscellaneousCommands implements GfshCommand { /* * Member wide function metrics */ - if (categoriesMap.get("function").booleanValue()) { + if (categoriesMap.get("function")) { writeToTableAndCsv(metricsTable, "function", "numRunningFunctions", memberMxBean.getNumRunningFunctions(), csvBuilder); writeToTableAndCsv(metricsTable, "", "functionExecutionRate", memberMxBean.getFunctionExecutionRate(), csvBuilder); writeToTableAndCsv(metricsTable, "", "numRunningFunctionsHavingResults", memberMxBean.getNumRunningFunctionsHavingResults(), csvBuilder); - // Not Avaialble from Stats - // writeToTableAndCsv(metricsTable, "", "funcExecutionQueueSize", - // memberMxBean.getFuncExecutionQueueSize(), csvBuilder); } /* * totalTransactionsCount currentTransactionalThreadIds transactionCommitsAvgLatency * transactionCommittedTotalCount transactionRolledBackTotalCount transactionCommitsRate */ - if (categoriesMap.get("transaction").booleanValue()) { + if (categoriesMap.get("transaction")) { writeToTableAndCsv(metricsTable, "transaction", "totalTransactionsCount", memberMxBean.getTotalTransactionsCount(), csvBuilder); @@ -1209,7 +1192,7 @@ public class MiscellaneousCommands implements GfshCommand { /* * Member wide disk metrics */ - if (categoriesMap.get("diskstore").booleanValue()) { + if (categoriesMap.get("diskstore")) { writeToTableAndCsv(metricsTable, "diskstore", "totalDiskUsage", memberMxBean.getTotalDiskUsage(), csvBuilder); // deadcoded to workaround bug 46397 writeToTableAndCsv(metricsTable, ""/* 46608 */, "diskReadsRate", @@ -1227,7 +1210,7 @@ public class MiscellaneousCommands implements GfshCommand { /* * Member wide Lock */ - if (categoriesMap.get("lock").booleanValue()) { + if (categoriesMap.get("lock")) { writeToTableAndCsv(metricsTable, "lock", "lockWaitsInProgress", memberMxBean.getLockWaitsInProgress(), csvBuilder); writeToTableAndCsv(metricsTable, "", "totalLockWaitTime", @@ -1240,7 +1223,7 @@ public class MiscellaneousCommands implements GfshCommand { /* * Eviction */ - if (categoriesMap.get("eviction").booleanValue()) { + if (categoriesMap.get("eviction")) { writeToTableAndCsv(metricsTable, "eviction", "lruEvictionRate", memberMxBean.getLruEvictionRate(), csvBuilder); writeToTableAndCsv(metricsTable, "", "lruDestroyRate", memberMxBean.getLruDestroyRate(), @@ -1249,9 +1232,9 @@ public class MiscellaneousCommands implements GfshCommand { /* * Distribution */ - if (categoriesMap.get("distribution").booleanValue()) { + if (categoriesMap.get("distribution")) { writeToTableAndCsv(metricsTable, "distribution", "getInitialImagesInProgress", - memberMxBean.getInitialImagesInProgres(), csvBuilder); + memberMxBean.getInitialImagesInProgress(), csvBuilder); writeToTableAndCsv(metricsTable, "", "getInitialImageTime", memberMxBean.getInitialImageTime(), csvBuilder); writeToTableAndCsv(metricsTable, "", "getInitialImageKeysReceived", @@ -1261,7 +1244,7 @@ public class MiscellaneousCommands implements GfshCommand { /* * OffHeap */ - if (categoriesMap.get("offheap").booleanValue()) { + if (categoriesMap.get("offheap")) { writeToTableAndCsv(metricsTable, "offheap", "maxMemory", memberMxBean.getOffHeapMaxMemory(), csvBuilder); writeToTableAndCsv(metricsTable, "", "freeMemory", memberMxBean.getOffHeapFreeMemory(), @@ -1381,7 +1364,7 @@ public class MiscellaneousCommands implements GfshCommand { if (categoriesArr != null && categoriesArr.length != 0) { Set<String> categories = createSet(categoriesArr); - Set<String> checkSet = new HashSet<String>(categoriesMap.keySet()); + Set<String> checkSet = new HashSet<>(categoriesMap.keySet()); Set<String> userCategories = getSetDifference(categories, checkSet); // Checking if the categories specified by the user are valid or not @@ -1407,14 +1390,14 @@ public class MiscellaneousCommands implements GfshCommand { * General System metrics */ // cluster, region, partition , diskstore, callback, eviction - if (categoriesMap.get("cluster").booleanValue()) { + if (categoriesMap.get("cluster")) { writeToTableAndCsv(metricsTable, "cluster", "member count", regionMxBean.getMemberCount(), csvBuilder); writeToTableAndCsv(metricsTable, "", "region entry count", regionMxBean.getSystemRegionEntryCount(), csvBuilder); } - if (categoriesMap.get("region").booleanValue()) { + if (categoriesMap.get("region")) { writeToTableAndCsv(metricsTable, "region", "lastModifiedTime", regionMxBean.getLastModifiedTime(), csvBuilder); writeToTableAndCsv(metricsTable, "", "lastAccessedTime", regionMxBean.getLastAccessedTime(), @@ -1432,7 +1415,7 @@ public class MiscellaneousCommands implements GfshCommand { csvBuilder); } - if (categoriesMap.get("partition").booleanValue()) { + if (categoriesMap.get("partition")) { writeToTableAndCsv(metricsTable, "partition", "putLocalRate", regionMxBean.getPutLocalRate(), csvBuilder); writeToTableAndCsv(metricsTable, "", "putRemoteRate", regionMxBean.getPutRemoteRate(), @@ -1456,7 +1439,7 @@ public class MiscellaneousCommands implements GfshCommand { /* * Disk store */ - if (categoriesMap.get("diskstore").booleanValue()) { + if (categoriesMap.get("diskstore")) { writeToTableAndCsv(metricsTable, "diskstore", "totalEntriesOnlyOnDisk", regionMxBean.getTotalEntriesOnlyOnDisk(), csvBuilder); writeToTableAndCsv(metricsTable, "", "diskReadsRate", regionMxBean.getDiskReadsRate(), @@ -1472,7 +1455,7 @@ public class MiscellaneousCommands implements GfshCommand { /* * LISTENER */ - if (categoriesMap.get("callback").booleanValue()) { + if (categoriesMap.get("callback")) { writeToTableAndCsv(metricsTable, "callback", "cacheWriterCallsAvgLatency", regionMxBean.getCacheWriterCallsAvgLatency(), csvBuilder); writeToTableAndCsv(metricsTable, "", "cacheListenerCallsAvgLatency", @@ -1482,7 +1465,7 @@ public class MiscellaneousCommands implements GfshCommand { /* * Eviction */ - if (categoriesMap.get("eviction").booleanValue()) { + if (categoriesMap.get("eviction")) { writeToTableAndCsv(metricsTable, "eviction", "lruEvictionRate", regionMxBean.getLruEvictionRate(), csvBuilder); writeToTableAndCsv(metricsTable, "", "lruDestroyRate", regionMxBean.getLruDestroyRate(), @@ -1549,7 +1532,7 @@ public class MiscellaneousCommands implements GfshCommand { if (categoriesArr != null && categoriesArr.length != 0) { Set<String> categories = createSet(categoriesArr); - Set<String> checkSet = new HashSet<String>(categoriesMap.keySet()); + Set<String> checkSet = new HashSet<>(categoriesMap.keySet()); Set<String> userCategories = getSetDifference(categories, checkSet); // Checking if the categories specified by the user are valid or not @@ -1572,7 +1555,7 @@ public class MiscellaneousCommands implements GfshCommand { } } - if (categoriesMap.get("region").booleanValue()) { + if (categoriesMap.get("region")) { writeToTableAndCsv(metricsTable, "region", "lastModifiedTime", regionMxBean.getLastModifiedTime(), csvBuilder); writeToTableAndCsv(metricsTable, "", "lastAccessedTime", regionMxBean.getLastAccessedTime(), @@ -1590,7 +1573,7 @@ public class MiscellaneousCommands implements GfshCommand { csvBuilder); } - if (categoriesMap.get("partition").booleanValue()) { + if (categoriesMap.get("partition")) { writeToTableAndCsv(metricsTable, "partition", "putLocalRate", regionMxBean.getPutLocalRate(), csvBuilder); writeToTableAndCsv(metricsTable, "", "putRemoteRate", regionMxBean.getPutRemoteRate(), @@ -1616,7 +1599,7 @@ public class MiscellaneousCommands implements GfshCommand { /* * Disk store */ - if (categoriesMap.get("diskstore").booleanValue()) { + if (categoriesMap.get("diskstore")) { writeToTableAndCsv(metricsTable, "diskstore", "totalEntriesOnlyOnDisk", regionMxBean.getTotalEntriesOnlyOnDisk(), csvBuilder); writeToTableAndCsv(metricsTable, "", "diskReadsRate", "" + regionMxBean.getDiskReadsRate(), @@ -1631,7 +1614,7 @@ public class MiscellaneousCommands implements GfshCommand { /* * LISTENER */ - if (categoriesMap.get("callback").booleanValue()) { + if (categoriesMap.get("callback")) { writeToTableAndCsv(metricsTable, "callback", "cacheWriterCallsAvgLatency", regionMxBean.getCacheWriterCallsAvgLatency(), csvBuilder); writeToTableAndCsv(metricsTable, "", "cacheListenerCallsAvgLatency", @@ -1641,7 +1624,7 @@ public class MiscellaneousCommands implements GfshCommand { /* * Eviction */ - if (categoriesMap.get("eviction").booleanValue()) { + if (categoriesMap.get("eviction")) { writeToTableAndCsv(metricsTable, "eviction", "lruEvictionRate", regionMxBean.getLruEvictionRate(), csvBuilder); writeToTableAndCsv(metricsTable, "", "lruDestroyRate", regionMxBean.getLruDestroyRate(), @@ -1686,7 +1669,7 @@ public class MiscellaneousCommands implements GfshCommand { double metricValue, StringBuilder csvBuilder) { metricsTable.accumulate(CliStrings.SHOW_METRICS__TYPE__HEADER, type); metricsTable.accumulate(CliStrings.SHOW_METRICS__METRIC__HEADER, metricName); - metricsTable.accumulate(CliStrings.SHOW_METRICS__VALUE__HEADER, Double.valueOf(metricValue)); + metricsTable.accumulate(CliStrings.SHOW_METRICS__VALUE__HEADER, metricValue); if (csvBuilder != null) { csvBuilder.append(type); @@ -1699,10 +1682,8 @@ public class MiscellaneousCommands implements GfshCommand { } private Set<String> createSet(String[] categories) { - Set<String> categoriesSet = new HashSet<String>(); - for (String category : categories) { - categoriesSet.add(category); - } + Set<String> categoriesSet = new HashSet<>(); + Collections.addAll(categoriesSet, categories); return categoriesSet; } @@ -1712,7 +1693,7 @@ public class MiscellaneousCommands implements GfshCommand { * @return map with categories for system metrics and display flag set to true */ private Map<String, Boolean> getSystemMetricsCategories() { - Map<String, Boolean> categories = new HashMap<String, Boolean>(); + Map<String, Boolean> categories = new HashMap<>(); categories.put("cluster", true); categories.put("cache", true); categories.put("diskstore", true); @@ -1726,7 +1707,7 @@ public class MiscellaneousCommands implements GfshCommand { * @return map with categories for region metrics and display flag set to true */ private Map<String, Boolean> getRegionMetricsCategories() { - Map<String, Boolean> categories = new HashMap<String, Boolean>(); + Map<String, Boolean> categories = new HashMap<>(); categories.put("region", true); categories.put("partition", true); @@ -1756,7 +1737,7 @@ public class MiscellaneousCommands implements GfshCommand { * @return map with categories for member metrics and display flag set to true */ private Map<String, Boolean> getMemberMetricsCategories() { - Map<String, Boolean> categories = new HashMap<String, Boolean>(); + Map<String, Boolean> categories = new HashMap<>(); categories.put("member", true); categories.put("jvm", true); categories.put("region", true); @@ -1842,7 +1823,7 @@ public class MiscellaneousCommands implements GfshCommand { InternalCache cache = GemFireCacheImpl.getInstance(); LogWriter logger = cache.getLogger(); - Set<DistributedMember> dsMembers = new HashSet<DistributedMember>(); + Set<DistributedMember> dsMembers = new HashSet<>(); Set<DistributedMember> ds = CliUtil.getAllMembers(cache); if (grps != null && grps.length > 0) { @@ -1853,9 +1834,7 @@ public class MiscellaneousCommands implements GfshCommand { if (memberIds != null && memberIds.length > 0) { for (String member : memberIds) { - Iterator<DistributedMember> it = ds.iterator(); - while (it.hasNext()) { - DistributedMember mem = it.next(); + for (DistributedMember mem : ds) { if (mem.getName() != null && (mem.getName().equals(member) || mem.getId().equals(member))) { dsMembers.add(mem); @@ -1909,7 +1888,6 @@ public class MiscellaneousCommands implements GfshCommand { } } catch (Exception ex) { LogWrapper.getInstance().warning("change log level command exception " + ex); - continue; } } @@ -1937,7 +1915,7 @@ public class MiscellaneousCommands implements GfshCommand { } private Set<String> getSetDifference(Set<String> set1, Set<String> set2) { - Set<String> setDifference = new HashSet<String>(); + Set<String> setDifference = new HashSet<>(); for (String element : set1) { if (!(set2.contains(element.toLowerCase()))) { setDifference.add(element); http://git-wip-us.apache.org/repos/asf/geode/blob/451d12e8/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/PDXCommands.java ---------------------------------------------------------------------- diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/PDXCommands.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/PDXCommands.java index 9bfd47b..e0bad15 100644 --- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/PDXCommands.java +++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/PDXCommands.java @@ -14,6 +14,17 @@ */ package org.apache.geode.management.internal.cli.commands; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.PrintStream; +import java.io.PrintWriter; +import java.io.StringWriter; +import java.util.Arrays; +import java.util.Collection; + +import org.springframework.shell.core.annotation.CliCommand; +import org.springframework.shell.core.annotation.CliOption; + import org.apache.geode.internal.cache.CacheConfig; import org.apache.geode.internal.cache.DiskStoreImpl; import org.apache.geode.internal.cache.xmlcache.CacheCreation; @@ -32,42 +43,25 @@ import org.apache.geode.pdx.internal.EnumInfo; import org.apache.geode.pdx.internal.PdxType; import org.apache.geode.security.ResourcePermission.Operation; import org.apache.geode.security.ResourcePermission.Resource; -import org.springframework.shell.core.annotation.CliCommand; -import org.springframework.shell.core.annotation.CliOption; - -import java.io.ByteArrayOutputStream; -import java.io.File; -import java.io.PrintStream; -import java.io.PrintWriter; -import java.io.StringWriter; -import java.util.Arrays; -import java.util.Collection; public class PDXCommands implements GfshCommand { @CliCommand(value = CliStrings.CONFIGURE_PDX, help = CliStrings.CONFIGURE_PDX__HELP) @CliMetaData(relatedTopic = CliStrings.TOPIC_GEODE_REGION) - @ResourceOperation(resource = Resource.DATA, operation = Operation.MANAGE) + @ResourceOperation(resource = Resource.CLUSTER, operation = Operation.MANAGE) public Result configurePDX( @CliOption(key = CliStrings.CONFIGURE_PDX__READ__SERIALIZED, - unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, help = CliStrings.CONFIGURE_PDX__READ__SERIALIZED__HELP) Boolean readSerialized, @CliOption(key = CliStrings.CONFIGURE_PDX__IGNORE__UNREAD_FIELDS, - unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, help = CliStrings.CONFIGURE_PDX__IGNORE__UNREAD_FIELDS__HELP) Boolean ignoreUnreadFields, - @CliOption(key = CliStrings.CONFIGURE_PDX__DISKSTORE, - unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, specifiedDefaultValue = "", + @CliOption(key = CliStrings.CONFIGURE_PDX__DISKSTORE, specifiedDefaultValue = "", help = CliStrings.CONFIGURE_PDX__DISKSTORE__HELP) String diskStore, @CliOption(key = CliStrings.CONFIGURE_PDX__AUTO__SERIALIZER__CLASSES, - unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, - specifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, help = CliStrings.CONFIGURE_PDX__AUTO__SERIALIZER__CLASSES__HELP) String[] patterns, @CliOption(key = CliStrings.CONFIGURE_PDX__PORTABLE__AUTO__SERIALIZER__CLASSES, - unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, - specifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, help = CliStrings.CONFIGURE_PDX__PORTABLE__AUTO__SERIALIZER__CLASSES__HELP) String[] portablePatterns) { - Result result = null; + Result result; try { InfoResultData ird = ResultBuilder.createInfoResultData(); @@ -105,7 +99,7 @@ public class PDXCommands implements GfshCommand { CliStrings.CONFIGURE_PDX__READ__SERIALIZED + " = " + cache.getPdxReadSerialized()); - // Set ingoreUnreadFields + // Set ignoreUnreadFields if (ignoreUnreadFields != null) { cache.setPdxIgnoreUnreadFields(ignoreUnreadFields); } else { @@ -153,7 +147,6 @@ public class PDXCommands implements GfshCommand { @CliCommand(value = CliStrings.PDX_RENAME, help = CliStrings.PDX_RENAME__HELP) @CliMetaData(shellOnly = true, relatedTopic = {CliStrings.TOPIC_GEODE_DISKSTORE}) - @ResourceOperation(resource = Resource.DATA, operation = Operation.MANAGE) public Result pdxRename(@CliOption(key = CliStrings.PDX_RENAME_OLD, mandatory = true, help = CliStrings.PDX_RENAME_OLD__HELP) String oldClassName, @@ -191,7 +184,7 @@ public class PDXCommands implements GfshCommand { } String resultString = CliStrings.format(CliStrings.PDX_RENAME__SUCCESS, outputStream.toString()); - return ResultBuilder.createInfoResult(resultString.toString()); + return ResultBuilder.createInfoResult(resultString); } catch (Exception e) { return ResultBuilder.createGemFireErrorResult( http://git-wip-us.apache.org/repos/asf/geode/blob/451d12e8/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/QueueCommands.java ---------------------------------------------------------------------- diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/QueueCommands.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/QueueCommands.java index 25b95cd..87c5bbc 100644 --- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/QueueCommands.java +++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/QueueCommands.java @@ -14,10 +14,18 @@ */ package org.apache.geode.management.internal.cli.commands; +import java.util.List; +import java.util.Map; +import java.util.Properties; +import java.util.Set; +import java.util.concurrent.atomic.AtomicReference; + +import org.springframework.shell.core.annotation.CliCommand; +import org.springframework.shell.core.annotation.CliOption; + import org.apache.geode.SystemFailure; import org.apache.geode.cache.execute.ResultCollector; 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.cli.Result.Status; @@ -28,21 +36,13 @@ import org.apache.geode.management.internal.cli.functions.CliFunctionResult; import org.apache.geode.management.internal.cli.functions.CreateAsyncEventQueueFunction; import org.apache.geode.management.internal.cli.functions.ListAsyncEventQueuesFunction; import org.apache.geode.management.internal.cli.i18n.CliStrings; -import org.apache.geode.management.internal.cli.result.CommandResultException; import org.apache.geode.management.internal.cli.result.ResultBuilder; import org.apache.geode.management.internal.cli.result.TabularResultData; import org.apache.geode.management.internal.configuration.domain.XmlEntity; import org.apache.geode.management.internal.security.ResourceOperation; import org.apache.geode.security.ResourcePermission.Operation; import org.apache.geode.security.ResourcePermission.Resource; -import org.springframework.shell.core.annotation.CliCommand; -import org.springframework.shell.core.annotation.CliOption; - -import java.util.List; -import java.util.Map; -import java.util.Properties; -import java.util.Set; -import java.util.concurrent.atomic.AtomicReference; +import org.apache.geode.security.ResourcePermission.Target; /** * The QueueCommands class encapsulates all GemFire Queue commands in Gfsh. @@ -54,12 +54,11 @@ public class QueueCommands implements GfshCommand { @CliCommand(value = CliStrings.CREATE_ASYNC_EVENT_QUEUE, help = CliStrings.CREATE_ASYNC_EVENT_QUEUE__HELP) - @ResourceOperation(resource = Resource.DATA, operation = Operation.MANAGE) + @ResourceOperation(resource = Resource.CLUSTER, operation = Operation.MANAGE, target = Target.JAR) public Result createAsyncEventQueue( @CliOption(key = CliStrings.CREATE_ASYNC_EVENT_QUEUE__ID, mandatory = true, help = CliStrings.CREATE_ASYNC_EVENT_QUEUE__ID__HELP) String id, @CliOption(key = {CliStrings.GROUP, CliStrings.GROUPS}, - unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, optionContext = ConverterHint.MEMBERGROUP, help = CliStrings.CREATE_ASYNC_EVENT_QUEUE__GROUP__HELP) String[] groups, @CliOption(key = CliStrings.CREATE_ASYNC_EVENT_QUEUE__PARALLEL, @@ -78,7 +77,6 @@ public class QueueCommands implements GfshCommand { unspecifiedDefaultValue = "false", specifiedDefaultValue = "true", help = CliStrings.CREATE_ASYNC_EVENT_QUEUE__PERSISTENT__HELP) boolean persistent, @CliOption(key = CliStrings.CREATE_ASYNC_EVENT_QUEUE__DISK_STORE, - unspecifiedDefaultValue = CliMetaData.ANNOTATION_NULL_VALUE, help = CliStrings.CREATE_ASYNC_EVENT_QUEUE__DISK_STORE__HELP) String diskStore, @CliOption(key = CliStrings.CREATE_ASYNC_EVENT_QUEUE__DISKSYNCHRONOUS, unspecifiedDefaultValue = "true", specifiedDefaultValue = "true", @@ -104,17 +102,20 @@ public class QueueCommands implements GfshCommand { @CliOption(key = CliStrings.CREATE_ASYNC_EVENT_QUEUE__LISTENER_PARAM_AND_VALUE, help = CliStrings.CREATE_ASYNC_EVENT_QUEUE__LISTENER_PARAM_AND_VALUE__HELP) String[] listenerParamsAndValues) { + if (persistent) { + getSecurityService().authorize(Resource.CLUSTER, Operation.WRITE, Target.DISK); + } Properties listenerProperties = new Properties(); try { if (listenerParamsAndValues != null) { - for (int i = 0; i < listenerParamsAndValues.length; i++) { - final int hashPosition = listenerParamsAndValues[i].indexOf('#'); + for (String listenerParamsAndValue : listenerParamsAndValues) { + final int hashPosition = listenerParamsAndValue.indexOf('#'); if (hashPosition == -1) { - listenerProperties.put(listenerParamsAndValues[i], ""); + listenerProperties.put(listenerParamsAndValue, ""); } else { - listenerProperties.put(listenerParamsAndValues[i].substring(0, hashPosition), - listenerParamsAndValues[i].substring(hashPosition + 1)); + listenerProperties.put(listenerParamsAndValue.substring(0, hashPosition), + listenerParamsAndValue.substring(hashPosition + 1)); } } } @@ -205,17 +206,17 @@ public class QueueCommands implements GfshCommand { tabularData.setStatus(Status.ERROR); } else { AsyncEventQueueDetails[] details = (AsyncEventQueueDetails[]) result.getSerializables(); - for (int i = 0; i < details.length; i++) { + for (AsyncEventQueueDetails detail : details) { tabularData.accumulate("Member", result.getMemberIdOrName()); - tabularData.accumulate("ID", details[i].getId()); - tabularData.accumulate("Batch Size", details[i].getBatchSize()); - tabularData.accumulate("Persistent", details[i].isPersistent()); - tabularData.accumulate("Disk Store", details[i].getDiskStoreName()); - tabularData.accumulate("Max Memory", details[i].getMaxQueueMemory()); + tabularData.accumulate("ID", detail.getId()); + tabularData.accumulate("Batch Size", detail.getBatchSize()); + tabularData.accumulate("Persistent", detail.isPersistent()); + tabularData.accumulate("Disk Store", detail.getDiskStoreName()); + tabularData.accumulate("Max Memory", detail.getMaxQueueMemory()); - Properties listenerProperties = details[i].getListenerProperties(); + Properties listenerProperties = detail.getListenerProperties(); if (listenerProperties == null || listenerProperties.size() == 0) { - tabularData.accumulate("Listener", details[i].getListener()); + tabularData.accumulate("Listener", detail.getListener()); } else { StringBuilder propsStringBuilder = new StringBuilder(); propsStringBuilder.append('('); @@ -232,7 +233,7 @@ public class QueueCommands implements GfshCommand { propsStringBuilder.append(')'); tabularData.accumulate("Listener", - details[i].getListener() + propsStringBuilder.toString()); + detail.getListener() + propsStringBuilder.toString()); } accumulatedData = true; }