Ошибка сериализации в JanusGraph
Я настроил экземпляр JanusGraph, поддерживаемый DynamoDB, как описано в документации GitHub, создал простой API на Java для тестирования операций CRUD, и я получил создание и чтение для работы. Проблема возникает, когда я пытаюсь удалить данные. При добавлении звоню:
Vertex v = this.g.addV("student").property("name", student.getName()).next()
и вернуться
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");
Я застрял на этой проблеме довольно долго, поэтому любая помощь действительно ценится!
1 ответ
Я собираюсь догадаться, что у вас есть какая-то проблема версии. Попробуйте этот звонок без использования iterate()
, Поскольку вы делаете только одно удаление, это должно быть безопасно next()
вместо iterate()
чтобы увидеть, если это работает вокруг проблемы. Если нет, я бы выровнял ваш драйвер (у вас сейчас 3.3.2) с версией TinkerPop, которую использует JanusGraph, для текущей версии 0.2 - 3.2.6:
https://github.com/JanusGraph/janusgraph/blob/v0.2.0/pom.xml#L68
Я думаю, что вы можете безопасно использовать любую версию до 3.2.9 без особых проблем. В конечном счете, я думаю, что проблема с 3.3.1 с iterate()
- увидеть первую точку пули здесь:
https://github.com/apache/tinkerpop/blob/3.3.1/CHANGELOG.asciidoc
Обычно безопасно использовать несовпадающие версии драйвера и сервера, если вы знаете об изменениях обновления, подобных этому, но мы, как правило, рекомендуем не делать этого, чтобы не столкнуться с подобными проблемами.