This is an automated email from the ASF dual-hosted git repository.

dgovorukhin pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ignite.git


The following commit(s) were added to refs/heads/master by this push:
     new ac3714e  IGNITE-11995 control.sh if experimental command disabled - 
don't show help for experemental commands - Fixes  #6704.
ac3714e is described below

commit ac3714ef2bce71f0016e4535e9fef44c31b537a7
Author: Kirill Tkalenko <tkalkir...@yandex.ru>
AuthorDate: Tue Jul 23 11:27:15 2019 +0300

    IGNITE-11995 control.sh if experimental command disabled - don't show help 
for experemental commands - Fixes  #6704.
    
    Signed-off-by: Dmitriy Govorukhin <dmitriy.govoruk...@gmail.com>
---
 bin/control.bat                                    |  5 +++
 .../ignite/internal/commandline/WalCommands.java   | 48 ++++++++++++----------
 .../commandline/CommandHandlerParsingTest.java     | 30 ++------------
 .../apache/ignite/util/GridCommandHandlerTest.java | 44 ++++++++++++++++++++
 4 files changed, 80 insertions(+), 47 deletions(-)

diff --git a/bin/control.bat b/bin/control.bat
index c88b8bc..77a3f3f 100644
--- a/bin/control.bat
+++ b/bin/control.bat
@@ -170,6 +170,11 @@ if %ERRORLEVEL% equ 0 (
 )
 
 ::
+:: Uncomment to enable experimental commands [--wal]
+::
+:: set JVM_OPTS=%JVM_OPTS% -DIGNITE_ENABLE_EXPERIMENTAL_COMMAND=true
+
+::
 :: Uncomment the following GC settings if you see spikes in your throughput 
due to Garbage Collection.
 ::
 :: set JVM_OPTS=%JVM_OPTS% -XX:+UseG1GC
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/commandline/WalCommands.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/commandline/WalCommands.java
index 8435a15..2960b36 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/commandline/WalCommands.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/commandline/WalCommands.java
@@ -36,6 +36,7 @@ import 
org.apache.ignite.internal.visor.misc.VisorWalTaskResult;
 
 import static 
org.apache.ignite.IgniteSystemProperties.IGNITE_ENABLE_EXPERIMENTAL_COMMAND;
 import static 
org.apache.ignite.internal.commandline.CommandArgIterator.isCommandOrOption;
+import static 
org.apache.ignite.internal.commandline.CommandHandler.UTILITY_NAME;
 import static org.apache.ignite.internal.commandline.CommandList.WAL;
 import static 
org.apache.ignite.internal.commandline.CommandLogger.DOUBLE_INDENT;
 import static org.apache.ignite.internal.commandline.CommandLogger.INDENT;
