You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by kl...@apache.org on 2016/05/21 00:04:47 UTC
[1/5] incubator-geode git commit: GEODE-11 Adding missing imports
Repository: incubator-geode
Updated Branches:
refs/heads/feature/GEODE-835 52f21b0fc -> ce2ac6830
GEODE-11 Adding missing imports
Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/92c104d9
Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/92c104d9
Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/92c104d9
Branch: refs/heads/feature/GEODE-835
Commit: 92c104d9113524d567211f741555c26741245a8f
Parents: c674e35
Author: Jason Huynh <hu...@gmail.com>
Authored: Fri May 20 14:31:58 2016 -0700
Committer: Jason Huynh <hu...@gmail.com>
Committed: Fri May 20 14:31:58 2016 -0700
----------------------------------------------------------------------
.../lucene/LuceneIndexCreationPersistenceIntegrationTest.java | 2 ++
1 file changed, 2 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/92c104d9/geode-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/LuceneIndexCreationPersistenceIntegrationTest.java
----------------------------------------------------------------------
diff --git a/geode-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/LuceneIndexCreationPersistenceIntegrationTest.java b/geode-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/LuceneIndexCreationPersistenceIntegrationTest.java
index c43b592..96b4e93 100644
--- a/geode-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/LuceneIndexCreationPersistenceIntegrationTest.java
+++ b/geode-lucene/src/test/java/com/gemstone/gemfire/cache/lucene/LuceneIndexCreationPersistenceIntegrationTest.java
@@ -24,6 +24,7 @@ import static junitparams.JUnitParamsRunner.$;
import static org.junit.Assert.*;
import java.io.File;
+import java.util.concurrent.TimeUnit;
import java.util.function.Consumer;
import com.gemstone.gemfire.cache.Region;
@@ -35,6 +36,7 @@ import com.gemstone.gemfire.internal.cache.GemFireCacheImpl;
import com.gemstone.gemfire.internal.cache.LocalRegion;
import com.gemstone.gemfire.test.junit.categories.IntegrationTest;
import com.gemstone.gemfire.test.junit.rules.DiskDirRule;
+import com.jayway.awaitility.Awaitility;
import org.apache.lucene.queryparser.classic.ParseException;
import org.junit.Rule;
[5/5] incubator-geode git commit: Merge remote-tracking branch
'origin/develop' into feature/GEODE-835
Posted by kl...@apache.org.
Merge remote-tracking branch 'origin/develop' into feature/GEODE-835
Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/ce2ac683
Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/ce2ac683
Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/ce2ac683
Branch: refs/heads/feature/GEODE-835
Commit: ce2ac68308448309f5501ce9683b91d2b1e74630
Parents: 52f21b0 853c40d
Author: Kirk Lund <kl...@pivotal.io>
Authored: Fri May 20 17:04:30 2016 -0700
Committer: Kirk Lund <kl...@pivotal.io>
Committed: Fri May 20 17:04:30 2016 -0700
----------------------------------------------------------------------
.../internal/PooledExecutorWithDMStats.java | 9 +-
.../internal/locks/DLockService.java | 9 +-
.../internal/cache/GemFireCacheImpl.java | 37 +-
.../gemfire/internal/cache/LocalRegion.java | 2 +-
.../gemfire/internal/jndi/JNDIInvoker.java | 3 +-
.../management/internal/cli/CommandManager.java | 4 +-
.../cli/exceptions/CliCommandException.java | 37 +-
.../exceptions/CliCommandInvalidException.java | 16 +-
.../CliCommandMultiModeOptionException.java | 16 +-
.../CliCommandNotAvailableException.java | 12 +-
.../exceptions/CliCommandOptionException.java | 36 +-
...CommandOptionHasMultipleValuesException.java | 17 +-
.../CliCommandOptionInvalidException.java | 14 +-
.../CliCommandOptionMissingException.java | 17 +-
.../CliCommandOptionNotApplicableException.java | 20 +-
...liCommandOptionValueConversionException.java | 16 +-
.../CliCommandOptionValueException.java | 25 +-
.../CliCommandOptionValueMissingException.java | 20 +-
.../internal/cli/exceptions/CliException.java | 17 +-
.../cli/exceptions/ExceptionGenerator.java | 28 +-
.../management/internal/cli/parser/Option.java | 2 +-
.../cli/parser/jopt/JoptOptionParser.java | 27 +-
.../gemfire/cache30/MultiVMRegionTestCase.java | 1 -
.../internal/cache/GemFireCacheImplTest.java | 66 +++
.../internal/cli/JoptOptionParserTest.java | 507 +++++++++++++++++++
.../com/gemstone/gemfire/test/fake/Fakes.java | 10 +
...IndexCreationPersistenceIntegrationTest.java | 2 +
27 files changed, 803 insertions(+), 167 deletions(-)
----------------------------------------------------------------------
[2/5] incubator-geode git commit: GEODE-1414: remove assertion of
dunit jvm count
Posted by kl...@apache.org.
GEODE-1414: remove assertion of dunit jvm count
Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/a17dc718
Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/a17dc718
Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/a17dc718
Branch: refs/heads/feature/GEODE-835
Commit: a17dc7182c3d0573dae4c14e9af0295e882d2dcd
Parents: 92c104d
Author: Darrel Schneider <ds...@pivotal.io>
Authored: Thu May 19 15:34:37 2016 -0700
Committer: Darrel Schneider <ds...@pivotal.io>
Committed: Fri May 20 14:51:47 2016 -0700
----------------------------------------------------------------------
.../java/com/gemstone/gemfire/cache30/MultiVMRegionTestCase.java | 1 -
1 file changed, 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/a17dc718/geode-core/src/test/java/com/gemstone/gemfire/cache30/MultiVMRegionTestCase.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/com/gemstone/gemfire/cache30/MultiVMRegionTestCase.java b/geode-core/src/test/java/com/gemstone/gemfire/cache30/MultiVMRegionTestCase.java
index 9ad102d..e112337 100644
--- a/geode-core/src/test/java/com/gemstone/gemfire/cache30/MultiVMRegionTestCase.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/cache30/MultiVMRegionTestCase.java
@@ -6945,7 +6945,6 @@ public abstract class MultiVMRegionTestCase extends RegionTestCase {
}
};
- assertEquals(4, Host.getHost(0).getVMCount());
//GemFireVersion.waitForJavaDebugger(getLogWriter(), "CTRLR WAITING AFTER CREATE");
VM vm0 = Host.getHost(0).getVM(0);
VM vm1 = Host.getHost(0).getVM(1);
[4/5] incubator-geode git commit: GEODE-835: Create
JoptOptionParserTest
Posted by kl...@apache.org.
GEODE-835: Create JoptOptionParserTest
JoptOptionParser is the primary geode class using joptsimple so this test is necessary before replacing geode-joptsimple with a dependency on jopt-simple 5.0.1.
* cleanup CLI exceptions and the constructors for these exceptions
Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/853c40d2
Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/853c40d2
Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/853c40d2
Branch: refs/heads/feature/GEODE-835
Commit: 853c40d26fe63f2411fb735b263efee11afdfa1a
Parents: 1af92d8
Author: Kirk Lund <kl...@apache.org>
Authored: Fri May 20 16:49:45 2016 -0700
Committer: Kirk Lund <kl...@apache.org>
Committed: Fri May 20 16:56:51 2016 -0700
----------------------------------------------------------------------
.../management/internal/cli/CommandManager.java | 4 +-
.../cli/exceptions/CliCommandException.java | 37 +-
.../exceptions/CliCommandInvalidException.java | 16 +-
.../CliCommandMultiModeOptionException.java | 16 +-
.../CliCommandNotAvailableException.java | 12 +-
.../exceptions/CliCommandOptionException.java | 36 +-
...CommandOptionHasMultipleValuesException.java | 17 +-
.../CliCommandOptionInvalidException.java | 14 +-
.../CliCommandOptionMissingException.java | 17 +-
.../CliCommandOptionNotApplicableException.java | 20 +-
...liCommandOptionValueConversionException.java | 16 +-
.../CliCommandOptionValueException.java | 25 +-
.../CliCommandOptionValueMissingException.java | 20 +-
.../internal/cli/exceptions/CliException.java | 17 +-
.../cli/exceptions/ExceptionGenerator.java | 28 +-
.../management/internal/cli/parser/Option.java | 2 +-
.../cli/parser/jopt/JoptOptionParser.java | 27 +-
.../internal/cli/JoptOptionParserTest.java | 507 +++++++++++++++++++
18 files changed, 695 insertions(+), 136 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/853c40d2/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/CommandManager.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/CommandManager.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/CommandManager.java
index 46a8226..9c8025e 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/CommandManager.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/CommandManager.java
@@ -365,8 +365,8 @@ public class CommandManager {
for (Annotation annotation : annotations) {
if (annotation instanceof CliArgument) {
// Here we need to create the argument Object
- arguments.add(createArgument((CliArgument) annotation,
- parameterType, parameterNo));
+ Argument argumentToAdd = createArgument((CliArgument) annotation, parameterType, parameterNo);
+ arguments.add(argumentToAdd);
parameterNo++;
} else if (annotation instanceof CliOption) {
Option createdOption = createOption((CliOption) annotation, parameterType, parameterNo);
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/853c40d2/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/exceptions/CliCommandException.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/exceptions/CliCommandException.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/exceptions/CliCommandException.java
index eb019a7..29358f3 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/exceptions/CliCommandException.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/exceptions/CliCommandException.java
@@ -16,50 +16,51 @@
*/
package com.gemstone.gemfire.management.internal.cli.exceptions;
-import java.util.List;
-
import com.gemstone.gemfire.management.internal.cli.parser.CommandTarget;
import com.gemstone.gemfire.management.internal.cli.parser.OptionSet;
public class CliCommandException extends CliException {
+
private CommandTarget commandTarget;
private OptionSet optionSet;
- public OptionSet getOptionSet() {
- return optionSet;
+ public CliCommandException(final CommandTarget commandTarget) {
+ this(commandTarget, null, null);
}
- public CommandTarget getCommandTarget() {
- return commandTarget;
+ public CliCommandException(final CommandTarget commandTarget, final OptionSet optionSet) {
+ this(commandTarget, optionSet, null);
}
- public CliCommandException(CommandTarget commandTarget) {
+ public CliCommandException(final CommandTarget commandTarget, final OptionSet optionSet, final Throwable cause) {
+ super(cause);
this.setCommandTarget(commandTarget);
- }
-
- public CliCommandException(CommandTarget commandTarget, OptionSet optionSet) {
- this(commandTarget);
this.setOptionSet(optionSet);
}
- public CliCommandException(CommandTarget commandTarget2,
- List<String> nonOptionArguments) {
+ public CommandTarget getCommandTarget() {
+ return commandTarget;
}
/**
- * @param commandTarget
- * the commandTarget to set
+ * TODO: make this immutable
+ *
+ * @param commandTarget the commandTarget to set
*/
public void setCommandTarget(CommandTarget commandTarget) {
this.commandTarget = commandTarget;
}
+ public OptionSet getOptionSet() {
+ return optionSet;
+ }
+
/**
- * @param optionSet
- * the optionSet to set
+ * TODO: make this immutable
+ *
+ * @param optionSet the optionSet to set
*/
public void setOptionSet(OptionSet optionSet) {
this.optionSet = optionSet;
}
-
}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/853c40d2/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/exceptions/CliCommandInvalidException.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/exceptions/CliCommandInvalidException.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/exceptions/CliCommandInvalidException.java
index 6fde9db..b3d3775 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/exceptions/CliCommandInvalidException.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/exceptions/CliCommandInvalidException.java
@@ -21,13 +21,19 @@ import com.gemstone.gemfire.management.internal.cli.parser.OptionSet;
public class CliCommandInvalidException extends CliCommandException {
- public CliCommandInvalidException(CommandTarget commandTarget) {
- super(commandTarget);
+ public CliCommandInvalidException(final CommandTarget commandTarget) {
+ this(commandTarget, null, null);
}
- public CliCommandInvalidException(CommandTarget commandTarget,
- OptionSet optionSet) {
- super(commandTarget, optionSet);
+ public CliCommandInvalidException(final CommandTarget commandTarget, OptionSet optionSet) {
+ this(commandTarget, optionSet, null);
}
+ public CliCommandInvalidException(final Throwable cause) {
+ this(null, null, cause);
+ }
+
+ public CliCommandInvalidException(final CommandTarget commandTarget, OptionSet optionSet, Throwable cause) {
+ super(commandTarget, optionSet, cause);
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/853c40d2/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/exceptions/CliCommandMultiModeOptionException.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/exceptions/CliCommandMultiModeOptionException.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/exceptions/CliCommandMultiModeOptionException.java
index 5f5cbfd..3259406 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/exceptions/CliCommandMultiModeOptionException.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/exceptions/CliCommandMultiModeOptionException.java
@@ -22,15 +22,18 @@ import com.gemstone.gemfire.management.internal.cli.parser.OptionSet;
public class CliCommandMultiModeOptionException extends CliCommandOptionException {
- public static final int MULTIPLE_LEAD_OPTIONS=1;
- public static final int OPTIONS_FROM_MULTIPLE_MODES=2;
+ public static final int MULTIPLE_LEAD_OPTIONS = 1; // TODO: move or delete
+ public static final int OPTIONS_FROM_MULTIPLE_MODES = 2; // TODO: move or delete
private String leadOptionString;
private int code;
- public CliCommandMultiModeOptionException(CommandTarget commandTarget,
- Option option, String string, int code) {
- super(commandTarget, option);
+ public CliCommandMultiModeOptionException(final CommandTarget commandTarget, final Option option, final String string, final int code) {
+ this(commandTarget, option, string, code, null);
+ }
+
+ public CliCommandMultiModeOptionException(final CommandTarget commandTarget, final Option option, final String string, final int code, final Throwable cause) {
+ super(commandTarget, option, cause);
this.leadOptionString = string;
this.code = code;
}
@@ -42,7 +45,4 @@ public class CliCommandMultiModeOptionException extends CliCommandOptionExceptio
public int getCode() {
return code;
}
-
-
}
-
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/853c40d2/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/exceptions/CliCommandNotAvailableException.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/exceptions/CliCommandNotAvailableException.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/exceptions/CliCommandNotAvailableException.java
index cf8bc06..c1e1358 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/exceptions/CliCommandNotAvailableException.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/exceptions/CliCommandNotAvailableException.java
@@ -21,13 +21,15 @@ import com.gemstone.gemfire.management.internal.cli.parser.OptionSet;
public class CliCommandNotAvailableException extends CliCommandException {
- public CliCommandNotAvailableException(CommandTarget commandTarget) {
- super(commandTarget);
+ public CliCommandNotAvailableException(final CommandTarget commandTarget) {
+ this(commandTarget, null, null);
}
- public CliCommandNotAvailableException(CommandTarget commandTarget,
- OptionSet optionSet) {
- super(commandTarget, optionSet);
+ public CliCommandNotAvailableException(final CommandTarget commandTarget, final OptionSet optionSet) {
+ this(commandTarget, optionSet, null);
}
+ public CliCommandNotAvailableException(final CommandTarget commandTarget, final OptionSet optionSet, final Throwable cause) {
+ super(commandTarget, optionSet, cause);
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/853c40d2/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/exceptions/CliCommandOptionException.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/exceptions/CliCommandOptionException.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/exceptions/CliCommandOptionException.java
index bfe6c3a..3fdec10 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/exceptions/CliCommandOptionException.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/exceptions/CliCommandOptionException.java
@@ -24,30 +24,36 @@ public class CliCommandOptionException extends CliCommandException {
private Option option;
+ public CliCommandOptionException(final CommandTarget commandTarget, final Option option) {
+ this(commandTarget, option, null, null);
+ }
+
+ public CliCommandOptionException(final CommandTarget commandTarget, final Option option, final OptionSet optionSet) {
+ this(commandTarget, option, optionSet, null);
+ }
+
+ public CliCommandOptionException(final CommandTarget commandTarget, final Option option, final Throwable cause) {
+ this(commandTarget, option, null, cause);
+ }
+
+ public CliCommandOptionException(final CommandTarget commandTarget, final Option option, final OptionSet optionSet, final Throwable cause) {
+ super(commandTarget, optionSet, cause);
+ this.setOption(option);
+ }
+
/**
- * @return option for which the exception occured
+ * @return option for which the exception occurred
*/
public Option getOption() {
return option;
}
/**
- * @param option
- * the option to set
+ * TODO: make this immutable
+ *
+ * @param option the option to set
*/
public void setOption(Option option) {
this.option = option;
}
-
- public CliCommandOptionException(CommandTarget commandTarget, Option option) {
- super(commandTarget);
- this.setOption(option);
- }
-
- public CliCommandOptionException(CommandTarget commandTarget, Option option,
- OptionSet optionSet) {
- super(commandTarget, optionSet);
- this.setOption(option);
- }
-
}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/853c40d2/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/exceptions/CliCommandOptionHasMultipleValuesException.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/exceptions/CliCommandOptionHasMultipleValuesException.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/exceptions/CliCommandOptionHasMultipleValuesException.java
index 3932636..2439945 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/exceptions/CliCommandOptionHasMultipleValuesException.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/exceptions/CliCommandOptionHasMultipleValuesException.java
@@ -21,13 +21,22 @@ import com.gemstone.gemfire.management.internal.cli.parser.Option;
import com.gemstone.gemfire.management.internal.cli.parser.OptionSet;
public class CliCommandOptionHasMultipleValuesException extends CliCommandOptionValueException {
+
private static final long serialVersionUID = -5277268341319591711L;
- public CliCommandOptionHasMultipleValuesException(CommandTarget commandTarget, Option option, String value) {
- super(commandTarget, option, value);
+ public CliCommandOptionHasMultipleValuesException(final CommandTarget commandTarget, final Option option, final String value) {
+ this(commandTarget, option, null, value, null);
+ }
+
+ public CliCommandOptionHasMultipleValuesException(final CommandTarget commandTarget, final Option option, final OptionSet optionSet, final String value) {
+ this(commandTarget, option, optionSet, value, null);
+ }
+
+ public CliCommandOptionHasMultipleValuesException(final Throwable cause) {
+ this(null, null, null, null, cause);
}
- public CliCommandOptionHasMultipleValuesException(CommandTarget commandTarget, Option option, OptionSet optionSet, String value) {
- super(commandTarget, option, optionSet, value);
+ public CliCommandOptionHasMultipleValuesException(final CommandTarget commandTarget, Option option, final OptionSet optionSet, final String value, final Throwable cause) {
+ super(commandTarget, option, optionSet, value, cause);
}
}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/853c40d2/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/exceptions/CliCommandOptionInvalidException.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/exceptions/CliCommandOptionInvalidException.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/exceptions/CliCommandOptionInvalidException.java
index af7e44a..7ce747a 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/exceptions/CliCommandOptionInvalidException.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/exceptions/CliCommandOptionInvalidException.java
@@ -22,13 +22,15 @@ import com.gemstone.gemfire.management.internal.cli.parser.OptionSet;
public class CliCommandOptionInvalidException extends CliCommandOptionException {
- public CliCommandOptionInvalidException(CommandTarget commandTarget,
- Option option) {
- super(commandTarget, option);
+ public CliCommandOptionInvalidException(final CommandTarget commandTarget, final Option option) {
+ this(commandTarget, option, null, null);
}
- public CliCommandOptionInvalidException(CommandTarget commandTarget,
- Option option, OptionSet optionSet) {
- super(commandTarget, option, optionSet);
+ public CliCommandOptionInvalidException(final CommandTarget commandTarget, final Option option, final OptionSet optionSet) {
+ this(commandTarget, option, optionSet, null);
+ }
+
+ public CliCommandOptionInvalidException(final CommandTarget commandTarget, final Option option, final OptionSet optionSet, final Throwable cause) {
+ super(commandTarget, option, optionSet, cause);
}
}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/853c40d2/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/exceptions/CliCommandOptionMissingException.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/exceptions/CliCommandOptionMissingException.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/exceptions/CliCommandOptionMissingException.java
index 00481fc..1a2c8fe 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/exceptions/CliCommandOptionMissingException.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/exceptions/CliCommandOptionMissingException.java
@@ -22,14 +22,19 @@ import com.gemstone.gemfire.management.internal.cli.parser.OptionSet;
public class CliCommandOptionMissingException extends CliCommandOptionException {
- public CliCommandOptionMissingException(CommandTarget commandTarget,
- Option option) {
- super(commandTarget, option);
+ public CliCommandOptionMissingException(final CommandTarget commandTarget, final Option option) {
+ this(commandTarget, option, null, null);
}
- public CliCommandOptionMissingException(CommandTarget commandTarget,
- Option option, OptionSet optionSet) {
- super(commandTarget, option, optionSet);
+ public CliCommandOptionMissingException(final CommandTarget commandTarget, final Option option, final OptionSet optionSet) {
+ this(commandTarget, option, optionSet, null);
}
+ public CliCommandOptionMissingException(final Throwable cause) {
+ this(null, null, null, cause);
+ }
+
+ public CliCommandOptionMissingException(final CommandTarget commandTarget, final Option option, final OptionSet optionSet, final Throwable cause) {
+ super(commandTarget, option, optionSet, cause);
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/853c40d2/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/exceptions/CliCommandOptionNotApplicableException.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/exceptions/CliCommandOptionNotApplicableException.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/exceptions/CliCommandOptionNotApplicableException.java
index 4e99ba1..1e9f726 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/exceptions/CliCommandOptionNotApplicableException.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/exceptions/CliCommandOptionNotApplicableException.java
@@ -20,17 +20,21 @@ import com.gemstone.gemfire.management.internal.cli.parser.CommandTarget;
import com.gemstone.gemfire.management.internal.cli.parser.Option;
import com.gemstone.gemfire.management.internal.cli.parser.OptionSet;
-public class CliCommandOptionNotApplicableException extends
- CliCommandOptionException {
+public class CliCommandOptionNotApplicableException extends CliCommandOptionException {
- public CliCommandOptionNotApplicableException(CommandTarget commandTarget,
- Option option) {
- super(commandTarget, option);
+ public CliCommandOptionNotApplicableException(final CommandTarget commandTarget, final Option option) {
+ this(commandTarget, option, null, null);
}
- public CliCommandOptionNotApplicableException(CommandTarget commandTarget,
- Option option, OptionSet optionSet) {
- super(commandTarget, option, optionSet);
+ public CliCommandOptionNotApplicableException(final CommandTarget commandTarget, final Option option, final OptionSet optionSet) {
+ this(commandTarget, option, optionSet, null);
}
+ public CliCommandOptionNotApplicableException(final Throwable cause) {
+ this(null, null, null, cause);
+ }
+
+ public CliCommandOptionNotApplicableException(final CommandTarget commandTarget, final Option option, final OptionSet optionSet, Throwable cause) {
+ super(commandTarget, option, optionSet, cause);
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/853c40d2/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/exceptions/CliCommandOptionValueConversionException.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/exceptions/CliCommandOptionValueConversionException.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/exceptions/CliCommandOptionValueConversionException.java
index b16c8f2..8330f79 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/exceptions/CliCommandOptionValueConversionException.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/exceptions/CliCommandOptionValueConversionException.java
@@ -20,17 +20,17 @@ import com.gemstone.gemfire.management.internal.cli.parser.CommandTarget;
import com.gemstone.gemfire.management.internal.cli.parser.Option;
import com.gemstone.gemfire.management.internal.cli.parser.OptionSet;
-public class CliCommandOptionValueConversionException extends
- CliCommandOptionValueException {
+public class CliCommandOptionValueConversionException extends CliCommandOptionValueException {
- public CliCommandOptionValueConversionException(CommandTarget commandTarget,
- Option option, String value) {
- super(commandTarget, option, value);
+ public CliCommandOptionValueConversionException(final CommandTarget commandTarget, final Option option, final String value) {
+ this(commandTarget, option, null, value, null);
}
- public CliCommandOptionValueConversionException(CommandTarget commandTarget,
- Option option, OptionSet optionSet, String value) {
- super(commandTarget, option, optionSet, value);
+ public CliCommandOptionValueConversionException(final CommandTarget commandTarget, final Option option, final OptionSet optionSet, final String value) {
+ this(commandTarget, option, optionSet, value, null);
}
+ public CliCommandOptionValueConversionException(final CommandTarget commandTarget, final Option option, final OptionSet optionSet, final String value, final Throwable cause) {
+ super(commandTarget, option, optionSet, value, null);
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/853c40d2/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/exceptions/CliCommandOptionValueException.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/exceptions/CliCommandOptionValueException.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/exceptions/CliCommandOptionValueException.java
index 774a8b1..4e04578 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/exceptions/CliCommandOptionValueException.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/exceptions/CliCommandOptionValueException.java
@@ -22,21 +22,26 @@ import com.gemstone.gemfire.management.internal.cli.parser.OptionSet;
public class CliCommandOptionValueException extends CliCommandOptionException {
- private String value;
+ private final String value;
- public String getValue() {
- return value;
+ public CliCommandOptionValueException(final CommandTarget commandTarget, final Option option, final String value) {
+ this(commandTarget, option, null, value, null);
}
- public CliCommandOptionValueException(CommandTarget commandTarget,
- Option option, String value) {
- super(commandTarget, option);
- this.value = value;
+ public CliCommandOptionValueException(final CommandTarget commandTarget, final Option option, final OptionSet optionSet, final String value) {
+ this(commandTarget, option, null, value, null);
+ }
+
+ public CliCommandOptionValueException(final Throwable cause) {
+ this(null, null, null, null, cause);
}
- public CliCommandOptionValueException(CommandTarget commandTarget,
- Option option, OptionSet optionSet, String value) {
- super(commandTarget, option, optionSet);
+ public CliCommandOptionValueException(final CommandTarget commandTarget, final Option option, final OptionSet optionSet, final String value, final Throwable cause) {
+ super(commandTarget, option, optionSet, cause);
this.value = value;
}
+
+ public String getValue() {
+ return value;
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/853c40d2/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/exceptions/CliCommandOptionValueMissingException.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/exceptions/CliCommandOptionValueMissingException.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/exceptions/CliCommandOptionValueMissingException.java
index 4eb2a6b..5fa02d9 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/exceptions/CliCommandOptionValueMissingException.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/exceptions/CliCommandOptionValueMissingException.java
@@ -20,17 +20,21 @@ import com.gemstone.gemfire.management.internal.cli.parser.CommandTarget;
import com.gemstone.gemfire.management.internal.cli.parser.Option;
import com.gemstone.gemfire.management.internal.cli.parser.OptionSet;
-public class CliCommandOptionValueMissingException extends
- CliCommandOptionValueException {
+public class CliCommandOptionValueMissingException extends CliCommandOptionValueException {
- public CliCommandOptionValueMissingException(CommandTarget commandTarget,
- Option option, String value) {
- super(commandTarget, option, value);
+ public CliCommandOptionValueMissingException(final CommandTarget commandTarget, final Option option, final String value) {
+ this(commandTarget, option, null, value, null);
}
- public CliCommandOptionValueMissingException(CommandTarget commandTarget,
- Option option, OptionSet optionSet, String value) {
- super(commandTarget, option, optionSet, value);
+ public CliCommandOptionValueMissingException(final CommandTarget commandTarget, final Option option, final OptionSet optionSet, final String value) {
+ this(commandTarget, option, optionSet, value, null);
+ }
+
+ public CliCommandOptionValueMissingException(final Throwable cause) {
+ this(null, null, null, null, cause);
}
+ public CliCommandOptionValueMissingException(final CommandTarget commandTarget, final Option option, final OptionSet optionSet, final String value, final Throwable cause) {
+ super(commandTarget, option, optionSet, value);
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/853c40d2/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/exceptions/CliException.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/exceptions/CliException.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/exceptions/CliException.java
index bc0db3f..3e0551e 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/exceptions/CliException.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/exceptions/CliException.java
@@ -16,6 +16,21 @@
*/
package com.gemstone.gemfire.management.internal.cli.exceptions;
-public class CliException extends Exception {
+public abstract class CliException extends Exception {
+ public CliException() {
+ this(null, null);
+ }
+
+ public CliException(String message) {
+ this(message, null);
+ }
+
+ public CliException(Throwable cause) {
+ super(null, cause);
+ }
+
+ public CliException(String message, Throwable cause) {
+ super(message, cause);
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/853c40d2/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/exceptions/ExceptionGenerator.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/exceptions/ExceptionGenerator.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/exceptions/ExceptionGenerator.java
index 6824735..61af7a4 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/exceptions/ExceptionGenerator.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/exceptions/ExceptionGenerator.java
@@ -22,22 +22,26 @@ import joptsimple.OptionException;
import joptsimple.OptionMissingRequiredArgumentException;
import joptsimple.UnrecognizedOptionException;
+import com.gemstone.gemfire.management.internal.cli.parser.Option;
+
/**
- *
- * Converts joptsimple exceptions into corresponding exceptions for cli
- *
+ * Converts joptsimple exceptions into corresponding exceptions for cli
*/
public class ExceptionGenerator {
- public static CliException generate(OptionException oe) {
- if (oe instanceof MissingRequiredOptionException) {
- return new CliCommandOptionMissingException(null, null, null);
- } else if (oe instanceof OptionMissingRequiredArgumentException) {
- return new CliCommandOptionValueMissingException(null, null, null, null);
- } else if (oe instanceof UnrecognizedOptionException) {
- return new CliCommandOptionNotApplicableException(null, null, null);
- } else if (oe instanceof MultipleArgumentsForOptionException) {
- return new CliCommandOptionHasMultipleValuesException(null, null, null);
+ public static CliCommandOptionException generate(Option option, OptionException e) {
+ if (MissingRequiredOptionException.class.isInstance(e)) {
+ return new CliCommandOptionMissingException(e);
+
+ } else if (OptionMissingRequiredArgumentException.class.isInstance(e)) {
+ return new CliCommandOptionValueMissingException(e);
+
+ } else if (UnrecognizedOptionException.class.isInstance(e)) {
+ return new CliCommandOptionNotApplicableException(e);
+
+ } else if (MultipleArgumentsForOptionException.class.isInstance(e)) {
+ return new CliCommandOptionHasMultipleValuesException(e);
+
} else {
return null;
}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/853c40d2/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/parser/Option.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/parser/Option.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/parser/Option.java
index 09aabd8..1d115ce 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/parser/Option.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/parser/Option.java
@@ -124,7 +124,7 @@ public class Option extends Parameter {
return true;
}
- public final List<String> getAggregate() {
+ public List<String> getAggregate() {
return aggregate;
}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/853c40d2/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/parser/jopt/JoptOptionParser.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/parser/jopt/JoptOptionParser.java b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/parser/jopt/JoptOptionParser.java
index 6e56bf4..4ea9516 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/parser/jopt/JoptOptionParser.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/management/internal/cli/parser/jopt/JoptOptionParser.java
@@ -44,9 +44,11 @@ import com.gemstone.gemfire.management.internal.cli.parser.preprocessor.TrimmedI
/**
* Implementation of {@link GfshOptionParser} which internally makes use of
* {@link joptsimple.OptionParser}
+ *
+ * Newly constructed JoptOptionParser must be loaded with arguments and
+ * options before parsing command strings.
*
* @since 7.0
- *
*/
public class JoptOptionParser implements GfshOptionParser {
@@ -119,11 +121,9 @@ public class JoptOptionParser implements GfshOptionParser {
// int factor = 0;
try {
joptOptionSet = parser.parse(preProcessedInput);
- } catch (Exception e) {
- if (e instanceof OptionException) {
- ce = processException(e);
- joptOptionSet = ((OptionException) e).getDetected();
- }
+ } catch (OptionException e) {
+ ce = processException(e);
+ joptOptionSet = e.getDetected();
}
if (joptOptionSet != null) {
@@ -244,19 +244,8 @@ public class JoptOptionParser implements GfshOptionParser {
return optionSet;
}
- private CliCommandOptionException processException(Exception e) {
- CliCommandOptionException ce = null;
- if (e instanceof OptionException) {
- ce = (CliCommandOptionException) ExceptionGenerator
- .generate((OptionException) e);
- if (ce != null) {
- if (ce instanceof CliCommandOptionException) {
- ((CliCommandOptionException) ce)
- .setOption(getOption((OptionException) e));
- }
- }
- }
- return ce;
+ private CliCommandOptionException processException(final OptionException exception) {
+ return ExceptionGenerator.generate(getOption(exception), exception);
}
private Option getOption(OptionException oe) {
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/853c40d2/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/JoptOptionParserTest.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/JoptOptionParserTest.java b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/JoptOptionParserTest.java
new file mode 100644
index 0000000..ad82a94
--- /dev/null
+++ b/geode-core/src/test/java/com/gemstone/gemfire/management/internal/cli/JoptOptionParserTest.java
@@ -0,0 +1,507 @@
+/*
+ * 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 com.gemstone.gemfire.management.internal.cli;
+
+import static org.assertj.core.api.Assertions.*;
+import static org.mockito.Mockito.*;
+
+import java.util.ArrayList;
+import java.util.LinkedList;
+import java.util.List;
+
+import junitparams.JUnitParamsRunner;
+import junitparams.Parameters;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+import org.junit.runner.RunWith;
+
+import com.gemstone.gemfire.management.internal.cli.exceptions.CliCommandOptionMissingException;
+import com.gemstone.gemfire.management.internal.cli.exceptions.CliCommandOptionNotApplicableException;
+import com.gemstone.gemfire.management.internal.cli.parser.Argument;
+import com.gemstone.gemfire.management.internal.cli.parser.Option;
+import com.gemstone.gemfire.management.internal.cli.parser.OptionSet;
+import com.gemstone.gemfire.management.internal.cli.parser.jopt.JoptOptionParser;
+import com.gemstone.gemfire.test.junit.categories.UnitTest;
+
+@Category(UnitTest.class)
+@RunWith(JUnitParamsRunner.class)
+public class JoptOptionParserTest {
+
+ private JoptOptionParser emptyOptionParser;
+ private OptionSet emptyOptionSet;
+
+ private Argument requiredArgument;
+ private Argument optionalArgument;
+
+ private Option requiredOption;
+ private Option optionalOption;
+
+ private JoptOptionParser simpleOptionParser;
+ private JoptOptionParser exampleOptionParser;
+
+ @Before
+ public void setUp() throws Exception {
+ this.emptyOptionParser = new JoptOptionParser();
+ this.emptyOptionSet = new OptionSet();
+ defineSimpleOptionParser();
+ defineExampleOptionParser();
+ }
+
+ @Test
+ public void getArgumentsIsEmptyByDefault() throws Exception {
+ assertThat(this.emptyOptionParser.getArguments()).isEmpty();
+ }
+
+ @Test
+ public void getOptionsIsNullByDefault() throws Exception {
+ assertThat(this.emptyOptionParser.getOptions()).isNull();
+ }
+
+ @Test
+ public void parseNullReturnsDefaultOptionSet() throws Exception {
+ OptionSet optionSet = this.emptyOptionParser.parse(null);
+ assertThat(optionSet.areArgumentsPresent()).isEqualTo(emptyOptionSet.areArgumentsPresent());
+ assertThat(optionSet.areOptionsPresent()).isEqualTo(emptyOptionSet.areOptionsPresent());
+ assertThat(optionSet.getNoOfSpacesRemoved()).isEqualTo(emptyOptionSet.getNoOfSpacesRemoved());
+ assertThat(optionSet.getSplit()).isEqualTo(emptyOptionSet.getSplit());
+ assertThat(optionSet.getNoOfSpacesRemoved()).isEqualTo(emptyOptionSet.getNoOfSpacesRemoved());
+ assertThat(optionSet.getUserInput()).isEqualTo(""); //emptyOptionSet.getUserInput());
+ assertThat(optionSet.getValue((Argument)null)).isEqualTo(emptyOptionSet.getValue((Argument)null));
+ assertThat(optionSet.getValue((Option)null)).isEqualTo(emptyOptionSet.getValue((Option)null));
+ }
+
+ @Test
+ public void parseEmptyThrowsNullPointerException() throws Exception {
+ assertThatThrownBy(() -> this.emptyOptionParser.parse("")).isInstanceOf(NullPointerException.class);
+ }
+
+ @Test
+ public void setArgumentsShouldCreateCopy() throws Exception {
+ Argument argument = mock(Argument.class);
+ when(argument.isRequired()).thenReturn(true);
+
+ LinkedList<Argument> arguments = new LinkedList<>();
+ arguments.add(argument);
+
+ this.emptyOptionParser.setArguments(arguments);
+
+ assertThat(this.emptyOptionParser.getArguments()).isNotSameAs(arguments);
+ assertThat(this.emptyOptionParser.getArguments()).hasSize(1);
+
+ arguments.clear();
+
+ assertThat(arguments).hasSize(0);
+ assertThat(this.emptyOptionParser.getArguments()).hasSize(1);
+ }
+
+ @Test
+ public void setArgumentsShouldKeepRequiredBeforeOptional() throws Exception {
+ Argument requiredArgument1 = mock(Argument.class);
+ when(requiredArgument1.isRequired()).thenReturn(true);
+ Argument optionalArgument1 = mock(Argument.class);
+ when(optionalArgument1.isRequired()).thenReturn(false);
+
+ LinkedList<Argument> arguments = new LinkedList<>();
+ arguments.add(requiredArgument1);
+ arguments.add(optionalArgument1);
+
+ this.emptyOptionParser.setArguments(arguments);
+
+ LinkedList<Argument> argumentsReturned = this.emptyOptionParser.getArguments();
+
+ assertThat(argumentsReturned).hasSize(2);
+ assertThat(argumentsReturned.getFirst()).isSameAs(requiredArgument1);
+ assertThat(argumentsReturned.getLast()).isSameAs(optionalArgument1);
+ }
+
+ @Test
+ public void setArgumentsShouldMoveRequiredBeforeOptional() throws Exception {
+ Argument requiredArgument1 = mock(Argument.class);
+ when(requiredArgument1.isRequired()).thenReturn(true);
+ Argument optionalArgument1 = mock(Argument.class);
+ when(optionalArgument1.isRequired()).thenReturn(false);
+
+ LinkedList<Argument> arguments = new LinkedList<>();
+ arguments.add(optionalArgument1);
+ arguments.add(requiredArgument1);
+
+ this.emptyOptionParser.setArguments(arguments);
+
+ LinkedList<Argument> argumentsReturned = this.emptyOptionParser.getArguments();
+
+ assertThat(argumentsReturned).hasSize(2);
+ assertThat(argumentsReturned.getFirst()).isSameAs(requiredArgument1);
+ assertThat(argumentsReturned.getLast()).isSameAs(optionalArgument1);
+ }
+
+ @Test
+ public void setOptionsShouldKeepSameInstance() throws Exception {
+ Option option = mock(Option.class);
+ ArrayList aggregate = new ArrayList<String>();
+ aggregate.add("option");
+ when(option.getAggregate()).thenReturn(aggregate);
+ when(option.getHelp()).thenReturn("help text");
+
+ LinkedList<Option> options = new LinkedList<>();
+ options.add(option);
+
+ this.emptyOptionParser.setOptions(options);
+
+ assertThat(this.emptyOptionParser.getOptions()).isSameAs(options);
+ assertThat(this.emptyOptionParser.getOptions()).hasSize(1);
+
+ options.clear();
+
+ assertThat(options).hasSize(0);
+ assertThat(this.emptyOptionParser.getOptions()).hasSize(0);
+ }
+
+ @Test
+ public void parseInputWithDefinedArgumentShouldWork() throws Exception {
+ LinkedList<Argument> arguments = new LinkedList<>();
+ LinkedList<Option> options = new LinkedList<>();
+
+ arguments.add(this.requiredArgument);
+
+ JoptOptionParser optionParser = new JoptOptionParser();
+ optionParser.setArguments(arguments);
+ optionParser.setOptions(options);
+
+ OptionSet optionSet = optionParser.parse("command1 argument1_value");
+ assertThat(optionSet.areArgumentsPresent()).isTrue();
+ assertThat(optionSet.hasArgument(this.requiredArgument)).isTrue();
+ }
+
+ @Test
+ public void parseInputWithOneArgumentShouldFindJustOneArgument() throws Exception {
+ LinkedList<Argument> arguments = new LinkedList<>();
+ LinkedList<Option> options = new LinkedList<>();
+
+ arguments.add(this.requiredArgument);
+
+ JoptOptionParser optionParser = new JoptOptionParser();
+ optionParser.setArguments(arguments);
+ optionParser.setOptions(options);
+
+ OptionSet optionSet = optionParser.parse("command1 argument1_value");
+ assertThat(optionSet.areArgumentsPresent()).isTrue();
+ assertThat(optionSet.hasArgument(this.requiredArgument)).isTrue();
+ assertThat(optionSet.hasArgument(this.optionalArgument)).isFalse();
+ }
+
+ @Test
+ public void parseInputWithTwoArgumentsShouldFindTwoArguments() throws Exception {
+ LinkedList<Argument> arguments = new LinkedList<>();
+ LinkedList<Option> options = new LinkedList<>();
+
+ arguments.add(this.requiredArgument);
+ arguments.add(this.optionalArgument);
+
+ JoptOptionParser optionParser = new JoptOptionParser();
+ optionParser.setArguments(arguments);
+ optionParser.setOptions(options);
+
+ OptionSet optionSet = optionParser.parse("command1 argument1_value? argument2_value");
+ assertThat(optionSet.areArgumentsPresent()).isTrue();
+ assertThat(optionSet.hasArgument(this.requiredArgument)).isTrue();
+ assertThat(optionSet.hasArgument(this.optionalArgument)).isTrue();
+ }
+
+ @Test
+ public void parseInputWithUndefinedArgumentShouldThrow() throws Exception {
+ LinkedList<Argument> arguments = new LinkedList<>();
+ LinkedList<Option> options = new LinkedList<>();
+
+ arguments.add(this.requiredArgument);
+
+ JoptOptionParser optionParser = new JoptOptionParser();
+ optionParser.setArguments(arguments);
+ optionParser.setOptions(options);
+
+ assertThatThrownBy(() -> optionParser.parse("command1 argument1_value? argument2_value")).isOfAnyClassIn(CliCommandOptionNotApplicableException.class);
+ }
+
+ @Test
+ public void parseInputWithUndefinedOptionShouldThrow() throws Exception {
+ assertThatThrownBy(() -> this.simpleOptionParser.parse("command1 argument1_value argument2_value --undefinedOption")).isExactlyInstanceOf(CliCommandOptionNotApplicableException.class);
+ }
+
+ @Test
+ public void parseInputWithOneOptionShouldFindOneOption() throws Exception {
+ OptionSet optionSet = this.simpleOptionParser.parse("command1 argument1_value --option1");
+ assertThat(optionSet.areOptionsPresent()).isTrue();
+ assertThat(optionSet.hasOption(this.requiredOption)).isTrue();
+ assertThat(optionSet.hasOption(this.optionalOption)).isFalse();
+ }
+
+ @Test
+ public void parseInputWithTwoOptionsShouldFindTwoOptions() throws Exception {
+ OptionSet optionSet = this.simpleOptionParser.parse("command1 argument1_value --option1 --option2");
+ assertThat(optionSet.areOptionsPresent()).isTrue();
+ assertThat(optionSet.hasOption(this.requiredOption)).isTrue();
+ assertThat(optionSet.hasOption(this.optionalOption)).isTrue();
+ }
+
+ @Test
+ public void parseInputWithOptionWithValueShouldFindOption() throws Exception {
+ OptionSet optionSet = this.simpleOptionParser.parse("command1 argument1_value --option1=value");
+ assertThat(optionSet.areOptionsPresent()).isTrue();
+ assertThat(optionSet.hasOption(this.requiredOption)).isTrue();
+ }
+
+ @Test
+ public void parseInputWithOptionWithoutValueShouldFindOption() throws Exception {
+ OptionSet optionSet = this.simpleOptionParser.parse("command1 argument1_value --option1");
+ assertThat(optionSet.areOptionsPresent()).isTrue();
+ assertThat(optionSet.hasOption(this.requiredOption)).isTrue();
+ }
+
+ @Test
+ public void parseInputWithoutOptionShouldNotFindOptions() throws Exception {
+ LinkedList<Argument> arguments = new LinkedList<>();
+ LinkedList<Option> options = new LinkedList<>();
+
+ arguments.add(this.requiredArgument);
+
+ JoptOptionParser optionParser = new JoptOptionParser();
+ optionParser.setArguments(arguments);
+ optionParser.setOptions(options);
+
+ OptionSet optionSet = optionParser.parse("command1 argument1_value");
+ assertThat(optionSet.areOptionsPresent()).isFalse();
+ assertThat(optionSet.hasOption(this.requiredOption)).isFalse();
+ }
+
+ @Test
+ @Parameters(method = "exampleInputParameters")
+ public void parseInputWithExampleInputParametesr(String command, boolean expectException, boolean hasArguments, boolean hasOptions) throws Exception {
+ if (expectException) {
+ assertThatThrownBy(() -> this.exampleOptionParser.parse(command)).isExactlyInstanceOf(CliCommandOptionMissingException.class);
+ return;
+ }
+
+ OptionSet options = this.exampleOptionParser.parse(command);
+ assertThat(options).isNotNull();
+ assertThat(options.areArgumentsPresent()).isEqualTo(hasArguments);
+ assertThat(options.areOptionsPresent()).isEqualTo(hasOptions);
+ }
+
+ private static Object[] exampleInputParameters() {
+ return new Object[]{
+ // 0
+ new Object[] { " ARGUMENT1_VALUE \u2014option1=somevalue", false, true, false },
+ // 1
+ new Object[] { " ARGUMENT1_VALUE? ARGUMENT2_VALUE -- ----------", false, true, false },
+ // 2
+ new Object[] { " --option1=value", false, false, true },
+ // 3
+ new Object[] { " ARGUMENT1_VALUE? ARGUMENT2_VALUE --option1=option1value --option2", false, true, true },
+ // 4
+ new Object[] { " ARGUMENT1_VALUE? ARGUMENT2_VALUE --option1=option1value --option2=option2value --option3=option3value", false, true, true },
+ // 5
+ new Object[] { " --string=string1 --stringArray=1,2 --stringArray=3,4 --stringList=11,12,13 --integer=10 --stringArray=5 --stringList=14,15", false, false, true },
+ // 6
+ new Object[] { " --stringArray=1,2 --stringArray='3,4'", false, false, true },
+ // 7
+ new Object[] { " --string=\"1\" --colonArray=2:3:4 --stringArray=5,\"6,7\",8 --stringList=\"9,10,11,12\"", false, false, true },
+ // 8
+ new Object[] { " --string=string1 --stringArray=1,2 --string=string2", false, false, true },
+ // 9
+ new Object[] { " this is just one argument?this is a second argument", false, true, false }
+ };
+ }
+
+ private void defineSimpleOptionParser() {
+ LinkedList<Argument> arguments = new LinkedList<Argument>();
+ LinkedList<Option> options = new LinkedList<Option>();
+
+ this.requiredArgument = mock(Argument.class);
+ when(this.requiredArgument.getArgumentName()).thenReturn("argument1");
+ when(this.requiredArgument.getContext()).thenReturn("context for argument1");
+ when(this.requiredArgument.getHelp()).thenReturn("help for argument1");
+ when(this.requiredArgument.isRequired()).thenReturn(true);
+ arguments.add(this.requiredArgument);
+
+ this.optionalArgument = mock(Argument.class);
+ when(this.optionalArgument.getArgumentName()).thenReturn("argument2");
+ when(this.optionalArgument.getContext()).thenReturn("context for argument2");
+ when(this.optionalArgument.getHelp()).thenReturn("help for argument2");
+ when(this.optionalArgument.isRequired()).thenReturn(false);
+ when(this.optionalArgument.getUnspecifiedDefaultValue()).thenReturn("{unspecified default value for argument2}");
+ when(this.optionalArgument.isSystemProvided()).thenReturn(false);
+ arguments.add(this.optionalArgument);
+
+ this.requiredOption = mock(Option.class);
+ when(this.requiredOption.getLongOption()).thenReturn("--option1");
+ List<String> aggregate = new ArrayList<>();
+ aggregate.add("option1");
+ when(this.requiredOption.getAggregate()).thenReturn(aggregate);
+ when(this.requiredOption.getLongOption()).thenReturn("option1");
+ when(this.requiredOption.getHelp()).thenReturn("help for option1");
+ when(this.requiredOption.getValueSeparator()).thenReturn("=");
+ when(this.requiredOption.isRequired()).thenReturn(true);
+ assertThat(this.requiredOption.getAggregate()).isNotEmpty();
+ options.add(this.requiredOption);
+
+ this.optionalOption = mock(Option.class);
+ when(this.optionalOption.getLongOption()).thenReturn("--option2");
+ aggregate = new ArrayList<>();
+ aggregate.add("option2");
+ when(this.optionalOption.getAggregate()).thenReturn(aggregate);
+ when(this.optionalOption.getLongOption()).thenReturn("option2");
+ when(this.optionalOption.getHelp()).thenReturn("help for option2");
+ when(this.optionalOption.getValueSeparator()).thenReturn("=");
+ when(this.optionalOption.isRequired()).thenReturn(false);
+ assertThat(this.optionalOption.getAggregate()).isNotEmpty();
+ options.add(this.optionalOption);
+
+ this.simpleOptionParser = new JoptOptionParser();
+ this.simpleOptionParser.setArguments(arguments);
+ this.simpleOptionParser.setOptions(options);
+ }
+
+ private void defineExampleOptionParser() {
+ LinkedList<Argument> arguments = new LinkedList<Argument>();
+ LinkedList<Option> options = new LinkedList<Option>();
+
+ Argument argument1 = mock(Argument.class);
+ when(argument1.getArgumentName()).thenReturn("argument1");
+ when(argument1.getContext()).thenReturn("context for argument1");
+ when(argument1.getHelp()).thenReturn("help for argument1");
+ when(argument1.isRequired()).thenReturn(true);
+ arguments.add(argument1);
+
+ Argument argument2 = mock(Argument.class);
+ when(argument2.getArgumentName()).thenReturn("argument2");
+ when(argument2.getContext()).thenReturn("context for argument2");
+ when(argument2.getHelp()).thenReturn("help for argument2");
+ when(argument2.isRequired()).thenReturn(false);
+ when(argument2.getUnspecifiedDefaultValue()).thenReturn("{unspecified default value for argument2}");
+ when(argument2.isSystemProvided()).thenReturn(false);
+ arguments.add(argument2);
+
+ Argument argument3 = mock(Argument.class);
+ when(argument3.getArgumentName()).thenReturn("argument3");
+ when(argument3.getContext()).thenReturn("context for argument3");
+ when(argument3.getHelp()).thenReturn("help for argument3");
+ when(argument3.isRequired()).thenReturn(false);
+ when(argument3.getUnspecifiedDefaultValue()).thenReturn("{unspecified default value for argument3}");
+ when(argument2.isSystemProvided()).thenReturn(false);
+ arguments.add(argument3);
+
+ Option option1 = mock(Option.class);
+ when(option1.getLongOption()).thenReturn("--option1");
+ List<String> aggregate1 = new ArrayList<>();
+ aggregate1.add("option1");
+ when(option1.getAggregate()).thenReturn(aggregate1);
+ when(option1.getLongOption()).thenReturn("option1");
+ when(option1.getHelp()).thenReturn("help for option1");
+ when(option1.getValueSeparator()).thenReturn("=");
+ when(option1.isRequired()).thenReturn(false);
+ assertThat(option1.getAggregate()).isNotEmpty();
+ options.add(option1);
+
+ Option option2 = mock(Option.class);
+ when(option2.getLongOption()).thenReturn("--option2");
+ List<String> aggregate2 = new ArrayList<>();
+ aggregate2.add("option2");
+ when(option2.getAggregate()).thenReturn(aggregate2);
+ when(option2.getLongOption()).thenReturn("option2");
+ when(option2.getHelp()).thenReturn("help for option2");
+ when(option2.getValueSeparator()).thenReturn("=");
+ when(option2.isRequired()).thenReturn(false);
+ assertThat(option2.getAggregate()).isNotEmpty();
+ options.add(option2);
+
+ Option option3 = mock(Option.class);
+ when(option3.getLongOption()).thenReturn("--option3");
+ List<String> aggregate3 = new ArrayList<>();
+ aggregate3.add("option3");
+ when(option3.getAggregate()).thenReturn(aggregate3);
+ when(option3.getLongOption()).thenReturn("option3");
+ when(option3.getHelp()).thenReturn("help for option3");
+ when(option3.getValueSeparator()).thenReturn("=");
+ when(option3.isRequired()).thenReturn(false);
+ assertThat(option3.getAggregate()).isNotEmpty();
+ options.add(option3);
+
+ Option stringOption = mock(Option.class);
+ when(stringOption.getLongOption()).thenReturn("--string");
+ List<String> aggregateStringOption = new ArrayList<>();
+ aggregateStringOption.add("string");
+ when(stringOption.getAggregate()).thenReturn(aggregateStringOption);
+ when(stringOption.getLongOption()).thenReturn("string");
+ when(stringOption.getHelp()).thenReturn("help for string");
+ when(stringOption.getValueSeparator()).thenReturn("=");
+ when(stringOption.isRequired()).thenReturn(false);
+ assertThat(stringOption.getAggregate()).isNotEmpty();
+ options.add(stringOption);
+
+ Option stringArrayOption = mock(Option.class);
+ when(stringArrayOption.getLongOption()).thenReturn("--stringArray");
+ List<String> aggregateStringArrayOption = new ArrayList<>();
+ aggregateStringArrayOption.add("stringArray");
+ when(stringArrayOption.getAggregate()).thenReturn(aggregateStringArrayOption);
+ when(stringArrayOption.getLongOption()).thenReturn("stringArray");
+ when(stringArrayOption.getHelp()).thenReturn("help for stringArray");
+ when(stringArrayOption.getValueSeparator()).thenReturn("=");
+ when(stringArrayOption.isRequired()).thenReturn(false);
+ assertThat(stringArrayOption.getAggregate()).isNotEmpty();
+ options.add(stringArrayOption);
+
+ Option stringListOption = mock(Option.class);
+ when(stringListOption.getLongOption()).thenReturn("--stringList");
+ List<String> aggregateStringListOption = new ArrayList<>();
+ aggregateStringListOption.add("stringList");
+ when(stringListOption.getAggregate()).thenReturn(aggregateStringListOption);
+ when(stringListOption.getLongOption()).thenReturn("stringList");
+ when(stringListOption.getHelp()).thenReturn("help for stringList");
+ when(stringListOption.getValueSeparator()).thenReturn("=");
+ when(stringListOption.isRequired()).thenReturn(false);
+ assertThat(stringListOption.getAggregate()).isNotEmpty();
+ options.add(stringListOption);
+
+ Option integerOption = mock(Option.class);
+ when(integerOption.getLongOption()).thenReturn("--integer");
+ List<String> aggregateIntegerOption = new ArrayList<>();
+ aggregateIntegerOption.add("integer");
+ when(integerOption.getAggregate()).thenReturn(aggregateIntegerOption);
+ when(integerOption.getLongOption()).thenReturn("integer");
+ when(integerOption.getHelp()).thenReturn("help for integer");
+ when(integerOption.getValueSeparator()).thenReturn("=");
+ when(integerOption.isRequired()).thenReturn(false);
+ assertThat(integerOption.getAggregate()).isNotEmpty();
+ options.add(integerOption);
+
+ Option colonArrayOption = mock(Option.class);
+ when(colonArrayOption.getLongOption()).thenReturn("--colonArray");
+ List<String> aggregateColonArrayOption = new ArrayList<>();
+ aggregateColonArrayOption.add("colonArray");
+ when(colonArrayOption.getAggregate()).thenReturn(aggregateColonArrayOption);
+ when(colonArrayOption.getLongOption()).thenReturn("colonArray");
+ when(colonArrayOption.getHelp()).thenReturn("help for colonArray");
+ when(colonArrayOption.getValueSeparator()).thenReturn("=");
+ when(colonArrayOption.isRequired()).thenReturn(false);
+ assertThat(colonArrayOption.getAggregate()).isNotEmpty();
+ options.add(colonArrayOption);
+
+ this.exampleOptionParser = new JoptOptionParser();
+ this.exampleOptionParser.setArguments(arguments);
+ this.exampleOptionParser.setOptions(options);
+ }
+}
[3/5] incubator-geode git commit: GEODE-1246: change async event pool
to use all its threads
Posted by kl...@apache.org.
GEODE-1246: change async event pool to use all its threads
The system property gemfire.Cache.EVENT_THREAD_LIMIT can be used to configure
the max number of threads used for async cache listener invocation.
It defaults to 16.
Project: http://git-wip-us.apache.org/repos/asf/incubator-geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-geode/commit/1af92d89
Tree: http://git-wip-us.apache.org/repos/asf/incubator-geode/tree/1af92d89
Diff: http://git-wip-us.apache.org/repos/asf/incubator-geode/diff/1af92d89
Branch: refs/heads/feature/GEODE-835
Commit: 1af92d89108dbdb570f60fe4682edb77558f91e2
Parents: a17dc71
Author: Darrel Schneider <ds...@pivotal.io>
Authored: Wed May 18 09:23:38 2016 -0700
Committer: Darrel Schneider <ds...@pivotal.io>
Committed: Fri May 20 14:54:24 2016 -0700
----------------------------------------------------------------------
.../internal/PooledExecutorWithDMStats.java | 9 +--
.../internal/locks/DLockService.java | 9 ++-
.../internal/cache/GemFireCacheImpl.java | 37 +++++------
.../gemfire/internal/cache/LocalRegion.java | 2 +-
.../gemfire/internal/jndi/JNDIInvoker.java | 3 +-
.../internal/cache/GemFireCacheImplTest.java | 66 ++++++++++++++++++++
.../com/gemstone/gemfire/test/fake/Fakes.java | 10 +++
7 files changed, 106 insertions(+), 30 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/1af92d89/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/PooledExecutorWithDMStats.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/PooledExecutorWithDMStats.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/PooledExecutorWithDMStats.java
index 0a9f9ec..3909474 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/PooledExecutorWithDMStats.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/PooledExecutorWithDMStats.java
@@ -39,7 +39,7 @@ public class PooledExecutorWithDMStats extends ThreadPoolExecutor {
/**
* Create a new pool
**/
- public PooledExecutorWithDMStats(BlockingQueue<Runnable> q, int maxPoolSize, PoolStatHelper stats, ThreadFactory tf, int msTimeout, RejectedExecutionHandler reh) {
+ public PooledExecutorWithDMStats(SynchronousQueue<Runnable> q, int maxPoolSize, PoolStatHelper stats, ThreadFactory tf, int msTimeout, RejectedExecutionHandler reh) {
super(getCorePoolSize(maxPoolSize), maxPoolSize,
msTimeout, TimeUnit.MILLISECONDS,
q, tf, reh);
@@ -61,9 +61,9 @@ public class PooledExecutorWithDMStats extends ThreadPoolExecutor {
*/
private Thread bufferConsumer;
- private static BlockingQueue<Runnable> initQ(BlockingQueue<Runnable> q) {
+ private static SynchronousQueue<Runnable> initQ(BlockingQueue<Runnable> q) {
if (q instanceof SynchronousQueue) {
- return q;
+ return (SynchronousQueue<Runnable>) q;
} else {
return new SynchronousQueue/*NoSpin*/<Runnable>();
}
@@ -95,7 +95,8 @@ public class PooledExecutorWithDMStats extends ThreadPoolExecutor {
try {
for (;;) {
SystemFailure.checkFailure();
- putQueue.put(takeQueue.take());
+ Runnable job = takeQueue.take();
+ putQueue.put(job);
}
}
catch (InterruptedException ie) {
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/1af92d89/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/DLockService.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/DLockService.java b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/DLockService.java
index 610944e..844a93d 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/DLockService.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/distributed/internal/locks/DLockService.java
@@ -133,7 +133,7 @@ public class DLockService extends DistributedLockService {
private DLockRecoverGrantorProcessor.MessageProcessor recoverGrantorProcessor;
/** Thread-safe reference to DistributedLockStats */
- private final DistributedLockStats dlockStats = getOrCreateStats();
+ private final DistributedLockStats dlockStats;
/**
* Protects {@link #lockGrantorId}, {@link #grantor} and
@@ -2145,6 +2145,7 @@ public class DLockService extends DistributedLockService {
boolean destroyOnDisconnect,
boolean automateFreeResources) {
super();
+ this.dlockStats = getOrCreateStats(ds);
this.serialNumber = createSerialNumber();
this.serviceName = serviceName;
this.ds = (InternalDistributedSystem) ds;
@@ -3185,12 +3186,10 @@ public class DLockService extends DistributedLockService {
}
/** Get or create static dlock stats */
- protected static synchronized DistributedLockStats getOrCreateStats() {
+ protected static synchronized DistributedLockStats getOrCreateStats(DistributedSystem ds) {
if (stats == DUMMY_STATS) {
- InternalDistributedSystem ds =
- InternalDistributedSystem.getAnyInstance();
Assert.assertTrue(ds != null,
- "Cannot find any instance of InternalDistributedSystem");
+ "Need an instance of InternalDistributedSystem");
StatisticsFactory statFactory = ds;
long statId = OSProcess.getId();
stats = new DLockStats(statFactory, statId);
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/1af92d89/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/GemFireCacheImpl.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/GemFireCacheImpl.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/GemFireCacheImpl.java
index 96b7bbc..c44f3b7 100755
--- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/GemFireCacheImpl.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/GemFireCacheImpl.java
@@ -66,7 +66,6 @@ import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.RejectedExecutionException;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.ThreadPoolExecutor;
-import java.util.concurrent.ThreadPoolExecutor.CallerRunsPolicy;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
@@ -270,9 +269,9 @@ public class GemFireCacheImpl implements InternalCache, ClientCache, HasCachePer
private static final Set<CacheLifecycleListener> cacheLifecycleListeners = new HashSet<CacheLifecycleListener>();
/**
- * Define LocalRegion.ASYNC_EVENT_LISTENERS=true to invoke event listeners in the background
+ * Define gemfire.Cache.ASYNC_EVENT_LISTENERS=true to invoke event listeners in the background
*/
- public static final boolean ASYNC_EVENT_LISTENERS = Boolean.getBoolean("gemfire.Cache.ASYNC_EVENT_LISTENERS");
+ private static final boolean ASYNC_EVENT_LISTENERS = Boolean.getBoolean("gemfire.Cache.ASYNC_EVENT_LISTENERS");
/**
* If true then when a delta is applied the size of the entry value will be recalculated. If false (the default) then
@@ -283,6 +282,7 @@ public class GemFireCacheImpl implements InternalCache, ClientCache, HasCachePer
public static boolean DELTAS_RECALCULATE_SIZE = Boolean.getBoolean("gemfire.DELTAS_RECALCULATE_SIZE");
public static final int EVENT_QUEUE_LIMIT = Integer.getInteger("gemfire.Cache.EVENT_QUEUE_LIMIT", 4096).intValue();
+ public static final int EVENT_THREAD_LIMIT = Integer.getInteger("gemfire.Cache.EVENT_THREAD_LIMIT", 16).intValue();
/**
* System property to limit the max query-execution time. By default its turned off (-1), the time is set in MiliSecs.
@@ -763,18 +763,22 @@ public class GemFireCacheImpl implements InternalCache, ClientCache, HasCachePer
// }
public static GemFireCacheImpl createClient(DistributedSystem system, PoolFactory pf, CacheConfig cacheConfig) {
- return basicCreate(system, true, cacheConfig, pf, true);
+ return basicCreate(system, true, cacheConfig, pf, true, ASYNC_EVENT_LISTENERS);
}
public static GemFireCacheImpl create(DistributedSystem system, CacheConfig cacheConfig) {
- return basicCreate(system, true, cacheConfig, null, false);
+ return basicCreate(system, true, cacheConfig, null, false, ASYNC_EVENT_LISTENERS);
}
- public static Cache create(DistributedSystem system, boolean existingOk, CacheConfig cacheConfig) {
- return basicCreate(system, existingOk, cacheConfig, null, false);
+ public static GemFireCacheImpl createWithAsyncEventListeners(DistributedSystem system, CacheConfig cacheConfig) {
+ return basicCreate(system, true, cacheConfig, null, false, true);
+ }
+
+ public static Cache create(DistributedSystem system, boolean existingOk, CacheConfig cacheConfig) {
+ return basicCreate(system, existingOk, cacheConfig, null, false, ASYNC_EVENT_LISTENERS);
}
- private static GemFireCacheImpl basicCreate(DistributedSystem system, boolean existingOk, CacheConfig cacheConfig, PoolFactory pf, boolean isClient)
+ private static GemFireCacheImpl basicCreate(DistributedSystem system, boolean existingOk, CacheConfig cacheConfig, PoolFactory pf, boolean isClient, boolean asyncEventListeners)
throws CacheExistsException, TimeoutException, CacheWriterException,
GatewayException,
RegionExistsException
@@ -782,7 +786,7 @@ public class GemFireCacheImpl implements InternalCache, ClientCache, HasCachePer
try {
GemFireCacheImpl instance = checkExistingCache(existingOk, cacheConfig);
if (instance == null) {
- instance = new GemFireCacheImpl(isClient, pf, system, cacheConfig);
+ instance = new GemFireCacheImpl(isClient, pf, system, cacheConfig, asyncEventListeners);
instance.initialize();
}
return instance;
@@ -814,7 +818,7 @@ public class GemFireCacheImpl implements InternalCache, ClientCache, HasCachePer
/**
* Creates a new instance of GemFireCache and populates it according to the <code>cache.xml</code>, if appropriate.
*/
- private GemFireCacheImpl(boolean isClient, PoolFactory pf, DistributedSystem system, CacheConfig cacheConfig) {
+ private GemFireCacheImpl(boolean isClient, PoolFactory pf, DistributedSystem system, CacheConfig cacheConfig, boolean asyncEventListeners) {
this.isClient = isClient;
this.clientpf = pf;
this.cacheConfig = cacheConfig; // do early for bug 43213
@@ -825,7 +829,7 @@ public class GemFireCacheImpl implements InternalCache, ClientCache, HasCachePer
// start JTA transaction manager within this synchronized block
// to prevent race with cache close. fixes bug 43987
- JNDIInvoker.mapTransactions();
+ JNDIInvoker.mapTransactions(system);
this.system = (InternalDistributedSystem) system;
this.dm = this.system.getDistributionManager();
if (!this.isClient && PoolManager.getAll().isEmpty()) {
@@ -868,7 +872,7 @@ public class GemFireCacheImpl implements InternalCache, ClientCache, HasCachePer
this.persistentMemberManager = new PersistentMemberManager();
- if (ASYNC_EVENT_LISTENERS) {
+ if (asyncEventListeners) {
final ThreadGroup group = LoggingThreadGroup.createThreadGroup("Message Event Threads",logger);
ThreadFactory tf = new ThreadFactory() {
public Thread newThread(final Runnable command) {
@@ -883,11 +887,8 @@ public class GemFireCacheImpl implements InternalCache, ClientCache, HasCachePer
return thread;
}
};
- // @todo darrel: add stats
- // this.cachePerfStats.getEventQueueHelper());
ArrayBlockingQueue q = new ArrayBlockingQueue(EVENT_QUEUE_LIMIT);
- this.eventThreadPool = new PooledExecutorWithDMStats(q, 16, this.cachePerfStats.getEventPoolHelper(), tf, 1000,
- new CallerRunsPolicy());
+ this.eventThreadPool = new PooledExecutorWithDMStats(q, EVENT_THREAD_LIMIT, this.cachePerfStats.getEventPoolHelper(), tf, 1000);
} else {
this.eventThreadPool = null;
}
@@ -2078,7 +2079,7 @@ public class GemFireCacheImpl implements InternalCache, ClientCache, HasCachePer
destroyGatewaySenderLockService();
- if (ASYNC_EVENT_LISTENERS) {
+ if (this.eventThreadPool != null) {
if (isDebugEnabled) {
logger.debug("{}: stopping event thread pool...", this);
}
@@ -3812,11 +3813,11 @@ public class GemFireCacheImpl implements InternalCache, ClientCache, HasCachePer
/**
* Returns the <code>Executor</code> (thread pool) that is used to execute cache event listeners.
+ * Returns <code>null</code> if no pool exists.
*
* @since 3.5
*/
Executor getEventThreadPool() {
- Assert.assertTrue(this.eventThreadPool != null);
return this.eventThreadPool;
}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/1af92d89/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/LocalRegion.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/LocalRegion.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/LocalRegion.java
index b5ff7ee..d28496c 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/LocalRegion.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/cache/LocalRegion.java
@@ -7582,7 +7582,7 @@ public class LocalRegion extends AbstractRegion
}
}
- if (!GemFireCacheImpl.ASYNC_EVENT_LISTENERS) {
+ if (this.cache.getEventThreadPool() == null) {
dispatchEvent(this, event, op);
}
else {
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/1af92d89/geode-core/src/main/java/com/gemstone/gemfire/internal/jndi/JNDIInvoker.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/com/gemstone/gemfire/internal/jndi/JNDIInvoker.java b/geode-core/src/main/java/com/gemstone/gemfire/internal/jndi/JNDIInvoker.java
index b3aecc4..2743537 100644
--- a/geode-core/src/main/java/com/gemstone/gemfire/internal/jndi/JNDIInvoker.java
+++ b/geode-core/src/main/java/com/gemstone/gemfire/internal/jndi/JNDIInvoker.java
@@ -125,9 +125,8 @@ public class JNDIInvoker {
* </p>
*
*/
- public static void mapTransactions() {
+ public static void mapTransactions(DistributedSystem distSystem) {
try {
- DistributedSystem distSystem = InternalDistributedSystem.getAnyInstance();
TransactionUtils.setLogWriter(distSystem.getLogWriter().convertToLogWriterI18n());
cleanup();
if (IGNORE_JTA) {
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/1af92d89/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/GemFireCacheImplTest.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/GemFireCacheImplTest.java b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/GemFireCacheImplTest.java
new file mode 100644
index 0000000..3dc2f7a
--- /dev/null
+++ b/geode-core/src/test/java/com/gemstone/gemfire/internal/cache/GemFireCacheImplTest.java
@@ -0,0 +1,66 @@
+/*
+ * 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 com.gemstone.gemfire.internal.cache;
+
+import static org.junit.Assert.*;
+
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
+
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+
+import com.gemstone.gemfire.test.fake.Fakes;
+import com.gemstone.gemfire.test.junit.categories.UnitTest;
+import com.jayway.awaitility.Awaitility;
+
+@Category(UnitTest.class)
+public class GemFireCacheImplTest {
+
+ @Test
+ public void checkThatAsyncEventListenersUseAllThreadsInPool() {
+
+ GemFireCacheImpl gfc = GemFireCacheImpl.createWithAsyncEventListeners(Fakes.distributedSystem(), new CacheConfig());
+ ThreadPoolExecutor executor = (ThreadPoolExecutor) gfc.getEventThreadPool();
+ final long initialCount = executor.getCompletedTaskCount();
+ try {
+ int MAX_THREADS = GemFireCacheImpl.EVENT_THREAD_LIMIT;
+ final CountDownLatch cdl = new CountDownLatch(MAX_THREADS);
+ for (int i = 1; i <= MAX_THREADS; i++) {
+ Runnable r = new Runnable() {
+ @Override
+ public void run() {
+ cdl.countDown();
+ try {
+ cdl.await();
+ } catch (InterruptedException e) {
+ }
+ }
+ };
+ executor.execute(r);
+ }
+ Awaitility.await().pollInterval(10, TimeUnit.MILLISECONDS).pollDelay(10, TimeUnit.MILLISECONDS).timeout(15, TimeUnit.SECONDS)
+ .until(() -> {
+ return executor.getCompletedTaskCount() == MAX_THREADS+initialCount;
+ });
+ } finally {
+ executor.shutdown();
+ }
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/1af92d89/geode-core/src/test/java/com/gemstone/gemfire/test/fake/Fakes.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/com/gemstone/gemfire/test/fake/Fakes.java b/geode-core/src/test/java/com/gemstone/gemfire/test/fake/Fakes.java
index 2a1fd8e..16734b5 100644
--- a/geode-core/src/test/java/com/gemstone/gemfire/test/fake/Fakes.java
+++ b/geode-core/src/test/java/com/gemstone/gemfire/test/fake/Fakes.java
@@ -18,11 +18,14 @@ package com.gemstone.gemfire.test.fake;
import static org.mockito.Mockito.*;
+import java.io.File;
import java.net.UnknownHostException;
import org.junit.Assert;
import com.gemstone.gemfire.CancelCriterion;
+import com.gemstone.gemfire.LogWriter;
+import com.gemstone.gemfire.Statistics;
import com.gemstone.gemfire.cache.Cache;
import com.gemstone.gemfire.cache.DataPolicy;
import com.gemstone.gemfire.cache.Region;
@@ -65,6 +68,8 @@ public class Fakes {
DistributionManager distributionManager = mock(DistributionManager.class);
CancelCriterion systemCancelCriterion = mock(CancelCriterion.class);
DSClock clock = mock(DSClock.class);
+ LogWriter logger = mock(LogWriter.class);
+ Statistics stats = mock(Statistics.class);
InternalDistributedMember member;
try {
@@ -73,6 +78,8 @@ public class Fakes {
throw new RuntimeException(e);
}
+ when(config.getCacheXmlFile()).thenReturn(new File(""));
+ when(config.getDeployWorkingDir()).thenReturn(new File("."));
when(cache.getDistributedSystem()).thenReturn(system);
when(cache.getMyId()).thenReturn(member);
@@ -84,6 +91,9 @@ public class Fakes {
when(system.getDistributionManager()).thenReturn(distributionManager);
when(system.getCancelCriterion()).thenReturn(systemCancelCriterion);
when(system.getClock()).thenReturn(clock);
+ when(system.getLogWriter()).thenReturn(logger);
+ when(system.createAtomicStatistics(any(), any(), anyLong())).thenReturn(stats);
+ when(system.createAtomicStatistics(any(), any())).thenReturn(stats);
when(distributionManager.getId()).thenReturn(member);
when(distributionManager.getConfig()).thenReturn(config);