【发布时间】:2021-04-07 14:01:19
【问题描述】:
我正在使用 Gremlin Python 库对 Gremlin 服务器的 JanusGraph 部署执行遍历(仅使用 Tinkergraph 也会发生同样的情况)。一些长遍历(包含数千条指令)在服务器或客户端上没有得到响应、没有错误、没有超时、没有日志条目或错误。什么都没有。
这种沉默处理的条件尚不清楚。所描述的行为并不线性依赖于字节或指令数。例如,这段代码对我来说将永远挂起:
g = traversal().withRemote(DriverRemoteConnection('ws://localhost:8182/gremlin', 't'))
g = g.inject("")
for i in range(0, 8000):
g = g.constant("test")
print(f"submitting traversal with length={len(g.bytecode.step_instructions)}")
result = g.next()
print(f"done, got: {result}") # this is never reached
它不仅仅取决于请求消息中的字节数,因为即使使用非常大的常量值代替“测试”,我没有得到响应的指令数也不会改变。例如,使用 Lorem Ipsum 的许多段落注入 7000 个值按预期工作,并在几毫秒内返回。
虽然这无关紧要(因为我应该得到一个适当的错误而不是什么都没有),但我已经将服务器端的 maxHeaderSize、maxChunkSize、maxContentLength 等增加到了可笑的高数字。更改序列化格式(例如,从 GraphSONMessageSerializerV3d0 到 GraphBinaryMessageSerializerV1)也无济于事。
注意:我知道很长的遍历是 an anti-pattern in Gremlin,但有时不可能或非常低效地构造遍历以便它们可以使用注入的值。
【问题讨论】:
标签: gremlin janusgraph tinkerpop3 gremlin-server gremlinpython