Как изменить версию Goblin OGM Serializer для Janusgraph (TinkerPop 3.2.6) #101

Я пробую приложение Python для подключения к Janusgraph 0.2.0. Я выполнил все инструкции по установке и смог создать элементы на графике и успешно пройти их.

import asyncio

from goblin import Goblin
from quart import jsonify, Quart, serving
from app.models import Person, Knows

loop = asyncio.get_event_loop()
goblin_app = loop.run_until_complete(Goblin.open(loop,
hosts = ['localhost'],
port = '8182',
scheme = 'ws'))
goblin_app.register(Person, Knows)
print("Initialized all the goblin stuff")
quart_app = Quart(name)

async def create(app, data):
session = await app.session()
session.add(data)
await session.flush()
return data

leif = Person()
leif.name = 'Leif'
leif.age = 28
leif = loop.run_until_complete(create(goblin_app, leif))

jon = Person()
jon.name = 'Jon'
jon.age = 32
jon = loop.run_until_complete(create(goblin_app, jon))

works_with = Knows(leif, jon)
works_with = loop.run_until_complete(goblin_app, works_with)

Тем не менее, когда я пытаюсь подключиться из моего приложения и отправить session.flush() для создания элемента, приложение зависает и больше ничего не происходит. В gremlin-server.log я вижу следующую ошибку:

1109015 [gremlin-server-worker-1] WARN org.apache.tinkerpop.gremlin.server.handler.WsGremlinBinaryRequestDecoder - на сервере Gremlin не настроен сериализатор для запрошенного типа mime [application/vnd.gremlin-v3.0+json] - с помощью org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV1d0 по умолчанию 1109035 [gremlin-server-worker-1] WARN org.apache.tinkerpop.gremlin.driver.ser.AbstractGraphSONMessageSerializerV1d0 - RequestBoufDateBirect0DBF, widx: 558, cap: 592)] не удалось десериализовать с помощью org.apache.tinkerpop.gremlin.driver.ser.AbstractGraphSONMessageSerializerV1d0. 1109039 [gremlin-server-worker-1] WARN org.apache.tinkerpop.gremlin.server.handler.OpSelectorHandler - Запрошен недопустимый OpProcessor [null] org.apache.tinkerpop.gremlin.server.op.OpProcessorException: запрошен недопустимый OpProcessor [null ] в org.apache.tinkerpop.gremlin.server.handler.OpSelectorHandler.decode(OpSelectorHandler.java:95) в org.apache.tinkerpop.gremlin.server.handler.OpSelectorHandler.decode(OpSelectorHandler.java:50) в io.NETty. по адресу io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:335) по адресу io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:102nell.Ab nvokeChannelRead(AbstractChannelHandlerContext.java:356) по адресу io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:342) по адресу io.netty.channel.AbstractChannelHandler.nethan.ChannelConte.Hateler.Conteire.text " channel..netty.channel.AbstractChannelHandlerContext.invokeChannelRead (AbstractChannelHandlerContext.java:342) по адресу io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:335) по адресу io.netty.handler.codec.MessageToMessageDecoder.channelRead (MessageToMessageDecoder.javaRehan.hannel.haneCon Техкан: 356) в io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:342) в io.netty.channel.AbstractChannelHandlerContext.fireChannelRead (AbstractChannelHandlerContext.j.h.WebSocketServerProtocolHandler$1.channelRead(WebSocketServerProtocolHandler.java:159) по адресу io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:356) в io.netty.neltehan.hannelChannelChannelHanler.Hanler.hannelChannel.Hanler.Hanler.Hanler.Hanler.hannelChannel.Hanler.Hanler.Hanler.Channel.hannelHan channel.AbstractChannelHandlerContext.fireChannelRead (AbstractChannelHandlerContext.java:335) в io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:312) в io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:286) в io.netty.neltehanChannelHhannelHan netty.channel.AbstractChannelHandlerContext.invokeChannelRead (AbstractChannelHandlerContext.java:342) по адресу io.netty.channel.AbstractChannelHandlerContext.fireChannelRead (AbstractChannelHandlerContext.javalerhan.hannel.hannel.hannel.can). по адресу io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:356) по адресу io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead (AbstractChannelHandlerContext.jnele f.net.hanC9) в io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:131) в io.netty.channel.nio.NioEventLoop.:498) в io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:460) в io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:131) в java.lang.Thread.run(Thread.java:745) ~

Я нашел некоторую информацию о замене версии GraphSON в файле gremlin-server.yaml, чтобы добавить отсутствующий сериализатор для gremlin-v3.0+json, и сделал это, однако, когда добавил, что я получаю ошибку об отсутствии удалось найти настроенный класс сериализатора: 10348 [main] WARN org.apache.tinkerpop.gremlin.server.AbstractChannelizer - Не удалось найти настроенный класс сериализатора - org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV3d0 - это не будет доступно 1

Итак, мои вопросы:

  1. Есть ли способ изменить версию сериализатора, который мое приложение отправляет на сервер Gremlin, на одну из совместимых версий?
  2. Будет ли это работать, если я скачаю GraphSON версии 3.0 и поместу его на сервер? Это будет означать, что мне придется обновить версию Gremlin Server, поставляемую в комплекте с Janusgraph, что, кажется, слишком много...

Кто-нибудь сталкивался с подобной проблемой и есть предложения?

1 ответ

Решение

Проверьте и убедитесь, что gremlinpython версия соответствует версии 3.2.6 Apache TinkerPop, которую использует JanusGraph 0.2.0.

Другие вопросы по тегам