You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by ok...@apache.org on 2015/05/14 01:46:50 UTC
incubator-tinkerpop git commit: introduced Bypassing as a marker
interface used by both RangeGlobalStep and ComputerResultStep.
RangeGlobalStep works in OLAP if its the last step in the traversal. Fixed a
bug in WhereTest around sideEffects and Giraph ar
Repository: incubator-tinkerpop
Updated Branches:
refs/heads/master 4d5db5670 -> 73a719de0
introduced Bypassing as a marker interface used by both RangeGlobalStep and ComputerResultStep. RangeGlobalStep works in OLAP if its the last step in the traversal. Fixed a bug in WhereTest around sideEffects and Giraph around Java Object serialization.
Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/73a719de
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/73a719de
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/73a719de
Branch: refs/heads/master
Commit: 73a719de0ea1380e5a7d7b3e5cb31d28028cb668
Parents: 4d5db56
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Wed May 13 17:46:46 2015 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Wed May 13 17:46:46 2015 -0600
----------------------------------------------------------------------
.../traversal/TraversalVertexProgram.java | 2 +-
.../traversal/step/map/ComputerResultStep.java | 18 ++++++------
.../mapreduce/TraverserMapReduce.java | 11 +++++++
.../process/traversal/step/Bypassing.java | 30 ++++++++++++++++++++
.../traversal/step/filter/RangeGlobalStep.java | 14 +++++++--
.../traversal/step/util/AbstractStep.java | 5 +++-
.../ComputerVerificationStrategy.java | 6 +++-
.../traversal/util/TraversalScriptFunction.java | 4 +++
.../traversal/step/filter/WhereTest.java | 1 +
9 files changed, 77 insertions(+), 14 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/73a719de/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/TraversalVertexProgram.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/TraversalVertexProgram.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/TraversalVertexProgram.java
index e7dff8e..f3a1779 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/TraversalVertexProgram.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/TraversalVertexProgram.java
@@ -116,7 +116,7 @@ public final class TraversalVertexProgram implements VertexProgram<TraverserSet<
throw new IllegalArgumentException("The configuration does not have a traversal supplier:" + TRAVERSAL_SUPPLIER);
}
this.traversal = this.configurationTraversal.get();
- ((ComputerResultStep) this.traversal.getEndStep()).byPass();
+ ((ComputerResultStep) this.traversal.getEndStep()).setBypass(true);
this.traversalMatrix = new TraversalMatrix<>(this.traversal);
for (final MapReducer<?, ?, ?, ?, ?> mapReducer : TraversalHelper.getStepsOfAssignableClassRecursively(MapReducer.class, this.traversal)) {
this.mapReducers.add(mapReducer.getMapReduce());
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/73a719de/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ComputerResultStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ComputerResultStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ComputerResultStep.java
index a40ae0f..a9773b1 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ComputerResultStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ComputerResultStep.java
@@ -18,18 +18,19 @@
*/
package org.apache.tinkerpop.gremlin.process.computer.traversal.step.map;
-import org.apache.tinkerpop.gremlin.process.traversal.Step;
-import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
-import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
import org.apache.tinkerpop.gremlin.process.computer.ComputerResult;
import org.apache.tinkerpop.gremlin.process.computer.GraphComputer;
import org.apache.tinkerpop.gremlin.process.computer.traversal.TraversalVertexProgram;
import org.apache.tinkerpop.gremlin.process.computer.traversal.step.sideEffect.mapreduce.TraverserMapReduce;
+import org.apache.tinkerpop.gremlin.process.traversal.Step;
+import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
+import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
+import org.apache.tinkerpop.gremlin.process.traversal.step.Bypassing;
import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.SideEffectCapStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.util.ReducingBarrierStep;
import org.apache.tinkerpop.gremlin.process.traversal.step.util.AbstractStep;
-import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
+import org.apache.tinkerpop.gremlin.process.traversal.step.util.ReducingBarrierStep;
import org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserRequirement;
+import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
import org.apache.tinkerpop.gremlin.structure.Element;
import org.apache.tinkerpop.gremlin.structure.Graph;
import org.apache.tinkerpop.gremlin.structure.util.Attachable;
@@ -45,7 +46,7 @@ import java.util.Set;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public final class ComputerResultStep<S> extends AbstractStep<S, S> {
+public final class ComputerResultStep<S> extends AbstractStep<S, S> implements Bypassing {
private final transient GraphComputer graphComputer;
private final transient ComputerResult computerResult;
@@ -113,8 +114,9 @@ public final class ComputerResultStep<S> extends AbstractStep<S, S> {
this.byPass = false;
}
- public void byPass() {
- this.byPass = true;
+ @Override
+ public void setBypass(final boolean byPass) {
+ this.byPass = byPass;
}
@Override
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/73a719de/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/sideEffect/mapreduce/TraverserMapReduce.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/sideEffect/mapreduce/TraverserMapReduce.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/sideEffect/mapreduce/TraverserMapReduce.java
index bfe9064..5e3982d 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/sideEffect/mapreduce/TraverserMapReduce.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/sideEffect/mapreduce/TraverserMapReduce.java
@@ -25,6 +25,7 @@ import org.apache.tinkerpop.gremlin.process.computer.util.StaticMapReduce;
import org.apache.tinkerpop.gremlin.process.traversal.Step;
import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
+import org.apache.tinkerpop.gremlin.process.traversal.step.filter.RangeGlobalStep;
import org.apache.tinkerpop.gremlin.process.traversal.step.map.OrderGlobalStep;
import org.apache.tinkerpop.gremlin.process.traversal.step.util.CollectingBarrierStep;
import org.apache.tinkerpop.gremlin.process.traversal.traverser.util.TraverserSet;
@@ -47,6 +48,7 @@ public final class TraverserMapReduce extends StaticMapReduce<Comparable, Traver
private Traversal.Admin<?, ?> traversal;
private Optional<Comparator<Comparable>> comparator = Optional.empty();
private Optional<CollectingBarrierStep<?>> collectingBarrierStep = Optional.empty();
+ private Optional<RangeGlobalStep<?>> rangeGlobalStep = Optional.empty();
private TraverserMapReduce() {
}
@@ -56,6 +58,8 @@ public final class TraverserMapReduce extends StaticMapReduce<Comparable, Traver
this.comparator = Optional.ofNullable(traversalEndStep instanceof OrderGlobalStep ? new ChainedComparator<Comparable>(((OrderGlobalStep) traversalEndStep).getComparators()) : null);
if (!this.comparator.isPresent() && traversalEndStep instanceof CollectingBarrierStep)
this.collectingBarrierStep = Optional.of((CollectingBarrierStep<?>) traversalEndStep);
+ if (traversalEndStep instanceof RangeGlobalStep)
+ this.rangeGlobalStep = Optional.of(((RangeGlobalStep) traversalEndStep).clone());
}
@Override
@@ -65,6 +69,8 @@ public final class TraverserMapReduce extends StaticMapReduce<Comparable, Traver
this.comparator = Optional.ofNullable(traversalEndStep instanceof OrderGlobalStep ? new ChainedComparator<Comparable>(((OrderGlobalStep) traversalEndStep).getComparators()) : null);
if (!this.comparator.isPresent() && traversalEndStep instanceof CollectingBarrierStep)
this.collectingBarrierStep = Optional.of((CollectingBarrierStep<?>) traversalEndStep);
+ if (traversalEndStep instanceof RangeGlobalStep)
+ this.rangeGlobalStep = Optional.of(((RangeGlobalStep) traversalEndStep).clone());
}
@Override
@@ -112,6 +118,11 @@ public final class TraverserMapReduce extends StaticMapReduce<Comparable, Traver
}
this.collectingBarrierStep.get().barrierConsumer((TraverserSet) traverserSet);
return (Iterator) traverserSet.iterator();
+ } else if (this.rangeGlobalStep.isPresent()) {
+ final RangeGlobalStep<?> rangeGlobalStep = this.rangeGlobalStep.get();
+ rangeGlobalStep.setBypass(false);
+ rangeGlobalStep.addStarts(IteratorUtils.map(keyValues, keyValue -> (Traverser) keyValue.getValue()));
+ return (Iterator) rangeGlobalStep;
} else {
return IteratorUtils.map(keyValues, KeyValue::getValue);
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/73a719de/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/Bypassing.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/Bypassing.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/Bypassing.java
new file mode 100644
index 0000000..4138389
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/Bypassing.java
@@ -0,0 +1,30 @@
+/*
+ *
+ * * 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 org.apache.tinkerpop.gremlin.process.traversal.step;
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+public interface Bypassing {
+
+ public void setBypass(final boolean bypass);
+}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/73a719de/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/RangeGlobalStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/RangeGlobalStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/RangeGlobalStep.java
index d2687aa..513a245 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/RangeGlobalStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/RangeGlobalStep.java
@@ -18,12 +18,13 @@
*/
package org.apache.tinkerpop.gremlin.process.traversal.step.filter;
-import org.apache.tinkerpop.gremlin.process.traversal.util.FastNoSuchElementException;
import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
+import org.apache.tinkerpop.gremlin.process.traversal.step.Bypassing;
import org.apache.tinkerpop.gremlin.process.traversal.step.Ranging;
-import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
import org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserRequirement;
+import org.apache.tinkerpop.gremlin.process.traversal.util.FastNoSuchElementException;
+import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
import java.util.Collections;
import java.util.Set;
@@ -33,11 +34,12 @@ import java.util.concurrent.atomic.AtomicLong;
* @author Bob Briody (http://bobbriody.com)
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public final class RangeGlobalStep<S> extends FilterStep<S> implements Ranging {
+public final class RangeGlobalStep<S> extends FilterStep<S> implements Ranging, Bypassing {
private final long low;
private final long high;
private AtomicLong counter = new AtomicLong(0l);
+ private boolean bypass = false;
public RangeGlobalStep(final Traversal.Admin traversal, final long low, final long high) {
super(traversal);
@@ -48,8 +50,14 @@ public final class RangeGlobalStep<S> extends FilterStep<S> implements Ranging {
this.high = high;
}
+ public void setBypass(final boolean bypass) {
+ this.bypass = bypass;
+ }
+
@Override
protected boolean filter(final Traverser.Admin<S> traverser) {
+ if (this.bypass) return true;
+
if (this.high != -1 && this.counter.get() >= this.high) {
throw FastNoSuchElementException.instance();
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/73a719de/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/AbstractStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/AbstractStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/AbstractStep.java
index 13df0f0..2f9cad5 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/AbstractStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/AbstractStep.java
@@ -21,6 +21,7 @@ package org.apache.tinkerpop.gremlin.process.traversal.step.util;
import org.apache.tinkerpop.gremlin.process.traversal.Step;
import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
+import org.apache.tinkerpop.gremlin.process.traversal.util.EmptyTraversal;
import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
import java.util.Collections;
@@ -169,8 +170,10 @@ public abstract class AbstractStep<S, E> implements Step<S, E> {
clone.previousStep = EmptyStep.instance();
clone.nextStep = EmptyStep.instance();
clone.nextEnd = null;
+ clone.traversal = EmptyTraversal.instance();
+ clone.reset();
return clone;
- } catch (CloneNotSupportedException e) {
+ } catch (final CloneNotSupportedException e) {
throw new IllegalStateException(e.getMessage(), e);
}
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/73a719de/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/ComputerVerificationStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/ComputerVerificationStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/ComputerVerificationStrategy.java
index 882f6b6..eefbc3d 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/ComputerVerificationStrategy.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/ComputerVerificationStrategy.java
@@ -29,6 +29,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.step.Mutating;
import org.apache.tinkerpop.gremlin.process.traversal.step.PathProcessor;
import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
import org.apache.tinkerpop.gremlin.process.traversal.step.filter.DedupGlobalStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.filter.RangeGlobalStep;
import org.apache.tinkerpop.gremlin.process.traversal.step.map.OrderGlobalStep;
import org.apache.tinkerpop.gremlin.process.traversal.step.map.match.MatchStep;
import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.GraphStep;
@@ -82,10 +83,13 @@ public final class ComputerVerificationStrategy extends AbstractTraversalStrateg
!(t instanceof TokenTraversal && ((TokenTraversal) t).getToken().equals(T.id))).findAny().isPresent())
throw new ComputerVerificationException("A final CollectingBarrierStep can not process an element beyond its id: " + endStep, traversal);
}
+ ///
+ if(endStep instanceof RangeGlobalStep)
+ ((RangeGlobalStep) endStep).setBypass(true);
}
for (final Step<?, ?> step : traversal.getSteps()) {
- if ((step instanceof ReducingBarrierStep || step instanceof SupplyingBarrierStep || step instanceof OrderGlobalStep) && (step != endStep || !(traversal.getParent() instanceof EmptyStep)))
+ if ((step instanceof ReducingBarrierStep || step instanceof SupplyingBarrierStep || step instanceof OrderGlobalStep || step instanceof RangeGlobalStep) && (step != endStep || !(traversal.getParent() instanceof EmptyStep)))
throw new ComputerVerificationException("Global traversals on GraphComputer may not contain mid-traversal barriers: " + step, traversal);
if (step instanceof TraversalParent) {
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/73a719de/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalScriptFunction.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalScriptFunction.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalScriptFunction.java
index 110e070..3579a27 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalScriptFunction.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalScriptFunction.java
@@ -63,4 +63,8 @@ public final class TraversalScriptFunction<S, E> implements Function<Graph, Trav
throw new IllegalStateException(e.getMessage(), e);
}
}
+
+ public String toString() {
+ return this.traversalScript;
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/73a719de/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereTest.java
index d240ab3..fface54 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereTest.java
@@ -206,6 +206,7 @@ public abstract class WhereTest extends AbstractGremlinProcessTest {
@Test
@LoadGraphWith(MODERN)
+ @IgnoreEngine(TraversalEngine.Type.COMPUTER)
public void g_withSideEffectXa_g_VX2XX_VX1X_out_whereXneqXaXX() {
final Traversal<Vertex, Vertex> traversal = get_g_withSideEffectXa_graph_verticesX2XX_VX1X_out_whereXneqXaXX(convertToVertexId("marko"), convertToVertexId("vadas"));
printTraversalForm(traversal);