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/07/08 20:35:43 UTC

tinkerpop git commit: TINKERPOP-1359 SubgraphStep needed to check meta-properties feature on the source graph. CTR

Repository: tinkerpop
Updated Branches:
  refs/heads/tp31 c8c77afeb -> c90fc1e1a


TINKERPOP-1359 SubgraphStep needed to check meta-properties feature on the source graph. CTR


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

Branch: refs/heads/tp31
Commit: c90fc1e1a1520bc3ac9872681fafb1173dd038bb
Parents: c8c77af
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Fri Jul 8 16:34:52 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Fri Jul 8 16:34:52 2016 -0400

----------------------------------------------------------------------
 CHANGELOG.asciidoc                               |  3 ++-
 .../traversal/step/sideEffect/SubgraphStep.java  | 19 +++++++++++++++----
 2 files changed, 17 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/c90fc1e1/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index 3499304..999b2a9 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -26,7 +26,8 @@ image::https://raw.githubusercontent.com/apache/incubator-tinkerpop/master/docs/
 TinkerPop 3.1.3 (NOT OFFICIALLY RELEASED YET)
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-* Enured calls to `Result.hasNext()` were idempotent.
+* Fixed bug in `SubgraphStep` where features were not being checked properly prior to reading meta-properties.
+* Ensured calls to `Result.hasNext()` were idempotent.
 * Avoid hamcrest conflict by using mockito-core instead of mockito-all dependency in `gremlin-test`.
 * Fixed bug in `GremlinExecutor` causing Gremlin Server to lock up when parallel requests were submitted on the same session if those parallel requests included a script that blocked indefinitely.
 * Changed `GremlinExecutor` timeout scheduling so that the timer would not start until a time closer to the actual start of script evaluation.

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/c90fc1e1/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/SubgraphStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/SubgraphStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/SubgraphStep.java
index c7bcd57..aa88b5d 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/SubgraphStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/SubgraphStep.java
@@ -44,6 +44,7 @@ public final class SubgraphStep extends SideEffectStep<Edge> implements SideEffe
     private Graph subgraph;
     private String sideEffectKey;
     private Graph.Features.VertexFeatures parentGraphFeatures;
+    private boolean subgraphSupportsMetaProperties = false;
 
     private static final Map<String, Object> DEFAULT_CONFIGURATION = new HashMap<String, Object>() {{
         put(Graph.GRAPH, "org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerGraph"); // hard coded because TinkerGraph is not part of gremlin-core
@@ -58,11 +59,14 @@ public final class SubgraphStep extends SideEffectStep<Edge> implements SideEffe
     @Override
     protected void sideEffect(final Traverser.Admin<Edge> traverser) {
         parentGraphFeatures = ((Graph) traversal.getGraph().get()).features().vertex();
-        if (null == this.subgraph) {
-            this.subgraph = traverser.sideEffects(this.sideEffectKey);
-            if (!this.subgraph.features().vertex().supportsUserSuppliedIds() || !this.subgraph.features().edge().supportsUserSuppliedIds())
+        if (null == subgraph) {
+            subgraph = traverser.sideEffects(sideEffectKey);
+            if (!subgraph.features().vertex().supportsUserSuppliedIds() || !subgraph.features().edge().supportsUserSuppliedIds())
                 throw new IllegalArgumentException("The provided subgraph must support user supplied ids for vertices and edges: " + this.subgraph);
         }
+
+        subgraphSupportsMetaProperties = subgraph.features().vertex().supportsMetaProperties();
+
         addEdgeToSubgraph(traverser.get());
     }
 
@@ -99,10 +103,17 @@ public final class SubgraphStep extends SideEffectStep<Edge> implements SideEffe
         final Iterator<Vertex> vertexIterator = subgraph.vertices(vertex.id());
         if (vertexIterator.hasNext()) return vertexIterator.next();
         final Vertex subgraphVertex = subgraph.addVertex(T.id, vertex.id(), T.label, vertex.label());
+
         vertex.properties().forEachRemaining(vertexProperty -> {
             final VertexProperty.Cardinality cardinality = parentGraphFeatures.getCardinality(vertexProperty.key());
             final VertexProperty<?> subgraphVertexProperty = subgraphVertex.property(cardinality, vertexProperty.key(), vertexProperty.value(), T.id, vertexProperty.id());
-            vertexProperty.properties().forEachRemaining(property -> subgraphVertexProperty.property(property.key(), property.value()));
+
+            // only iterate the VertexProperties if the current graph can have them and if the subgraph can support
+            // them. unfortunately we don't have a way to write a test for this as we dont' have a graph that supports
+            // user supplied ids and doesn't support metaproperties.
+            if (parentGraphFeatures.supportsMetaProperties() && subgraphSupportsMetaProperties) {
+                vertexProperty.properties().forEachRemaining(property -> subgraphVertexProperty.property(property.key(), property.value()));
+            }
         });
         return subgraphVertex;
     }