GEODE-2928: get rid of the isGfshVM static variable * consolidate the availability indicators * remove the isGfshVM and isGfshVM() method * enhance the MultiStepCommand to include info on shellOnly commands to enhance command validation * remove the SUPPORT_MULTIPLE_GFSH static flag and properly remove the gfsh instance at the end of each test
Project: http://git-wip-us.apache.org/repos/asf/geode/repo Commit: http://git-wip-us.apache.org/repos/asf/geode/commit/f85d2163 Tree: http://git-wip-us.apache.org/repos/asf/geode/tree/f85d2163 Diff: http://git-wip-us.apache.org/repos/asf/geode/diff/f85d2163 Branch: refs/heads/feature/GEM-1483 Commit: f85d216341f4887e80d428f68dc8dfd2824dda5f Parents: d1db2f0 Author: Jinmei Liao <jil...@pivotal.io> Authored: Fri May 19 08:58:30 2017 -0700 Committer: Jinmei Liao <jil...@pivotal.io> Committed: Mon Jun 12 13:54:39 2017 -0700 ---------------------------------------------------------------------- .../geode/internal/GfeConsoleReaderFactory.java | 11 ++-- .../geode/management/cli/CliMetaData.java | 4 +- .../geode/management/internal/cli/CliUtil.java | 9 --- .../internal/cli/commands/ClientCommands.java | 10 ---- .../commands/CommandAvailabilityIndicator.java | 63 ++++++++++++++++++++ .../internal/cli/commands/ConfigCommands.java | 10 ---- .../CreateAlterDestroyRegionCommands.java | 10 ---- .../internal/cli/commands/DataCommands.java | 19 +----- .../internal/cli/commands/DeployCommands.java | 10 ---- .../cli/commands/DiskStoreCommands.java | 14 ----- .../cli/commands/DurableClientCommands.java | 26 +++----- ...xportImportClusterConfigurationCommands.java | 10 ---- .../internal/cli/commands/FunctionCommands.java | 10 ---- .../internal/cli/commands/IndexCommands.java | 8 --- .../cli/commands/LauncherLifecycleCommands.java | 9 --- .../internal/cli/commands/MemberCommands.java | 29 +++------ .../cli/commands/MiscellaneousCommands.java | 11 ---- .../internal/cli/commands/PDXCommands.java | 14 ----- .../internal/cli/commands/QueueCommands.java | 11 ---- .../internal/cli/commands/RegionCommands.java | 10 ---- .../internal/cli/commands/ShellCommands.java | 7 --- .../internal/cli/commands/StatusCommands.java | 22 ++----- .../internal/cli/commands/WanCommands.java | 52 ++++++---------- .../cli/functions/DataCommandFunction.java | 4 +- .../cli/multistep/CLIMultiStepHelper.java | 21 ++----- .../cli/multistep/MultiStepCommand.java | 4 ++ .../cli/remote/RemoteExecutionStrategy.java | 26 +++++++- .../internal/cli/result/AbstractResultData.java | 63 +++++++++----------- .../management/internal/cli/shell/Gfsh.java | 11 +--- .../cli/shell/GfshExecutionStrategy.java | 2 +- .../geode/management/DataCommandMBeanTest.java | 59 ++++++++++++++++++ .../management/internal/cli/HeadlessGfsh.java | 11 +--- .../cli/commands/CliCommandTestBase.java | 4 -- .../cli/commands/MemberCommandsDUnitTest.java | 9 --- .../cli/commands/ShowDeadlockDUnitTest.java | 13 ---- .../dunit/rules/GfshShellConnectionRule.java | 3 - .../internal/cli/LuceneIndexCommands.java | 10 +++- 37 files changed, 243 insertions(+), 376 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/geode/blob/f85d2163/geode-core/src/main/java/org/apache/geode/internal/GfeConsoleReaderFactory.java ---------------------------------------------------------------------- diff --git a/geode-core/src/main/java/org/apache/geode/internal/GfeConsoleReaderFactory.java b/geode-core/src/main/java/org/apache/geode/internal/GfeConsoleReaderFactory.java index 120d625..8c5dba2 100644 --- a/geode-core/src/main/java/org/apache/geode/internal/GfeConsoleReaderFactory.java +++ b/geode-core/src/main/java/org/apache/geode/internal/GfeConsoleReaderFactory.java @@ -15,12 +15,12 @@ package org.apache.geode.internal; -import java.io.Console; - -import org.apache.geode.management.internal.cli.CliUtil; import org.apache.geode.management.internal.cli.LogWrapper; +import org.apache.geode.management.internal.cli.shell.Gfsh; import org.apache.geode.management.internal.cli.util.GfshConsoleReader; +import java.io.Console; + /** * Factory for Console Reader Utility. * @@ -39,13 +39,12 @@ public class GfeConsoleReaderFactory { public static GfeConsoleReader createConsoleReader() { GfeConsoleReader consoleReader = null; - if (CliUtil.isGfshVM()) { + if (Gfsh.getCurrentInstance() != null) { LogWrapper.getInstance().info("GfeConsoleReaderFactory.createConsoleReader(): isGfshVM"); consoleReader = new GfshConsoleReader(); LogWrapper.getInstance().info("GfeConsoleReaderFactory.createConsoleReader(): consoleReader: " + consoleReader + "=" + consoleReader.isSupported()); - } - if (consoleReader == null) { + } else { consoleReader = new GfeConsoleReader(); } return consoleReader; http://git-wip-us.apache.org/repos/asf/geode/blob/f85d2163/geode-core/src/main/java/org/apache/geode/management/cli/CliMetaData.java ---------------------------------------------------------------------- diff --git a/geode-core/src/main/java/org/apache/geode/management/cli/CliMetaData.java b/geode-core/src/main/java/org/apache/geode/management/cli/CliMetaData.java index 2e6dc39..226086f 100644 --- a/geode-core/src/main/java/org/apache/geode/management/cli/CliMetaData.java +++ b/geode-core/src/main/java/org/apache/geode/management/cli/CliMetaData.java @@ -38,8 +38,8 @@ public @interface CliMetaData { public static final String ANNOTATION_NULL_VALUE = "__NULL__"; /** - * Indicates that the command will only run in the gfsh shell and will not need the management - * service + * Indicates that the command will only run in the gfsh shell Gfsh ExecutionStrategy will use this + * flag to determine whether to invoke remote call or not. **/ boolean shellOnly() default false; http://git-wip-us.apache.org/repos/asf/geode/blob/f85d2163/geode-core/src/main/java/org/apache/geode/management/internal/cli/CliUtil.java ---------------------------------------------------------------------- diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/CliUtil.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/CliUtil.java index 038e069..b3bdf9a 100755 --- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/CliUtil.java +++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/CliUtil.java @@ -73,17 +73,8 @@ import java.util.zip.Inflater; * @since GemFire 7.0 */ public class CliUtil { - - public static final String GFSHVM_IDENTIFIER = "gfsh"; - - public static boolean isGfshVM = Boolean.getBoolean(GFSHVM_IDENTIFIER); - public static final FileFilter JAR_FILE_FILTER = new CustomFileFilter(".jar"); - public static boolean isGfshVM() { - return isGfshVM; - } - public static String cliDependenciesExist(boolean includeGfshDependencies) { String jarProductName = null; http://git-wip-us.apache.org/repos/asf/geode/blob/f85d2163/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/ClientCommands.java ---------------------------------------------------------------------- diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/ClientCommands.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/ClientCommands.java index e619342..fe27b60 100644 --- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/ClientCommands.java +++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/ClientCommands.java @@ -37,7 +37,6 @@ 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.CommandMarker; -import org.springframework.shell.core.annotation.CliAvailabilityIndicator; import org.springframework.shell.core.annotation.CliCommand; import org.springframework.shell.core.annotation.CliOption; @@ -340,13 +339,4 @@ public class ClientCommands implements GfshCommand { } } } - - @CliAvailabilityIndicator({CliStrings.LIST_CLIENTS, CliStrings.DESCRIBE_CLIENT}) - public boolean clientCommandsAvailable() { - boolean isAvailable = true; // always available on server - if (CliUtil.isGfshVM()) { // in gfsh check if connected - isAvailable = getGfsh() != null && getGfsh().isConnectedAndReady(); - } - return isAvailable; - } } http://git-wip-us.apache.org/repos/asf/geode/blob/f85d2163/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/CommandAvailabilityIndicator.java ---------------------------------------------------------------------- diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/CommandAvailabilityIndicator.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/CommandAvailabilityIndicator.java new file mode 100644 index 0000000..59d7206 --- /dev/null +++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/CommandAvailabilityIndicator.java @@ -0,0 +1,63 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more contributor license + * agreements. See the NOTICE file distributed with this work for additional information regarding + * copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. You may obtain a + * copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing permissions and limitations under + * the License. + */ + +package org.apache.geode.management.internal.cli.commands; + +import org.apache.geode.management.internal.cli.i18n.CliStrings; +import org.apache.geode.management.internal.cli.shell.Gfsh; +import org.springframework.shell.core.CommandMarker; +import org.springframework.shell.core.annotation.CliAvailabilityIndicator; + +public class CommandAvailabilityIndicator implements CommandMarker { + + @CliAvailabilityIndicator({CliStrings.LIST_CLIENTS, CliStrings.DESCRIBE_CLIENT, + CliStrings.DESCRIBE_CONFIG, CliStrings.EXPORT_CONFIG, CliStrings.ALTER_RUNTIME_CONFIG, + CliStrings.ALTER_REGION, CliStrings.CREATE_REGION, CliStrings.DESTROY_REGION, + CliStrings.REBALANCE, CliStrings.GET, CliStrings.PUT, CliStrings.REMOVE, + CliStrings.LOCATE_ENTRY, CliStrings.QUERY, CliStrings.IMPORT_DATA, CliStrings.EXPORT_DATA, + CliStrings.DEPLOY, CliStrings.UNDEPLOY, CliStrings.LIST_DEPLOYED, + CliStrings.BACKUP_DISK_STORE, CliStrings.COMPACT_DISK_STORE, CliStrings.DESCRIBE_DISK_STORE, + CliStrings.LIST_DISK_STORE, CliStrings.REVOKE_MISSING_DISK_STORE, + CliStrings.SHOW_MISSING_DISK_STORE, CliStrings.CREATE_DISK_STORE, + CliStrings.DESTROY_DISK_STORE, CliStrings.LIST_DURABLE_CQS, CliStrings.CLOSE_DURABLE_CLIENTS, + CliStrings.CLOSE_DURABLE_CQS, CliStrings.COUNT_DURABLE_CQ_EVENTS, + CliStrings.EXPORT_SHARED_CONFIG, CliStrings.IMPORT_SHARED_CONFIG, CliStrings.EXECUTE_FUNCTION, + CliStrings.DESTROY_FUNCTION, CliStrings.LIST_FUNCTION, CliStrings.LIST_INDEX, + CliStrings.CREATE_INDEX, CliStrings.DESTROY_INDEX, CliStrings.CREATE_DEFINED_INDEXES, + CliStrings.CLEAR_DEFINED_INDEXES, CliStrings.DEFINE_INDEX, CliStrings.LIST_MEMBER, + CliStrings.DESCRIBE_MEMBER, CliStrings.SHUTDOWN, CliStrings.GC, CliStrings.SHOW_DEADLOCK, + CliStrings.SHOW_METRICS, CliStrings.SHOW_LOG, CliStrings.EXPORT_STACKTRACE, + CliStrings.NETSTAT, CliStrings.EXPORT_LOGS, CliStrings.CHANGE_LOGLEVEL, + CliStrings.CONFIGURE_PDX, CliStrings.CREATE_ASYNC_EVENT_QUEUE, + CliStrings.LIST_ASYNC_EVENT_QUEUES, CliStrings.LIST_REGION, CliStrings.DESCRIBE_REGION, + CliStrings.STATUS_SHARED_CONFIG, CliStrings.CREATE_GATEWAYSENDER, + CliStrings.START_GATEWAYSENDER, CliStrings.PAUSE_GATEWAYSENDER, + CliStrings.RESUME_GATEWAYSENDER, CliStrings.STOP_GATEWAYSENDER, + CliStrings.CREATE_GATEWAYRECEIVER, CliStrings.START_GATEWAYRECEIVER, + CliStrings.STOP_GATEWAYRECEIVER, CliStrings.LIST_GATEWAY, CliStrings.STATUS_GATEWAYSENDER, + CliStrings.STATUS_GATEWAYRECEIVER, CliStrings.LOAD_BALANCE_GATEWAYSENDER, + CliStrings.DESTROY_GATEWAYSENDER}) + public boolean clientCommandsAvailable() { + Gfsh gfsh = Gfsh.getCurrentInstance(); + + // command should always be available on the server + if (gfsh == null) { + return true; + } + + // if in gfshVM, only when gfsh is connected and ready + return gfsh.isConnectedAndReady(); + } +} http://git-wip-us.apache.org/repos/asf/geode/blob/f85d2163/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/ConfigCommands.java ---------------------------------------------------------------------- diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/ConfigCommands.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/ConfigCommands.java index bc9c05b..48a8d7a 100644 --- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/ConfigCommands.java +++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/ConfigCommands.java @@ -437,16 +437,6 @@ public class ConfigCommands implements GfshCommand { } } - @CliAvailabilityIndicator({CliStrings.DESCRIBE_CONFIG, CliStrings.EXPORT_CONFIG, - CliStrings.ALTER_RUNTIME_CONFIG}) - public boolean configCommandsAvailable() { - boolean isAvailable = true; // always available on server - if (CliUtil.isGfshVM()) { // in gfsh check if connected - isAvailable = getGfsh() != null && getGfsh().isConnectedAndReady(); - } - return isAvailable; - } - /** * Interceptor used by gfsh to intercept execution of export config command at "shell". */ http://git-wip-us.apache.org/repos/asf/geode/blob/f85d2163/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/CreateAlterDestroyRegionCommands.java ---------------------------------------------------------------------- diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/CreateAlterDestroyRegionCommands.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/CreateAlterDestroyRegionCommands.java index 270972b..b2f1d56 100644 --- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/CreateAlterDestroyRegionCommands.java +++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/CreateAlterDestroyRegionCommands.java @@ -1122,14 +1122,4 @@ public class CreateAlterDestroyRegionCommands implements GfshCommand { } return foundMembers; } - - @CliAvailabilityIndicator({CliStrings.ALTER_REGION, CliStrings.CREATE_REGION, - CliStrings.DESTROY_REGION}) - public boolean isRegionCommandAvailable() { - boolean isAvailable = true; // always available on server - if (CliUtil.isGfshVM()) { // in gfsh check if connected //TODO: make this better - isAvailable = getGfsh() != null && getGfsh().isConnectedAndReady(); - } - return isAvailable; - } } http://git-wip-us.apache.org/repos/asf/geode/blob/f85d2163/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/DataCommands.java ---------------------------------------------------------------------- diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/DataCommands.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/DataCommands.java index 887470d..d004b38 100644 --- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/DataCommands.java +++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/DataCommands.java @@ -19,7 +19,6 @@ import org.apache.commons.lang.ArrayUtils; import org.apache.commons.lang.StringUtils; import org.apache.geode.LogWriter; import org.apache.geode.cache.CacheClosedException; -import org.apache.geode.cache.CacheFactory; import org.apache.geode.cache.DataPolicy; import org.apache.geode.cache.Region; import org.apache.geode.cache.control.RebalanceFactory; @@ -56,7 +55,6 @@ 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; import org.apache.geode.management.internal.cli.result.TabularResultData; -import org.apache.geode.management.internal.cli.shell.Gfsh; import org.apache.geode.management.internal.security.ResourceOperation; import org.apache.geode.security.ResourcePermission.Operation; import org.apache.geode.security.ResourcePermission.Resource; @@ -1100,7 +1098,7 @@ public class DataCommands implements GfshCommand { } @CliMetaData(relatedTopic = {CliStrings.TOPIC_GEODE_DATA, CliStrings.TOPIC_GEODE_REGION}) - @MultiStepCommand + @MultiStepCommand(shellOnlyStep = {"ALL"}) @CliCommand(value = {CliStrings.QUERY}, help = CliStrings.QUERY__HELP) public Object query( @CliOption(key = CliStrings.QUERY__QUERY, help = CliStrings.QUERY__QUERY__HELP, @@ -1110,10 +1108,6 @@ public class DataCommands implements GfshCommand { @CliOption(key = CliStrings.QUERY__INTERACTIVE, help = CliStrings.QUERY__INTERACTIVE__HELP, unspecifiedDefaultValue = "true") final boolean interactive) { - if (!CliUtil.isGfshVM() && stepName.equals(CliStrings.QUERY__STEPNAME__DEFAULTVALUE)) { - return ResultBuilder.createInfoResult(CliStrings.QUERY__MSG__NOT_SUPPORTED_ON_MEMBERS); - } - Object[] arguments = new Object[] {query, stepName, interactive}; CLIStep exec = new SelectExecStep(arguments); CLIStep display = new DataCommandFunction.SelectDisplayStep(arguments); @@ -1123,17 +1117,6 @@ public class DataCommands implements GfshCommand { return CLIMultiStepHelper.chooseStep(steps, stepName); } - @CliAvailabilityIndicator({CliStrings.REBALANCE, CliStrings.GET, CliStrings.PUT, - CliStrings.REMOVE, CliStrings.LOCATE_ENTRY, CliStrings.QUERY, CliStrings.IMPORT_DATA, - CliStrings.EXPORT_DATA}) - public boolean dataCommandsAvailable() { - boolean isAvailable = true; // always available on server - if (CliUtil.isGfshVM()) { // in gfsh check if connected - isAvailable = getGfsh() != null && getGfsh().isConnectedAndReady(); - } - return isAvailable; - } - private static class MemberPRInfo { ArrayList<DistributedMember> dsMemberList; public String region; http://git-wip-us.apache.org/repos/asf/geode/blob/f85d2163/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/DeployCommands.java ---------------------------------------------------------------------- diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/DeployCommands.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/DeployCommands.java index 8511de8..99216bf 100644 --- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/DeployCommands.java +++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/DeployCommands.java @@ -40,7 +40,6 @@ import org.apache.geode.management.internal.security.ResourceOperation; import org.apache.geode.security.NotAuthorizedException; 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; @@ -275,15 +274,6 @@ public class DeployCommands implements GfshCommand { } } - @CliAvailabilityIndicator({CliStrings.DEPLOY, CliStrings.UNDEPLOY, CliStrings.LIST_DEPLOYED}) - public boolean isConnected() { - if (!CliUtil.isGfshVM()) { - return true; - } - - return getGfsh() != null && getGfsh().isConnectedAndReady(); - } - /** * Interceptor used by gfsh to intercept execution of deploy command at "shell". */ http://git-wip-us.apache.org/repos/asf/geode/blob/f85d2163/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/DiskStoreCommands.java ---------------------------------------------------------------------- diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/DiskStoreCommands.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/DiskStoreCommands.java index 16124aa..ef2c3dd 100644 --- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/DiskStoreCommands.java +++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/DiskStoreCommands.java @@ -1458,18 +1458,4 @@ public class DiskStoreCommands implements GfshCommand { erd.addLine(message); return ResultBuilder.buildResult(erd); } - - @CliAvailabilityIndicator({CliStrings.BACKUP_DISK_STORE, CliStrings.COMPACT_DISK_STORE, - CliStrings.DESCRIBE_DISK_STORE, CliStrings.LIST_DISK_STORE, - CliStrings.REVOKE_MISSING_DISK_STORE, CliStrings.SHOW_MISSING_DISK_STORE, - CliStrings.CREATE_DISK_STORE, CliStrings.DESTROY_DISK_STORE}) - public boolean diskStoreCommandsAvailable() { - // these disk store commands are always available in GemFire - return (!CliUtil.isGfshVM() || (getGfsh() != null && getGfsh().isConnectedAndReady())); - } - - @CliAvailabilityIndicator({CliStrings.DESCRIBE_OFFLINE_DISK_STORE}) - public boolean offlineDiskStoreCommandsAvailable() { - return true; - } } http://git-wip-us.apache.org/repos/asf/geode/blob/f85d2163/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/DurableClientCommands.java ---------------------------------------------------------------------- diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/DurableClientCommands.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/DurableClientCommands.java index 6441f20..ef744d1 100644 --- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/DurableClientCommands.java +++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/DurableClientCommands.java @@ -14,13 +14,6 @@ */ 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.cache.execute.ResultCollector; import org.apache.geode.distributed.DistributedMember; import org.apache.geode.management.cli.CliMetaData; @@ -43,11 +36,16 @@ 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.HashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.TreeMap; + /** * The DurableClientCommands class encapsulates all GemFire shell (Gfsh) commands related to durable * clients and cqs defined in GemFire. @@ -416,15 +414,5 @@ public class DurableClientCommands implements GfshCommand { } } } - - @CliAvailabilityIndicator({CliStrings.LIST_DURABLE_CQS, CliStrings.CLOSE_DURABLE_CLIENTS, - CliStrings.CLOSE_DURABLE_CQS, CliStrings.COUNT_DURABLE_CQ_EVENTS}) - public boolean durableCommandsAvailable() { - boolean isAvailable = true; - if (CliUtil.isGfshVM()) { - isAvailable = getGfsh() != null && getGfsh().isConnectedAndReady(); - } - return isAvailable; - } } http://git-wip-us.apache.org/repos/asf/geode/blob/f85d2163/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/ExportImportClusterConfigurationCommands.java ---------------------------------------------------------------------- diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/ExportImportClusterConfigurationCommands.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/ExportImportClusterConfigurationCommands.java index 9d263d1..83eddee 100644 --- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/ExportImportClusterConfigurationCommands.java +++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/ExportImportClusterConfigurationCommands.java @@ -45,7 +45,6 @@ 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; @@ -213,15 +212,6 @@ public class ExportImportClusterConfigurationCommands implements GfshCommand { return results.get(0); } - @CliAvailabilityIndicator({CliStrings.EXPORT_SHARED_CONFIG, CliStrings.IMPORT_SHARED_CONFIG}) - public boolean sharedConfigCommandsAvailable() { - boolean isAvailable = true; // always available on server - if (CliUtil.isGfshVM()) { // in gfsh check if connected - isAvailable = getGfsh() != null && getGfsh().isConnectedAndReady(); - } - return isAvailable; - } - /** * Interceptor used by gfsh to intercept execution of export shared config command at "shell". */ http://git-wip-us.apache.org/repos/asf/geode/blob/f85d2163/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 2774584..b0193af 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 @@ -584,14 +584,4 @@ public class FunctionCommands implements GfshCommand { "Exception while attempting to list functions: " + th.getMessage()); } } - - @CliAvailabilityIndicator({CliStrings.EXECUTE_FUNCTION, CliStrings.DESTROY_FUNCTION, - CliStrings.LIST_FUNCTION}) - public boolean functionCommandsAvailable() { - boolean isAvailable = true; // always available on server - if (CliUtil.isGfshVM()) { // in gfsh check if connected - isAvailable = getGfsh() != null && getGfsh().isConnectedAndReady(); - } - return isAvailable; - } } http://git-wip-us.apache.org/repos/asf/geode/blob/f85d2163/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 5a4a3d7..c61de37 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 @@ -47,7 +47,6 @@ 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.CliAvailabilityIndicator; import org.springframework.shell.core.annotation.CliCommand; import org.springframework.shell.core.annotation.CliOption; @@ -636,13 +635,6 @@ public class IndexCommands implements GfshCommand { return ResultBuilder.buildResult(infoResult); } - @CliAvailabilityIndicator({CliStrings.LIST_INDEX, CliStrings.CREATE_INDEX, - CliStrings.DESTROY_INDEX, CliStrings.CREATE_DEFINED_INDEXES, CliStrings.CLEAR_DEFINED_INDEXES, - CliStrings.DEFINE_INDEX}) - public boolean indexCommandsAvailable() { - return !CliUtil.isGfshVM() || getGfsh() != null && getGfsh().isConnectedAndReady(); - } - protected static class IndexStatisticsDetailsAdapter { private final IndexStatisticsDetails indexStatisticsDetails; http://git-wip-us.apache.org/repos/asf/geode/blob/f85d2163/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/LauncherLifecycleCommands.java ---------------------------------------------------------------------- diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/LauncherLifecycleCommands.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/LauncherLifecycleCommands.java index 45fbf1b..bc506cf 100755 --- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/LauncherLifecycleCommands.java +++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/LauncherLifecycleCommands.java @@ -90,7 +90,6 @@ import org.apache.geode.management.internal.cli.util.ThreePhraseGenerator; import org.apache.geode.management.internal.configuration.utils.ClusterConfigurationStatusRetriever; import org.apache.geode.management.internal.security.ResourceConstants; import org.apache.geode.security.AuthenticationFailedException; -import org.springframework.shell.core.annotation.CliAvailabilityIndicator; import org.springframework.shell.core.annotation.CliCommand; import org.springframework.shell.core.annotation.CliOption; @@ -1378,14 +1377,6 @@ public class LauncherLifecycleCommands implements GfshCommand { return resourceFile; } - @CliAvailabilityIndicator({CliStrings.START_LOCATOR, CliStrings.STOP_LOCATOR, - CliStrings.STATUS_LOCATOR, CliStrings.START_SERVER, CliStrings.STOP_SERVER, - CliStrings.STATUS_SERVER, CliStrings.START_MANAGER, CliStrings.START_PULSE, - CliStrings.START_VSD, CliStrings.START_DATABROWSER}) - public boolean launcherCommandsAvailable() { - return true; - } - protected static class LauncherSignalListener implements SignalListener { private volatile boolean signaled = false; http://git-wip-us.apache.org/repos/asf/geode/blob/f85d2163/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/MemberCommands.java ---------------------------------------------------------------------- diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/MemberCommands.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/MemberCommands.java index 695718a..74264c3 100644 --- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/MemberCommands.java +++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/MemberCommands.java @@ -14,17 +14,6 @@ */ package org.apache.geode.management.internal.cli.commands; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Set; -import java.util.TreeSet; - -import org.springframework.shell.core.CommandMarker; -import org.springframework.shell.core.annotation.CliAvailabilityIndicator; -import org.springframework.shell.core.annotation.CliCommand; -import org.springframework.shell.core.annotation.CliOption; - import org.apache.geode.cache.CacheClosedException; import org.apache.geode.cache.CacheFactory; import org.apache.geode.cache.execute.FunctionInvocationTargetException; @@ -48,6 +37,15 @@ import org.apache.geode.management.internal.cli.shell.Gfsh; 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.CommandMarker; +import org.springframework.shell.core.annotation.CliCommand; +import org.springframework.shell.core.annotation.CliOption; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.Set; +import java.util.TreeSet; /** * @since GemFire 7.0 @@ -196,13 +194,4 @@ public class MemberCommands implements GfshCommand { return result; } - @CliAvailabilityIndicator({CliStrings.LIST_MEMBER, CliStrings.DESCRIBE_MEMBER}) - public boolean isListMemberAvailable() { - boolean isAvailable = true; - if (CliUtil.isGfshVM()) { - isAvailable = getGfsh() != null && getGfsh().isConnectedAndReady(); - } - return isAvailable; - } - } http://git-wip-us.apache.org/repos/asf/geode/blob/f85d2163/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 9754d7d..2c3d766 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 @@ -1938,17 +1938,6 @@ public class MiscellaneousCommands implements GfshCommand { } } - @CliAvailabilityIndicator({CliStrings.SHUTDOWN, CliStrings.GC, CliStrings.SHOW_DEADLOCK, - CliStrings.SHOW_METRICS, CliStrings.SHOW_LOG, CliStrings.EXPORT_STACKTRACE, - CliStrings.NETSTAT, CliStrings.EXPORT_LOGS, CliStrings.CHANGE_LOGLEVEL}) - public boolean shutdownCommandAvailable() { - boolean isAvailable = true; // always available on server - if (CliUtil.isGfshVM()) { // in gfsh check if connected - isAvailable = getGfsh() != null && getGfsh().isConnectedAndReady(); - } - return isAvailable; - } - private Set<String> getSetDifference(Set<String> set1, Set<String> set2) { Set<String> setDifference = new HashSet<String>(); for (String element : set1) { http://git-wip-us.apache.org/repos/asf/geode/blob/f85d2163/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 9f1290d..9bfd47b 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 @@ -32,7 +32,6 @@ 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.CliAvailabilityIndicator; import org.springframework.shell.core.annotation.CliCommand; import org.springframework.shell.core.annotation.CliOption; @@ -152,14 +151,6 @@ public class PDXCommands implements GfshCommand { return result; } - @CliAvailabilityIndicator({CliStrings.CONFIGURE_PDX}) - public boolean isRegionCommandAvailable() { - if (!CliUtil.isGfshVM()) { - return true; - } - return (getGfsh() != null && getGfsh().isConnectedAndReady()); - } - @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) @@ -208,9 +199,4 @@ public class PDXCommands implements GfshCommand { } } - - @CliAvailabilityIndicator({CliStrings.PDX_RENAME}) - public boolean pdxRenameCommandsAvailable() { - return true; - } } http://git-wip-us.apache.org/repos/asf/geode/blob/f85d2163/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 d3c2635..0f407e7 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 @@ -35,7 +35,6 @@ 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.CliAvailabilityIndicator; import org.springframework.shell.core.annotation.CliCommand; import org.springframework.shell.core.annotation.CliOption; @@ -256,14 +255,4 @@ public class QueueCommands implements GfshCommand { new Object[] {th.getMessage()})); } } - - @CliAvailabilityIndicator({CliStrings.CREATE_ASYNC_EVENT_QUEUE, - CliStrings.LIST_ASYNC_EVENT_QUEUES}) - public boolean queueCommandsAvailable() { - boolean isAvailable = true; - if (CliUtil.isGfshVM()) { - isAvailable = getGfsh() != null && getGfsh().isConnectedAndReady(); - } - return isAvailable; - } } http://git-wip-us.apache.org/repos/asf/geode/blob/f85d2163/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/RegionCommands.java ---------------------------------------------------------------------- diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/RegionCommands.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/RegionCommands.java index 2009dcc..260230b 100644 --- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/RegionCommands.java +++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/RegionCommands.java @@ -489,14 +489,4 @@ public class RegionCommands implements GfshCommand { } } } - - @CliAvailabilityIndicator({CliStrings.LIST_REGION, CliStrings.DESCRIBE_REGION}) - public boolean isRegionCommandAvailable() { - boolean isAvailable = true; // always available on server - if (CliUtil.isGfshVM()) { // in gfsh check if connected //TODO : make this better - isAvailable = getGfsh() != null && getGfsh().isConnectedAndReady(); - } - return isAvailable; - } - } http://git-wip-us.apache.org/repos/asf/geode/blob/f85d2163/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/ShellCommands.java ---------------------------------------------------------------------- diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/ShellCommands.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/ShellCommands.java index efd10d2..e37d1ba 100644 --- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/ShellCommands.java +++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/ShellCommands.java @@ -55,7 +55,6 @@ import org.apache.geode.management.internal.web.shell.HttpOperationInvoker; import org.apache.geode.management.internal.web.shell.RestHttpOperationInvoker; import org.apache.geode.security.AuthenticationFailedException; import org.springframework.shell.core.ExitShellRequest; -import org.springframework.shell.core.annotation.CliAvailabilityIndicator; import org.springframework.shell.core.annotation.CliCommand; import org.springframework.shell.core.annotation.CliOption; @@ -1037,10 +1036,4 @@ public class ShellCommands implements GfshCommand { } return result; } - - @CliAvailabilityIndicator({CliStrings.CONNECT, CliStrings.DISCONNECT, - CliStrings.DESCRIBE_CONNECTION}) - public boolean isAvailable() { - return true; - } } http://git-wip-us.apache.org/repos/asf/geode/blob/f85d2163/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/StatusCommands.java ---------------------------------------------------------------------- diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/StatusCommands.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/StatusCommands.java index fffb964..0b0b78b 100644 --- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/StatusCommands.java +++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/StatusCommands.java @@ -14,14 +14,6 @@ */ package org.apache.geode.management.internal.cli.commands; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -import org.springframework.shell.core.CommandMarker; -import org.springframework.shell.core.annotation.CliAvailabilityIndicator; -import org.springframework.shell.core.annotation.CliCommand; - import org.apache.geode.cache.execute.ResultCollector; import org.apache.geode.distributed.DistributedMember; import org.apache.geode.internal.cache.GemFireCacheImpl; @@ -39,6 +31,12 @@ import org.apache.geode.management.internal.configuration.domain.SharedConfigura 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.CommandMarker; +import org.springframework.shell.core.annotation.CliCommand; + +import java.util.HashSet; +import java.util.List; +import java.util.Set; public class StatusCommands implements GfshCommand { static final FetchSharedConfigurationStatusFunction fetchSharedConfigStatusFunction = @@ -81,12 +79,4 @@ public class StatusCommands implements GfshCommand { } return table; } - - @CliAvailabilityIndicator({CliStrings.STATUS_SHARED_CONFIG}) - public boolean isConnected() { - if (!CliUtil.isGfshVM()) { - return true; - } - return (getGfsh() != null && getGfsh().isConnectedAndReady()); - } } http://git-wip-us.apache.org/repos/asf/geode/blob/f85d2163/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/WanCommands.java ---------------------------------------------------------------------- diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/WanCommands.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/WanCommands.java index 28686ce..ad3d22c 100644 --- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/WanCommands.java +++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/commands/WanCommands.java @@ -14,27 +14,6 @@ */ package org.apache.geode.management.internal.cli.commands; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.TreeMap; -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.ThreadFactory; -import java.util.concurrent.atomic.AtomicInteger; -import java.util.concurrent.atomic.AtomicReference; - -import javax.management.ObjectName; - -import org.springframework.shell.core.annotation.CliAvailabilityIndicator; -import org.springframework.shell.core.annotation.CliCommand; -import org.springframework.shell.core.annotation.CliOption; - import org.apache.geode.cache.execute.ResultCollector; import org.apache.geode.distributed.DistributedMember; import org.apache.geode.internal.cache.InternalCache; @@ -65,6 +44,24 @@ 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.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.TreeMap; +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.ThreadFactory; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.atomic.AtomicReference; +import javax.management.ObjectName; public class WanCommands implements GfshCommand { @@ -1129,19 +1126,6 @@ public class WanCommands implements GfshCommand { resultData.accumulate("Message", message); } - @CliAvailabilityIndicator({CliStrings.CREATE_GATEWAYSENDER, CliStrings.START_GATEWAYSENDER, - CliStrings.PAUSE_GATEWAYSENDER, CliStrings.RESUME_GATEWAYSENDER, - CliStrings.STOP_GATEWAYSENDER, CliStrings.CREATE_GATEWAYRECEIVER, - CliStrings.START_GATEWAYRECEIVER, CliStrings.STOP_GATEWAYRECEIVER, CliStrings.LIST_GATEWAY, - CliStrings.STATUS_GATEWAYSENDER, CliStrings.STATUS_GATEWAYRECEIVER, - CliStrings.LOAD_BALANCE_GATEWAYSENDER, CliStrings.DESTROY_GATEWAYSENDER}) - public boolean isWanCommandsAvailable() { - boolean isAvailable = true; // always available on server - if (CliUtil.isGfshVM()) { - isAvailable = getGfsh() != null && getGfsh().isConnectedAndReady(); - } - return isAvailable; - } private Result handleCommandResultException(CommandResultException crex) { Result result = null; http://git-wip-us.apache.org/repos/asf/geode/blob/f85d2163/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/DataCommandFunction.java ---------------------------------------------------------------------- diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/DataCommandFunction.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/DataCommandFunction.java index 20e2701..0efe074 100644 --- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/DataCommandFunction.java +++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/DataCommandFunction.java @@ -47,7 +47,6 @@ import org.apache.geode.internal.cache.PartitionedRegion; import org.apache.geode.internal.logging.LogService; import org.apache.geode.internal.security.SecurityService; import org.apache.geode.management.cli.Result; -import org.apache.geode.management.internal.cli.CliUtil; import org.apache.geode.management.internal.cli.commands.DataCommands; import org.apache.geode.management.internal.cli.domain.DataCommandRequest; import org.apache.geode.management.internal.cli.domain.DataCommandResult; @@ -125,7 +124,6 @@ public class DataCommandFunction extends FunctionAdapter implements InternalEnti @Override public void execute(FunctionContext functionContext) { try { - InternalCache cache = getCache(); DataCommandRequest request = (DataCommandRequest) functionContext.getArguments(); if (logger.isDebugEnabled()) { logger.debug("Executing function : \n{}\n on member {}", request, @@ -1041,7 +1039,7 @@ public class DataCommandFunction extends FunctionAdapter implements InternalEnti public static int getPageSize() { int pageSize = -1; Map<String, String> session; - if (CliUtil.isGfshVM()) { + if (Gfsh.getCurrentInstance() != null) { session = Gfsh.getCurrentInstance().getEnv(); } else { session = CommandExecutionContext.getShellEnv(); http://git-wip-us.apache.org/repos/asf/geode/blob/f85d2163/geode-core/src/main/java/org/apache/geode/management/internal/cli/multistep/CLIMultiStepHelper.java ---------------------------------------------------------------------- diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/multistep/CLIMultiStepHelper.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/multistep/CLIMultiStepHelper.java index d53261d..4eeb227 100644 --- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/multistep/CLIMultiStepHelper.java +++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/multistep/CLIMultiStepHelper.java @@ -17,11 +17,9 @@ package org.apache.geode.management.internal.cli.multistep; import org.apache.geode.LogWriter; import org.apache.geode.cache.CacheFactory; import org.apache.geode.management.cli.Result; -import org.apache.geode.management.internal.cli.CliUtil; import org.apache.geode.management.internal.cli.CommandRequest; import org.apache.geode.management.internal.cli.GfshParseResult; import org.apache.geode.management.internal.cli.LogWrapper; -import org.apache.geode.management.internal.cli.i18n.CliStrings; import org.apache.geode.management.internal.cli.json.GfJsonException; import org.apache.geode.management.internal.cli.json.GfJsonObject; import org.apache.geode.management.internal.cli.remote.CommandExecutionContext; @@ -56,7 +54,8 @@ public class CLIMultiStepHelper { public static final String STEP_ARGS = "stepArgs"; public static final int DEFAULT_PAGE_SIZE = 20; - public static Result execCLISteps(LogWrapper logWrapper, Gfsh shell, ParseResult parseResult) { + public static Result execCLISteps(MultiStepCommand msc, LogWrapper logWrapper, Gfsh shell, + ParseResult parseResult) { CLIStep[] steps = (CLIStep[]) ReflectionUtils.invokeMethod(parseResult.getMethod(), parseResult.getInstance(), parseResult.getArguments()); if (steps != null) { @@ -117,7 +116,7 @@ public class CLIMultiStepHelper { CommandRequest commandRequest = new CommandRequest(gfshParseResult, shell.getEnv()); commandRequest .setCustomInput(changeStepName(gfshParseResult.getUserInput(), nextStep.getName())); - commandRequest.getCustomParameters().put(CliStrings.QUERY__STEPNAME, + commandRequest.getCustomParameters().put(MultiStepCommand.STEP_PARAMETER_NAME, nextStep.getName()); String json = (String) shell.getOperationInvoker().processCommand(commandRequest); @@ -127,11 +126,6 @@ public class CLIMultiStepHelper { throw new IllegalArgumentException("Command Configuration/Definition error."); } } else { - try { - throw new Exception(); - } catch (Exception ex) { - ex.printStackTrace(); - } throw new IllegalStateException( "Can't execute a remote command without connection. Use 'connect' first to connect."); } @@ -208,7 +202,7 @@ public class CLIMultiStepHelper { public static GfJsonObject getStepArgs() { Map<String, String> args = null; - if (CliUtil.isGfshVM) { + if (Gfsh.getCurrentInstance() != null) { args = Gfsh.getCurrentInstance().getEnv(); } else { args = CommandExecutionContext.getShellEnv(); @@ -227,13 +221,6 @@ public class CLIMultiStepHelper { return object; } - public static Result createSimpleStepResult(String nextStep) { - CompositeResultData result = ResultBuilder.createCompositeResultData(); - SectionResultData section = result.addSection(STEP_SECTION); - section.addData(NEXT_STEP_NAME, nextStep); - return ResultBuilder.buildResult(result); - } - public static Object chooseStep(CLIStep[] steps, String stepName) { if ("ALL".equals(stepName)) { return steps; http://git-wip-us.apache.org/repos/asf/geode/blob/f85d2163/geode-core/src/main/java/org/apache/geode/management/internal/cli/multistep/MultiStepCommand.java ---------------------------------------------------------------------- diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/multistep/MultiStepCommand.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/multistep/MultiStepCommand.java index 6708726..75925f7 100644 --- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/multistep/MultiStepCommand.java +++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/multistep/MultiStepCommand.java @@ -27,5 +27,9 @@ import java.lang.annotation.Target; @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface MultiStepCommand { + public static String STEP_PARAMETER_NAME = "step-name"; + String[] shellOnlyStep(); + + String stepParameterName() default STEP_PARAMETER_NAME; } http://git-wip-us.apache.org/repos/asf/geode/blob/f85d2163/geode-core/src/main/java/org/apache/geode/management/internal/cli/remote/RemoteExecutionStrategy.java ---------------------------------------------------------------------- diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/remote/RemoteExecutionStrategy.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/remote/RemoteExecutionStrategy.java index fa0f3b2..89cb9ad 100644 --- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/remote/RemoteExecutionStrategy.java +++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/remote/RemoteExecutionStrategy.java @@ -14,6 +14,7 @@ */ package org.apache.geode.management.internal.cli.remote; +import org.apache.commons.lang.StringUtils; import org.apache.geode.internal.ClassPathLoader; import org.apache.geode.management.ManagementService; import org.apache.geode.management.cli.CliMetaData; @@ -22,6 +23,7 @@ import org.apache.geode.management.cli.Result.Status; import org.apache.geode.management.internal.cli.CliAroundInterceptor; import org.apache.geode.management.internal.cli.GfshParseResult; import org.apache.geode.management.internal.cli.LogWrapper; +import org.apache.geode.management.internal.cli.multistep.MultiStepCommand; import org.apache.geode.management.internal.cli.result.FileResult; import org.apache.geode.management.internal.cli.result.ResultBuilder; import org.springframework.shell.event.ParseResult; @@ -29,6 +31,7 @@ import org.springframework.util.Assert; import org.springframework.util.ReflectionUtils; import java.lang.reflect.Method; +import java.util.Arrays; /** * @@ -54,7 +57,7 @@ public class RemoteExecutionStrategy { Method method = gfshParseResult.getMethod(); - if (!isShellOnly(method)) { + if (!isShellOnly(method, gfshParseResult)) { Boolean fromShell = CommandExecutionContext.isShellRequest(); boolean sentFromShell = fromShell != null && fromShell.booleanValue(); String interceptorClass = getInterceptor(gfshParseResult.getMethod()); @@ -120,9 +123,26 @@ public class RemoteExecutionStrategy { return result; } - private boolean isShellOnly(Method method) { + private boolean isShellOnly(Method method, GfshParseResult result) { CliMetaData cliMetadata = method.getAnnotation(CliMetaData.class); - return cliMetadata != null && cliMetadata.shellOnly(); + if (cliMetadata == null) { + return false; + } + if (cliMetadata.shellOnly()) { + return true; + } + MultiStepCommand stepCommand = method.getAnnotation(MultiStepCommand.class); + if (stepCommand == null) { + return false; + } + String step = result.getParamValue(MultiStepCommand.STEP_PARAMETER_NAME); + if (StringUtils.isBlank(step)) { + return false; + } + if (Arrays.asList(stepCommand.shellOnlyStep()).contains(step)) { + return true; + } + return false; } private String getInterceptor(Method method) { http://git-wip-us.apache.org/repos/asf/geode/blob/f85d2163/geode-core/src/main/java/org/apache/geode/management/internal/cli/result/AbstractResultData.java ---------------------------------------------------------------------- diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/result/AbstractResultData.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/result/AbstractResultData.java index f453ec6..0d1d91b 100644 --- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/result/AbstractResultData.java +++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/result/AbstractResultData.java @@ -14,18 +14,6 @@ */ package org.apache.geode.management.internal.cli.result; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.FileWriter; -import java.io.IOException; -import java.io.UnsupportedEncodingException; -import java.nio.charset.Charset; -import java.text.MessageFormat; -import java.util.Base64; -import java.util.zip.DataFormatException; - import org.apache.geode.management.cli.Result.Status; import org.apache.geode.management.internal.cli.CliUtil; import org.apache.geode.management.internal.cli.CliUtil.DeflaterInflaterData; @@ -35,6 +23,15 @@ import org.apache.geode.management.internal.cli.json.GfJsonException; import org.apache.geode.management.internal.cli.json.GfJsonObject; import org.apache.geode.management.internal.cli.shell.Gfsh; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileOutputStream; +import java.io.FileWriter; +import java.io.IOException; +import java.text.MessageFormat; +import java.util.Base64; +import java.util.zip.DataFormatException; + /** * * @@ -234,7 +231,6 @@ public abstract class AbstractResultData implements ResultData { byte[] byteArray = Base64.getDecoder().decode(fileDataString); byte[] uncompressBytes = CliUtil.uncompressBytes(byteArray, fileDataLength).getData(); - boolean isGfshVM = CliUtil.isGfshVM(); File fileToDumpData = new File(fileName); if (!fileToDumpData.isAbsolute()) { if (directory == null || directory.isEmpty()) { @@ -247,21 +243,19 @@ public abstract class AbstractResultData implements ResultData { if (parentDirectory != null) { parentDirectory.mkdirs(); } + Gfsh gfsh = Gfsh.getCurrentInstance(); if (fileToDumpData.exists()) { String fileExistsMessage = CliStrings.format(CliStrings.ABSTRACTRESULTDATA__MSG__FILE_WITH_NAME_0_EXISTS_IN_1, new Object[] {fileName, fileToDumpData.getParent(), options}); - if (isGfshVM) { - Gfsh gfsh = Gfsh.getCurrentInstance(); - if (gfsh != null && !gfsh.isQuietMode() && !overwriteAllExisting) { - fileExistsMessage = fileExistsMessage + " Overwrite? " + options + " : "; - String interaction = gfsh.interact(fileExistsMessage); - if ("a".equalsIgnoreCase(interaction.trim())) { - overwriteAllExisting = true; - } else if (!"y".equalsIgnoreCase(interaction.trim())) { - // do not save file & continue - continue BYTEARRAY_LOOP; - } + if (gfsh != null && !gfsh.isQuietMode() && !overwriteAllExisting) { + fileExistsMessage = fileExistsMessage + " Overwrite? " + options + " : "; + String interaction = gfsh.interact(fileExistsMessage); + if ("a".equalsIgnoreCase(interaction.trim())) { + overwriteAllExisting = true; + } else if (!"y".equalsIgnoreCase(interaction.trim())) { + // do not save file & continue + continue BYTEARRAY_LOOP; } } else { throw new IOException(fileExistsMessage); @@ -269,18 +263,17 @@ public abstract class AbstractResultData implements ResultData { } else if (!parentDirectory.exists()) { handleCondition(CliStrings.format( CliStrings.ABSTRACTRESULTDATA__MSG__PARENT_DIRECTORY_OF_0_DOES_NOT_EXIST, - fileToDumpData.getAbsolutePath()), isGfshVM); + fileToDumpData.getAbsolutePath())); return; } else if (!parentDirectory.canWrite()) { handleCondition(CliStrings.format( CliStrings.ABSTRACTRESULTDATA__MSG__PARENT_DIRECTORY_OF_0_IS_NOT_WRITABLE, - fileToDumpData.getAbsolutePath()), isGfshVM); + fileToDumpData.getAbsolutePath())); return; } else if (!parentDirectory.isDirectory()) { handleCondition( CliStrings.format(CliStrings.ABSTRACTRESULTDATA__MSG__PARENT_OF_0_IS_NOT_DIRECTORY, - fileToDumpData.getAbsolutePath()), - isGfshVM); + fileToDumpData.getAbsolutePath())); return; } if (fileType == FILE_TYPE_TEXT) { @@ -298,7 +291,7 @@ public abstract class AbstractResultData implements ResultData { } // System.out.println("fileMessage :: "+fileMessage); if (fileMessage != null && !fileMessage.isEmpty()) { - if (isGfshVM) { + if (gfsh != null) { Gfsh.println( MessageFormat.format(fileMessage, new Object[] {fileToDumpData.getAbsolutePath()})); } @@ -308,13 +301,11 @@ public abstract class AbstractResultData implements ResultData { } // TODO - Abhishek : prepare common utility for this & ANSI Styling - static void handleCondition(String message, boolean isGfshVM) throws IOException { - if (isGfshVM) { - Gfsh gfsh = Gfsh.getCurrentInstance(); - // null check required in GfshVM too to avoid test issues - if (gfsh != null && !gfsh.isQuietMode()) { - gfsh.logWarning(message, null); - } + static void handleCondition(String message) throws IOException { + Gfsh gfsh = Gfsh.getCurrentInstance(); + // null check required in GfshVM too to avoid test issues + if (gfsh != null && !gfsh.isQuietMode()) { + gfsh.logWarning(message, null); } else { throw new IOException(message); } http://git-wip-us.apache.org/repos/asf/geode/blob/f85d2163/geode-core/src/main/java/org/apache/geode/management/internal/cli/shell/Gfsh.java ---------------------------------------------------------------------- diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/shell/Gfsh.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/shell/Gfsh.java index 74387d6..8ab7c93 100755 --- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/shell/Gfsh.java +++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/shell/Gfsh.java @@ -131,7 +131,6 @@ public class Gfsh extends JLineShell { private static final String DEFAULT_SECONDARY_PROMPT = ">"; private static final int DEFAULT_HEIGHT = 100; private static final Object INSTANCE_LOCK = new Object(); - public static boolean SUPPORT_MUTLIPLESHELL = false; // private static final String ANIMATION_SLOT = "A"; //see 46072 protected static PrintStream gfshout = System.out; @@ -231,8 +230,7 @@ public class Gfsh extends JLineShell { try { ClassUtils.forName("sun.misc.Signal", new SunAPINotFoundException( "WARNING!!! Not running a Sun JVM. Could not find the sun.misc.Signal class; Signal handling disabled.")); - signalHandler = (CliUtil.isGfshVM() ? new GfshSignalHandler() - : new AbstractSignalNotificationHandler() {}); + signalHandler = new GfshSignalHandler(); } catch (SunAPINotFoundException e) { signalHandler = new AbstractSignalNotificationHandler() {}; this.gfshFileLogger.warning(e.getMessage()); @@ -347,11 +345,7 @@ public class Gfsh extends JLineShell { } public static Gfsh getCurrentInstance() { - if (!SUPPORT_MUTLIPLESHELL) { - return instance; - } else { - return gfshThreadLocal.get(); - } + return instance; } private static String extractKey(String input) { @@ -517,6 +511,7 @@ public class Gfsh extends JLineShell { if (operationInvoker != null && operationInvoker.isConnected()) { operationInvoker.stop(); } + instance = null; } public void waitForComplete() throws InterruptedException { http://git-wip-us.apache.org/repos/asf/geode/blob/f85d2163/geode-core/src/main/java/org/apache/geode/management/internal/cli/shell/GfshExecutionStrategy.java ---------------------------------------------------------------------- diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/shell/GfshExecutionStrategy.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/shell/GfshExecutionStrategy.java index 2b39bed..1cbdb15 100755 --- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/shell/GfshExecutionStrategy.java +++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/shell/GfshExecutionStrategy.java @@ -79,7 +79,7 @@ public class GfshExecutionStrategy implements ExecutionStrategy { // Check if it's a multi-step command MultiStepCommand cmd = method.getAnnotation(MultiStepCommand.class); if (cmd != null) { - return execCLISteps(logWrapper, shell, parseResult); + return execCLISteps(cmd, logWrapper, shell, parseResult); } // check if it's a shell only command http://git-wip-us.apache.org/repos/asf/geode/blob/f85d2163/geode-core/src/test/java/org/apache/geode/management/DataCommandMBeanTest.java ---------------------------------------------------------------------- diff --git a/geode-core/src/test/java/org/apache/geode/management/DataCommandMBeanTest.java b/geode-core/src/test/java/org/apache/geode/management/DataCommandMBeanTest.java new file mode 100644 index 0000000..e5d6ce8 --- /dev/null +++ b/geode-core/src/test/java/org/apache/geode/management/DataCommandMBeanTest.java @@ -0,0 +1,59 @@ +/* + * 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; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.apache.geode.cache.RegionShortcut; +import org.apache.geode.test.dunit.rules.MBeanServerConnectionRule; +import org.apache.geode.test.dunit.rules.ServerStarterRule; +import org.apache.geode.test.junit.categories.IntegrationTest; +import org.junit.Before; +import org.junit.ClassRule; +import org.junit.Rule; +import org.junit.Test; +import org.junit.experimental.categories.Category; + +@Category(IntegrationTest.class) +public class DataCommandMBeanTest { + private MemberMXBean bean; + + @ClassRule + public static ServerStarterRule server = + new ServerStarterRule().withJMXManager().withRegion(RegionShortcut.REPLICATE, "testRegion"); + + @Rule + public MBeanServerConnectionRule mBeanConnector = new MBeanServerConnectionRule(); + + @Before + public void before() throws Exception { + mBeanConnector.connect(server.getJmxPort()); + bean = mBeanConnector.getProxyMBean(MemberMXBean.class); + } + + @Test + public void testQueryWithStepAll() throws Exception { + String result = bean.processCommand("query --query='SELECT * FROM /testRegion'"); + assertThat(result).contains("Only Remote command can be executed"); + } + + @Test + public void testQueryWithStepExec() throws Exception { + String result = + bean.processCommand("query --query='SELECT * FROM /testRegion' --step-name=SELECT_EXEC"); + assertThat(result).contains("Result : true"); + } +} http://git-wip-us.apache.org/repos/asf/geode/blob/f85d2163/geode-core/src/test/java/org/apache/geode/management/internal/cli/HeadlessGfsh.java ---------------------------------------------------------------------- diff --git a/geode-core/src/test/java/org/apache/geode/management/internal/cli/HeadlessGfsh.java b/geode-core/src/test/java/org/apache/geode/management/internal/cli/HeadlessGfsh.java index 9ea22da..f636c89 100644 --- a/geode-core/src/test/java/org/apache/geode/management/internal/cli/HeadlessGfsh.java +++ b/geode-core/src/test/java/org/apache/geode/management/internal/cli/HeadlessGfsh.java @@ -84,7 +84,6 @@ public class HeadlessGfsh implements ResultHandler { }); this.shell.start(); - this.shell.setThreadLocalInstance(); try { shellStarted.await(); @@ -195,10 +194,6 @@ public class HeadlessGfsh implements ResultHandler { this.handler = handler; } - public void setThreadLocalInstance() { - gfshThreadLocal.set(this); - } - protected void handleExecutionResult(Object result) { if (!result.equals(ERROR_RESULT)) { super.handleExecutionResult(result); @@ -222,6 +217,7 @@ public class HeadlessGfsh implements ResultHandler { } public void stop() { + super.stop(); stopCalledThroughAPI = true; } @@ -317,11 +313,6 @@ public class HeadlessGfsh implements ResultHandler { * HeadlessGfshConfig for tests. Taken from TestableGfsh */ static class HeadlessGfshConfig extends GfshConfig { - { - // set vm as a gfsh vm - CliUtil.isGfshVM = true; - } - private File parentDir; private String fileNamePrefix; private String name; http://git-wip-us.apache.org/repos/asf/geode/blob/f85d2163/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/CliCommandTestBase.java ---------------------------------------------------------------------- diff --git a/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/CliCommandTestBase.java b/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/CliCommandTestBase.java index bd5083c..d68bfae 100644 --- a/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/CliCommandTestBase.java +++ b/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/CliCommandTestBase.java @@ -26,12 +26,10 @@ import static org.assertj.core.api.Assertions.assertThat; import org.apache.geode.cache.Cache; import org.apache.geode.internal.AvailablePortHelper; import org.apache.geode.management.ManagementService; -import org.apache.geode.management.internal.cli.CliUtil; import org.apache.geode.management.internal.cli.CommandManager; import org.apache.geode.management.internal.cli.HeadlessGfsh; 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.shell.Gfsh; import org.apache.geode.management.internal.cli.util.CommandStringBuilder; import org.apache.geode.security.TestSecurityManager; import org.apache.geode.test.dunit.Host; @@ -121,7 +119,6 @@ public abstract class CliCommandTestBase extends JUnit4CacheTestCase { @Override public final void preTearDownCacheTestCase() throws Exception { preTearDownCliCommandTestBase(); - CliUtil.isGfshVM = false; destroyDefaultSetup(); } @@ -300,7 +297,6 @@ public abstract class CliCommandTestBase extends JUnit4CacheTestCase { */ private HeadlessGfsh createShell() { try { - Gfsh.SUPPORT_MUTLIPLESHELL = true; String shellId = getClass().getSimpleName() + "_" + getName(); HeadlessGfsh shell = new HeadlessGfsh(shellId, 30, this.gfshDir); // Added to avoid trimming of the columns http://git-wip-us.apache.org/repos/asf/geode/blob/f85d2163/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/MemberCommandsDUnitTest.java ---------------------------------------------------------------------- diff --git a/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/MemberCommandsDUnitTest.java b/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/MemberCommandsDUnitTest.java index 22502c3..fb8341a 100644 --- a/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/MemberCommandsDUnitTest.java +++ b/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/MemberCommandsDUnitTest.java @@ -43,7 +43,6 @@ import org.apache.geode.internal.AvailablePortHelper; import org.apache.geode.internal.cache.GemFireCacheImpl; import org.apache.geode.management.cli.Result; import org.apache.geode.management.cli.Result.Status; -import org.apache.geode.management.internal.cli.CliUtil; import org.apache.geode.management.internal.cli.i18n.CliStrings; import org.apache.geode.management.internal.cli.remote.CommandProcessor; import org.apache.geode.management.internal.cli.util.CommandStringBuilder; @@ -85,14 +84,6 @@ public class MemberCommandsDUnitTest extends JUnit4CacheTestCase { new ProvideSystemProperty(CliCommandTestBase.USE_HTTP_SYSTEM_PROPERTY, "true"); @Override - public final void postSetUp() throws Exception { - // This test does not require an actual Gfsh connection to work, however when run as part of a - // suite, prior tests - // may mess up the environment causing this test to fail. Setting this prevents false failures. - CliUtil.isGfshVM = false; - } - - @Override public final void postTearDownCacheTestCase() throws Exception { disconnectFromDS(); } http://git-wip-us.apache.org/repos/asf/geode/blob/f85d2163/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/ShowDeadlockDUnitTest.java ---------------------------------------------------------------------- diff --git a/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/ShowDeadlockDUnitTest.java b/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/ShowDeadlockDUnitTest.java index e7ae38e..8b5c80e 100755 --- a/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/ShowDeadlockDUnitTest.java +++ b/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/ShowDeadlockDUnitTest.java @@ -27,7 +27,6 @@ import org.apache.geode.distributed.internal.membership.InternalDistributedMembe import org.apache.geode.management.cli.CommandStatement; import org.apache.geode.management.cli.Result; import org.apache.geode.management.cli.Result.Status; -import org.apache.geode.management.internal.cli.CliUtil; import org.apache.geode.management.internal.cli.i18n.CliStrings; import org.apache.geode.management.internal.cli.remote.CommandProcessor; import org.apache.geode.management.internal.cli.util.CommandStringBuilder; @@ -55,9 +54,6 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; -import static org.apache.geode.test.dunit.Assert.*; -import static org.apache.geode.test.dunit.Invoke.invokeInEveryVM; - /** * This DUnit tests uses same code as GemFireDeadlockDetectorDUnitTest and uses the command * processor for executing the "show deadlock" command @@ -100,17 +96,8 @@ public class ShowDeadlockDUnitTest extends JUnit4CacheTestCase { } @Override - public final void postSetUp() throws Exception { - // This test does not require an actual Gfsh connection to work, however when run as part of a - // suite, prior tests - // may mess up the environment causing this test to fail. Setting this prevents false failures. - CliUtil.isGfshVM = false; - } - - @Override public final void preTearDownCacheTestCase() throws Exception { invokeInEveryVM(() -> stuckThreads.forEach(Thread::interrupt)); - CliUtil.isGfshVM = true; } @Test http://git-wip-us.apache.org/repos/asf/geode/blob/f85d2163/geode-core/src/test/java/org/apache/geode/test/dunit/rules/GfshShellConnectionRule.java ---------------------------------------------------------------------- diff --git a/geode-core/src/test/java/org/apache/geode/test/dunit/rules/GfshShellConnectionRule.java b/geode-core/src/test/java/org/apache/geode/test/dunit/rules/GfshShellConnectionRule.java index bc709db..872553e 100644 --- a/geode-core/src/test/java/org/apache/geode/test/dunit/rules/GfshShellConnectionRule.java +++ b/geode-core/src/test/java/org/apache/geode/test/dunit/rules/GfshShellConnectionRule.java @@ -19,7 +19,6 @@ import static org.assertj.core.api.Assertions.assertThat; import org.apache.commons.lang.StringUtils; import org.apache.geode.management.cli.Result; -import org.apache.geode.management.internal.cli.CliUtil; import org.apache.geode.management.internal.cli.HeadlessGfsh; import org.apache.geode.management.internal.cli.i18n.CliStrings; import org.apache.geode.management.internal.cli.result.CommandResult; @@ -128,7 +127,6 @@ public class GfshShellConnectionRule extends DescribedExternalResource { } public void connect(int port, PortType type, String... options) throws Exception { - CliUtil.isGfshVM = true; if (gfsh == null) { this.gfsh = new HeadlessGfsh(getClass().getName(), 30, temporaryFolder.newFolder("gfsh_files").getAbsolutePath()); @@ -194,7 +192,6 @@ public class GfshShellConnectionRule extends DescribedExternalResource { gfsh.executeCommand("exit"); gfsh.terminate(); gfsh = null; - CliUtil.isGfshVM = false; } public HeadlessGfsh getGfsh() { http://git-wip-us.apache.org/repos/asf/geode/blob/f85d2163/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/cli/LuceneIndexCommands.java ---------------------------------------------------------------------- diff --git a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/cli/LuceneIndexCommands.java b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/cli/LuceneIndexCommands.java index 5252bd1..00440e5 100755 --- a/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/cli/LuceneIndexCommands.java +++ b/geode-lucene/src/main/java/org/apache/geode/cache/lucene/internal/cli/LuceneIndexCommands.java @@ -580,6 +580,14 @@ public class LuceneIndexCommands implements GfshCommand { LuceneCliStrings.LUCENE_CREATE_INDEX, LuceneCliStrings.LUCENE_DESCRIBE_INDEX, LuceneCliStrings.LUCENE_LIST_INDEX, LuceneCliStrings.LUCENE_DESTROY_INDEX}) public boolean indexCommandsAvailable() { - return (!CliUtil.isGfshVM() || (getGfsh() != null && getGfsh().isConnectedAndReady())); + Gfsh gfsh = Gfsh.getCurrentInstance(); + + // command should always be available on the server + if (gfsh == null) { + return true; + } + + // if in gfshVM, only when gfsh is connected and ready + return gfsh.isConnectedAndReady(); } }