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 2017/10/16 15:20:18 UTC

[05/47] tinkerpop git commit: Truncate error message for "method code too large" exceptions CTR

Truncate error message for "method code too large" exceptions CTR


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

Branch: refs/heads/TINKERPOP-1784
Commit: b3e301e66ae7410aac6e7c35186ab8d909166ca0
Parents: 9f501cd
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Wed Oct 4 08:27:31 2017 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Wed Oct 4 08:27:31 2017 -0400

----------------------------------------------------------------------
 CHANGELOG.asciidoc                                    |  1 +
 .../gremlin/server/op/AbstractEvalOpProcessor.java    | 14 +++++++++++++-
 2 files changed, 14 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/b3e301e6/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index 9f98c08..5ea3034 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -23,6 +23,7 @@ image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima
 [[release-3-2-7]]
 === TinkerPop 3.2.7 (Release Date: NOT OFFICIALLY RELEASED YET)
 
+* Truncate the script in error logs and error return messages for "Method code too large" errors in Gremlin Server.
 * `ReferenceVertex` was missing its `label()` string. `ReferenceElement` now supports all label handling.
 * Fixed a bug where bytecode containing lambdas would randomly select a traversal source from bindings.
 * Deprecated `GremlinScriptEngine.eval()` methods and replaced them with new overloads that include the specific `TraversalSource` to bind to.

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/b3e301e6/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/AbstractEvalOpProcessor.java
----------------------------------------------------------------------
diff --git a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/AbstractEvalOpProcessor.java b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/AbstractEvalOpProcessor.java
index 46b3c8d..5c43b4d 100644
--- a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/AbstractEvalOpProcessor.java
+++ b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/AbstractEvalOpProcessor.java
@@ -312,7 +312,7 @@ public abstract class AbstractEvalOpProcessor extends AbstractOpProcessor {
                     // up being favorable for this problem
                     if (t instanceof MultipleCompilationErrorsException && t.getMessage().contains("Method code too large!") &&
                             ((MultipleCompilationErrorsException) t).getErrorCollector().getErrorCount() == 1) {
-                        final String errorMessage = String.format("The Gremlin statement that was submitted exceed the maximum compilation size allowed by the JVM, please split it into multiple smaller statements - %s", msg);
+                        final String errorMessage = String.format("The Gremlin statement that was submitted exceed the maximum compilation size allowed by the JVM, please split it into multiple smaller statements - %s", trimMessage(msg));
                         logger.warn(errorMessage);
                         ctx.writeAndFlush(ResponseMessage.build(msg).code(ResponseStatusCode.SERVER_ERROR_SCRIPT_EVALUATION)
                                 .statusMessage(errorMessage)
@@ -330,6 +330,18 @@ public abstract class AbstractEvalOpProcessor extends AbstractOpProcessor {
         });
     }
 
+    /**
+     * Used to decrease the size of a Gremlin script that triggered a "method code too large" exception so that it
+     * doesn't log a massive text string nor return a large error message.
+     */
+    private RequestMessage trimMessage(final RequestMessage msg) {
+        final RequestMessage trimmedMsg = RequestMessage.from(msg).create();
+        if (trimmedMsg.getArgs().containsKey(Tokens.ARGS_GREMLIN))
+            trimmedMsg.getArgs().put(Tokens.ARGS_GREMLIN, trimmedMsg.getArgs().get(Tokens.ARGS_GREMLIN).toString().substring(0, 1021) + "...");
+
+        return trimmedMsg;
+    }
+
     @FunctionalInterface
     public interface BindingSupplier {
         public Bindings get() throws OpProcessorException;