JanusGraph 中的遍历序列化错误

Traversal Serialization error in JanusGraph

我已经按照 the GitHub docs 中的描述设置了一个由 DynamoDB 支持的 JanusGraph 实例,在 Java 中创建了一个简单的 API 来测试 CRUD 操作,我得到了创建和读取上班。当我尝试删除数据时出现问题。添加时,我调用:

Vertex v = this.g.addV("student").property("name", student.getName()).next()

和return

Long id = (Long) v.id()
return Long.toString(id)

删除时,我调用:

this.g.V(Long.valueOf(id)).drop().iterate()

并从 Gremlin 服务器得到以下错误:

    2631184 [gremlin-server-worker-1] ERROR 
    org.apache.tinkerpop.gremlin.server.op.traversal.TraversalOpProcessor  
    - Could not deserialize the Traversal instance
    2631186 [gremlin-server-worker-1] WARN  
    org.apache.tinkerpop.gremlin.server.handler.OpExecutorHandler  - Could 
    not deserialize the Traversal instance
org.apache.tinkerpop.gremlin.server.op.OpProcessorException: Could not deserialize the Traversal instance
    at org.apache.tinkerpop.gremlin.server.op.traversal.TraversalOpProcessor.iterateBytecodeTraversal(TraversalOpProcessor.java:369)
    at org.apache.tinkerpop.gremlin.server.handler.OpExecutorHandler.channelRead0(OpExecutorHandler.java:68)
    at org.apache.tinkerpop.gremlin.server.handler.OpExecutorHandler.channelRead0(OpExecutorHandler.java:43)
    at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:105)

我的日志(在我调用 API 的服务器上)显示:

Caused by: org.apache.tinkerpop.gremlin.driver.exception.ResponseException: null:none([])
at org.apache.tinkerpop.gremlin.driver.Handler$GremlinResponseHandler.channelRead0(Handler.java:246) ~[gremlin-driver-3.3.2.jar:3.3.2]
at org.apache.tinkerpop.gremlin.driver.Handler$GremlinResponseHandler.channelRead0(Handler.java:197) ~[gremlin-driver-3.3.2.jar:3.3.2]
at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:105) ~[netty-all-4.1.jar:4.1.19.Final]

我正在使用 org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV2d0 作为我的序列化器,也尝试过其他的,但似乎没有任何效果。

我用EmptyGraph初始化图遍历如下:

this.g = EmptyGraph.instance().traversal().withRemote("some-path/remote-graph.properties");

我一直被这个问题困扰,所以非常感谢您的帮助!

我猜你遇到了某种形式的版本问题。在不使用 iterate() 的情况下尝试该调用。由于您只执行一次删除,因此执行 next() 而不是 iterate() 应该是安全的,以查看是否可以解决问题。如果不是,我会将您的驱动程序(您目前是 3.3.2)与 JanusGraph 使用的 TinkerPop 版本对齐,当前版本 0.2 是 3.2.6:

https://github.com/JanusGraph/janusgraph/blob/v0.2.0/pom.xml#L68

我认为您可以安全地使用 3.2.9 之前的任何版本而不必担心。最终,我认为问题出在带有 iterate() 的 3.3.1 - 请参阅此处的第一个要点:

https://github.com/apache/tinkerpop/blob/3.3.1/CHANGELOG.asciidoc#tinkerpop-331-release-date-december-17-2017

只要您知道这样的升级更改,使用不匹配版本的驱动程序和服务器通常是安全的,但我们通常建议您不要这样做,这样您就不会遇到这些问题各种各样的问题。