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;
}