2016-11-05 28 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

谢谢!然后我会用泰坦更新我的码头集装箱。 –