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)); + } }