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 2015/07/23 20:13:50 UTC
[05/10] incubator-tinkerpop git commit: Used aggregate() instead of
fold()/unfold() for the GephiTraversalVisualizationStrategy.
Used aggregate() instead of fold()/unfold() for the GephiTraversalVisualizationStrategy.
This worked around problems TINKERPOP3-780 and offers better performance.
Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/558bdad5
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/558bdad5
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/558bdad5
Branch: refs/heads/master
Commit: 558bdad5321215a69368d30372373585d58f64b1
Parents: 20107dc
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Thu Jul 23 11:46:43 2015 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Thu Jul 23 11:46:43 2015 -0400
----------------------------------------------------------------------
.../GephiTraversalVisualizationStrategy.groovy | 43 ++++++++++++++++----
1 file changed, 35 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/558bdad5/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/plugin/GephiTraversalVisualizationStrategy.groovy
----------------------------------------------------------------------
diff --git a/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/plugin/GephiTraversalVisualizationStrategy.groovy b/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/plugin/GephiTraversalVisualizationStrategy.groovy
index f2a80b0..dd9588c 100644
--- a/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/plugin/GephiTraversalVisualizationStrategy.groovy
+++ b/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/plugin/GephiTraversalVisualizationStrategy.groovy
@@ -23,13 +23,20 @@ import org.apache.tinkerpop.gremlin.process.traversal.Step
import org.apache.tinkerpop.gremlin.process.traversal.Traversal
import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy
import org.apache.tinkerpop.gremlin.process.traversal.Traverser
+import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__
import org.apache.tinkerpop.gremlin.process.traversal.step.map.EdgeOtherVertexStep
import org.apache.tinkerpop.gremlin.process.traversal.step.map.EdgeVertexStep
+import org.apache.tinkerpop.gremlin.process.traversal.step.map.FoldStep
+import org.apache.tinkerpop.gremlin.process.traversal.step.map.TraversalMapStep
+import org.apache.tinkerpop.gremlin.process.traversal.step.map.UnfoldStep
import org.apache.tinkerpop.gremlin.process.traversal.step.map.VertexStep
+import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.AggregateStep
import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.GraphStep
import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.LambdaSideEffectStep
+import org.apache.tinkerpop.gremlin.process.traversal.step.util.BulkSet
import org.apache.tinkerpop.gremlin.process.traversal.step.util.NoOpBarrierStep
import org.apache.tinkerpop.gremlin.process.traversal.strategy.AbstractTraversalStrategy
+import org.apache.tinkerpop.gremlin.process.traversal.strategy.finalization.ProfileStrategy
import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper
import org.apache.tinkerpop.gremlin.structure.Vertex
@@ -44,17 +51,28 @@ import java.util.stream.Collectors
* @author Stephen Mallette (http://stephen.genoprime.com)
*/
@CompileStatic
-class GephiTraversalVisualizationStrategy extends AbstractTraversalStrategy<TraversalStrategy.DecorationStrategy>
- implements TraversalStrategy.DecorationStrategy {
+class GephiTraversalVisualizationStrategy extends AbstractTraversalStrategy<TraversalStrategy.FinalizationStrategy>
+ implements TraversalStrategy.FinalizationStrategy {
+
+ private static final Set<Class<? extends TraversalStrategy.FinalizationStrategy>> POSTS = new HashSet<>();
+
+ static {
+ POSTS.add(ProfileStrategy.class);
+ }
private final GephiRemoteAcceptor acceptor
+ private final String sideEffectKey = "viz-" + UUID.randomUUID()
+
GephiTraversalVisualizationStrategy(final GephiRemoteAcceptor acceptor) {
this.acceptor = acceptor
}
@Override
void apply(final Traversal.Admin<?, ?> traversal) {
+ if (traversal.getEngine().isComputer())
+ return
+
// only apply these strategies if the traversal was :submit to the acceptor - otherwise process as usual
if (acceptor.traversalSubmittedForViz) {
final List<GraphStep> graphSteps = TraversalHelper.getStepsOfAssignableClass(GraphStep.class, traversal)
@@ -63,18 +81,27 @@ class GephiTraversalVisualizationStrategy extends AbstractTraversalStrategy<Trav
def List<Step> addAfter = new ArrayList<>()
addAfter.addAll(TraversalHelper.getStepsOfAssignableClass(EdgeOtherVertexStep.class, traversal))
addAfter.addAll(TraversalHelper.getStepsOfAssignableClass(EdgeVertexStep.class, traversal))
- addAfter.addAll(graphSteps.stream().filter { it.returnsVertex() }.collect(Collectors.toList()))
addAfter.addAll(vertexSteps.stream().filter { it.returnsVertex() }.collect(Collectors.toList()))
+ addAfter.addAll(graphSteps.stream().filter { it.returnsVertex() }.collect(Collectors.toList()))
addAfter.each { Step s ->
- // add steps in reverse order as they will then appear as: vertex -> barrier -> sideEffect
+ // todo: this should be s simple as vertex -> fold -> sideEffect -> unfold TINKERPOP3-780
TraversalHelper.insertAfterStep(new LambdaSideEffectStep(traversal, { Traverser traverser ->
- acceptor.updateVisitedVertices()
- traverser.get().each { Vertex v -> acceptor.visitVertexInGephi(v) }
- Thread.sleep(acceptor.vizStepDelay)
+ final BulkSet<Vertex> vertices = ((BulkSet<Vertex>) traverser.sideEffects(sideEffectKey))
+ if (!vertices.isEmpty()) {
+ acceptor.updateVisitedVertices()
+ vertices.forEach { Vertex v, Long l -> acceptor.visitVertexInGephi(v) }
+ vertices.clear()
+ Thread.sleep(acceptor.vizStepDelay)
+ }
}), s, traversal)
- TraversalHelper.insertAfterStep(new NoOpBarrierStep(traversal), s, traversal)
+ TraversalHelper.insertAfterStep(new AggregateStep(traversal, sideEffectKey), s, traversal)
}
}
}
+
+ @Override
+ public Set<Class<? extends TraversalStrategy.FinalizationStrategy>> applyPost() {
+ return POSTS;
+ }
}