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 2018/04/20 23:29:35 UTC

[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 Mallette <sp...@genoprime.com>
Authored: Thu Apr 12 10:25:20 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
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<Bytecode> {
-        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<List<Object>> instructions = deserializationContext.readValue(jsonParser, listListJavaType);
-                    for (final List<Object> 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<List<Object>> instructions = deserializationContext.readValue(jsonParser, listListJavaType);
-                    for (final List<Object> 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<Object> 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/3] tinkerpop git commit: Merge branch 'tp32' into tp33

Posted by sp...@apache.org.
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/master
Commit: 81add608549846e5f45e4e1a504e5e3cea6e03f9
Parents: 7e6e985 682f298
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Fri Apr 20 19:29:17 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Fri Apr 20 19:29:17 2018 -0400

----------------------------------------------------------------------

----------------------------------------------------------------------



[3/3] tinkerpop git commit: Merge branch 'tp33'

Posted by sp...@apache.org.
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 Mallette <sp...@genoprime.com>
Authored: Fri Apr 20 19:29:27 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Fri Apr 20 19:29:27 2018 -0400

----------------------------------------------------------------------

----------------------------------------------------------------------