Merge branch '3.4-dev'
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index eea8b2e..82bfc85 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -131,6 +131,8 @@
* Fixed bug with Bytecode serialization when `Bytecode.toString()` is used in Javascript.
* Fixed "toString" for P and TextP to produce valid script representation from bytecode glv steps containing a string predicate in Javascript.
* Fixed a bug which could cause Java driver to hang when using `ResultSet.statusAttributes()`
+* Fixed bug with `ReservedVerificationStrategy.getConfiguration()` which was omitting the reserved `keys` value.
+* Changed all configuration keys on `AbstractWarningVerificationStrategy` implementations to `public`.
* Deprecated `BytecodeUtil` and merged its functionality to the existing `BytecodeHelper`.
[[release-3-4-8]]
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/Memory.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/Memory.java
index 93931c3..1b74508 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/Memory.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/Memory.java
@@ -65,8 +65,10 @@
public void set(final String key, final Object value) throws IllegalArgumentException, IllegalStateException;
/**
- * Set the value of the provided key. This is typically called in setup() and/or terminate() of the {@link VertexProgram}.
- * If this is called during execute(), there is no guarantee as to the ultimately stored value as call order is indeterminate.
+ * Set the value of the provided key. This is typically called in setup() and/or terminate() of the
+ * {@link VertexProgram}. If this is called during execute(), there is no guarantee as to the ultimately stored
+ * value as call order is indeterminate. It is up to the implementation to determine the states in which this
+ * method can be called.
*
* @param key they key to set a value for
* @param value the value to set for the key
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/AbstractWarningVerificationStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/AbstractWarningVerificationStrategy.java
index 9a9391b..8bdf0ee 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/AbstractWarningVerificationStrategy.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/AbstractWarningVerificationStrategy.java
@@ -40,8 +40,8 @@
private static final Logger LOGGER = LoggerFactory.getLogger(AbstractWarningVerificationStrategy.class);
- protected static final String THROW_EXCEPTION = "throwException";
- protected static final String LOG_WARNING = "logWarning";
+ public static final String THROW_EXCEPTION = "throwException";
+ public static final String LOG_WARNING = "logWarning";
protected final boolean throwException;
protected final boolean logWarning;
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/ReservedKeysVerificationStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/ReservedKeysVerificationStrategy.java
index d764693..28c59ca 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/ReservedKeysVerificationStrategy.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/ReservedKeysVerificationStrategy.java
@@ -19,6 +19,7 @@
package org.apache.tinkerpop.gremlin.process.traversal.strategy.verification;
import org.apache.commons.configuration2.Configuration;
+import org.apache.commons.configuration.MapConfiguration;
import org.apache.tinkerpop.gremlin.process.traversal.Step;
import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
import org.apache.tinkerpop.gremlin.process.traversal.step.Parameterizing;
@@ -31,7 +32,9 @@
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.HashMap;
import java.util.HashSet;
+import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
@@ -47,7 +50,7 @@
*/
public class ReservedKeysVerificationStrategy extends AbstractWarningVerificationStrategy {
- private static final String KEYS = "keys";
+ public static final String KEYS = "keys";
private static final Set<String> DEFAULT_RESERVED_KEYS = new HashSet<>(Arrays.asList("id", "label"));
private final Set<String> reservedKeys;
@@ -84,6 +87,13 @@
.logWarning(configuration.getBoolean(LOG_WARNING, false)).create();
}
+ @Override
+ public Configuration getConfiguration() {
+ final Configuration c = super.getConfiguration();
+ c.setProperty(KEYS, this.reservedKeys);
+ return c;
+ }
+
public static ReservedKeysVerificationStrategy.Builder build() {
return new ReservedKeysVerificationStrategy.Builder();
}
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/ReservedKeysVerificationStrategyTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/ReservedKeysVerificationStrategyTest.java
index f25f66d..22dcd11 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/ReservedKeysVerificationStrategyTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/ReservedKeysVerificationStrategyTest.java
@@ -34,6 +34,7 @@
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.HashSet;
import java.util.List;
import java.util.function.Predicate;
import java.util.regex.Pattern;
@@ -81,6 +82,7 @@
{"__.addE('knows').property('label','xyz')", __.addE("knows").property("id", "xyz"), false},
{"__.addV().property('x','xyz', 'label', 'xxx')", __.addV().property("x", "xyz", "label", "xxx"), false},
{"__.addV().property('x','xyz', 'not-Label', 'xxx')", __.addV().property("x", "xyz", "not-label", "xxx"), true},
+ {"__.addV().property('x','xyz', 'not-allowed', 'xxx')", __.addV().property("x", "xyz", "not-allowed", "xxx"), false},
});
}
@@ -106,7 +108,10 @@
@Test
public void shouldOnlyThrow() {
final TraversalStrategies strategies = new DefaultTraversalStrategies();
- strategies.addStrategies(ReservedKeysVerificationStrategy.build().throwException().create());
+ final ReservedKeysVerificationStrategy.Builder builder = ReservedKeysVerificationStrategy.build().throwException();
+ if (name.equals("__.addV().property('x','xyz', 'not-allowed', 'xxx')"))
+ builder.reservedKeys(new HashSet<>(Arrays.asList("id", "label", "not-allowed")));
+ strategies.addStrategies(builder.create());
final Traversal traversal = this.traversal.asAdmin().clone();
traversal.asAdmin().setStrategies(strategies);
if (allow) {
@@ -125,7 +130,10 @@
@Test
public void shouldOnlyLog() {
final TraversalStrategies strategies = new DefaultTraversalStrategies();
- strategies.addStrategies(ReservedKeysVerificationStrategy.build().logWarning().create());
+ final ReservedKeysVerificationStrategy.Builder builder = ReservedKeysVerificationStrategy.build().logWarning();
+ if (name.equals("__.addV().property('x','xyz', 'not-allowed', 'xxx')"))
+ builder.reservedKeys(new HashSet<>(Arrays.asList("id", "label", "not-allowed")));
+ strategies.addStrategies(builder.create());
final Traversal traversal = this.traversal.asAdmin().clone();
traversal.asAdmin().setStrategies(strategies);
traversal.asAdmin().applyStrategies();
@@ -138,7 +146,11 @@
@Test
public void shouldThrowAndLog() {
final TraversalStrategies strategies = new DefaultTraversalStrategies();
- strategies.addStrategies(ReservedKeysVerificationStrategy.build().throwException().logWarning().create());
+ final ReservedKeysVerificationStrategy.Builder builder = ReservedKeysVerificationStrategy.build().
+ throwException().logWarning();
+ if (name.equals("__.addV().property('x','xyz', 'not-allowed', 'xxx')"))
+ builder.reservedKeys(new HashSet<>(Arrays.asList("id", "label", "not-allowed")));
+ strategies.addStrategies(builder.create());
final Traversal traversal = this.traversal.asAdmin().clone();
traversal.asAdmin().setStrategies(strategies);
if (allow) {