You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by dk...@apache.org on 2016/01/05 18:14:30 UTC

[1/4] incubator-tinkerpop git commit: first prototype for EdgeCopyVertexProgram

Repository: incubator-tinkerpop
Updated Branches:
  refs/heads/TINKERPOP3-432 [created] 201b05af3


first prototype for EdgeCopyVertexProgram


Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/4be5db12
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/4be5db12
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/4be5db12

Branch: refs/heads/TINKERPOP3-432
Commit: 4be5db12f943ae5e4d00d9bcb9259880cf445540
Parents: c4fcae6
Author: Daniel Kuppitz <da...@hotmail.com>
Authored: Mon Nov 9 11:12:15 2015 +0100
Committer: Daniel Kuppitz <da...@hotmail.com>
Committed: Mon Nov 9 11:12:15 2015 +0100

----------------------------------------------------------------------
 .../edgecopy/EdgeCopyVertexProgram.java         | 168 +++++++++++++++++++
 1 file changed, 168 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/4be5db12/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/edgecopy/EdgeCopyVertexProgram.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/edgecopy/EdgeCopyVertexProgram.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/edgecopy/EdgeCopyVertexProgram.java
new file mode 100644
index 0000000..9d72997
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/edgecopy/EdgeCopyVertexProgram.java
@@ -0,0 +1,168 @@
+/*
+ * 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.computer.edgecopy;
+
+import org.apache.commons.configuration.BaseConfiguration;
+import org.apache.commons.configuration.Configuration;
+import org.apache.commons.configuration.ConfigurationUtils;
+import org.apache.tinkerpop.gremlin.process.computer.GraphComputer;
+import org.apache.tinkerpop.gremlin.process.computer.Memory;
+import org.apache.tinkerpop.gremlin.process.computer.MessageScope;
+import org.apache.tinkerpop.gremlin.process.computer.Messenger;
+import org.apache.tinkerpop.gremlin.process.computer.VertexProgram;
+import org.apache.tinkerpop.gremlin.process.computer.util.AbstractVertexProgramBuilder;
+import org.apache.tinkerpop.gremlin.process.computer.util.StaticVertexProgram;
+import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
+import org.apache.tinkerpop.gremlin.structure.Direction;
+import org.apache.tinkerpop.gremlin.structure.Edge;
+import org.apache.tinkerpop.gremlin.structure.Graph;
+import org.apache.tinkerpop.gremlin.structure.T;
+import org.apache.tinkerpop.gremlin.structure.Vertex;
+import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
+import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedFactory;
+import org.apache.tinkerpop.gremlin.structure.util.wrapped.WrappedElement;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.Set;
+
+/**
+ * @author Daniel Kuppitz (http://gremlin.guru)
+ */
+public class EdgeCopyVertexProgram extends StaticVertexProgram<Edge> {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(EdgeCopyVertexProgram.class);
+
+    public static final String EDGE_COPY_VERTEX_PROGRAM_CFG_PREFIX = "gremlin.edgeCopyVertexProgram";
+
+    private final Direction direction;
+    private Configuration configuration;
+
+    private EdgeCopyVertexProgram() {
+        this.direction = Direction.OUT;
+    }
+
+    @Override
+    public void setup(final Memory memory) {
+    }
+
+    @Override
+    public void loadState(final Graph graph, final Configuration config) {
+        configuration = new BaseConfiguration();
+        if (config != null) {
+            ConfigurationUtils.copy(config, configuration);
+        }
+    }
+
+    @Override
+    public void storeState(final Configuration config) {
+        if (configuration != null) {
+            ConfigurationUtils.copy(configuration, config);
+        }
+    }
+
+    @Override
+    public void execute(final Vertex sourceVertex, final Messenger<Edge> messenger, final Memory memory) {
+        if (memory.isInitialIteration()) {
+            sourceVertex.edges(direction).forEachRemaining(edge -> {
+                final Object inVId = edge.inVertex().id();
+                LOGGER.info("send edge from " + sourceVertex.id() + " to " + edge.inVertex().id());
+                MessageScope messageScope = MessageScope.Local.of(() -> __.<Vertex>start().outE().filter(__.inV().hasId(inVId)));
+                messenger.sendMessage(messageScope, DetachedFactory.detach(edge, true));
+            });
+        } else if (memory.getIteration() == 1) {
+            final Iterator<Edge> ei = messenger.receiveMessages();
+            final Vertex inV = sourceVertex instanceof WrappedElement
+                    ? (Vertex) ((WrappedElement) sourceVertex).getBaseElement() : sourceVertex;
+            final Graph sg = inV.graph();
+            while (ei.hasNext()) {
+                final Edge edge = ei.next();
+                if (sourceVertex.id().equals(edge.inVertex().id())) {
+                    LOGGER.info("create edge from " + edge.outVertex().id() + " to " + sourceVertex.id());
+                    final Object outVId = edge.outVertex().id();
+                    final Iterator<Vertex> vi = sg.vertices(outVId);
+                    final Vertex outV = vi.hasNext() ? vi.next() : sg.addVertex(T.id, outVId);
+                    final Edge clonedEdge = outV.addEdge(edge.label(), inV);
+                    edge.properties().forEachRemaining(p -> clonedEdge.property(p.key(), p.value()));
+                }
+            }
+        }
+    }
+
+    @Override
+    public boolean terminate(final Memory memory) {
+        return memory.getIteration() == 1;
+    }
+
+    @Override
+    public Set<String> getElementComputeKeys() {
+        return Collections.emptySet();
+    }
+
+    @Override
+    public Set<MessageScope> getMessageScopes(final Memory memory) {
+        return Collections.emptySet();
+    }
+
+    @Override
+    public GraphComputer.ResultGraph getPreferredResultGraph() {
+        return GraphComputer.ResultGraph.NEW;
+    }
+
+    @Override
+    public GraphComputer.Persist getPreferredPersist() {
+        return GraphComputer.Persist.EDGES;
+    }
+
+    @Override
+    public String toString() {
+        return StringFactory.vertexProgramString(this, "direction=" + direction);
+    }
+
+
+    public static Builder build() {
+        return new Builder();
+    }
+
+    public static class Builder extends AbstractVertexProgramBuilder<Builder> {
+
+        private Builder() {
+            super(EdgeCopyVertexProgram.class);
+        }
+
+        @SuppressWarnings("unchecked")
+        @Override
+        public EdgeCopyVertexProgram create(final Graph graph) {
+            ConfigurationUtils.append(graph.configuration().subset(EDGE_COPY_VERTEX_PROGRAM_CFG_PREFIX), configuration);
+            return (EdgeCopyVertexProgram) VertexProgram.createVertexProgram(graph, configuration);
+        }
+    }
+
+    @Override
+    public Features getFeatures() {
+        return new Features() {
+            @Override
+            public boolean requiresLocalMessageScopes() {
+                return true;
+            }
+        };
+    }
+}


[3/4] incubator-tinkerpop git commit: Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/incubator-tinkerpop into TINKERPOP3-432

Posted by dk...@apache.org.
Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/incubator-tinkerpop into TINKERPOP3-432


Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/eb50570f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/eb50570f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/eb50570f

Branch: refs/heads/TINKERPOP3-432
Commit: eb50570f9512b4621ecd9cf32e9ad655a42f9d80
Parents: caebf26 46c7189
Author: Daniel Kuppitz <da...@hotmail.com>
Authored: Tue Jan 5 15:20:51 2016 +0100
Committer: Daniel Kuppitz <da...@hotmail.com>
Committed: Tue Jan 5 15:20:51 2016 +0100