@@ -68,12 +69,13 @@ public class WalCommands implements Command<T2<String, 
String>> {
 
     /** {@inheritDoc} */
     @Override public void printUsage(Logger logger) {
-        if (enableExperimental()) {
-            Command.usage(logger, "Print absolute paths of unused archived wal 
segments on each node:", WAL,
-                WAL_PRINT, "[consistentId1,consistentId2,....,consistentIdN]");
-            Command.usage(logger, "Delete unused archived wal segments on each 
node:", WAL, WAL_DELETE,
-                "[consistentId1,consistentId2,....,consistentIdN]", 
optional(CMD_AUTO_CONFIRMATION));
-        }
+        if (!enableExperimental())
+            return;
+
+        Command.usage(logger, "Print absolute paths of unused archived wal 
segments on each node:", WAL,
+            WAL_PRINT, "[consistentId1,consistentId2,....,consistentIdN]");
+        Command.usage(logger, "Delete unused archived wal segments on each 
node:", WAL, WAL_DELETE,
+            "[consistentId1,consistentId2,....,consistentIdN]", 
optional(CMD_AUTO_CONFIRMATION));
     }
 
     /**
@@ -83,21 +85,26 @@ public class WalCommands implements Command<T2<String, 
String>> {
      * @throws Exception If failed to execute wal action.
      */
     @Override public Object execute(GridClientConfiguration clientCfg, Logger 
logger) throws Exception {
-        this.logger = logger;
+        if (enableExperimental()) {
+            this.logger = logger;
 
-        try (GridClient client = Command.startClient(clientCfg)) {
-            switch (walAct) {
-                case WAL_DELETE:
-                    deleteUnusedWalSegments(client, walArgs, clientCfg);
+            try (GridClient client = Command.startClient(clientCfg)) {
+                switch (walAct) {
+                    case WAL_DELETE:
+                        deleteUnusedWalSegments(client, walArgs, clientCfg);
 
-                    break;
+                        break;
 
-                case WAL_PRINT:
-                default:
-                    printUnusedWalSegments(client, walArgs, clientCfg);
+                    case WAL_PRINT:
+                    default:
+                        printUnusedWalSegments(client, walArgs, clientCfg);
 
-                    break;
+                        break;
+                }
             }
+        } else {
+            logger.warning(String.format("For use experimental command add 
%s=true to JVM_OPTS in %s",
+                IGNITE_ENABLE_EXPERIMENTAL_COMMAND, UTILITY_NAME));
         }
 
         return null;
@@ -113,9 +120,6 @@ public class WalCommands implements Command<T2<String, 
String>> {
 
     /** {@inheritDoc} */
     @Override public void parseArguments(CommandArgIterator argIter) {
-        if (!enableExperimental())
-            throw new IllegalArgumentException("Experimental command is 
disabled.");
-
         String str = argIter.nextArg("Expected arguments for " + WAL.text());
 
         String walAct = str.toLowerCase();
@@ -125,8 +129,10 @@ public class WalCommands implements Command<T2<String, 
String>> {
                 ? argIter.nextArg("Unexpected argument for " + WAL.text() + ": 
" + walAct)
                 : "";
 
-            this.walAct = walAct;
-            this.walArgs = walArgs;
+            if (enableExperimental()) {
+                this.walAct = walAct;
+                this.walArgs = walArgs;
+            }
         }
         else
             throw new IllegalArgumentException("Unexpected action " + walAct + 
" for " + WAL.text());
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/commandline/CommandHandlerParsingTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/commandline/CommandHandlerParsingTest.java
index 39fce78..04782d9 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/commandline/CommandHandlerParsingTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/commandline/CommandHandlerParsingTest.java
@@ -27,8 +27,8 @@ import java.util.function.Predicate;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 import org.apache.ignite.internal.commandline.baseline.BaselineArguments;
-import org.apache.ignite.internal.commandline.cache.CacheSubcommands;
 import org.apache.ignite.internal.commandline.cache.CacheCommands;
+import org.apache.ignite.internal.commandline.cache.CacheSubcommands;
 import org.apache.ignite.internal.commandline.cache.CacheValidateIndexes;
 import org.apache.ignite.internal.commandline.cache.FindAndDeleteGarbage;
 import 
org.apache.ignite.internal.commandline.cache.argument.FindAndDeleteGarbageArg;
@@ -37,12 +37,11 @@ import org.apache.ignite.internal.visor.tx.VisorTxOperation;
 import org.apache.ignite.internal.visor.tx.VisorTxProjection;
 import org.apache.ignite.internal.visor.tx.VisorTxSortOrder;
 import org.apache.ignite.internal.visor.tx.VisorTxTaskArg;
-import org.apache.ignite.testframework.GridTestUtils;
-import org.apache.ignite.testframework.junits.WithSystemProperty;
 import org.apache.ignite.testframework.junits.SystemPropertiesRule;
-import org.junit.Test;
-import org.junit.Rule;
+import org.apache.ignite.testframework.junits.WithSystemProperty;
 import org.junit.ClassRule;
+import org.junit.Rule;
+import org.junit.Test;
 import org.junit.rules.TestRule;
 
 import static java.util.Arrays.asList;
@@ -275,27 +274,6 @@ public class CommandHandlerParsingTest {
     }
 
     /**
-     * Test that experimental command (i.e. WAL command) is disabled by 
default.
-     */
-    @Test
-    @WithSystemProperty(key = IGNITE_ENABLE_EXPERIMENTAL_COMMAND, value = 
"false")
-    public void testExperimentalCommandIsDisabled() {
-        GridTestUtils.assertThrows(
-            null,
-            () -> parseArgs(Arrays.asList(WAL.text(), WAL_PRINT)),
-            IllegalArgumentException.class,
-            null
-        );
-
-        GridTestUtils.assertThrows(
-            null,
-            () -> parseArgs(Arrays.asList(WAL.text(), WAL_DELETE)),
-            IllegalArgumentException.class,
-            null
-        );
-    }
-
-    /**
      * Tests parsing and validation for the SSL arguments.
      */
     @Test
diff --git 
a/modules/core/src/test/java/org/apache/ignite/util/GridCommandHandlerTest.java 
b/modules/core/src/test/java/org/apache/ignite/util/GridCommandHandlerTest.java
index 20e8f67..94c7676 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/util/GridCommandHandlerTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/util/GridCommandHandlerTest.java
@@ -44,6 +44,7 @@ import java.util.concurrent.atomic.LongAdder;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 import javax.cache.processor.EntryProcessor;
 import javax.cache.processor.EntryProcessorException;
 import javax.cache.processor.MutableEntry;
@@ -103,20 +104,27 @@ import org.apache.ignite.lang.IgnitePredicate;
 import org.apache.ignite.lang.IgniteUuid;
 import org.apache.ignite.plugin.extensions.communication.Message;
 import org.apache.ignite.testframework.GridTestUtils;
+import org.apache.ignite.testframework.junits.SystemPropertiesRule;
+import org.apache.ignite.testframework.junits.WithSystemProperty;
 import org.apache.ignite.transactions.Transaction;
 import org.apache.ignite.transactions.TransactionRollbackException;
 import org.apache.ignite.transactions.TransactionState;
 import org.apache.ignite.transactions.TransactionTimeoutException;
 import org.jetbrains.annotations.NotNull;
+import org.junit.Rule;
 import org.junit.Test;
+import org.junit.rules.TestRule;
 
 import static java.io.File.separatorChar;
 import static java.util.Arrays.asList;
+import static 
org.apache.ignite.IgniteSystemProperties.IGNITE_ENABLE_EXPERIMENTAL_COMMAND;
 import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL;
 import static org.apache.ignite.cache.CacheWriteSynchronizationMode.FULL_SYNC;
 import static 
org.apache.ignite.internal.commandline.CommandHandler.EXIT_CODE_INVALID_ARGUMENTS;
 import static 
org.apache.ignite.internal.commandline.CommandHandler.EXIT_CODE_OK;
 import static 
org.apache.ignite.internal.commandline.CommandHandler.EXIT_CODE_UNEXPECTED_ERROR;
+import static 
org.apache.ignite.internal.commandline.CommandHandler.UTILITY_NAME;
+import static org.apache.ignite.internal.commandline.CommandList.WAL;
 import static org.apache.ignite.internal.commandline.OutputFormat.MULTI_LINE;
 import static org.apache.ignite.internal.commandline.OutputFormat.SINGLE_LINE;
 import static 
org.apache.ignite.internal.commandline.cache.CacheSubcommands.HELP;
@@ -132,6 +140,10 @@ import static 
org.apache.ignite.transactions.TransactionIsolation.READ_COMMITTED
  * Command line handler test.
  */
 public class GridCommandHandlerTest extends GridCommandHandlerAbstractTest {
+
+    /** */
+    @Rule public final TestRule methodRule = new SystemPropertiesRule();
+
     /** */
     private File defaultDiagnosticDir;
 
@@ -2964,4 +2976,36 @@ public class GridCommandHandlerTest extends 
GridCommandHandlerAbstractTest {
             e.printStackTrace();
         }
     }
+
+    /**
+     * Don't show wal commands by --help in case
+     * {@link 
org.apache.ignite.IgniteSystemProperties#IGNITE_ENABLE_EXPERIMENTAL_COMMAND} = 
false or empty.
+     */
+    @Test
+    @WithSystemProperty(key = IGNITE_ENABLE_EXPERIMENTAL_COMMAND, value = 
"false")
+    public void testHideWalInHelpWhenDisableExperimentalCommand() {
+        injectTestSystemOut();
+
+        execute("--help");
+
+        assertNotContains(log, testOut.toString(), WAL.text());
+    }
+
+    /**
+     * Wal commands should ignored and print warning in case
+     * {@link 
org.apache.ignite.IgniteSystemProperties#IGNITE_ENABLE_EXPERIMENTAL_COMMAND} = 
false or empty.
+     * */
+    @Test
+    @WithSystemProperty(key = IGNITE_ENABLE_EXPERIMENTAL_COMMAND, value = 
"false")
+    public void testWalCommandsInCaseDisableExperimentalCommand() {
+        injectTestSystemOut();
+
+        String warning = String.format("For use experimental command add 
%s=true to JVM_OPTS in %s",
+            IGNITE_ENABLE_EXPERIMENTAL_COMMAND, UTILITY_NAME);
+
+        Stream.of("print", "delete")
+            .peek(c -> testOut.reset())
+            .peek(c -> assertEquals(EXIT_CODE_OK, execute(WAL.text(), c)))
+            .forEach(c -> assertContains(log, testOut.toString(), warning));
+    }
 }

Reply via email to