[3/3] tinkerpop git commit: TINKERPOP-1950 Cached global strategy lookups during traversal construction
TINKERPOP-1950 Cached global strategy lookups during traversal construction This change leads to a 1.5x to 2x speed improvement in traversal construction. It is especially effective when processing traversals that have many child traversals within them as this method is called for not only the parent traversal but all the children as well. Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/d7d0aafc Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/d7d0aafc Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/d7d0aafc Branch: refs/heads/TINKERPOP-1950 Commit: d7d0aafc08cf8600b03d4d9d79ce52056d694a4f Parents: 682f298 Author: Stephen MalletteAuthored: Fri Apr 20 16:18:13 2018 -0400 Committer: Stephen Mallette Committed: Fri Apr 20 19:38:37 2018 -0400 -- .../process/traversal/TraversalStrategies.java | 29 ++-- 1 file changed, 21 insertions(+), 8 deletions(-) -- http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d7d0aafc/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalStrategies.java -- diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalStrategies.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalStrategies.java index c7ee5bf..7ca5b61 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalStrategies.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalStrategies.java @@ -63,6 +63,8 @@ import java.util.stream.Collectors; */ public interface TraversalStrategies extends Serializable, Cloneable { +static Set LOADED = new HashSet<>(); + static List STRATEGY_CATEGORIES = Collections.unmodifiableList(Arrays.asList(TraversalStrategy.DecorationStrategy.class, TraversalStrategy.OptimizationStrategy.class, TraversalStrategy.ProviderOptimizationStrategy.class, TraversalStrategy.FinalizationStrategy.class, TraversalStrategy.VerificationStrategy.class)); /** @@ -244,20 +246,31 @@ public interface TraversalStrategies extends Serializable, Cloneable { public static TraversalStrategies getStrategies(final Class graphOrGraphComputerClass) { try { // be sure to load the class so that its static{} traversal strategy registration component is loaded. -// this is more important for GraphComputer classes as they are typically not instantiated prior to strategy usage like Graph classes. -final String graphComputerClassName = null != graphOrGraphComputerClass.getDeclaringClass() ? +// this is more important for GraphComputer classes as they are typically not instantiated prior to +// strategy usage like Graph classes. +if (!LOADED.contains(graphOrGraphComputerClass)) { +final String graphComputerClassName = null != graphOrGraphComputerClass.getDeclaringClass() ? graphOrGraphComputerClass.getCanonicalName().replace("." + graphOrGraphComputerClass.getSimpleName(), "$" + graphOrGraphComputerClass.getSimpleName()) : graphOrGraphComputerClass.getCanonicalName(); -Class.forName(graphComputerClassName); +Class.forName(graphComputerClassName); + +// keep track of stuff we already loaded once - stuff in this if/statement isn't cheap and this +// method gets called a lot, basically every time a new traversal gets spun up (that includes +// child traversals. +LOADED.add(graphOrGraphComputerClass); +} } catch (final ClassNotFoundException e) { throw new IllegalStateException(e.getMessage(), e); } -if (Graph.class.isAssignableFrom(graphOrGraphComputerClass)) { -final TraversalStrategies traversalStrategies = GRAPH_CACHE.get(graphOrGraphComputerClass); -return null == traversalStrategies ? GRAPH_CACHE.get(Graph.class) : traversalStrategies; + +if (GRAPH_CACHE.containsKey(graphOrGraphComputerClass)) { +return GRAPH_CACHE.get(graphOrGraphComputerClass); +} else if (Graph.class.isAssignableFrom(graphOrGraphComputerClass)) { +return GRAPH_CACHE.get(Graph.class); +} else if (GRAPH_COMPUTER_CACHE.containsKey(graphOrGraphComputerClass)) { +return GRAPH_COMPUTER_CACHE.get(graphOrGraphComputerClass); } else if
[1/3] tinkerpop git commit: Make ResponseExceptions constructor public CTR [Forced Update!]
Repository: tinkerpop Updated Branches: refs/heads/TINKERPOP-1950 b8c44bf12 -> d7d0aafc0 (forced update) Make ResponseExceptions constructor public CTR This makes the ResponseException easier to use in tests for users of Gremlin.Net. Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/25913023 Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/25913023 Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/25913023 Branch: refs/heads/TINKERPOP-1950 Commit: 25913023561f76043e11ff0813b2c8ece57274b5 Parents: b99c56a Author: Florian HockmannAuthored: Thu Apr 19 16:08:03 2018 +0200 Committer: Florian Hockmann Committed: Thu Apr 19 16:08:03 2018 +0200 -- .../src/Gremlin.Net/Driver/Exceptions/ResponseException.cs | 6 +- 1 file changed, 5 insertions(+), 1 deletion(-) -- http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/25913023/gremlin-dotnet/src/Gremlin.Net/Driver/Exceptions/ResponseException.cs -- diff --git a/gremlin-dotnet/src/Gremlin.Net/Driver/Exceptions/ResponseException.cs b/gremlin-dotnet/src/Gremlin.Net/Driver/Exceptions/ResponseException.cs index 4706723..8d26106 100644 --- a/gremlin-dotnet/src/Gremlin.Net/Driver/Exceptions/ResponseException.cs +++ b/gremlin-dotnet/src/Gremlin.Net/Driver/Exceptions/ResponseException.cs @@ -30,7 +30,11 @@ namespace Gremlin.Net.Driver.Exceptions /// public class ResponseException : Exception { -internal ResponseException(string message) : base(message) +/// +/// Initializes a new instance of the class. +/// +/// The error message string. +public ResponseException(string message) : base(message) { } }
[2/3] tinkerpop git commit: TINKERPOP-1936 Improved performance of Bytecode deserialization.
TINKERPOP-1936 Improved performance of Bytecode deserialization. GraphSON deserialization of Bytecode was using generic List deserialization which became especially costly for Jackson in 2.5.x because of changes that synchronized access to the deserialization cache and because the collection deserialization were no longer cacheable when type deserialization was in play. This change removed the use of generic type lists in deserialization and more directly handled the parsing of the lists thus bypassing the collection deserializer for this specific case. Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/682f298c Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/682f298c Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/682f298c Branch: refs/heads/TINKERPOP-1950 Commit: 682f298cc82d66fd7040cb29a7d3b769be5e2794 Parents: 2591302 Author: Stephen MalletteAuthored: Thu Apr 12 10:25:20 2018 -0400 Committer: Stephen Mallette Committed: Fri Apr 20 19:29:02 2018 -0400 -- CHANGELOG.asciidoc | 1 + .../io/graphson/TraversalSerializersV2d0.java | 35 +--- 2 files changed, 24 insertions(+), 12 deletions(-) -- http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/682f298c/CHANGELOG.asciidoc -- diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc index 0f3a71a..51c9f68 100644 --- a/CHANGELOG.asciidoc +++ b/CHANGELOG.asciidoc @@ -24,6 +24,7 @@ image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima === TinkerPop 3.2.9 (Release Date: NOT OFFICIALLY RELEASED YET) * Bumped to httpclient 4.5.5. +* Improved performance of GraphSON deserialization of `Bytecode`. [[release-3-2-8]] === TinkerPop 3.2.8 (Release Date: April 2, 2018) http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/682f298c/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TraversalSerializersV2d0.java -- diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TraversalSerializersV2d0.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TraversalSerializersV2d0.java index a696280..040fd1d 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TraversalSerializersV2d0.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TraversalSerializersV2d0.java @@ -248,8 +248,6 @@ final class TraversalSerializersV2d0 { // final static class BytecodeJacksonDeserializer extends StdDeserializer { -private static final JavaType listJavaType = TypeFactory.defaultInstance().constructCollectionType(ArrayList.class, Object.class); -private static final JavaType listListJavaType = TypeFactory.defaultInstance().constructCollectionType(ArrayList.class, listJavaType); public BytecodeJacksonDeserializer() { super(Bytecode.class); @@ -260,17 +258,30 @@ final class TraversalSerializersV2d0 { final Bytecode bytecode = new Bytecode(); while (jsonParser.nextToken() != JsonToken.END_OBJECT) { -if (jsonParser.getCurrentName().equals(GraphSONTokens.SOURCE)) { +final String current = jsonParser.getCurrentName(); +if (current.equals(GraphSONTokens.SOURCE) || current.equals(GraphSONTokens.STEP)) { jsonParser.nextToken(); -final List instructions = deserializationContext.readValue(jsonParser, listListJavaType); -for (final List instruction : instructions) { -bytecode.addSource((String) instruction.get(0), Arrays.copyOfRange(instruction.toArray(), 1, instruction.size())); -} -} else if (jsonParser.getCurrentName().equals(GraphSONTokens.STEP)) { -jsonParser.nextToken(); -final List
instructions = deserializationContext.readValue(jsonParser, listListJavaType); -for (final List instruction : instructions) { -bytecode.addStep((String) instruction.get(0), Arrays.copyOfRange(instruction.toArray(), 1, instruction.size())); + +while (jsonParser.nextToken() != JsonToken.END_ARRAY) { + +// there should be a list now and the first item in the list is always string and is the step name +// skip the start array +jsonParser.nextToken(); + +
tinkerpop git commit: TINKERPOP-1936 Improved performance of Bytecode deserialization.
Repository: tinkerpop Updated Branches: refs/heads/tp32 259130235 -> 682f298cc TINKERPOP-1936 Improved performance of Bytecode deserialization. GraphSON deserialization of Bytecode was using generic List deserialization which became especially costly for Jackson in 2.5.x because of changes that synchronized access to the deserialization cache and because the collection deserialization were no longer cacheable when type deserialization was in play. This change removed the use of generic type lists in deserialization and more directly handled the parsing of the lists thus bypassing the collection deserializer for this specific case. Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/682f298c Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/682f298c Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/682f298c Branch: refs/heads/tp32 Commit: 682f298cc82d66fd7040cb29a7d3b769be5e2794 Parents: 2591302 Author: Stephen MalletteAuthored: Thu Apr 12 10:25:20 2018 -0400 Committer: Stephen Mallette Committed: Fri Apr 20 19:29:02 2018 -0400 -- CHANGELOG.asciidoc | 1 + .../io/graphson/TraversalSerializersV2d0.java | 35 +--- 2 files changed, 24 insertions(+), 12 deletions(-) -- http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/682f298c/CHANGELOG.asciidoc -- diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc index 0f3a71a..51c9f68 100644 --- a/CHANGELOG.asciidoc +++ b/CHANGELOG.asciidoc @@ -24,6 +24,7 @@ image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima === TinkerPop 3.2.9 (Release Date: NOT OFFICIALLY RELEASED YET) * Bumped to httpclient 4.5.5. +* Improved performance of GraphSON deserialization of `Bytecode`. [[release-3-2-8]] === TinkerPop 3.2.8 (Release Date: April 2, 2018) http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/682f298c/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TraversalSerializersV2d0.java -- diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TraversalSerializersV2d0.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TraversalSerializersV2d0.java index a696280..040fd1d 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TraversalSerializersV2d0.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TraversalSerializersV2d0.java @@ -248,8 +248,6 @@ final class TraversalSerializersV2d0 { // final static class BytecodeJacksonDeserializer extends StdDeserializer { -private static final JavaType listJavaType = TypeFactory.defaultInstance().constructCollectionType(ArrayList.class, Object.class); -private static final JavaType listListJavaType = TypeFactory.defaultInstance().constructCollectionType(ArrayList.class, listJavaType); public BytecodeJacksonDeserializer() { super(Bytecode.class); @@ -260,17 +258,30 @@ final class TraversalSerializersV2d0 { final Bytecode bytecode = new Bytecode(); while (jsonParser.nextToken() != JsonToken.END_OBJECT) { -if (jsonParser.getCurrentName().equals(GraphSONTokens.SOURCE)) { +final String current = jsonParser.getCurrentName(); +if (current.equals(GraphSONTokens.SOURCE) || current.equals(GraphSONTokens.STEP)) { jsonParser.nextToken(); -final List instructions = deserializationContext.readValue(jsonParser, listListJavaType); -for (final List instruction : instructions) { -bytecode.addSource((String) instruction.get(0), Arrays.copyOfRange(instruction.toArray(), 1, instruction.size())); -} -} else if (jsonParser.getCurrentName().equals(GraphSONTokens.STEP)) { -jsonParser.nextToken(); -final List
instructions = deserializationContext.readValue(jsonParser, listListJavaType); -for (final List instruction : instructions) { -bytecode.addStep((String) instruction.get(0), Arrays.copyOfRange(instruction.toArray(), 1, instruction.size())); + +while (jsonParser.nextToken() != JsonToken.END_ARRAY) { + +// there should be a list now and the first item in the list is always string and is the step name +// skip the start array +
[1/3] tinkerpop git commit: TINKERPOP-1936 Improved performance of Bytecode deserialization.
Repository: tinkerpop Updated Branches: refs/heads/master a09843788 -> a187ce11c TINKERPOP-1936 Improved performance of Bytecode deserialization. GraphSON deserialization of Bytecode was using generic List deserialization which became especially costly for Jackson in 2.5.x because of changes that synchronized access to the deserialization cache and because the collection deserialization were no longer cacheable when type deserialization was in play. This change removed the use of generic type lists in deserialization and more directly handled the parsing of the lists thus bypassing the collection deserializer for this specific case. Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/682f298c Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/682f298c Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/682f298c Branch: refs/heads/master Commit: 682f298cc82d66fd7040cb29a7d3b769be5e2794 Parents: 2591302 Author: Stephen MalletteAuthored: Thu Apr 12 10:25:20 2018 -0400 Committer: Stephen Mallette Committed: Fri Apr 20 19:29:02 2018 -0400 -- CHANGELOG.asciidoc | 1 + .../io/graphson/TraversalSerializersV2d0.java | 35 +--- 2 files changed, 24 insertions(+), 12 deletions(-) -- http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/682f298c/CHANGELOG.asciidoc -- diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc index 0f3a71a..51c9f68 100644 --- a/CHANGELOG.asciidoc +++ b/CHANGELOG.asciidoc @@ -24,6 +24,7 @@ image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima === TinkerPop 3.2.9 (Release Date: NOT OFFICIALLY RELEASED YET) * Bumped to httpclient 4.5.5. +* Improved performance of GraphSON deserialization of `Bytecode`. [[release-3-2-8]] === TinkerPop 3.2.8 (Release Date: April 2, 2018) http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/682f298c/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TraversalSerializersV2d0.java -- diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TraversalSerializersV2d0.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TraversalSerializersV2d0.java index a696280..040fd1d 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TraversalSerializersV2d0.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TraversalSerializersV2d0.java @@ -248,8 +248,6 @@ final class TraversalSerializersV2d0 { // final static class BytecodeJacksonDeserializer extends StdDeserializer { -private static final JavaType listJavaType = TypeFactory.defaultInstance().constructCollectionType(ArrayList.class, Object.class); -private static final JavaType listListJavaType = TypeFactory.defaultInstance().constructCollectionType(ArrayList.class, listJavaType); public BytecodeJacksonDeserializer() { super(Bytecode.class); @@ -260,17 +258,30 @@ final class TraversalSerializersV2d0 { final Bytecode bytecode = new Bytecode(); while (jsonParser.nextToken() != JsonToken.END_OBJECT) { -if (jsonParser.getCurrentName().equals(GraphSONTokens.SOURCE)) { +final String current = jsonParser.getCurrentName(); +if (current.equals(GraphSONTokens.SOURCE) || current.equals(GraphSONTokens.STEP)) { jsonParser.nextToken(); -final List instructions = deserializationContext.readValue(jsonParser, listListJavaType); -for (final List instruction : instructions) { -bytecode.addSource((String) instruction.get(0), Arrays.copyOfRange(instruction.toArray(), 1, instruction.size())); -} -} else if (jsonParser.getCurrentName().equals(GraphSONTokens.STEP)) { -jsonParser.nextToken(); -final List
instructions = deserializationContext.readValue(jsonParser, listListJavaType); -for (final List instruction : instructions) { -bytecode.addStep((String) instruction.get(0), Arrays.copyOfRange(instruction.toArray(), 1, instruction.size())); + +while (jsonParser.nextToken() != JsonToken.END_ARRAY) { + +// there should be a list now and the first item in the list is always string and is the step name +// skip the start array +
[3/3] tinkerpop git commit: Merge branch 'tp33'
Merge branch 'tp33' Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/a187ce11 Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/a187ce11 Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/a187ce11 Branch: refs/heads/master Commit: a187ce11c96077d143afb54bffbb5fc636c065eb Parents: a098437 81add60 Author: Stephen MalletteAuthored: Fri Apr 20 19:29:27 2018 -0400 Committer: Stephen Mallette Committed: Fri Apr 20 19:29:27 2018 -0400 -- --
[2/2] tinkerpop git commit: Merge branch 'tp32' into tp33
Merge branch 'tp32' into tp33 Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/81add608 Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/81add608 Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/81add608 Branch: refs/heads/tp33 Commit: 81add608549846e5f45e4e1a504e5e3cea6e03f9 Parents: 7e6e985 682f298 Author: Stephen MalletteAuthored: Fri Apr 20 19:29:17 2018 -0400 Committer: Stephen Mallette Committed: Fri Apr 20 19:29:17 2018 -0400 -- --
[1/2] tinkerpop git commit: TINKERPOP-1936 Improved performance of Bytecode deserialization.
Repository: tinkerpop Updated Branches: refs/heads/tp33 7e6e98548 -> 81add6085 TINKERPOP-1936 Improved performance of Bytecode deserialization. GraphSON deserialization of Bytecode was using generic List deserialization which became especially costly for Jackson in 2.5.x because of changes that synchronized access to the deserialization cache and because the collection deserialization were no longer cacheable when type deserialization was in play. This change removed the use of generic type lists in deserialization and more directly handled the parsing of the lists thus bypassing the collection deserializer for this specific case. Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/682f298c Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/682f298c Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/682f298c Branch: refs/heads/tp33 Commit: 682f298cc82d66fd7040cb29a7d3b769be5e2794 Parents: 2591302 Author: Stephen MalletteAuthored: Thu Apr 12 10:25:20 2018 -0400 Committer: Stephen Mallette Committed: Fri Apr 20 19:29:02 2018 -0400 -- CHANGELOG.asciidoc | 1 + .../io/graphson/TraversalSerializersV2d0.java | 35 +--- 2 files changed, 24 insertions(+), 12 deletions(-) -- http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/682f298c/CHANGELOG.asciidoc -- diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc index 0f3a71a..51c9f68 100644 --- a/CHANGELOG.asciidoc +++ b/CHANGELOG.asciidoc @@ -24,6 +24,7 @@ image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima === TinkerPop 3.2.9 (Release Date: NOT OFFICIALLY RELEASED YET) * Bumped to httpclient 4.5.5. +* Improved performance of GraphSON deserialization of `Bytecode`. [[release-3-2-8]] === TinkerPop 3.2.8 (Release Date: April 2, 2018) http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/682f298c/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TraversalSerializersV2d0.java -- diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TraversalSerializersV2d0.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TraversalSerializersV2d0.java index a696280..040fd1d 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TraversalSerializersV2d0.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TraversalSerializersV2d0.java @@ -248,8 +248,6 @@ final class TraversalSerializersV2d0 { // final static class BytecodeJacksonDeserializer extends StdDeserializer { -private static final JavaType listJavaType = TypeFactory.defaultInstance().constructCollectionType(ArrayList.class, Object.class); -private static final JavaType listListJavaType = TypeFactory.defaultInstance().constructCollectionType(ArrayList.class, listJavaType); public BytecodeJacksonDeserializer() { super(Bytecode.class); @@ -260,17 +258,30 @@ final class TraversalSerializersV2d0 { final Bytecode bytecode = new Bytecode(); while (jsonParser.nextToken() != JsonToken.END_OBJECT) { -if (jsonParser.getCurrentName().equals(GraphSONTokens.SOURCE)) { +final String current = jsonParser.getCurrentName(); +if (current.equals(GraphSONTokens.SOURCE) || current.equals(GraphSONTokens.STEP)) { jsonParser.nextToken(); -final List instructions = deserializationContext.readValue(jsonParser, listListJavaType); -for (final List instruction : instructions) { -bytecode.addSource((String) instruction.get(0), Arrays.copyOfRange(instruction.toArray(), 1, instruction.size())); -} -} else if (jsonParser.getCurrentName().equals(GraphSONTokens.STEP)) { -jsonParser.nextToken(); -final List
instructions = deserializationContext.readValue(jsonParser, listListJavaType); -for (final List instruction : instructions) { -bytecode.addStep((String) instruction.get(0), Arrays.copyOfRange(instruction.toArray(), 1, instruction.size())); + +while (jsonParser.nextToken() != JsonToken.END_ARRAY) { + +// there should be a list now and the first item in the list is always string and is the step name +// skip the start array +
[2/4] tinkerpop git commit: Merge branch 'TINKERPOP-1936' into tp32
Merge branch 'TINKERPOP-1936' into tp32 Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/6b259f72 Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/6b259f72 Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/6b259f72 Branch: refs/heads/tp33 Commit: 6b259f729137033a240254ade36e4726809b46e7 Parents: b99c56a e68df44 Author: Stephen MalletteAuthored: Fri Apr 20 19:03:20 2018 -0400 Committer: Stephen Mallette Committed: Fri Apr 20 19:03:20 2018 -0400 -- CHANGELOG.asciidoc | 1 + .../io/graphson/TraversalSerializersV2d0.java | 35 +--- 2 files changed, 24 insertions(+), 12 deletions(-) --
[4/4] tinkerpop git commit: TINKERPOP-1936 Implemented bytecode serialization performance enhancement for GraphSON 3.0
TINKERPOP-1936 Implemented bytecode serialization performance enhancement for GraphSON 3.0 Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/7e6e9854 Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/7e6e9854 Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/7e6e9854 Branch: refs/heads/tp33 Commit: 7e6e98548625c83ad419737166fe6c679d204468 Parents: b8b46b0 Author: Stephen MalletteAuthored: Fri Apr 20 19:26:05 2018 -0400 Committer: Stephen Mallette Committed: Fri Apr 20 19:26:05 2018 -0400 -- .../io/graphson/TraversalSerializersV3d0.java | 33 ++-- 1 file changed, 23 insertions(+), 10 deletions(-) -- http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/7e6e9854/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TraversalSerializersV3d0.java -- diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TraversalSerializersV3d0.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TraversalSerializersV3d0.java index fd11f25..eaa7b0f 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TraversalSerializersV3d0.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TraversalSerializersV3d0.java @@ -252,17 +252,30 @@ final class TraversalSerializersV3d0 { final Bytecode bytecode = new Bytecode(); while (jsonParser.nextToken() != JsonToken.END_OBJECT) { -if (jsonParser.getCurrentName().equals(GraphSONTokens.SOURCE)) { +final String current = jsonParser.getCurrentName(); +if (current.equals(GraphSONTokens.SOURCE) || current.equals(GraphSONTokens.STEP)) { jsonParser.nextToken(); -final List instructions = deserializationContext.readValue(jsonParser, listListJavaType); -for (final List instruction : instructions) { -bytecode.addSource((String) instruction.get(0), Arrays.copyOfRange(instruction.toArray(), 1, instruction.size())); -} -} else if (jsonParser.getCurrentName().equals(GraphSONTokens.STEP)) { -jsonParser.nextToken(); -final List
instructions = deserializationContext.readValue(jsonParser, listListJavaType); -for (final List instruction : instructions) { -bytecode.addStep((String) instruction.get(0), Arrays.copyOfRange(instruction.toArray(), 1, instruction.size())); + +while (jsonParser.nextToken() != JsonToken.END_ARRAY) { + +// there should be a list now and the first item in the list is always string and is the step name +// skip the start array +jsonParser.nextToken(); + +final String stepName = jsonParser.getText(); + +// iterate through the rest of the list for arguments until it gets to the end +final List arguments = new ArrayList<>(); +while (jsonParser.nextToken() != JsonToken.END_ARRAY) { +// we don't know the types here, so let the deserializer figure that business out + arguments.add(deserializationContext.readValue(jsonParser, Object.class)); +} + +// if it's not a "source" then it must be a "step" +if (current.equals(GraphSONTokens.SOURCE)) +bytecode.addSource(stepName, arguments.toArray()); +else +bytecode.addStep(stepName, arguments.toArray()); } } }
[3/4] tinkerpop git commit: Merge branch 'tp32' into tp33
Merge branch 'tp32' into tp33 Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/b8b46b06 Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/b8b46b06 Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/b8b46b06 Branch: refs/heads/tp33 Commit: b8b46b06a26c58395ef2d878c2c2ed0665c0e788 Parents: 4705c04 6b259f7 Author: Stephen MalletteAuthored: Fri Apr 20 19:03:42 2018 -0400 Committer: Stephen Mallette Committed: Fri Apr 20 19:03:42 2018 -0400 -- CHANGELOG.asciidoc | 1 + .../io/graphson/TraversalSerializersV2d0.java | 35 +--- 2 files changed, 24 insertions(+), 12 deletions(-) -- http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/b8b46b06/CHANGELOG.asciidoc --
[3/5] tinkerpop git commit: Merge branch 'tp32' into tp33
Merge branch 'tp32' into tp33 Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/b8b46b06 Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/b8b46b06 Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/b8b46b06 Branch: refs/heads/master Commit: b8b46b06a26c58395ef2d878c2c2ed0665c0e788 Parents: 4705c04 6b259f7 Author: Stephen MalletteAuthored: Fri Apr 20 19:03:42 2018 -0400 Committer: Stephen Mallette Committed: Fri Apr 20 19:03:42 2018 -0400 -- CHANGELOG.asciidoc | 1 + .../io/graphson/TraversalSerializersV2d0.java | 35 +--- 2 files changed, 24 insertions(+), 12 deletions(-) -- http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/b8b46b06/CHANGELOG.asciidoc --
[1/5] tinkerpop git commit: TINKERPOP-1936 Improved performance of Bytecode deserialization.
Repository: tinkerpop Updated Branches: refs/heads/master cfa14e2a1 -> a09843788 TINKERPOP-1936 Improved performance of Bytecode deserialization. GraphSON deserialization of Bytecode was using generic List deserialization which became especially costly for Jackson in 2.5.x because of changes that synchronized access to the deserialization cache and because the collection deserialization were no longer cacheable when type deserialization was in play. This change removed the use of generic type lists in deserialization and more directly handled the parsing of the lists thus bypassing the collection deserializer for this specific case. Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/e68df44c Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/e68df44c Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/e68df44c Branch: refs/heads/master Commit: e68df44caaafd9f4037da8e03be660a4124555eb Parents: a7c8ea1 Author: Stephen MalletteAuthored: Thu Apr 12 10:25:20 2018 -0400 Committer: Stephen Mallette Committed: Mon Apr 16 13:47:35 2018 -0400 -- CHANGELOG.asciidoc | 1 + .../io/graphson/TraversalSerializersV2d0.java | 35 +--- 2 files changed, 24 insertions(+), 12 deletions(-) -- http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/e68df44c/CHANGELOG.asciidoc -- diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc index 0f3a71a..51c9f68 100644 --- a/CHANGELOG.asciidoc +++ b/CHANGELOG.asciidoc @@ -24,6 +24,7 @@ image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima === TinkerPop 3.2.9 (Release Date: NOT OFFICIALLY RELEASED YET) * Bumped to httpclient 4.5.5. +* Improved performance of GraphSON deserialization of `Bytecode`. [[release-3-2-8]] === TinkerPop 3.2.8 (Release Date: April 2, 2018) http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/e68df44c/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TraversalSerializersV2d0.java -- diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TraversalSerializersV2d0.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TraversalSerializersV2d0.java index a696280..040fd1d 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TraversalSerializersV2d0.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TraversalSerializersV2d0.java @@ -248,8 +248,6 @@ final class TraversalSerializersV2d0 { // final static class BytecodeJacksonDeserializer extends StdDeserializer { -private static final JavaType listJavaType = TypeFactory.defaultInstance().constructCollectionType(ArrayList.class, Object.class); -private static final JavaType listListJavaType = TypeFactory.defaultInstance().constructCollectionType(ArrayList.class, listJavaType); public BytecodeJacksonDeserializer() { super(Bytecode.class); @@ -260,17 +258,30 @@ final class TraversalSerializersV2d0 { final Bytecode bytecode = new Bytecode(); while (jsonParser.nextToken() != JsonToken.END_OBJECT) { -if (jsonParser.getCurrentName().equals(GraphSONTokens.SOURCE)) { +final String current = jsonParser.getCurrentName(); +if (current.equals(GraphSONTokens.SOURCE) || current.equals(GraphSONTokens.STEP)) { jsonParser.nextToken(); -final List instructions = deserializationContext.readValue(jsonParser, listListJavaType); -for (final List instruction : instructions) { -bytecode.addSource((String) instruction.get(0), Arrays.copyOfRange(instruction.toArray(), 1, instruction.size())); -} -} else if (jsonParser.getCurrentName().equals(GraphSONTokens.STEP)) { -jsonParser.nextToken(); -final List
instructions = deserializationContext.readValue(jsonParser, listListJavaType); -for (final List instruction : instructions) { -bytecode.addStep((String) instruction.get(0), Arrays.copyOfRange(instruction.toArray(), 1, instruction.size())); + +while (jsonParser.nextToken() != JsonToken.END_ARRAY) { + +// there should be a list now and the first item in the list is always string and is the step name +// skip the start array +
[1/4] tinkerpop git commit: TINKERPOP-1936 Improved performance of Bytecode deserialization.
Repository: tinkerpop Updated Branches: refs/heads/tp33 4705c0416 -> 7e6e98548 TINKERPOP-1936 Improved performance of Bytecode deserialization. GraphSON deserialization of Bytecode was using generic List deserialization which became especially costly for Jackson in 2.5.x because of changes that synchronized access to the deserialization cache and because the collection deserialization were no longer cacheable when type deserialization was in play. This change removed the use of generic type lists in deserialization and more directly handled the parsing of the lists thus bypassing the collection deserializer for this specific case. Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/e68df44c Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/e68df44c Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/e68df44c Branch: refs/heads/tp33 Commit: e68df44caaafd9f4037da8e03be660a4124555eb Parents: a7c8ea1 Author: Stephen MalletteAuthored: Thu Apr 12 10:25:20 2018 -0400 Committer: Stephen Mallette Committed: Mon Apr 16 13:47:35 2018 -0400 -- CHANGELOG.asciidoc | 1 + .../io/graphson/TraversalSerializersV2d0.java | 35 +--- 2 files changed, 24 insertions(+), 12 deletions(-) -- http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/e68df44c/CHANGELOG.asciidoc -- diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc index 0f3a71a..51c9f68 100644 --- a/CHANGELOG.asciidoc +++ b/CHANGELOG.asciidoc @@ -24,6 +24,7 @@ image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima === TinkerPop 3.2.9 (Release Date: NOT OFFICIALLY RELEASED YET) * Bumped to httpclient 4.5.5. +* Improved performance of GraphSON deserialization of `Bytecode`. [[release-3-2-8]] === TinkerPop 3.2.8 (Release Date: April 2, 2018) http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/e68df44c/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TraversalSerializersV2d0.java -- diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TraversalSerializersV2d0.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TraversalSerializersV2d0.java index a696280..040fd1d 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TraversalSerializersV2d0.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TraversalSerializersV2d0.java @@ -248,8 +248,6 @@ final class TraversalSerializersV2d0 { // final static class BytecodeJacksonDeserializer extends StdDeserializer { -private static final JavaType listJavaType = TypeFactory.defaultInstance().constructCollectionType(ArrayList.class, Object.class); -private static final JavaType listListJavaType = TypeFactory.defaultInstance().constructCollectionType(ArrayList.class, listJavaType); public BytecodeJacksonDeserializer() { super(Bytecode.class); @@ -260,17 +258,30 @@ final class TraversalSerializersV2d0 { final Bytecode bytecode = new Bytecode(); while (jsonParser.nextToken() != JsonToken.END_OBJECT) { -if (jsonParser.getCurrentName().equals(GraphSONTokens.SOURCE)) { +final String current = jsonParser.getCurrentName(); +if (current.equals(GraphSONTokens.SOURCE) || current.equals(GraphSONTokens.STEP)) { jsonParser.nextToken(); -final List instructions = deserializationContext.readValue(jsonParser, listListJavaType); -for (final List instruction : instructions) { -bytecode.addSource((String) instruction.get(0), Arrays.copyOfRange(instruction.toArray(), 1, instruction.size())); -} -} else if (jsonParser.getCurrentName().equals(GraphSONTokens.STEP)) { -jsonParser.nextToken(); -final List
instructions = deserializationContext.readValue(jsonParser, listListJavaType); -for (final List instruction : instructions) { -bytecode.addStep((String) instruction.get(0), Arrays.copyOfRange(instruction.toArray(), 1, instruction.size())); + +while (jsonParser.nextToken() != JsonToken.END_ARRAY) { + +// there should be a list now and the first item in the list is always string and is the step name +// skip the start array +
[5/5] tinkerpop git commit: Merge branch 'tp33'
Merge branch 'tp33' Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/a0984378 Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/a0984378 Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/a0984378 Branch: refs/heads/master Commit: a098437886e05142a551d8574142052963726dac Parents: cfa14e2 7e6e985 Author: Stephen MalletteAuthored: Fri Apr 20 19:26:44 2018 -0400 Committer: Stephen Mallette Committed: Fri Apr 20 19:26:44 2018 -0400 -- CHANGELOG.asciidoc | 1 + .../io/graphson/TraversalSerializersV2d0.java | 35 +--- .../io/graphson/TraversalSerializersV3d0.java | 33 -- 3 files changed, 47 insertions(+), 22 deletions(-) -- http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/a0984378/CHANGELOG.asciidoc --
[4/5] tinkerpop git commit: TINKERPOP-1936 Implemented bytecode serialization performance enhancement for GraphSON 3.0
TINKERPOP-1936 Implemented bytecode serialization performance enhancement for GraphSON 3.0 Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/7e6e9854 Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/7e6e9854 Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/7e6e9854 Branch: refs/heads/master Commit: 7e6e98548625c83ad419737166fe6c679d204468 Parents: b8b46b0 Author: Stephen MalletteAuthored: Fri Apr 20 19:26:05 2018 -0400 Committer: Stephen Mallette Committed: Fri Apr 20 19:26:05 2018 -0400 -- .../io/graphson/TraversalSerializersV3d0.java | 33 ++-- 1 file changed, 23 insertions(+), 10 deletions(-) -- http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/7e6e9854/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TraversalSerializersV3d0.java -- diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TraversalSerializersV3d0.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TraversalSerializersV3d0.java index fd11f25..eaa7b0f 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TraversalSerializersV3d0.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TraversalSerializersV3d0.java @@ -252,17 +252,30 @@ final class TraversalSerializersV3d0 { final Bytecode bytecode = new Bytecode(); while (jsonParser.nextToken() != JsonToken.END_OBJECT) { -if (jsonParser.getCurrentName().equals(GraphSONTokens.SOURCE)) { +final String current = jsonParser.getCurrentName(); +if (current.equals(GraphSONTokens.SOURCE) || current.equals(GraphSONTokens.STEP)) { jsonParser.nextToken(); -final List instructions = deserializationContext.readValue(jsonParser, listListJavaType); -for (final List instruction : instructions) { -bytecode.addSource((String) instruction.get(0), Arrays.copyOfRange(instruction.toArray(), 1, instruction.size())); -} -} else if (jsonParser.getCurrentName().equals(GraphSONTokens.STEP)) { -jsonParser.nextToken(); -final List
instructions = deserializationContext.readValue(jsonParser, listListJavaType); -for (final List instruction : instructions) { -bytecode.addStep((String) instruction.get(0), Arrays.copyOfRange(instruction.toArray(), 1, instruction.size())); + +while (jsonParser.nextToken() != JsonToken.END_ARRAY) { + +// there should be a list now and the first item in the list is always string and is the step name +// skip the start array +jsonParser.nextToken(); + +final String stepName = jsonParser.getText(); + +// iterate through the rest of the list for arguments until it gets to the end +final List arguments = new ArrayList<>(); +while (jsonParser.nextToken() != JsonToken.END_ARRAY) { +// we don't know the types here, so let the deserializer figure that business out + arguments.add(deserializationContext.readValue(jsonParser, Object.class)); +} + +// if it's not a "source" then it must be a "step" +if (current.equals(GraphSONTokens.SOURCE)) +bytecode.addSource(stepName, arguments.toArray()); +else +bytecode.addStep(stepName, arguments.toArray()); } } }
[2/5] tinkerpop git commit: Merge branch 'TINKERPOP-1936' into tp32
Merge branch 'TINKERPOP-1936' into tp32 Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/6b259f72 Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/6b259f72 Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/6b259f72 Branch: refs/heads/master Commit: 6b259f729137033a240254ade36e4726809b46e7 Parents: b99c56a e68df44 Author: Stephen MalletteAuthored: Fri Apr 20 19:03:20 2018 -0400 Committer: Stephen Mallette Committed: Fri Apr 20 19:03:20 2018 -0400 -- CHANGELOG.asciidoc | 1 + .../io/graphson/TraversalSerializersV2d0.java | 35 +--- 2 files changed, 24 insertions(+), 12 deletions(-) --
tinkerpop git commit: Cleaner/anti-aliased version of the 3.4.x logo
Repository: tinkerpop Updated Branches: refs/heads/master 5df1ce77a -> cfa14e2a1 Cleaner/anti-aliased version of the 3.4.x logo Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/cfa14e2a Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/cfa14e2a Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/cfa14e2a Branch: refs/heads/master Commit: cfa14e2a106a408984208f33a7d6574e813c122b Parents: 5df1ce7 Author: Joshua ShinavierAuthored: Fri Apr 20 15:41:26 2018 -0700 Committer: Joshua Shinavier Committed: Fri Apr 20 15:41:26 2018 -0700 -- docs/static/images/avant-gremlin-simple.png | Bin 57676 -> 85749 bytes docs/static/images/avant-gremlin.png| Bin 117645 -> 127052 bytes 2 files changed, 0 insertions(+), 0 deletions(-) -- http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/cfa14e2a/docs/static/images/avant-gremlin-simple.png -- diff --git a/docs/static/images/avant-gremlin-simple.png b/docs/static/images/avant-gremlin-simple.png index 0c3ebaf..350af11 100644 Binary files a/docs/static/images/avant-gremlin-simple.png and b/docs/static/images/avant-gremlin-simple.png differ http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/cfa14e2a/docs/static/images/avant-gremlin.png -- diff --git a/docs/static/images/avant-gremlin.png b/docs/static/images/avant-gremlin.png index 55a318a..08659b7 100644 Binary files a/docs/static/images/avant-gremlin.png and b/docs/static/images/avant-gremlin.png differ
tinkerpop git commit: TINKERPOP-1950 Cached global strategy lookups during traversal construction
Repository: tinkerpop Updated Branches: refs/heads/TINKERPOP-1950 [created] b8c44bf12 TINKERPOP-1950 Cached global strategy lookups during traversal construction This change leads to a 1.5x to 2x speed improvement in traversal construction. It is especially effective when processing traversals that have many child traversals within them as this method is called for not only the parent traversal but all the children as well. Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/b8c44bf1 Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/b8c44bf1 Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/b8c44bf1 Branch: refs/heads/TINKERPOP-1950 Commit: b8c44bf126986031cf168f5c78b9ff04b779c652 Parents: b99c56a Author: Stephen MalletteAuthored: Fri Apr 20 16:18:13 2018 -0400 Committer: Stephen Mallette Committed: Fri Apr 20 16:18:13 2018 -0400 -- .../process/traversal/TraversalStrategies.java | 29 ++-- 1 file changed, 21 insertions(+), 8 deletions(-) -- http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/b8c44bf1/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalStrategies.java -- diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalStrategies.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalStrategies.java index c7ee5bf..7ca5b61 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalStrategies.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalStrategies.java @@ -63,6 +63,8 @@ import java.util.stream.Collectors; */ public interface TraversalStrategies extends Serializable, Cloneable { +static Set LOADED = new HashSet<>(); + static List STRATEGY_CATEGORIES = Collections.unmodifiableList(Arrays.asList(TraversalStrategy.DecorationStrategy.class, TraversalStrategy.OptimizationStrategy.class, TraversalStrategy.ProviderOptimizationStrategy.class, TraversalStrategy.FinalizationStrategy.class, TraversalStrategy.VerificationStrategy.class)); /** @@ -244,20 +246,31 @@ public interface TraversalStrategies extends Serializable, Cloneable { public static TraversalStrategies getStrategies(final Class graphOrGraphComputerClass) { try { // be sure to load the class so that its static{} traversal strategy registration component is loaded. -// this is more important for GraphComputer classes as they are typically not instantiated prior to strategy usage like Graph classes. -final String graphComputerClassName = null != graphOrGraphComputerClass.getDeclaringClass() ? +// this is more important for GraphComputer classes as they are typically not instantiated prior to +// strategy usage like Graph classes. +if (!LOADED.contains(graphOrGraphComputerClass)) { +final String graphComputerClassName = null != graphOrGraphComputerClass.getDeclaringClass() ? graphOrGraphComputerClass.getCanonicalName().replace("." + graphOrGraphComputerClass.getSimpleName(), "$" + graphOrGraphComputerClass.getSimpleName()) : graphOrGraphComputerClass.getCanonicalName(); -Class.forName(graphComputerClassName); +Class.forName(graphComputerClassName); + +// keep track of stuff we already loaded once - stuff in this if/statement isn't cheap and this +// method gets called a lot, basically every time a new traversal gets spun up (that includes +// child traversals. +LOADED.add(graphOrGraphComputerClass); +} } catch (final ClassNotFoundException e) { throw new IllegalStateException(e.getMessage(), e); } -if (Graph.class.isAssignableFrom(graphOrGraphComputerClass)) { -final TraversalStrategies traversalStrategies = GRAPH_CACHE.get(graphOrGraphComputerClass); -return null == traversalStrategies ? GRAPH_CACHE.get(Graph.class) : traversalStrategies; + +if (GRAPH_CACHE.containsKey(graphOrGraphComputerClass)) { +return GRAPH_CACHE.get(graphOrGraphComputerClass); +} else if (Graph.class.isAssignableFrom(graphOrGraphComputerClass)) { +return GRAPH_CACHE.get(Graph.class); +} else if (GRAPH_COMPUTER_CACHE.containsKey(graphOrGraphComputerClass)) { +return
tinkerpop git commit: Shutdown server in test to try to ensure log flush for assertion
Repository: tinkerpop Updated Branches: refs/heads/tp33 1daf3f122 -> 4705c0416 Shutdown server in test to try to ensure log flush for assertion Tests that check logs for assertions tend to randomly fail despite a number of attempt to try to harden them. In this attempt I shutdown the server prior to log assertion in the hopes that it will flush everything through and prevent failures. CTR Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/4705c041 Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/4705c041 Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/4705c041 Branch: refs/heads/tp33 Commit: 4705c0416d522cce4d8c6ec498215f7f446fee4d Parents: 1daf3f1 Author: Stephen MalletteAuthored: Fri Apr 20 10:56:34 2018 -0400 Committer: Stephen Mallette Committed: Fri Apr 20 10:56:34 2018 -0400 -- .../tinkerpop/gremlin/server/GremlinServerIntegrateTest.java | 7 +-- 1 file changed, 5 insertions(+), 2 deletions(-) -- http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/4705c041/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerIntegrateTest.java -- diff --git a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerIntegrateTest.java b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerIntegrateTest.java index 6454ad5..a1689e9 100644 --- a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerIntegrateTest.java +++ b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerIntegrateTest.java @@ -327,9 +327,12 @@ public class GremlinServerIntegrateTest extends AbstractGremlinServerIntegration // there record Thread.sleep(3000); -assertThat(recordingAppender.logContainsAny(".*Checking channel - sending ping to client after idle period of .*$"), is(true)); - client.close(); + +// stop the server to be sure that logs flush +stopServer(); + +assertThat(recordingAppender.logContainsAny(".*Checking channel - sending ping to client after idle period of .*$"), is(true)); } @Test
[1/2] tinkerpop git commit: Shutdown server in test to try to ensure log flush for assertion
Repository: tinkerpop Updated Branches: refs/heads/master f4b4d867a -> 5df1ce77a Shutdown server in test to try to ensure log flush for assertion Tests that check logs for assertions tend to randomly fail despite a number of attempt to try to harden them. In this attempt I shutdown the server prior to log assertion in the hopes that it will flush everything through and prevent failures. CTR Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/4705c041 Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/4705c041 Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/4705c041 Branch: refs/heads/master Commit: 4705c0416d522cce4d8c6ec498215f7f446fee4d Parents: 1daf3f1 Author: Stephen MalletteAuthored: Fri Apr 20 10:56:34 2018 -0400 Committer: Stephen Mallette Committed: Fri Apr 20 10:56:34 2018 -0400 -- .../tinkerpop/gremlin/server/GremlinServerIntegrateTest.java | 7 +-- 1 file changed, 5 insertions(+), 2 deletions(-) -- http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/4705c041/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerIntegrateTest.java -- diff --git a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerIntegrateTest.java b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerIntegrateTest.java index 6454ad5..a1689e9 100644 --- a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerIntegrateTest.java +++ b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerIntegrateTest.java @@ -327,9 +327,12 @@ public class GremlinServerIntegrateTest extends AbstractGremlinServerIntegration // there record Thread.sleep(3000); -assertThat(recordingAppender.logContainsAny(".*Checking channel - sending ping to client after idle period of .*$"), is(true)); - client.close(); + +// stop the server to be sure that logs flush +stopServer(); + +assertThat(recordingAppender.logContainsAny(".*Checking channel - sending ping to client after idle period of .*$"), is(true)); } @Test
[2/2] tinkerpop git commit: Merge branch 'tp33'
Merge branch 'tp33' Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/5df1ce77 Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/5df1ce77 Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/5df1ce77 Branch: refs/heads/master Commit: 5df1ce77a4ae4b0af831081664e9e5d73ee9cc4f Parents: f4b4d86 4705c04 Author: Stephen MalletteAuthored: Fri Apr 20 10:58:26 2018 -0400 Committer: Stephen Mallette Committed: Fri Apr 20 10:58:26 2018 -0400 -- .../tinkerpop/gremlin/server/GremlinServerIntegrateTest.java | 7 +-- 1 file changed, 5 insertions(+), 2 deletions(-) -- http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/5df1ce77/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerIntegrateTest.java --
[2/2] tinkerpop git commit: Merge branch 'pr-845'
Merge branch 'pr-845' Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/f4b4d867 Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/f4b4d867 Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/f4b4d867 Branch: refs/heads/master Commit: f4b4d867add811c3527a0eebe7f138b6a16e2572 Parents: e2fce7b 70a3723 Author: Stephen MalletteAuthored: Fri Apr 20 10:08:35 2018 -0400 Committer: Stephen Mallette Committed: Fri Apr 20 10:08:35 2018 -0400 -- CHANGELOG.asciidoc | 4 ++-- docs/src/upgrade/release-3.4.x.asciidoc | 4 ++-- docs/static/images/avant-gremlin-simple.png | Bin 0 -> 57676 bytes docs/static/images/avant-gremlin.png| Bin 0 -> 117645 bytes 4 files changed, 4 insertions(+), 4 deletions(-) --
[1/2] tinkerpop git commit: Add name and logo for Gremlin 3.4.x
Repository: tinkerpop Updated Branches: refs/heads/master e2fce7bef -> f4b4d867a Add name and logo for Gremlin 3.4.x Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/70a3723f Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/70a3723f Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/70a3723f Branch: refs/heads/master Commit: 70a3723f5563ff68ff8c9332a4278eb9e8f726ae Parents: 9525626 Author: Joshua ShinavierAuthored: Thu Apr 19 19:38:58 2018 -0700 Committer: Joshua Shinavier Committed: Thu Apr 19 19:38:58 2018 -0700 -- CHANGELOG.asciidoc | 4 ++-- docs/src/upgrade/release-3.4.x.asciidoc | 4 ++-- docs/static/images/avant-gremlin-simple.png | Bin 0 -> 57676 bytes docs/static/images/avant-gremlin.png| Bin 0 -> 117645 bytes 4 files changed, 4 insertions(+), 4 deletions(-) -- http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/70a3723f/CHANGELOG.asciidoc -- diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc index 5a3f1aa..8420372 100644 --- a/CHANGELOG.asciidoc +++ b/CHANGELOG.asciidoc @@ -16,9 +16,9 @@ limitations under the License. = TinkerPop3 CHANGELOG -== TinkerPop 3.4.0 (NOT NAMED YET) +== TinkerPop 3.4.0 (Avant-Gremlin Construction #3 for Theremin and Flowers) -NEED AND IMAGE +image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/images/avant-gremlin.png[width=185] [[release-3-4-0]] === TinkerPop 3.4.0 (Release Date: NOT OFFICIALLY RELEASED YET) http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/70a3723f/docs/src/upgrade/release-3.4.x.asciidoc -- diff --git a/docs/src/upgrade/release-3.4.x.asciidoc b/docs/src/upgrade/release-3.4.x.asciidoc index 5a3da78..f673c47 100644 --- a/docs/src/upgrade/release-3.4.x.asciidoc +++ b/docs/src/upgrade/release-3.4.x.asciidoc @@ -17,9 +17,9 @@ limitations under the License. = TinkerPop 3.4.0 -NEED AN IMAGE +image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/images/avant-gremlin.png[width=225] -*NOT NAMED YET* +*Avant-Gremlin Construction #3 for Theremin and Flowers* == TinkerPop 3.4.0 http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/70a3723f/docs/static/images/avant-gremlin-simple.png -- diff --git a/docs/static/images/avant-gremlin-simple.png b/docs/static/images/avant-gremlin-simple.png new file mode 100644 index 000..0c3ebaf Binary files /dev/null and b/docs/static/images/avant-gremlin-simple.png differ http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/70a3723f/docs/static/images/avant-gremlin.png -- diff --git a/docs/static/images/avant-gremlin.png b/docs/static/images/avant-gremlin.png new file mode 100644 index 000..55a318a Binary files /dev/null and b/docs/static/images/avant-gremlin.png differ
tinkerpop git commit: TINKERPOP-1946 Removed old version of Credentials DSL
Repository: tinkerpop Updated Branches: refs/heads/TINKERPOP-1946 [created] 9458641c7 TINKERPOP-1946 Removed old version of Credentials DSL This was deprecated on 3.3.3 - it can be removed for 3.4.0 Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/9458641c Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/9458641c Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/9458641c Branch: refs/heads/TINKERPOP-1946 Commit: 9458641c77605a9518bf885eadb6716646ce4006 Parents: e2fce7b Author: Stephen MalletteAuthored: Fri Apr 20 10:02:54 2018 -0400 Committer: Stephen Mallette Committed: Fri Apr 20 10:02:54 2018 -0400 -- CHANGELOG.asciidoc | 1 + .../jsr223/dsl/credential/CredentialGraph.java | 123 --- .../CredentialGraphGremlinPlugin.java | 2 - .../dsl/credential/CredentialGraphTest.java | 122 -- 4 files changed, 1 insertion(+), 247 deletions(-) -- http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9458641c/CHANGELOG.asciidoc -- diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc index 5a3f1aa..d903000 100644 --- a/CHANGELOG.asciidoc +++ b/CHANGELOG.asciidoc @@ -30,6 +30,7 @@ This release also includes changes from < >. * `hadoop-gremlin` no longer generates a test artifact. * Fixed a bug in `ReducingBarrierStep`, that returned the provided seed value despite no elements being available. * Changed the order of `select()` scopes. The order is now: maps, side-effects, paths. +* Removed previously deprecated Credentials DSL infrastructure. * Moved `TraversalEngine` to `gremlin-test` as it has long been only used in testing infrastructure. * Removed previously deprecated `rebindings` options from the Java driver API. * Removed support for Giraph. http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9458641c/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/dsl/credential/CredentialGraph.java -- diff --git a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/dsl/credential/CredentialGraph.java b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/dsl/credential/CredentialGraph.java deleted file mode 100644 index 0ae8e00..000 --- a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/dsl/credential/CredentialGraph.java +++ /dev/null @@ -1,123 +0,0 @@ -/* - * 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.groovy.jsr223.dsl.credential; - -import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal; -import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; -import org.apache.tinkerpop.gremlin.structure.Graph; -import org.apache.tinkerpop.gremlin.structure.T; -import org.apache.tinkerpop.gremlin.structure.Vertex; -import org.mindrot.jbcrypt.BCrypt; - -import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.drop; - -/** - * A DSL for managing a "credentials graph" used by Gremlin Server for simple authentication functions. If the - * {@link Graph} is transactional, new transactions will be started for each method call. - * - * @author Stephen Mallette (http://stephen.genoprime.com) - * @deprecated As of release 3.3.3, replaced by {@link CredentialTraversalDsl}. - */ -@Deprecated -public class CredentialGraph { - -private final int BCRYPT_ROUNDS = 4; -private final Graph graph; -private final GraphTraversalSource g; -private final boolean supportsTransactions; - -public CredentialGraph(final Graph graph) { -this.graph = graph; -g = graph.traversal(); -supportsTransactions = graph.features().graph().supportsTransactions(); -} - -/** - * Finds a user by username and return {@code null} if one
[1/2] tinkerpop git commit: Refactored SimpleAuthenticator to use the revised Credentials DSL
Repository: tinkerpop Updated Branches: refs/heads/master f2a59544b -> e2fce7bef Refactored SimpleAuthenticator to use the revised Credentials DSL This should have been done on TINKERPOP-1903 but was missed CTR Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/1daf3f12 Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/1daf3f12 Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/1daf3f12 Branch: refs/heads/master Commit: 1daf3f12243a9a29ba3a00729a3fe4f2f76eccdd Parents: 38b85d2 Author: Stephen MalletteAuthored: Fri Apr 20 09:26:14 2018 -0400 Committer: Stephen Mallette Committed: Fri Apr 20 09:26:14 2018 -0400 -- .../server/auth/SimpleAuthenticator.java| 32 +--- 1 file changed, 15 insertions(+), 17 deletions(-) -- http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/1daf3f12/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/auth/SimpleAuthenticator.java -- diff --git a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/auth/SimpleAuthenticator.java b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/auth/SimpleAuthenticator.java index 8d90bf8..88e4e70 100644 --- a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/auth/SimpleAuthenticator.java +++ b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/auth/SimpleAuthenticator.java @@ -18,17 +18,17 @@ */ package org.apache.tinkerpop.gremlin.server.auth; -import org.apache.tinkerpop.gremlin.groovy.jsr223.dsl.credential.CredentialGraph; +import org.apache.tinkerpop.gremlin.groovy.jsr223.dsl.credential.CredentialTraversal; +import org.apache.tinkerpop.gremlin.groovy.jsr223.dsl.credential.CredentialTraversalDsl; +import org.apache.tinkerpop.gremlin.groovy.jsr223.dsl.credential.CredentialTraversalSource; import org.apache.tinkerpop.gremlin.structure.Graph; import org.apache.tinkerpop.gremlin.structure.Vertex; -import org.apache.tinkerpop.gremlin.structure.io.IoCore; import org.apache.tinkerpop.gremlin.structure.util.GraphFactory; import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerGraph; import org.mindrot.jbcrypt.BCrypt; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.io.IOException; import java.net.InetAddress; import java.nio.charset.StandardCharsets; import java.util.Arrays; @@ -40,14 +40,14 @@ import static org.apache.tinkerpop.gremlin.groovy.jsr223.dsl.credential.Credenti /** * A simple implementation of an {@link Authenticator} that uses a {@link Graph} instance as a credential store. - * Management of the credential store can be handled through the {@link CredentialGraph} DSL. + * Management of the credential store can be handled through the {@link CredentialTraversalDsl} DSL. * * @author Stephen Mallette (http://stephen.genoprime.com) */ public class SimpleAuthenticator implements Authenticator { private static final Logger logger = LoggerFactory.getLogger(SimpleAuthenticator.class); private static final byte NUL = 0; -private CredentialGraph credentialStore; +private CredentialTraversalSource credentialStore; /** * The location of the configuration file that contains the credentials database. @@ -82,7 +82,7 @@ public class SimpleAuthenticator implements Authenticator { tinkerGraph.createIndex(PROPERTY_USERNAME, Vertex.class); } -credentialStore = CredentialGraph.credentials(graph); +credentialStore = graph.traversal(CredentialTraversalSource.class); logger.info("CredentialGraph initialized at {}", credentialStore); } @@ -98,17 +98,15 @@ public class SimpleAuthenticator implements Authenticator { final String username = credentials.get(PROPERTY_USERNAME); final String password = credentials.get(PROPERTY_PASSWORD); -try { -user = credentialStore.findUser(username); -} catch (IllegalStateException ex) { -// typically thrown when there are multiple users with the same name in the credential store -logger.warn(ex.getMessage()); -throw new AuthenticationException("Username and/or password are incorrect", ex); -} catch (Exception ex) { -throw new AuthenticationException("Username and/or password are incorrect", ex); -} +final CredentialTraversal t = credentialStore.users(username); +if (!t.hasNext()) +throw new AuthenticationException("Username and/or password are incorrect"); -if (null == user) throw new AuthenticationException("Username and/or password are incorrect"); +user
tinkerpop git commit: Refactored SimpleAuthenticator to use the revised Credentials DSL
Repository: tinkerpop Updated Branches: refs/heads/tp33 38b85d2f0 -> 1daf3f122 Refactored SimpleAuthenticator to use the revised Credentials DSL This should have been done on TINKERPOP-1903 but was missed CTR Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/1daf3f12 Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/1daf3f12 Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/1daf3f12 Branch: refs/heads/tp33 Commit: 1daf3f12243a9a29ba3a00729a3fe4f2f76eccdd Parents: 38b85d2 Author: Stephen MalletteAuthored: Fri Apr 20 09:26:14 2018 -0400 Committer: Stephen Mallette Committed: Fri Apr 20 09:26:14 2018 -0400 -- .../server/auth/SimpleAuthenticator.java| 32 +--- 1 file changed, 15 insertions(+), 17 deletions(-) -- http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/1daf3f12/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/auth/SimpleAuthenticator.java -- diff --git a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/auth/SimpleAuthenticator.java b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/auth/SimpleAuthenticator.java index 8d90bf8..88e4e70 100644 --- a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/auth/SimpleAuthenticator.java +++ b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/auth/SimpleAuthenticator.java @@ -18,17 +18,17 @@ */ package org.apache.tinkerpop.gremlin.server.auth; -import org.apache.tinkerpop.gremlin.groovy.jsr223.dsl.credential.CredentialGraph; +import org.apache.tinkerpop.gremlin.groovy.jsr223.dsl.credential.CredentialTraversal; +import org.apache.tinkerpop.gremlin.groovy.jsr223.dsl.credential.CredentialTraversalDsl; +import org.apache.tinkerpop.gremlin.groovy.jsr223.dsl.credential.CredentialTraversalSource; import org.apache.tinkerpop.gremlin.structure.Graph; import org.apache.tinkerpop.gremlin.structure.Vertex; -import org.apache.tinkerpop.gremlin.structure.io.IoCore; import org.apache.tinkerpop.gremlin.structure.util.GraphFactory; import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerGraph; import org.mindrot.jbcrypt.BCrypt; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.io.IOException; import java.net.InetAddress; import java.nio.charset.StandardCharsets; import java.util.Arrays; @@ -40,14 +40,14 @@ import static org.apache.tinkerpop.gremlin.groovy.jsr223.dsl.credential.Credenti /** * A simple implementation of an {@link Authenticator} that uses a {@link Graph} instance as a credential store. - * Management of the credential store can be handled through the {@link CredentialGraph} DSL. + * Management of the credential store can be handled through the {@link CredentialTraversalDsl} DSL. * * @author Stephen Mallette (http://stephen.genoprime.com) */ public class SimpleAuthenticator implements Authenticator { private static final Logger logger = LoggerFactory.getLogger(SimpleAuthenticator.class); private static final byte NUL = 0; -private CredentialGraph credentialStore; +private CredentialTraversalSource credentialStore; /** * The location of the configuration file that contains the credentials database. @@ -82,7 +82,7 @@ public class SimpleAuthenticator implements Authenticator { tinkerGraph.createIndex(PROPERTY_USERNAME, Vertex.class); } -credentialStore = CredentialGraph.credentials(graph); +credentialStore = graph.traversal(CredentialTraversalSource.class); logger.info("CredentialGraph initialized at {}", credentialStore); } @@ -98,17 +98,15 @@ public class SimpleAuthenticator implements Authenticator { final String username = credentials.get(PROPERTY_USERNAME); final String password = credentials.get(PROPERTY_PASSWORD); -try { -user = credentialStore.findUser(username); -} catch (IllegalStateException ex) { -// typically thrown when there are multiple users with the same name in the credential store -logger.warn(ex.getMessage()); -throw new AuthenticationException("Username and/or password are incorrect", ex); -} catch (Exception ex) { -throw new AuthenticationException("Username and/or password are incorrect", ex); -} +final CredentialTraversal t = credentialStore.users(username); +if (!t.hasNext()) +throw new AuthenticationException("Username and/or password are incorrect"); -if (null == user) throw new AuthenticationException("Username and/or password are incorrect"); +user =
[2/2] tinkerpop git commit: Merge branch 'tp33'
Merge branch 'tp33' Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/e2fce7be Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/e2fce7be Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/e2fce7be Branch: refs/heads/master Commit: e2fce7bef715a1d6c18c788e8046c186254165ce Parents: f2a5954 1daf3f1 Author: Stephen MalletteAuthored: Fri Apr 20 09:27:46 2018 -0400 Committer: Stephen Mallette Committed: Fri Apr 20 09:27:46 2018 -0400 -- .../server/auth/SimpleAuthenticator.java| 32 +--- 1 file changed, 15 insertions(+), 17 deletions(-) --
tinkerpop git commit: JavaScript GLV: Document lack of GraphSON3 support
Repository: tinkerpop Updated Branches: refs/heads/js-doc-graphson3 [created] 7d0d83705 JavaScript GLV: Document lack of GraphSON3 support Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/7d0d8370 Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/7d0d8370 Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/7d0d8370 Branch: refs/heads/js-doc-graphson3 Commit: 7d0d83705d515896dae604137f2dec73d786034e Parents: 38b85d2 Author: Jorge Bay GondraAuthored: Fri Apr 20 14:15:02 2018 +0200 Committer: Jorge Bay Gondra Committed: Fri Apr 20 14:15:02 2018 +0200 -- docs/src/reference/gremlin-variants.asciidoc | 13 + 1 file changed, 13 insertions(+) -- http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/7d0d8370/docs/src/reference/gremlin-variants.asciidoc -- diff --git a/docs/src/reference/gremlin-variants.asciidoc b/docs/src/reference/gremlin-variants.asciidoc index f731702..2ba9966 100644 --- a/docs/src/reference/gremlin-variants.asciidoc +++ b/docs/src/reference/gremlin-variants.asciidoc @@ -499,6 +499,19 @@ Very similar to Gremlin-Python and Gremlin-Java, there are various ways to submi * `Traversal.next()` * `Traversal.toList()` +=== GraphSON3 Support + +GraphSON3, which is the default serialization format in Gremlin Server 3.3+, is not yet supported in Gremlin-JavaScript. +We are planning to support it in the upcoming versions. In the meantime, if you want to use Gremlin-JavaScript against +the Gremlin Server 3.3 you must include the GraphSON2 serializer. + +In the server yaml configuration file, add the following line under `serializers`: + +[source] + + - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV2d0, config: { ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV2d0] }} + + === Static Enums and Methods Gremlin has various tokens (e.g. `t`, `P`, `order`, `direction`, etc.) that are represented in Gremlin-JavaScript as
tinkerpop git commit: Fix JavaScript Gremlin documentation
Repository: tinkerpop Updated Branches: refs/heads/js-doc-fixes [created] b6aa8302e Fix JavaScript Gremlin documentation Several fixes to the JavaScript GLV documentation: - Use 'gremlin' package name - Include information regarding Promises - Reference DriverRemoteConnection not exported - Fix method names Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/b6aa8302 Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/b6aa8302 Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/b6aa8302 Branch: refs/heads/js-doc-fixes Commit: b6aa8302ed10277f8c5b3892b7b6ddb9c56c452c Parents: 2591302 Author: Jorge Bay GondraAuthored: Fri Apr 20 14:04:10 2018 +0200 Committer: Jorge Bay Gondra Committed: Fri Apr 20 14:04:10 2018 +0200 -- docs/src/reference/gremlin-variants.asciidoc | 45 +++ 1 file changed, 37 insertions(+), 8 deletions(-) -- http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/b6aa8302/docs/src/reference/gremlin-variants.asciidoc -- diff --git a/docs/src/reference/gremlin-variants.asciidoc b/docs/src/reference/gremlin-variants.asciidoc index d929b3c..1632e59 100644 --- a/docs/src/reference/gremlin-variants.asciidoc +++ b/docs/src/reference/gremlin-variants.asciidoc @@ -458,17 +458,32 @@ their Java counterparts which makes it possible to use lambdas with Gremlin.Net == Gremlin-JavaScript image:gremlin-js.png[width=130,float=right] Apache TinkerPop's Gremlin-JavaScript implements Gremlin within the -JavaScript language. It targets Node.js runtime and can be used on different operating systems on any Node.js 4 or +JavaScript language. It targets Node.js runtime and can be used on different operating systems on any Node.js 6 or above. Since the JavaScript naming conventions are very similar to that of Java, it should be very easy to switch between Gremlin-Java and Gremlin-JavaScript. [source,bash] -npm install gremlin-javascript +npm install gremlin The Gremlin-JavaScript provides `GraphTraversalSource`, `GraphTraversal`, and `__` which mirror the respective classes in Gremlin-Java. The `GraphTraversalSource` requires a RemoteConnection implementation in order to communicate with < >. +[source,javascript] + +const gremlin = require('gremlin'); +const Graph = gremlin.structure.Graph; + + +The `DriverRemoteConnection` class is not exported due to a bug in the implementation as detailed in +link:https://issues.apache.org/jira/browse/TINKERPOP-1944[the ticket TINKERPOP-1944], that is going to be fixed in +the upcoming version of the GLV. In the meantime, you can import the `DriverRemoteConnection` class by using: + +[source,javascript] + +const DriverRemoteConnection = require('./node_modules/gremlin/lib/driver/driver-remote-connection'); + + A traversal source can be spawned with `RemoteStrategy` from an empty `Graph`. [source,javascript] @@ -489,27 +504,41 @@ IMPORTANT: Gremlin-JavaScriptâs `Traversal` base class supports the standard G === RemoteConnection Submission -Very similar to Gremlin-Python and Gremlin-Java, there are various ways to submit a traversal to a +In a similar way as in other GLVs, there are various ways to submit a traversal to a `RemoteConnection` using terminal/action methods off of `Traversal`. * `Traversal.next()` * `Traversal.toList()` +Given that I/O operations in Node.js are asynchronous by default, this terminal methods return a Promise. For example: + +[source,javascript] + +g.V().hasLabel('person').values('name').toList() + .then(names => console.log(names)); + + +You can `await` the promises if you are using `async` functions. + +[source,javascript] + +const names = await g.V().hasLabel('person').values('name').toList(); +console.log(names); + + === Static Enums and Methods Gremlin has various tokens (e.g. `t`, `P`, `order`, `direction`, etc.) that are represented in Gremlin-JavaScript as objects. -These can be used analogously to how they are used in Gremlin-Java. - [source,javascript] -g.V().hasLabel("person").has("age",P.gt(30)).Order().By("age", order.decr).toList() +g.V().hasLabel('person').has('age', P.gt(30)).order().by('age', order.decr).toList() These objects must be required manually from the `process` namespace: [source,javascript] -const gremlin = require('gremlin-javascript'); +const gremlin = require('gremlin'); const P = gremlin.process.P; @@ -517,7 +546,7 @@ Finally, using static `__` anonymous traversals like `__.out()` can be expressed [source,javascript] -const gremlin = require('gremlin-javascript'); +const gremlin =
svn commit: r1829646 - in /tinkerpop/site: downloads.html gremlin.html index.html providers.html
Author: spmallette Date: Fri Apr 20 11:08:45 2018 New Revision: 1829646 URL: http://svn.apache.org/viewvc?rev=1829646=rev Log: Deploy TinkerPop homepage Modified: tinkerpop/site/downloads.html tinkerpop/site/gremlin.html tinkerpop/site/index.html tinkerpop/site/providers.html Modified: tinkerpop/site/downloads.html URL: http://svn.apache.org/viewvc/tinkerpop/site/downloads.html?rev=1829646=1829645=1829646=diff == --- tinkerpop/site/downloads.html (original) +++ tinkerpop/site/downloads.html Fri Apr 20 11:08:45 2018 @@ -629,7 +629,7 @@ limitations under the License. Note that upgrade documentation was only introduced at 3.1.1-incubating which is why there are no links "upgrade" links in versions prior to that one. Verifying Downloads -All downloads have associated PGP and MD5 signatures to help verify a distribution provided by a mirror. To verify a distribution via PGP or GPG first download the +All downloads have associated PGP and SHA1 signatures to help verify a distribution provided by a mirror. To verify a distribution via PGP or GPG first download the https://www.apache.org/dist/tinkerpop/KEYS;>KEYS file (it is important to use the linked file which is from the main distribution directory and not a mirror. Next download the appropriate "asc" signature file for the relevant distribution (again, this file should come from the https://www.apache.org/dist/tinkerpop/;>main distribution directory - note that older releases will have such files in the https://archive.apache.org/dist/tinkerpop/;>archives or if released under Apache @@ -655,7 +655,7 @@ limitations under the License. gpg --verify apache-gremlin-console-x.y.z-bin.zip.asc apache-gremlin-console-x.y.z-bin.zip -Alternatively, consider verifying the MD5 signature on the files. An MD5 signature consists of 32 hex characters, and a SHA1 signature consists of 40 hex characters. +Alternatively, consider verifying the SHA1 signature on the files. An SHA1 signature consists of 40 hex characters. Ensure that the generated signature string matches the signature string published in the files above. Modified: tinkerpop/site/gremlin.html URL: http://svn.apache.org/viewvc/tinkerpop/site/gremlin.html?rev=1829646=1829645=1829646=diff == --- tinkerpop/site/gremlin.html (original) +++ tinkerpop/site/gremlin.html Fri Apr 20 11:08:45 2018 @@ -478,7 +478,7 @@ GraphTraversalSource g; g = graph.traversal(); // local OLTP g = graph.traversal().withRemote(DriverRemoteConnection.using("server.yaml")) // remote OLTP g = graph.traversal().withComputer(SparkGraphComputer.class); // distributed OLAP/code> - + @@ -529,6 +529,8 @@ g = graph.traversal().withComputer(Spark }); + + Modified: tinkerpop/site/index.html URL: http://svn.apache.org/viewvc/tinkerpop/site/index.html?rev=1829646=1829645=1829646=diff == --- tinkerpop/site/index.html (original) +++ tinkerpop/site/index.html Fri Apr 20 11:08:45 2018 @@ -385,6 +385,7 @@ limitations under the License. http://syncleus.com/Ferma/;>Ferma (java/dsl) - An ORM / OGM for Apache TinkerPop. https://github.com/davebshow/goblin;>Goblin (python/dsl) - Goblin OGM for the TinkerPop 3 Gremlin Server. http://tinkerpop.apache.org/docs/current/reference/#gremlin-DotNet;>Gremlin.Net (.NET - C#/variant) - Gremlin hosted in C# for use with any .NET-based VM. +http://tinkerpop.apache.org/docs/current/reference/#gremlin-javascript;>gremlin-javascript (js) - Gremlin hosted in JavaScript for use with Node.js. https://github.com/gremlin-orm/gremlin-orm;>gremlin-orm (javascript) Gremlin ORM for Node.js. http://tinkerpop.apache.org/docs/current/reference/#gremlin-python;>gremlin-python (python/variant) - Gremlin hosted in Python for use with any Python-based VM. https://github.com/emehrkay/gremlinpy;>gremlin-py (python/variant) - Write pure Python Gremlin that can be sent to Gremlin Server. @@ -403,7 +404,6 @@ limitations under the License. https://github.com/davebshow/gremlinclient;>gremlinclient (python) - An asynchronous Python 2/3 client for Gremlin Server that allows for flexible coroutine syntax - Trollius, Tornado, Asyncio. https://github.com/marcelocf/gremlin_client;>gremlin_client (ruby) - A Gremlin Server driver for Ruby. http://tinkerpop.apache.org/docs/current/reference/#connecting-via-java;>gremlin-driver (java) - A Gremlin Server driver for Java. -
tinkerpop git commit: TINKERPOP-1949 Fixed some formatting problems on the web site CTR
Repository: tinkerpop Updated Branches: refs/heads/master 12d2aef84 -> f2a59544b TINKERPOP-1949 Fixed some formatting problems on the web site CTR Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/f2a59544 Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/f2a59544 Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/f2a59544 Branch: refs/heads/master Commit: f2a59544b3a38e447a84aee81cf54db4edaf7daf Parents: 12d2aef Author: Stephen MalletteAuthored: Fri Apr 20 07:07:14 2018 -0400 Committer: Stephen Mallette Committed: Fri Apr 20 07:07:14 2018 -0400 -- docs/site/home/gremlin.html | 4 +++- docs/site/home/providers.html | 2 ++ 2 files changed, 5 insertions(+), 1 deletion(-) -- http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f2a59544/docs/site/home/gremlin.html -- diff --git a/docs/site/home/gremlin.html b/docs/site/home/gremlin.html index a9e224b..3b1a86b 100644 --- a/docs/site/home/gremlin.html +++ b/docs/site/home/gremlin.html @@ -340,7 +340,7 @@ GraphTraversalSource g; g = graph.traversal(); // local OLTP g = graph.traversal().withRemote(DriverRemoteConnection.using("server.yaml")) // remote OLTP g = graph.traversal().withComputer(SparkGraphComputer.class); // distributed OLAP/code> - + @@ -391,5 +391,7 @@ g = graph.traversal().withComputer(SparkGraphComputer.class); / }); + + http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f2a59544/docs/site/home/providers.html -- diff --git a/docs/site/home/providers.html b/docs/site/home/providers.html index 7a2396d..6738831 100644 --- a/docs/site/home/providers.html +++ b/docs/site/home/providers.html @@ -373,4 +373,6 @@ WHERE(Created.by(Friends.of("gremlin"))) }); + +
tinkerpop git commit: Moved gremlin-javascript to "languages" in the index and pointed it at our docs CTR
Repository: tinkerpop Updated Branches: refs/heads/master 952562609 -> 12d2aef84 Moved gremlin-javascript to "languages" in the index and pointed it at our docs CTR Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/12d2aef8 Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/12d2aef8 Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/12d2aef8 Branch: refs/heads/master Commit: 12d2aef8425b6d322637d85177e878c92bf1242e Parents: 9525626 Author: Stephen MalletteAuthored: Fri Apr 20 06:47:30 2018 -0400 Committer: Stephen Mallette Committed: Fri Apr 20 06:47:30 2018 -0400 -- docs/site/home/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) -- http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/12d2aef8/docs/site/home/index.html -- diff --git a/docs/site/home/index.html b/docs/site/home/index.html index c28a012..9c74b5d 100644 --- a/docs/site/home/index.html +++ b/docs/site/home/index.html @@ -247,6 +247,7 @@ limitations under the License. http://syncleus.com/Ferma/;>Ferma (java/dsl) - An ORM / OGM for Apache TinkerPop. https://github.com/davebshow/goblin;>Goblin (python/dsl) - Goblin OGM for the TinkerPop 3 Gremlin Server. http://tinkerpop.apache.org/docs/current/reference/#gremlin-DotNet;>Gremlin.Net (.NET - C#/variant) - Gremlin hosted in C# for use with any .NET-based VM. +http://tinkerpop.apache.org/docs/current/reference/#gremlin-javascript;>gremlin-javascript (js) - Gremlin hosted in JavaScript for use with Node.js. https://github.com/gremlin-orm/gremlin-orm;>gremlin-orm (javascript) Gremlin ORM for Node.js. http://tinkerpop.apache.org/docs/current/reference/#gremlin-python;>gremlin-python (python/variant) - Gremlin hosted in Python for use with any Python-based VM. https://github.com/emehrkay/gremlinpy;>gremlin-py (python/variant) - Write pure Python Gremlin that can be sent to Gremlin Server. @@ -265,7 +266,6 @@ limitations under the License. https://github.com/davebshow/gremlinclient;>gremlinclient (python) - An asynchronous Python 2/3 client for Gremlin Server that allows for flexible coroutine syntax - Trollius, Tornado, Asyncio. https://github.com/marcelocf/gremlin_client;>gremlin_client (ruby) - A Gremlin Server driver for Ruby. http://tinkerpop.apache.org/docs/current/reference/#connecting-via-java;>gremlin-driver (java) - A Gremlin Server driver for Java. -https://github.com/jbmusso/gremlin-javascript;>gremlin-javascript (js) - A Gremlin Server driver for JavaScript. https://github.com/qasaur/gremgo;>gremgo (go) - A Gremlin Server driver for Go. http://tinkerpop.apache.org/docs/current/reference/#gremlin-DotNet;>Gremlin.Net (.NET - C#) - Gremlin Server driver for .NET. https://github.com/PommeVerte/gremlin-php;>gremlin-php (php) - A Gremlin Server driver for PHP.