----------------------------------------------------------------------
 .travis.yml                                     |   5 +-
 CHANGELOG.asciidoc                              | 254 +++++-----
 README.asciidoc                                 |  12 +-
 bin/validate-distribution.sh                    |   4 +-
 docs/src/dev/developer/contributing.asciidoc    |  54 ++-
 docs/src/dev/developer/meetings.asciidoc        | 194 ++++----
 docs/src/dev/developer/release.asciidoc         |   5 +-
 .../src/reference/gremlin-applications.asciidoc | 139 +++++-
 docs/src/reference/implementations.asciidoc     |  37 +-
 docs/src/reference/intro.asciidoc               |  23 +-
 docs/src/reference/the-graph.asciidoc           |  68 +--
 docs/src/reference/the-graphcomputer.asciidoc   |  11 +-
 docs/src/reference/the-traversal.asciidoc       |  38 +-
 .../tutorials/getting-started/index.asciidoc    |  52 +-
 .../upgrade/release-3.0.x-incubating.asciidoc   |  28 +-
 .../upgrade/release-3.1.x-incubating.asciidoc   | 149 ++++--
 docs/static/images/business-gremlin.png         | Bin 0 -> 412520 bytes
 .../images/modern-edge-1-to-3-1-gremlin.png     | Bin 11607 -> 12720 bytes
 docs/static/images/modern-edge-1-to-3-1.png     | Bin 3210 -> 3887 bytes
 .../images/modern-edge-1-to-3-2-gremlin.png     | Bin 17029 -> 18052 bytes
 docs/static/images/modern-edge-1-to-3-2.png     | Bin 4420 -> 3784 bytes
 .../images/modern-edge-1-to-3-3-gremlin.png     | Bin 20948 -> 22258 bytes
 docs/static/images/modern-edge-1-to-3-3.png     | Bin 7372 -> 5800 bytes
 docs/static/images/quantum-gremlin-full.png     | Bin 0 -> 1877990 bytes
 giraph-gremlin/pom.xml                          |  18 +-
 .../groovy/plugin/GiraphGremlinPlugin.java      |   1 -
 .../process/computer/GiraphGraphComputer.java   |  11 +-
 .../src/test/resources/log4j-silent.properties  |  23 +
 .../src/test/resources/log4j-test.properties    |  23 +
 gremlin-console/conf/log4j-console.properties   |  15 +-
 gremlin-console/pom.xml                         |   6 +
 .../tinkerpop/gremlin/console/Console.groovy    |  20 +-
 .../src/test/resources/log4j-silent.properties  |  23 +
 .../src/test/resources/log4j-test.properties    |  21 +
 gremlin-core/pom.xml                            |   6 +
 .../computer/bulkloading/BulkLoader.java        |   8 +-
 .../bulkloading/BulkLoaderVertexProgram.java    |  11 +-
 .../bulkloading/IncrementalBulkLoader.java      |   8 +-
 .../computer/bulkloading/OneTimeBulkLoader.java | 109 +++++
 .../peerpressure/PeerPressureVertexProgram.java |   5 +-
 .../gremlin/process/traversal/Order.java        |  28 +-
 .../gremlin/process/traversal/Traverser.java    |   9 +
 .../traversal/dsl/graph/GraphTraversal.java     |  20 +-
 .../process/traversal/step/map/MatchStep.java   |  56 ++-
 .../traversal/step/map/SelectColumnStep.java    |  68 ---
 .../traversal/step/util/ComputerAwareStep.java  |   2 +-
 .../traversal/step/util/FunctionComparator.java |  56 +++
 .../IncidentToAdjacentStrategy.java             |   8 +-
 .../traversal/traverser/O_Traverser.java        |  37 ++
 .../traverser/util/EmptyTraverser.java          |   6 +
 .../tinkerpop/gremlin/structure/Column.java     |  42 +-
 .../tinkerpop/gremlin/structure/Element.java    |   2 +-
 .../structure/io/gryo/GryoClassResolver.java    |   2 +-
 .../gremlin/structure/io/gryo/GryoMapper.java   |  25 +-
 .../apache/tinkerpop/gremlin/TestHelper.java    |  76 ++-
 .../traversal/step/map/MatchStepTest.java       |  15 +-
 .../sideEffect/LambdaSideEffectStepTest.java    |   7 +-
 .../tinkerpop/gremlin/structure/io/IoX.java     |   5 +
 .../gremlin/structure/io/IoXIoRegistry.java     |  57 +++
 .../tinkerpop/gremlin/structure/io/IoY.java     |   5 +
 .../gremlin/structure/io/IoYIoRegistry.java     |  39 ++
 .../structure/io/gryo/GryoMapperTest.java       | 113 +++++
 .../src/test/resources/log4j-silent.properties  |  23 +
 .../src/test/resources/log4j-test.properties    |  21 +
 .../tinkerpop/gremlin/driver/Cluster.java       |  24 +
 .../tinkerpop/gremlin/driver/Settings.java      |  17 +-
 .../AbstractGraphSONMessageSerializerV1d0.java  |   5 +-
 .../driver/ser/AbstractMessageSerializer.java   |  82 ++++
 .../driver/ser/GryoMessageSerializerV1d0.java   |  49 +-
 ...raphSONMessageSerializerGremlinV1d0Test.java |   5 +-
 .../ser/GraphSONMessageSerializerV1d0Test.java  |  60 +++
 .../ser/GryoMessageSerializerV1d0Test.java      | 115 ++++-
 .../src/test/resources/log4j-silent.properties  |  23 +
 .../src/test/resources/log4j-test.properties    |  21 +
 .../step/branch/GroovyLocalTest.groovy          |   2 +-
 .../traversal/step/map/GroovyOrderTest.groovy   |   8 +-
 .../traversal/step/map/GroovySelectTest.groovy  |   2 +-
 .../gremlin/groovy/GroovyEnvironmentSuite.java  |   2 +
 ...remlinGroovyScriptEngineFileSandboxTest.java | 117 +++++
 .../GremlinGroovyScriptEngineIntegrateTest.java |  11 +-
 .../GremlinGroovyScriptEngineOverGraphTest.java |   7 +-
 .../process/GroovyProcessComputerSuite.java     |   6 +-
 .../process/GroovyProcessStandardSuite.java     |   2 +
 .../gremlin/groovy/jsr223/sandbox.yaml          |  58 +++
 .../customizer/AbstractSandboxExtension.groovy  |  90 ++++
 .../customizer/FileSandboxExtension.groovy      | 107 ++++
 .../PropertyExpressionEvaluator.groovy          |  66 +++
 .../jsr223/customizer/SandboxExtension.groovy   |   3 +
 .../jsr223/customizer/SandboxHelper.groovy      |  57 +++
 .../customizer/SimpleSandboxExtension.groovy    |  30 +-
 .../customizer/TinkerPopSandboxExtension.groovy |  44 +-
 .../gremlin/groovy/engine/GremlinExecutor.java  |   4 +-
 .../gremlin/groovy/engine/ScriptEngines.java    |  24 +-
 .../jsr223/GremlinGroovyScriptEngine.java       |  19 +-
 .../jsr223/ScriptEnginePluginAcceptor.java      |  26 +-
 .../groovy/engine/GremlinExecutorTest.java      |   8 +-
 .../groovy/engine/ScriptEnginesTest.java        |  99 ++++
 .../jsr223/GremlinGroovyScriptEngineTest.java   |  93 ++--
 .../groovy/util/DependencyGrabberTest.java      |   3 +-
 .../src/test/resources/log4j-silent.properties  |  23 +
 .../src/test/resources/log4j-test.properties    |  21 +
 gremlin-server/conf/gremlin-server-classic.yaml |   1 +
 gremlin-server/conf/gremlin-server-min.yaml     |   1 +
 .../conf/gremlin-server-modern-readonly.yaml    |   1 +
 gremlin-server/conf/gremlin-server-modern.yaml  |   1 +
 gremlin-server/conf/gremlin-server-neo4j.yaml   |   1 +
 .../conf/gremlin-server-rest-modern.yaml        |   1 +
 .../conf/gremlin-server-rest-secure.yaml        |   1 +
 gremlin-server/conf/gremlin-server-secure.yaml  |   1 +
 gremlin-server/conf/gremlin-server-spark.yaml   |   1 +
 gremlin-server/conf/gremlin-server.yaml         |   1 +
 gremlin-server/conf/log4j-server.properties     |  17 +-
 .../scripts/empty-sample-secure.groovy          |   4 +-
 .../tinkerpop/gremlin/server/GraphManager.java  |  46 ++
 .../tinkerpop/gremlin/server/GremlinServer.java |   8 +-
 .../tinkerpop/gremlin/server/Settings.java      |   9 +
 .../server/auth/AllowAllAuthenticator.java      |  10 +
 .../gremlin/server/auth/Authenticator.java      |  27 +-
 .../server/auth/SimpleAuthenticator.java        |  11 +-
 .../gremlin/server/channel/HttpChannelizer.java |   2 +-
 .../handler/HttpGremlinEndpointHandler.java     |  37 +-
 .../server/handler/OpSelectorHandler.java       |   2 +-
 .../handler/SaslAuthenticationHandler.java      |  22 +-
 .../server/op/AbstractEvalOpProcessor.java      |  92 +++-
 .../server/op/control/ControlOpProcessor.java   |  18 +-
 .../gremlin/server/op/session/Session.java      |   1 -
 .../server/op/session/SessionOpProcessor.java   |   7 +-
 .../server/op/standard/StandardOpProcessor.java |  31 +-
 .../AbstractGremlinServerIntegrationTest.java   |   7 +-
 .../server/GremlinAdditionPerformanceTest.java  |   5 +-
 .../server/GremlinDriverIntegrateTest.java      | 117 ++++-
 .../GremlinServerAuthIntegrateOldTest.java      | 235 ---------
 .../GremlinServerAuthOldIntegrateTest.java      | 235 +++++++++
 .../server/GremlinServerHttpIntegrateTest.java  |  36 ++
 .../server/GremlinServerIntegrateTest.java      |  90 ++--
 .../src/test/resources/log4j-silent.properties  |  23 +
 .../src/test/resources/log4j-test.properties    |  21 +
 .../server/gremlin-server-integration.yaml      |   1 +
 .../server/gremlin-server-performance.yaml      |   1 +
 gremlin-test/pom.xml                            |   6 +
 .../gremlin/AbstractGraphProvider.java          |  14 +-
 .../tinkerpop/gremlin/AbstractGremlinSuite.java |  32 +-
 .../tinkerpop/gremlin/AbstractGremlinTest.java  |  26 +-
 .../apache/tinkerpop/gremlin/GraphManager.java  | 115 ++++-
 .../apache/tinkerpop/gremlin/GraphProvider.java |  10 +
 .../apache/tinkerpop/gremlin/TestHelper.java    |  51 +-
 .../generator/CommunityGeneratorTest.java       |   5 +-
 .../process/AbstractGremlinProcessTest.java     |   7 +-
 .../gremlin/process/GremlinProcessRunner.java   |   6 +-
 .../gremlin/process/ProcessComputerSuite.java   |   4 +-
 .../BulkLoaderVertexProgramTest.java            |  49 +-
 .../PeerPressureVertexProgramTest.java          |  63 +++
 .../ranking/PageRankVertexProgramTest.java      |  78 ---
 .../pagerank/PageRankVertexProgramTest.java     |  83 ++++
 .../process/traversal/step/filter/TailTest.java |   2 +-
 .../process/traversal/step/map/FlatMapTest.java |   2 +-
 .../process/traversal/step/map/MapTest.java     |   2 +-
 .../process/traversal/step/map/OrderTest.java   |  11 +-
 .../process/traversal/step/map/SelectTest.java  |   6 +-
 .../ElementIdStrategyProcessTest.java           |   7 +-
 .../gremlin/structure/FeatureSupportTest.java   |   7 +-
 .../tinkerpop/gremlin/structure/GraphTest.java  |  16 +-
 .../gremlin/structure/PropertyTest.java         |   4 +-
 .../gremlin/structure/TransactionTest.java      |   3 +
 .../tinkerpop/gremlin/structure/VertexTest.java |  18 +-
 .../gremlin/structure/io/IoGraphTest.java       |   4 +-
 .../gremlin/structure/io/IoIntegrateTest.java   |  10 +-
 .../tinkerpop/gremlin/structure/io/IoTest.java  |  87 ++--
 .../structure/ExceptionCoverageTest.java        |   5 +-
 .../src/test/resources/log4j-silent.properties  |  26 +
 .../src/test/resources/log4j-test.properties    |  24 +
 hadoop-gremlin/conf/hadoop-gryo.properties      |   3 +
 hadoop-gremlin/pom.xml                          |  18 +-
 .../groovy/plugin/HadoopGremlinPlugin.java      |   8 -
 .../computer/util/ComputerSubmissionHelper.java |  80 +++
 .../structure/hdfs/HadoopEdgeIterator.java      |   4 -
 .../structure/hdfs/HadoopElementIterator.java   |  35 +-
 .../structure/hdfs/HadoopVertexIterator.java    |   4 -
 .../structure/io/script/ScriptRecordReader.java |   3 +-
 .../structure/io/script/ScriptRecordWriter.java |   3 +-
 .../gremlin/hadoop/HadoopGraphProvider.java     |   2 +-
 .../groovy/plugin/HadoopGremlinPluginCheck.java | 181 +++++++
 .../groovy/plugin/HadoopGremlinPluginTest.java  | 173 -------
 .../hadoop/groovy/plugin/HadoopPluginSuite.java |   2 +-
 .../HadoopGraphStructureStandardTest.java       |  35 ++
 .../io/HadoopGraphStructureStandardTest.java    |  35 --
 .../structure/io/RecordReaderWriterTest.java    |   7 +-
 .../src/test/resources/log4j-silent.properties  |  23 +
 .../src/test/resources/log4j-test.properties    |  21 +
 neo4j-gremlin/pom.xml                           |   6 +
 .../gremlin/neo4j/NativeNeo4jSuite.java         |  18 +-
 .../neo4j/process/NativeNeo4jCypherCheck.java   | 214 ++++++++
 .../neo4j/process/NativeNeo4jCypherTest.java    | 211 --------
 .../neo4j/structure/NativeNeo4jIndexCheck.java  | 371 ++++++++++++++
 .../neo4j/structure/NativeNeo4jIndexTest.java   | 368 --------------
 .../structure/NativeNeo4jStructureCheck.java    | 483 +++++++++++++++++++
 .../structure/NativeNeo4jStructureTest.java     | 483 -------------------
 .../src/test/resources/log4j-silent.properties  |  23 +
 .../src/test/resources/log4j-test.properties    |  21 +
 pom.xml                                         |  54 +--
 spark-gremlin/pom.xml                           |  18 +-
 .../spark/groovy/plugin/SparkLoader.groovy      |  68 +++
 .../spark/groovy/plugin/SparkGremlinPlugin.java |   9 +-
 .../spark/process/computer/SparkExecutor.java   |  37 +-
 .../process/computer/SparkGraphComputer.java    |  59 ++-
 .../computer/payload/MessagePayload.java        |   5 +-
 .../computer/payload/ViewIncomingPayload.java   |   8 +-
 .../computer/payload/ViewOutgoingPayload.java   |  12 +-
 .../gremlin/spark/structure/Spark.java          | 114 +++++
 .../spark/structure/io/InputFormatRDD.java      |   3 +-
 .../spark/structure/io/InputOutputHelper.java   |   2 +
 .../spark/structure/io/InputRDDFormat.java      | 137 ++++++
 .../spark/structure/io/PersistedInputRDD.java   |  23 +-
 .../spark/structure/io/PersistedOutputRDD.java  |  13 +
 .../spark/structure/io/gryo/GryoSerializer.java |   6 +
 .../io/gryo/WrappedArraySerializer.java         |  46 ++
 .../gremlin/spark/AbstractSparkTest.java        |  49 ++
 .../process/computer/LocalPropertyTest.java     |  14 +-
 .../computer/SparkHadoopGraphProvider.java      |  16 +-
 .../groovy/SparkHadoopGremlinPluginTest.java    |  33 --
 .../groovy/plugin/SparkGremlinPluginTest.java   | 126 +++++
 .../plugin/SparkHadoopGremlinPluginTest.java    |  33 ++
 .../gremlin/spark/structure/SparkTest.java      | 108 +++++
 .../spark/structure/io/InputOutputRDDTest.java  |  11 +-
 .../spark/structure/io/InputRDDTest.java        |  31 +-
 .../spark/structure/io/OutputRDDTest.java       |  10 +-
 .../io/PersistedInputOutputRDDTest.java         | 138 ++++--
 .../spark/structure/io/ToyGraphInputRDD.java    |  73 +++
 .../src/test/resources/log4j-silent.properties  |  23 +
 .../src/test/resources/log4j-test.properties    |  25 +
 .../structure/TinkerGraphPlayTest.java          |  60 +--
 .../tinkergraph/structure/TinkerGraphTest.java  |  18 +-
 .../src/test/resources/log4j-silent.properties  |  23 +
 .../src/test/resources/log4j-test.properties    |  21 +
 234 files changed, 6793 insertions(+), 2812 deletions(-)
