私はグラフデータベースTitanを使用するプロジェクトに取り組んでいます。クエリは、Groovyスクリプトの形式でGremlinを介してPythonから送信されます。Titan / Gremlinログにアクセスできますが、ログは構文(およびその他の)エラーに関する情報をほとんど提供しません。スクリプトに問題がある場合、ほとんどの場合、構文エラーが含まれているという通知が表示されます。例(わざと閉じ中括弧を付けなかった):
graph.traversal().V(4096).hasLabel('slot_type').has('name', 'slot_DefTerm'
メッセージが表示されます:
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'
間違いの行/列に関する情報(およびエラーの説明)がない場合、特に大きなスクリプトや高度なエラーのデバッグは非常に遅く、苦痛になります。
Groovyインタープリターからの構文エラーメッセージのログなど、gremlinログにもっと有益なものが欲しいです。この方法でロギングをより有益なものにするためにTitanを構成するにはどうすればよいですか?
古いバージョンのGremlinServerをTitanで使用しているかどうかはわかりませんが、TinkerPop 3.2.3以降、出力とサーバーログにかなり堅牢なエラーが返されます。
$ 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"}
サーバーの出力もかなり詳細であることに注意してください。
[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)
この問題は、Titan 1.0に同梱されていた以前のバージョンのTinkerPopで問題になっている可能性があり、長い間改善されてきたと思います。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加