2016-11-05 92 views
1

我正在使用圖形數據庫Titan的項目。查詢以Groovy腳本的形式通過Gremlin發送。我可以訪問Titan/Gremlin日誌,但是,日誌提供的語法(和其他)錯誤信息很少。如果腳本有問題,大多數情況下我只會收到一條包含語法錯誤的通知。在示例(I左右大括號缺席故意):在Titan中記錄Groovy腳本中的語法錯誤

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' 

約一個錯誤的行/列信息缺失(和誤差的說明)會導致非常緩慢且痛苦的調試,特別是對於大腳本和複雜的錯誤。

我希望在gremlin日誌中有更多的信息,例如從Groovy解釋器記錄語法錯誤消息。我如何配置泰坦以這種方式使記錄更具信息性?

回答

1

我不知道,如果你僅僅使用小鬼服務器與泰坦的舊版本,但作爲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) 

我懷疑這個問題可能已經在被運與泰坦1.0這一點,早已被在提高早期版本TinkerPop有關的問題。

+0

謝謝!然後我會用泰坦更新我的碼頭集裝箱。 –