----------------------------------------------------------------------



[4/4] incubator-tinkerpop git commit: first EdgeCopyVertexProgram prototype (not yet working)

Posted by dk...@apache.org.
first EdgeCopyVertexProgram prototype (not yet working)


Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/201b05af
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/201b05af
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/201b05af

Branch: refs/heads/TINKERPOP3-432
Commit: 201b05af3e250c294716c70a31e592d9ba0f670c
Parents: eb50570
Author: Daniel Kuppitz <da...@hotmail.com>
Authored: Tue Jan 5 18:10:19 2016 +0100
Committer: Daniel Kuppitz <da...@hotmail.com>
Committed: Tue Jan 5 18:10:19 2016 +0100

----------------------------------------------------------------------
 .../edgecopy/EdgeCopyVertexProgram.java         |  29 +++--
 .../structure/io/script/ScriptRecordReader.java |   2 +-
 .../structure/io/script/ScriptRecordWriter.java |   6 +-
 .../edgecopy/EdgeCopyVertexProgramTest.java     | 124 +++++++++++++++++++
 .../computer/edgecopy/hadoop-script.properties  |  32 +++++
 .../computer/edgecopy/script-input.groovy       |  49 ++++++++
 .../computer/edgecopy/script-output.groovy      |  34 +++++
 .../computer/edgecopy/tinkerpop-classic.txt     |   6 +
 8 files changed, 268 insertions(+), 14 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/201b05af/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/edgecopy/EdgeCopyVertexProgram.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/edgecopy/EdgeCopyVertexProgram.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/edgecopy/EdgeCopyVertexProgram.java
