2016-11-05 1 views
1

Ich arbeite an einem Projekt, das Graph Datenbank Titan verwendet. Die Abfragen werden von Python über Gremlin in Form von Groovy-Skripten gesendet. Ich habe Zugriff auf Titan/Gremlin-Protokolle, jedoch bieten Protokolle nur sehr wenig Informationen über Syntaxfehler (und andere). Wenn etwas mit einem Skript nicht stimmt, bekomme ich meistens nur eine Benachrichtigung, dass es einen Syntaxfehler enthält. In Beispiel (I links absichtlich Klammer fehlt Schließen):Logging Syntaxfehler in Groovy-Skripten in Titan

graph.traversal().V(4096).hasLabel('slot_type').has('name', 'slot_DefTerm' 

ich eine Nachricht bekommen nur:

WARN org.apache.tinkerpop.gremlin.server.handler.HttpGremlinEndpointHandler - Invalid request - responding with 500 Internal Server Error and Error encountered evaluating script: 

graph.traversal().V(4096).hasLabel('slot_type').has('name', 'slot_DefTerm' 

Fehlen von Informationen über eine Zeile/Spalte einen Fehler (und eine Beschreibung eines Fehlers) führt zu einer sehr langsamen und schmerzhaften Fehlersuche, insbesondere bei großen Skripten und hochentwickelten Fehlern.

Ich hätte gerne etwas informativer in Gremlin log, z. Protokollierung von Syntaxfehlermeldungen vom Groovy-Interpreter. Wie kann ich Titan so konfigurieren, dass das Logging auf diese Weise informativer wird?

Antwort

1

ich bin nicht sicher, wenn Sie nur eine ältere Version von Gremlin Server mit Titan verwendet wird, sondern als von TinkerPop 3.2.3 Sie recht robust Fehler wieder in der Ausgabe zu erhalten sowie in den Server-Logs:

$ curl "http://localhost:8182?gremlin=100/0" 
{"message":"Division by zero","Exception-Class":"java.lang.ArithmeticException"} 
$ curl "http://localhost:8182?gremlin=x=100\nx/0" 
{"message":"startup failed:\nScript4.groovy: 1: unexpected char: '\\' @ line 1, column 6.\n x=100\\nx/0\n  ^\n\n1 error\n","Exception-Class":"org.codehaus.groovy.control.MultipleCompilationErrorsException"} 

Beachten Sie, dass die Server-Ausgabe auch recht detailliert ist:

[WARN] HttpGremlinEndpointHandler - Invalid request - responding with 500 Internal Server Error and startup failed: 
Script4.groovy: 1: unexpected char: '\' @ line 1, column 6. 
    x=100\nx/0 
     ^

1 error 

org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed: 
Script4.groovy: 1: unexpected char: '\' @ line 1, column 6. 
    x=100\nx/0 
     ^

1 error 

    at org.codehaus.groovy.control.ErrorCollector.failIfErrors(ErrorCollector.java:310) 
    at org.codehaus.groovy.control.ErrorCollector.addFatalError(ErrorCollector.java:150) 
    at org.codehaus.groovy.control.ErrorCollector.addError(ErrorCollector.java:120) 
    at org.codehaus.groovy.control.ErrorCollector.addError(ErrorCollector.java:132) 
    at org.codehaus.groovy.control.SourceUnit.addError(SourceUnit.java:360) 
    at org.codehaus.groovy.antlr.AntlrParserPlugin.transformCSTIntoAST(AntlrParserPlugin.java:140) 
    at org.codehaus.groovy.antlr.AntlrParserPlugin.parseCST(AntlrParserPlugin.java:111) 
    at org.codehaus.groovy.control.SourceUnit.parse(SourceUnit.java:237) 
    at org.codehaus.groovy.control.CompilationUnit$1.call(CompilationUnit.java:167) 
    at org.codehaus.groovy.control.CompilationUnit.applyToSourceUnits(CompilationUnit.java:931) 
    at org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:593) 
    at org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:569) 
    at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:546) 
    at groovy.lang.GroovyClassLoader.doParseClass(GroovyClassLoader.java:298) 
    at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:268) 
    at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:254) 
    at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:211) 
    at org.apache.tinkerpop.gremlin.groovy.jsr223.GremlinGroovyScriptEngine.getScriptClass(GremlinGroovyScriptEngine.java:527) 
    at org.apache.tinkerpop.gremlin.groovy.jsr223.GremlinGroovyScriptEngine.eval(GremlinGroovyScriptEngine.java:446) 
    at javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:233) 
    at org.apache.tinkerpop.gremlin.groovy.engine.ScriptEngines.eval(ScriptEngines.java:119) 
    at org.apache.tinkerpop.gremlin.groovy.engine.GremlinExecutor.lambda$eval$2(GremlinExecutor.java:287) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 

ich vermute, das Problem ein Problem in früheren Versionen von TinkerPop gewesen sein, die mit Titan geliefert wurden 1,0 und längst auf verbessert.

+0

Danke! Ich werde meine Docker Container dann mit Titan aktualisieren. –