You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by sp...@apache.org on 2016/08/28 01:15:01 UTC
[1/2] tinkerpop git commit: Added a check to ignore a test if
graphml.org is down.
Repository: tinkerpop
Updated Branches:
refs/heads/master b1afafa82 -> e31a2cb46
Added a check to ignore a test if graphml.org is down.
There is an xml validation check in the test and if that site is down the test will fail. CTR
Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/4f6e7691
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/4f6e7691
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/4f6e7691
Branch: refs/heads/master
Commit: 4f6e76913f61e39ca31f2ee63a337642440bb43e
Parents: b1afafa
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Sat Aug 27 21:11:44 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Sat Aug 27 21:11:44 2016 -0400
----------------------------------------------------------------------
.../tinkerpop/gremlin/structure/io/IoTest.java | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/4f6e7691/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/structure/io/IoTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/structure/io/IoTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/structure/io/IoTest.java
index 6d21c2b..ca79264 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/structure/io/IoTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/structure/io/IoTest.java
@@ -72,6 +72,7 @@ import java.io.OutputStream;
import java.io.Reader;
import java.io.StringWriter;
import java.io.Writer;
+import java.net.URL;
import java.util.List;
import java.util.UUID;
@@ -80,10 +81,12 @@ import static org.apache.tinkerpop.gremlin.structure.Graph.Features.VariableFeat
import static org.apache.tinkerpop.gremlin.structure.Graph.Features.VertexFeatures.FEATURE_USER_SUPPLIED_IDS;
import static org.apache.tinkerpop.gremlin.structure.Graph.Features.VertexPropertyFeatures.*;
import static org.apache.tinkerpop.gremlin.structure.io.IoCore.graphson;
+import static org.hamcrest.core.Is.is;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
+import static org.junit.Assume.assumeThat;
/**
* @author Joshua Shinavier (http://fortytwo.net)
@@ -232,6 +235,8 @@ public class IoTest {
@FeatureRequirement(featureClass = Graph.Features.VertexFeatures.class, feature = FEATURE_USER_SUPPLIED_IDS)
@FeatureRequirement(featureClass = Graph.Features.VertexFeatures.class, feature = Graph.Features.VertexFeatures.FEATURE_STRING_IDS)
public void shouldProperlyEncodeWithGraphML() throws Exception {
+ assumeThat("GraphML web site is down so XSD cannot be retrieved", is(isGraphMLXSDPresent()));
+
final Vertex v = graph.addVertex(T.id, "1");
v.property(VertexProperty.Cardinality.single, "text", "\u00E9");
@@ -286,6 +291,17 @@ public class IoTest {
assertEquals(IteratorUtils.count(source.vertices()), IteratorUtils.count(target.vertices()));
assertEquals(IteratorUtils.count(source.edges()), IteratorUtils.count(target.edges()));
}
+
+ private boolean isGraphMLXSDPresent() {
+ // when the graphml website goes down then tests won't pass - this allows the tests that rely on this
+ // resource to conditionally run
+ try {
+ new URL("http://graphml.graphdrawing.org/xmlns/1.1/graphml-structure.xsd").openConnection().connect();
+ return true;
+ } catch (Exception ex) {
+ return false;
+ }
+ }
}
public static final class GryoTest extends AbstractGremlinTest {
[2/2] tinkerpop git commit: Added a way to extend the "end" behavior
of result iteration.
Posted by sp...@apache.org.
Added a way to extend the "end" behavior of result iteration.
There seemed to be some kind of race condition where the side-effect cache would not get initialized in between the final message being sent back to the client and the request for the side-effect. Introducing this extension allows TraversalOpProcessor to add the traversal sideeffect to the cache just prior to flush of the last messge. CTR
Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/e31a2cb4
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/e31a2cb4
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/e31a2cb4
Branch: refs/heads/master
Commit: e31a2cb4644d3babb4ae58387175e7c3905dc321
Parents: 4f6e769
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Sat Aug 27 21:12:50 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Sat Aug 27 21:12:50 2016 -0400
----------------------------------------------------------------------
.../gremlin/server/op/AbstractOpProcessor.java | 11 +++++++++++
.../server/op/traversal/TraversalOpProcessor.java | 12 ++++++++----
.../gremlin/server/util/TraversalIterator.java | 6 ++++++
3 files changed, 25 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/e31a2cb4/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/AbstractOpProcessor.java
----------------------------------------------------------------------
diff --git a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/AbstractOpProcessor.java b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/AbstractOpProcessor.java
index a2598ef..d1d1dcb 100644
--- a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/AbstractOpProcessor.java
+++ b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/AbstractOpProcessor.java
@@ -179,6 +179,8 @@ public abstract class AbstractOpProcessor implements OpProcessor {
throw ex;
}
+ iterateComplete(ctx, msg, itty);
+
// the flush is called after the commit has potentially occurred. in this way, if a commit was
// required then it will be 100% complete before the client receives it. the "frame" at this point
// should have completely detached objects from the transaction (i.e. serialization has occurred)
@@ -211,6 +213,15 @@ public abstract class AbstractOpProcessor implements OpProcessor {
}
/**
+ * Called when iteration within {@link #handleIterator(Context, Iterator)} is on its final pass and the final
+ * frame is about to be sent back to the client. This method only gets called on successful iteration of the
+ * entire result.
+ */
+ protected void iterateComplete(final ChannelHandlerContext ctx, final RequestMessage msg, final Iterator itty) {
+ // do nothing by default
+ }
+
+ /**
* Determines if a {@link Frame} should be force flushed outside of the {@code resultIterationBatchSize} and the
* termination of the iterator. By default this method return {@code false}.
*
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/e31a2cb4/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/traversal/TraversalOpProcessor.java
----------------------------------------------------------------------
diff --git a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/traversal/TraversalOpProcessor.java b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/traversal/TraversalOpProcessor.java
index 2acea4a..beca097 100644
--- a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/traversal/TraversalOpProcessor.java
+++ b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/traversal/TraversalOpProcessor.java
@@ -107,7 +107,7 @@ public class TraversalOpProcessor extends AbstractOpProcessor {
private static Cache<UUID, TraversalSideEffects> cache = null;
public TraversalOpProcessor() {
- super(true);
+ super(false);
}
@Override
@@ -367,9 +367,6 @@ public class TraversalOpProcessor extends AbstractOpProcessor {
// compile the traversal - without it getEndStep() has nothing in it
traversal.applyStrategies();
handleIterator(context, new TraversalIterator(traversal));
-
- if (!traversal.getSideEffects().isEmpty())
- cache.put(msg.getRequestId(), traversal.getSideEffects());
} catch (TimeoutException ex) {
final String errorMessage = String.format("Response iteration exceeded the configured threshold for request [%s] - %s", msg.getRequestId(), ex.getMessage());
logger.warn(errorMessage);
@@ -400,6 +397,13 @@ public class TraversalOpProcessor extends AbstractOpProcessor {
}
}
+ @Override
+ protected void iterateComplete(final ChannelHandlerContext ctx, final RequestMessage msg, final Iterator itty) {
+ final Traversal.Admin traversal = ((TraversalIterator) itty).getTraversal();
+ if (!traversal.getSideEffects().isEmpty())
+ cache.put(msg.getRequestId(), traversal.getSideEffects());
+ }
+
protected void beforeProcessing(final Graph graph, final Context ctx) {
if (graph.features().graph().supportsTransactions() && graph.tx().isOpen()) graph.tx().rollback();
}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/e31a2cb4/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/util/TraversalIterator.java
----------------------------------------------------------------------
diff --git a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/util/TraversalIterator.java b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/util/TraversalIterator.java
index 4b77ac0..041dc0b 100644
--- a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/util/TraversalIterator.java
+++ b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/util/TraversalIterator.java
@@ -30,10 +30,12 @@ import java.util.Iterator;
*/
public class TraversalIterator implements Iterator<Object> {
+ private final Traversal.Admin traversal;
private final Iterator<Object> traversalIterator;
private final HaltedTraverserStrategy haltedTraverserStrategy;
public TraversalIterator(final Traversal.Admin traversal) {
+ this.traversal = traversal;
this.traversalIterator = traversal.getEndStep();
this.haltedTraverserStrategy = traversal.getStrategies().getStrategy(HaltedTraverserStrategy.class).orElse(
Boolean.valueOf(System.getProperty("is.testing", "false")) ?
@@ -41,6 +43,10 @@ public class TraversalIterator implements Iterator<Object> {
HaltedTraverserStrategy.reference());
}
+ public Traversal.Admin getTraversal() {
+ return traversal;
+ }
+
@Override
public boolean hasNext() {
return this.traversalIterator.hasNext();