index 9d72997..01a6d05 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/edgecopy/EdgeCopyVertexProgram.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/edgecopy/EdgeCopyVertexProgram.java
@@ -52,8 +52,9 @@ public class EdgeCopyVertexProgram extends StaticVertexProgram<Edge> {
     private static final Logger LOGGER = LoggerFactory.getLogger(EdgeCopyVertexProgram.class);
 
     public static final String EDGE_COPY_VERTEX_PROGRAM_CFG_PREFIX = "gremlin.edgeCopyVertexProgram";
+    public static final String DIRECTION_CFG_KEY = String.join(".", EDGE_COPY_VERTEX_PROGRAM_CFG_PREFIX, "direction");
 
-    private final Direction direction;
+    private Direction direction;
     private Configuration configuration;
 
     private EdgeCopyVertexProgram() {
@@ -70,6 +71,9 @@ public class EdgeCopyVertexProgram extends StaticVertexProgram<Edge> {
         if (config != null) {
             ConfigurationUtils.copy(config, configuration);
         }
+        if (configuration.containsKey(DIRECTION_CFG_KEY)) {
+            direction = Direction.valueOf(configuration.getString(DIRECTION_CFG_KEY));
+        }
     }
 
     @Override
@@ -85,7 +89,9 @@ public class EdgeCopyVertexProgram extends StaticVertexProgram<Edge> {
             sourceVertex.edges(direction).forEachRemaining(edge -> {
                 final Object inVId = edge.inVertex().id();
                 LOGGER.info("send edge from " + sourceVertex.id() + " to " + edge.inVertex().id());
-                MessageScope messageScope = MessageScope.Local.of(() -> __.<Vertex>start().outE().filter(__.inV().hasId(inVId)));
+                MessageScope messageScope = Direction.OUT.equals(direction)
+                        ? MessageScope.Local.of(() -> __.<Vertex>start().outE().filter(__.inV().hasId(inVId)))
+                        : MessageScope.Local.of(() -> __.<Vertex>start().inE().filter(__.outV().hasId(inVId)));
                 messenger.sendMessage(messageScope, DetachedFactory.detach(edge, true));
             });
         } else if (memory.getIteration() == 1) {
@@ -95,14 +101,12 @@ public class EdgeCopyVertexProgram extends StaticVertexProgram<Edge> {
             final Graph sg = inV.graph();
             while (ei.hasNext()) {
                 final Edge edge = ei.next();
-                if (sourceVertex.id().equals(edge.inVertex().id())) {
-                    LOGGER.info("create edge from " + edge.outVertex().id() + " to " + sourceVertex.id());
-                    final Object outVId = edge.outVertex().id();
-                    final Iterator<Vertex> vi = sg.vertices(outVId);
-                    final Vertex outV = vi.hasNext() ? vi.next() : sg.addVertex(T.id, outVId);
-                    final Edge clonedEdge = outV.addEdge(edge.label(), inV);
-                    edge.properties().forEachRemaining(p -> clonedEdge.property(p.key(), p.value()));
-                }
+                LOGGER.info("create edge from " + edge.outVertex().id() + " to " + sourceVertex.id());
+                final Object outVId = edge.outVertex().id();
+                final Iterator<Vertex> vi = sg.vertices(outVId);
+                final Vertex outV = vi.hasNext() ? vi.next() : sg.addVertex(T.id, outVId);
+                final Edge clonedEdge = outV.addEdge(edge.label(), inV);
+                edge.properties().forEachRemaining(p -> clonedEdge.property(p.key(), p.value()));
             }
         }
     }
@@ -154,6 +158,11 @@ public class EdgeCopyVertexProgram extends StaticVertexProgram<Edge> {
             ConfigurationUtils.append(graph.configuration().subset(EDGE_COPY_VERTEX_PROGRAM_CFG_PREFIX), configuration);
             return (EdgeCopyVertexProgram) VertexProgram.createVertexProgram(graph, configuration);
         }
+
+        public Builder direction(final Direction direction) {
+            configuration.setProperty(DIRECTION_CFG_KEY, direction);
+            return this;
+        }
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/201b05af/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/structure/io/script/ScriptRecordReader.java
----------------------------------------------------------------------
diff --git a/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/structure/io/script/ScriptRecordReader.java b/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/structure/io/script/ScriptRecordReader.java
index 4cc1602..257f4d9 100644
--- a/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/structure/io/script/ScriptRecordReader.java
+++ b/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/structure/io/script/ScriptRecordReader.java
@@ -48,7 +48,7 @@ import java.util.Iterator;
  */
 public final class ScriptRecordReader extends RecordReader<NullWritable, VertexWritable> {
 
-    protected final static String SCRIPT_FILE = "gremlin.hadoop.scriptInputFormat.script";
+    public final static String SCRIPT_FILE = "gremlin.hadoop.scriptInputFormat.script";
     //protected final static String SCRIPT_ENGINE = "gremlin.hadoop.scriptInputFormat.scriptEngine";
     private final static String LINE = "line";
     private final static String FACTORY = "factory";

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/201b05af/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/structure/io/script/ScriptRecordWriter.java
----------------------------------------------------------------------
diff --git a/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/structure/io/script/ScriptRecordWriter.java b/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/structure/io/script/ScriptRecordWriter.java
index d445fcd..afa815f 100644
--- a/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/structure/io/script/ScriptRecordWriter.java
+++ b/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/structure/io/script/ScriptRecordWriter.java
@@ -42,8 +42,8 @@ import java.io.UnsupportedEncodingException;
  */
 public final class ScriptRecordWriter extends RecordWriter<NullWritable, VertexWritable> {
 
-    protected final static String SCRIPT_FILE = "gremlin.hadoop.scriptOutputFormat.script";
-    protected final static String SCRIPT_ENGINE = "gremlin.hadoop.scriptOutputFormat.scriptEngine";
+    public final static String SCRIPT_FILE = "gremlin.hadoop.scriptOutputFormat.script";
+    //protected final static String SCRIPT_ENGINE = "gremlin.hadoop.scriptOutputFormat.scriptEngine";
     private final static String VERTEX = "vertex";
     private final static String WRITE_CALL = "stringify(" + VERTEX + ")";
     private final static String UTF8 = "UTF-8";
@@ -68,7 +68,7 @@ public final class ScriptRecordWriter extends RecordWriter<NullWritable, VertexW
         try {
             this.engine.eval(new InputStreamReader(fs.open(new Path(configuration.get(SCRIPT_FILE)))));
         } catch (final ScriptException e) {
-            throw new IOException(e.getMessage(),e);
+            throw new IOException(e.getMessage(), e);
         }
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/201b05af/spark-gremlin/src/test/java/org/apache/tinkerpop/gremlin/spark/process/computer/edgecopy/EdgeCopyVertexProgramTest.java
----------------------------------------------------------------------
diff --git a/spark-gremlin/src/test/java/org/apache/tinkerpop/gremlin/spark/process/computer/edgecopy/EdgeCopyVertexProgramTest.java b/spark-gremlin/src/test/java/org/apache/tinkerpop/gremlin/spark/process/computer/edgecopy/EdgeCopyVertexProgramTest.java
new file mode 100644
index 0000000..e41b7d8
--- /dev/null
+++ b/spark-gremlin/src/test/java/org/apache/tinkerpop/gremlin/spark/process/computer/edgecopy/EdgeCopyVertexProgramTest.java
@@ -0,0 +1,124 @@
+/*
+ * 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.spark.process.computer.edgecopy;
+
+import org.apache.commons.configuration.BaseConfiguration;
+import org.apache.commons.configuration.Configuration;
+import org.apache.commons.configuration.ConfigurationException;
+import org.apache.commons.configuration.ConfigurationUtils;
+import org.apache.commons.configuration.PropertiesConfiguration;
+import org.apache.tinkerpop.gremlin.TestHelper;
+import org.apache.tinkerpop.gremlin.hadoop.structure.io.script.ScriptRecordReader;
+import org.apache.tinkerpop.gremlin.hadoop.structure.io.script.ScriptRecordWriter;
+import org.apache.tinkerpop.gremlin.process.computer.edgecopy.EdgeCopyVertexProgram;
+import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
+import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
+import org.apache.tinkerpop.gremlin.spark.process.computer.SparkGraphComputer;
+import org.apache.tinkerpop.gremlin.structure.Graph;
+import org.apache.tinkerpop.gremlin.structure.util.GraphFactory;
+import org.junit.Before;
+import org.junit.Ignore;
+import org.junit.Test;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Map;
+import java.util.concurrent.ExecutionException;
+
+import static org.apache.tinkerpop.gremlin.hadoop.Constants.GREMLIN_HADOOP_INPUT_LOCATION;
+import static org.apache.tinkerpop.gremlin.hadoop.Constants.GREMLIN_HADOOP_OUTPUT_LOCATION;
+import static org.apache.tinkerpop.gremlin.hadoop.Constants.HIDDEN_G;
+import static org.junit.Assert.assertEquals;
+
+/**
+ * @author Daniel Kuppitz (http://gremlin.guru)
+ */
+public class EdgeCopyVertexProgramTest {
+
+    private Configuration configuration;
+
+    private static Configuration getNextConfiguration(final Configuration configuration) {
+        final Configuration next = new BaseConfiguration();
+        ConfigurationUtils.copy(configuration, next);
+        next.setProperty(GREMLIN_HADOOP_INPUT_LOCATION, configuration.getString(GREMLIN_HADOOP_OUTPUT_LOCATION) + HIDDEN_G);
+        next.setProperty(GREMLIN_HADOOP_OUTPUT_LOCATION, configuration.getString(GREMLIN_HADOOP_OUTPUT_LOCATION).replaceAll("/$", "_/"));
+        return next;
+    }
+
+    @Before
+    public void initialize() throws IOException, ConfigurationException {
+        final File readGraphConfigurationFile = TestHelper.generateTempFileFromResource(
+                EdgeCopyVertexProgramTest.class, "hadoop-script.properties", "");
+        final File inputFile = TestHelper.generateTempFileFromResource(
+                EdgeCopyVertexProgramTest.class, "tinkerpop-classic.txt", "");
+        final File scriptInputFile = TestHelper.generateTempFileFromResource(
+                EdgeCopyVertexProgramTest.class, "script-input.groovy", "");
+        final File scriptOutputFile = TestHelper.generateTempFileFromResource(
+                EdgeCopyVertexProgramTest.class, "script-output.groovy", "");
+        configuration = new PropertiesConfiguration(readGraphConfigurationFile.getAbsolutePath());
+        configuration.setProperty(GREMLIN_HADOOP_INPUT_LOCATION, inputFile.getAbsolutePath());
+        configuration.setProperty(ScriptRecordReader.SCRIPT_FILE, scriptInputFile.getAbsolutePath());
+        configuration.setProperty(ScriptRecordWriter.SCRIPT_FILE, scriptOutputFile.getAbsolutePath());
+        configuration.setProperty(GREMLIN_HADOOP_OUTPUT_LOCATION, TestHelper.makeTestDataDirectory(
+                EdgeCopyVertexProgramTest.class, "output"));
+        configuration.setProperty("gremlin.hadoop.graphOutputFormat", "org.apache.tinkerpop.gremlin.hadoop.structure.io.graphson.GraphSONOutputFormat");
+    }
+
+    @Test
+    @Ignore
+    public void shouldCopyOutEdges() throws ExecutionException, InterruptedException {
+
+        final Graph readGraph = GraphFactory.open(configuration);
+        final GraphTraversalSource g1 = readGraph.traversal();
+        final Map<Object, Long> o1 = g1.V().map(__.outE().count()).groupCount().next();
+        final Map<Object, Long> i1 = g1.V().map(__.inE().count()).groupCount().next();
+        assertEquals(4, o1.size());
+        assertEquals(1, i1.size());
+
+        final EdgeCopyVertexProgram ecvp = EdgeCopyVertexProgram.build().create(readGraph);
+        readGraph.compute(SparkGraphComputer.class).workers(1).program(ecvp).submit().get();
+
+        final Graph nextGraph = GraphFactory.open(getNextConfiguration(configuration));
+        final GraphTraversalSource g2 = nextGraph.traversal();
+        final Map<Object, Long> o2 = g2.V().map(__.outE().count()).groupCount().next();
+        final Map<Object, Long> i2 = g2.V().map(__.inE().count()).groupCount().next();
+        assertEquals(4, o2.size());
+        assertEquals(3, i2.size());
+    }
+
+    @Test
+    public void shouldCopyOutEdgesGraphSON() throws ExecutionException, InterruptedException {
+
+        final Graph readGraph = GraphFactory.open(configuration);
+        final GraphTraversalSource g1 = readGraph.traversal();
+        final Map<Object, Long> o1 = g1.V().map(__.outE().count()).groupCount().next();
+        final Map<Object, Long> i1 = g1.V().map(__.inE().count()).groupCount().next();
+        assertEquals(4, o1.size());
+        assertEquals(1, i1.size());
+
+        final EdgeCopyVertexProgram ecvp = EdgeCopyVertexProgram.build().create(readGraph);
+        final Graph nextGraph = readGraph.compute(SparkGraphComputer.class).workers(1).program(ecvp).submit().get().graph();
+
+        final GraphTraversalSource g2 = nextGraph.traversal();
+        final Map<Object, Long> o2 = g2.V().map(__.outE().count()).groupCount().next();
+        final Map<Object, Long> i2 = g2.V().map(__.inE().count()).groupCount().next();
+        assertEquals(4, o2.size());
+        assertEquals(3, i2.size());
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/201b05af/spark-gremlin/src/test/resources/org/apache/tinkerpop/gremlin/spark/process/computer/edgecopy/hadoop-script.properties
----------------------------------------------------------------------
diff --git a/spark-gremlin/src/test/resources/org/apache/tinkerpop/gremlin/spark/process/computer/edgecopy/hadoop-script.properties b/spark-gremlin/src/test/resources/org/apache/tinkerpop/gremlin/spark/process/computer/edgecopy/hadoop-script.properties
new file mode 100644
index 0000000..1c5a501
--- /dev/null
+++ b/spark-gremlin/src/test/resources/org/apache/tinkerpop/gremlin/spark/process/computer/edgecopy/hadoop-script.properties
@@ -0,0 +1,32 @@
+# 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.
+gremlin.graph=org.apache.tinkerpop.gremlin.hadoop.structure.HadoopGraph
+gremlin.hadoop.graphInputFormat=org.apache.tinkerpop.gremlin.hadoop.structure.io.script.ScriptInputFormat
+gremlin.hadoop.graphOutputFormat=org.apache.tinkerpop.gremlin.hadoop.structure.io.script.ScriptOutputFormat
+gremlin.hadoop.jarsInDistributedCache=true
+
+gremlin.hadoop.inputLocation=
+gremlin.hadoop.scriptInputFormat.script=
+gremlin.hadoop.scriptOutputFormat.script=
+gremlin.hadoop.outputLocation=
+
+####################################
+# SparkGraphComputer Configuration #
+####################################
+spark.master=local[4]
+spark.executor.memory=1g
+spark.serializer=org.apache.tinkerpop.gremlin.spark.structure.io.gryo.GryoSerializer

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/201b05af/spark-gremlin/src/test/resources/org/apache/tinkerpop/gremlin/spark/process/computer/edgecopy/script-input.groovy
----------------------------------------------------------------------
diff --git a/spark-gremlin/src/test/resources/org/apache/tinkerpop/gremlin/spark/process/computer/edgecopy/script-input.groovy b/spark-gremlin/src/test/resources/org/apache/tinkerpop/gremlin/spark/process/computer/edgecopy/script-input.groovy
new file mode 100644
index 0000000..adb32b7
--- /dev/null
+++ b/spark-gremlin/src/test/resources/org/apache/tinkerpop/gremlin/spark/process/computer/edgecopy/script-input.groovy
@@ -0,0 +1,49 @@
+import org.apache.tinkerpop.gremlin.structure.VertexProperty
+
+/*
+ * 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.
+ */
+def parse(line, factory) {
+    def parts = line.split(/\t/)
+    def (id, label, name, x) = parts[0].split(/:/).toList()
+    def v1 = factory.vertex(id, label)
+    if (name != null) v1.property(VertexProperty.Cardinality.single, "name", name)
+    if (x != null) {
+        if (label.equals("project")) v1.property(VertexProperty.Cardinality.single, "lang", x)
+        else v1.property(VertexProperty.Cardinality.single, "age", Integer.valueOf(x))
+    }
+    // process out-edges
+    if (parts.length >= 2) {
+        parts[1].split(/,/).grep { !it.isEmpty() }.each {
+            def (eLabel, refId, weight) = it.split(/:/).toList()
+            def v2 = factory.vertex(refId)
+            def edge = factory.edge(v1, v2, eLabel)
+            edge.property("weight", Double.valueOf(weight))
+        }
+    }
+    // process in-edges
+    if (parts.length == 3) {
+        parts[2].split(/,/).grep { !it.isEmpty() }.each {
+            def (eLabel, refId, weight) = it.split(/:/).toList()
+            def v2 = factory.vertex(refId)
+            def edge = factory.edge(v2, v1, eLabel)
+            edge.property("weight", Double.valueOf(weight))
+        }
+    }
+    return v1
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/201b05af/spark-gremlin/src/test/resources/org/apache/tinkerpop/gremlin/spark/process/computer/edgecopy/script-output.groovy
----------------------------------------------------------------------
diff --git a/spark-gremlin/src/test/resources/org/apache/tinkerpop/gremlin/spark/process/computer/edgecopy/script-output.groovy b/spark-gremlin/src/test/resources/org/apache/tinkerpop/gremlin/spark/process/computer/edgecopy/script-output.groovy
new file mode 100644
index 0000000..47e985d
--- /dev/null
+++ b/spark-gremlin/src/test/resources/org/apache/tinkerpop/gremlin/spark/process/computer/edgecopy/script-output.groovy
@@ -0,0 +1,34 @@
+import org.apache.tinkerpop.gremlin.structure.Direction
+
+/*
+ * 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.
+ */
+def stringify(vertex) {
+    def edgeMap = { vdir ->
+        return {
+            def e = it.get()
+            def g = e.graph().traversal(standard())
+            g.E(e).values("weight").inject(e.label(), g.E(e).toV(Direction.valueOf(vdir.toUpperCase())).next().id()).join(":")
+        }
+    }
+    def g = vertex.graph().traversal(standard())
+    def v = g.V(vertex).values("name", "age", "lang").inject(vertex.id(), vertex.label()).join(":")
+    def outE = g.V(vertex).outE().map(edgeMap("in")).join(",")
+    def inE = g.V(vertex).inE().map(edgeMap("out")).join(",")
+    return [v, outE, inE].join("\t")
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/201b05af/spark-gremlin/src/test/resources/org/apache/tinkerpop/gremlin/spark/process/computer/edgecopy/tinkerpop-classic.txt
----------------------------------------------------------------------
diff --git a/spark-gremlin/src/test/resources/org/apache/tinkerpop/gremlin/spark/process/computer/edgecopy/tinkerpop-classic.txt b/spark-gremlin/src/test/resources/org/apache/tinkerpop/gremlin/spark/process/computer/edgecopy/tinkerpop-classic.txt
new file mode 100644
index 0000000..519763f
--- /dev/null
+++ b/spark-gremlin/src/test/resources/org/apache/tinkerpop/gremlin/spark/process/computer/edgecopy/tinkerpop-classic.txt
@@ -0,0 +1,6 @@
+1:person:marko:29	knows:2:0.5,knows:4:1.0,created:3:0.4
+2:person:vadas:27
+3:project:lop:java
+4:person:josh:32	created:3:0.4,created:5:1.0
+5:project:ripple:java
+6:person:peter:35	created:3:0.2


[2/4] incubator-tinkerpop git commit: Merge branch 'master' into TINKERPOP3-432

Posted by dk...@apache.org.
Merge branch 'master' into TINKERPOP3-432


Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/caebf26d
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/caebf26d
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/caebf26d

Branch: refs/heads/TINKERPOP3-432
Commit: caebf26dde09d1047f4cf63557b3e14b4ba398a5
Parents: 4be5db1 fdd853b
Author: Daniel Kuppitz <da...@hotmail.com>
Authored: Tue Jan 5 14:14:39 2016 +0100
Committer: Daniel Kuppitz <da...@hotmail.com>
Committed: Tue Jan 5 14:14:39 2016 +0100

----------------------------------------------------------------------
 .travis.yml                                     |   14 +
 CHANGELOG.asciidoc                              |  110 +-
 CONTRIBUTING.asciidoc                           |    2 +-
 LICENSE                                         |   11 +-
 NOTICE                                          |   26 +-
 README.asciidoc                                 |   10 +-
 bin/process-docs.sh                             |    2 +-
 docs/javadoc/overview.html                      |    2 +-
 docs/postprocessor/postprocess.sh               |   13 +-
 docs/preprocessor/preprocess-file.sh            |    5 +-
 docs/preprocessor/preprocess.sh                 |   36 +-
 docs/src/acknowledgements.asciidoc              |   40 -
 docs/src/conclusion.asciidoc                    |   26 -
 docs/src/dev/developer/administration.asciidoc  |   91 +
 docs/src/dev/developer/contributing.asciidoc    |  404 +++
 docs/src/dev/developer/index.asciidoc           |   33 +
 docs/src/dev/developer/meetings.asciidoc        |  204 ++
 docs/src/dev/developer/release.asciidoc         |  193 ++
 docs/src/developer-contributing.asciidoc        |  272 --
 docs/src/developer-meetings.asciidoc            |   64 -
 docs/src/developer-release.asciidoc             |  171 --
 docs/src/developer.asciidoc                     |   31 -
 docs/src/gremlin-applications.asciidoc          | 1727 -------------
 docs/src/implementations.asciidoc               | 1764 -------------
 docs/src/index.asciidoc                         |   39 -
 docs/src/intro.asciidoc                         |  397 ---
 docs/src/preface.asciidoc                       |   97 -
 docs/src/reference/acknowledgements.asciidoc    |   40 +
 docs/src/reference/conclusion.asciidoc          |   26 +
 .../src/reference/gremlin-applications.asciidoc | 1745 +++++++++++++
 docs/src/reference/implementations.asciidoc     | 1766 +++++++++++++
 docs/src/reference/index.asciidoc               |   39 +
 docs/src/reference/intro.asciidoc               |  397 +++
 docs/src/reference/preface.asciidoc             |   97 +
 docs/src/reference/the-graph.asciidoc           |  771 ++++++
 docs/src/reference/the-graphcomputer.asciidoc   |  476 ++++
 docs/src/reference/the-traversal.asciidoc       | 2378 ++++++++++++++++++
 docs/src/the-graph.asciidoc                     |  768 ------
 docs/src/the-graphcomputer.asciidoc             |  475 ----
 docs/src/the-traversal.asciidoc                 | 2357 -----------------
 .../tutorials/getting-started/index.asciidoc    |  571 +++++
 .../upgrade-release-3.0.x-incubating.asciidoc   |  143 --
 .../upgrade-release-3.1.x-incubating.asciidoc   |  183 --
 docs/src/upgrade.asciidoc                       |   39 -
 docs/src/upgrade/index.asciidoc                 |   39 +
 .../upgrade/release-3.0.x-incubating.asciidoc   |  180 ++
 .../upgrade/release-3.1.x-incubating.asciidoc   |  403 +++
 docs/static/images/gremlin-gym.pdf              |  Bin 0 -> 963978 bytes
 docs/static/images/gremlin-gym.png              |  Bin 0 -> 273111 bytes
 .../images/gremlin-on-software-vertex.png       |  Bin 0 -> 39573 bytes
 docs/static/images/gremlin-plane.png            |  Bin 0 -> 89464 bytes
 docs/static/images/gremlin-to-the-6.png         |  Bin 0 -> 71084 bytes
 docs/static/images/gremlin-to-the-7.png         |  Bin 0 -> 80114 bytes
 docs/static/images/gremlin-to-the-8.png         |  Bin 0 -> 107598 bytes
 docs/static/images/gremlin-to-the-9.png         |  Bin 0 -> 135099 bytes
 .../images/modern-edge-1-to-3-1-gremlin.png     |  Bin 0 -> 11607 bytes
 docs/static/images/modern-edge-1-to-3-1.png     |  Bin 0 -> 3210 bytes
 .../images/modern-edge-1-to-3-2-gremlin.png     |  Bin 0 -> 17029 bytes
 docs/static/images/modern-edge-1-to-3-2.png     |  Bin 0 -> 4420 bytes
 .../images/modern-edge-1-to-3-3-gremlin.png     |  Bin 0 -> 20948 bytes
 docs/static/images/modern-edge-1-to-3-3.png     |  Bin 0 -> 7372 bytes
 docs/static/images/quantum-gremlin-atom.png     |  Bin 0 -> 816113 bytes
 giraph-gremlin/pom.xml                          |    2 +-
 gremlin-console/pom.xml                         |    2 +-
 gremlin-console/src/main/LICENSE                |   35 -
 gremlin-console/src/main/NOTICE                 |  292 +--
 .../groovy/plugin/DriverRemoteAcceptor.java     |   38 +-
 .../DriverRemoteAcceptorIntegrateTest.java      |    8 +
 .../groovy/plugin/DriverRemoteAcceptorTest.java |   40 +
 gremlin-core/pom.xml                            |    2 +-
 .../bulkloading/BulkLoaderVertexProgram.java    |    4 +-
 .../gremlin/process/traversal/Traversal.java    |   22 +
 .../gremlin/process/traversal/dsl/graph/__.java |    4 -
 .../traversal/step/map/OrderGlobalStep.java     |   10 +-
 .../traversal/step/map/OrderLocalStep.java      |   17 +-
 .../process/traversal/step/util/Parameters.java |   15 +-
 .../finalization/EngineDependentStrategy.java   |    8 +-
 .../AdjacentToIncidentStrategy.java             |    5 +-
 .../IncidentToAdjacentStrategy.java             |    6 +
 .../traversal/util/DefaultTraversal.java        |   13 +-
 .../util/DefaultTraversalStrategies.java        |    2 +-
 .../traversal/util/TraversalExplanation.java    |  117 +
 .../process/traversal/util/TraversalHelper.java |    8 +-
 .../tinkerpop/gremlin/structure/Graph.java      |   18 +-
 .../tinkerpop/gremlin/structure/Property.java   |    6 +-
 .../gremlin/structure/Transaction.java          |    2 +-
 .../tinkerpop/gremlin/structure/io/IoCore.java  |    6 +
 .../structure/io/graphson/GraphSONMapper.java   |    2 +-
 .../structure/io/graphson/GraphSONModule.java   |    3 +
 .../structure/io/graphson/GraphSONReader.java   |    4 +-
 .../io/graphson/GraphSONSerializers.java        |   47 +
 .../structure/io/graphson/GraphSONTokens.java   |    2 +
 .../structure/io/graphson/GraphSONUtil.java     |   10 +-
 .../structure/io/graphson/GraphSONWriter.java   |    2 +-
 .../gremlin/structure/io/gryo/GryoMapper.java   |   19 +-
 .../util/AbstractThreadLocalTransaction.java    |   40 +-
 .../util/AbstractThreadedTransaction.java       |   44 +-
 .../structure/util/AbstractTransaction.java     |   54 +-
 .../traversal/dsl/graph/GraphTraversalTest.java |    2 +-
 .../step/sideEffect/ProfileStepTest.java        |    2 +-
 gremlin-driver/pom.xml                          |    2 +-
 .../apache/tinkerpop/gremlin/driver/Client.java |  126 +-
 .../tinkerpop/gremlin/driver/Cluster.java       |   11 +-
 .../apache/tinkerpop/gremlin/driver/Tokens.java |    6 +
 ...raphSONMessageSerializerGremlinV1d0Test.java |   46 +-
 .../ser/GraphSONMessageSerializerV1d0Test.java  |   58 +-
 .../ser/GryoMessageSerializerV1d0Test.java      |   31 +
 gremlin-groovy-test/pom.xml                     |    2 +-
 .../loaders/SugarLoaderPerformanceTest.groovy   |    8 +-
 .../groovy/loaders/SugarLoaderTest.groovy       |   23 +-
 .../traversal/step/map/GroovyAddEdgeTest.groovy |    4 +-
 .../traversal/step/map/GroovyOrderTest.groovy   |   10 +
 .../step/sideEffect/GroovyExplainTest.groovy    |   35 +
 .../step/sideEffect/GroovyGroupCountTest.groovy |    5 +
 .../step/sideEffect/GroovyGroupTestV3d0.groovy  |    8 +-
 .../GremlinGroovyScriptEngineIntegrateTest.java |    3 +-
 .../GremlinGroovyScriptEngineOverGraphTest.java |   46 +-
 ...GroovyScriptEngineSandboxedStandardTest.java |   20 +-
 ...nGroovyScriptEngineTinkerPopSandboxTest.java |    5 +-
 .../process/GroovyProcessComputerSuite.java     |    2 +
 .../process/GroovyProcessStandardSuite.java     |    2 +
 gremlin-groovy/pom.xml                          |    2 +-
 .../gremlin/groovy/plugin/Artifact.java         |   10 +-
 .../gremlin/groovy/plugin/ArtifactTest.java     |   87 +
 .../groovy/util/DependencyGrabberTest.java      |   10 +-
 gremlin-server/conf/gremlin-server-min.yaml     |    4 +-
 gremlin-server/conf/gremlin-server-neo4j.yaml   |    8 +-
 .../conf/gremlin-server-rest-modern.yaml        |    4 +-
 .../conf/gremlin-server-rest-secure.yaml        |   11 +-
 gremlin-server/conf/gremlin-server-secure.yaml  |   11 +-
 gremlin-server/conf/gremlin-server-spark.yaml   |    8 +-
 gremlin-server/conf/gremlin-server.yaml         |    8 +-
 .../conf/tinkergraph-credentials.properties     |   20 +
 gremlin-server/pom.xml                          |    2 +-
 gremlin-server/scripts/generate-modern.groovy   |    2 +-
 gremlin-server/src/main/LICENSE                 |   33 -
 gremlin-server/src/main/NOTICE                  |  271 +-
 .../tinkerpop/gremlin/server/GremlinServer.java |    9 +-
 .../server/auth/SimpleAuthenticator.java        |   30 +-
 .../handler/HttpGremlinEndpointHandler.java     |   47 +-
 .../server/op/AbstractEvalOpProcessor.java      |    8 +-
 .../server/op/session/SessionOpProcessor.java   |    9 +-
 .../server/op/standard/StandardOpProcessor.java |   53 +-
 .../server/util/ServerGremlinExecutor.java      |   34 +-
 .../server/GremlinDriverIntegrateTest.java      |   36 +-
 .../server/GremlinResultSetIntegrateTest.java   |   54 +-
 .../GremlinServerAuthIntegrateOldTest.java      |  235 ++
 .../server/GremlinServerAuthIntegrateTest.java  |   39 +-
 .../server/GremlinServerHttpIntegrateTest.java  |  111 +-
 .../server/GremlinServerIntegrateTest.java      |   27 +-
 .../server/gremlin-server-integration.yaml      |    4 +-
 gremlin-shaded/pom.xml                          |    2 +-
 gremlin-test/pom.xml                            |    2 +-
 .../process/AbstractGremlinProcessTest.java     |   14 +-
 .../gremlin/process/ProcessComputerSuite.java   |    2 +
 .../gremlin/process/ProcessStandardSuite.java   |    2 +
 .../process/traversal/step/map/AddEdgeTest.java |    8 +-
 .../process/traversal/step/map/OrderTest.java   |   34 +
 .../traversal/step/sideEffect/ExplainTest.java  |   85 +
 .../step/sideEffect/GroupCountTest.java         |   32 +-
 .../step/sideEffect/GroupTestV3d0.java          |   16 +-
 .../PartitionStrategyProcessTest.java           |   13 +-
 .../tinkerpop/gremlin/structure/GraphTest.java  |    2 +-
 .../gremlin/structure/TransactionTest.java      |   84 +
 .../gremlin/structure/VertexPropertyTest.java   |   14 +-
 hadoop-gremlin/pom.xml                          |   26 +-
 .../gremlin/hadoop/structure/HadoopGraph.java   |   17 +-
 neo4j-gremlin/pom.xml                           |    2 +-
 .../gremlin/neo4j/structure/Neo4jEdge.java      |    2 +-
 .../neo4j/structure/Neo4jGraphVariables.java    |    2 +-
 .../structure/trait/MultiMetaNeo4jTrait.java    |    2 +-
 .../trait/NoMultiNoMetaNeo4jTrait.java          |    2 +-
 pom.xml                                         |  108 +-
 spark-gremlin/pom.xml                           |    2 +-
 tinkergraph-gremlin/pom.xml                     |    2 +-
 .../tinkergraph/structure/TinkerGraph.java      |   14 +-
 .../tinkergraph/structure/TinkerIoRegistry.java |  176 +-
 .../tinkergraph/TinkerGraphProvider.java        |    8 +-
 .../tinkergraph/TinkerGraphUUIDProvider.java    |   57 +
 .../TinkerGraphGryoSerializerTest.java          |   81 +
 .../structure/TinkerGraphPlayTest.java          |    4 +-
 .../structure/TinkerGraphSerializerTest.java    |   81 -
 .../tinkergraph/structure/TinkerGraphTest.java  |  101 +
 .../TinkerGraphUUIDGroovyEnvironmentTest.java   |   38 +
 184 files changed, 12536 insertions(+), 9729 deletions(-)
----------------------------------------------------------------------