抛出TTransportException: TSocket read 0 bytes

提问参考模版:

  • nebula 版本:3.4.0
  • 部署方式: 单机
  • 安装方式:Docker
  • 是否上生产环境: N
  • 问题的具体描述

我使用FastAPI作为gateway,使用nebula-python 连接数据库,一开始部署测试都没有问题,之后过了一天再使用时抛出TTransportException: TSocket read 0 bytes。服务并未重启过会后又能正常提供服务,请问下这个该如何处理,是不是因为连接有timeout的问题,如何能否一直保持连接?

以下是报错信息:

ERROR:    Exception in ASGI application
Traceback (most recent call last):
  File "/home/yuanmou/miniconda3/envs/kg-gateway/lib/python3.10/site-packages/nebula3/gclient/net/Connection.py", line 140, in execute_parameter
    resp = self._connection.executeWithParameter(session_id, stmt, params)
  File "/home/yuanmou/miniconda3/envs/kg-gateway/lib/python3.10/site-packages/nebula3/graph/GraphService.py", line 1652, in executeWithParameter
    return self.recv_executeWithParameter()
  File "/home/yuanmou/miniconda3/envs/kg-gateway/lib/python3.10/site-packages/nebula3/graph/GraphService.py", line 1665, in recv_executeWithParameter
    (fname, mtype, rseqid) = self._iprot.readMessageBegin()
  File "/home/yuanmou/miniconda3/envs/kg-gateway/lib/python3.10/site-packages/nebula3/fbthrift/protocol/TBinaryProtocol.py", line 137, in readMessageBegin
    sz = self.readI32()
  File "/home/yuanmou/miniconda3/envs/kg-gateway/lib/python3.10/site-packages/nebula3/fbthrift/protocol/TBinaryProtocol.py", line 216, in readI32
    buff = self.trans.readAll(4)
  File "/home/yuanmou/miniconda3/envs/kg-gateway/lib/python3.10/site-packages/nebula3/fbthrift/transport/TTransport.py", line 72, in readAll
    chunk = self.read(need)
  File "/home/yuanmou/miniconda3/envs/kg-gateway/lib/python3.10/site-packages/nebula3/fbthrift/transport/TTransport.py", line 183, in read
    self.__rbuf = StringIO(self.__trans.read(max(sz, self.__rbuf_size)))
  File "/home/yuanmou/miniconda3/envs/kg-gateway/lib/python3.10/site-packages/nebula3/fbthrift/transport/TSocket.py", line 307, in read
    raise TTransportException(type=TTransportException.END_OF_FILE,
nebula3.fbthrift.transport.TTransport.TTransportException: TSocket read 0 bytes

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/yuanmou/miniconda3/envs/kg-gateway/lib/python3.10/site-packages/uvicorn/protocols/http/httptools_impl.py", line 419, in run_asgi
    result = await app(  # type: ignore[func-returns-value]
  File "/home/yuanmou/miniconda3/envs/kg-gateway/lib/python3.10/site-packages/uvicorn/middleware/proxy_headers.py", line 78, in __call__
    return await self.app(scope, receive, send)
  File "/home/yuanmou/miniconda3/envs/kg-gateway/lib/python3.10/site-packages/fastapi/applications.py", line 271, in __call__
    await super().__call__(scope, receive, send)
  File "/home/yuanmou/miniconda3/envs/kg-gateway/lib/python3.10/site-packages/starlette/applications.py", line 118, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/home/yuanmou/miniconda3/envs/kg-gateway/lib/python3.10/site-packages/starlette/middleware/errors.py", line 184, in __call__
    raise exc
  File "/home/yuanmou/miniconda3/envs/kg-gateway/lib/python3.10/site-packages/starlette/middleware/errors.py", line 162, in __call__
    await self.app(scope, receive, _send)
  File "/home/yuanmou/miniconda3/envs/kg-gateway/lib/python3.10/site-packages/starlette/middleware/exceptions.py", line 79, in __call__
    raise exc
  File "/home/yuanmou/miniconda3/envs/kg-gateway/lib/python3.10/site-packages/starlette/middleware/exceptions.py", line 68, in __call__
    await self.app(scope, receive, sender)
  File "/home/yuanmou/miniconda3/envs/kg-gateway/lib/python3.10/site-packages/fastapi/middleware/asyncexitstack.py", line 21, in __call__
    raise e
  File "/home/yuanmou/miniconda3/envs/kg-gateway/lib/python3.10/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in __call__
    await self.app(scope, receive, send)
  File "/home/yuanmou/miniconda3/envs/kg-gateway/lib/python3.10/site-packages/starlette/routing.py", line 706, in __call__
    await route.handle(scope, receive, send)
  File "/home/yuanmou/miniconda3/envs/kg-gateway/lib/python3.10/site-packages/starlette/routing.py", line 276, in handle
    await self.app(scope, receive, send)
  File "/home/yuanmou/miniconda3/envs/kg-gateway/lib/python3.10/site-packages/starlette/routing.py", line 66, in app
    response = await func(request)
  File "/home/yuanmou/miniconda3/envs/kg-gateway/lib/python3.10/site-packages/fastapi/routing.py", line 237, in app
    raw_response = await run_endpoint_function(
  File "/home/yuanmou/miniconda3/envs/kg-gateway/lib/python3.10/site-packages/fastapi/routing.py", line 163, in run_endpoint_function
    return await dependant.call(**values)
  File "/home/yuanmou/projects/kg-gateway/./app/api/routes/graph.py", line 40, in get_onestep_subgraph
    vid = get_vertex_id(sess_pool, entity_type.value, entity_name)
  File "/home/yuanmou/projects/kg-gateway/./app/db/nebula/crud/vertex.py", line 13, in get_vertex_id
    result_set = client.execute('''
  File "/home/yuanmou/miniconda3/envs/kg-gateway/lib/python3.10/site-packages/nebula3/gclient/net/SessionPool.py", line 148, in execute
    return self.execute_parameter(stmt, None)
  File "/home/yuanmou/miniconda3/envs/kg-gateway/lib/python3.10/site-packages/nebula3/gclient/net/SessionPool.py", line 177, in execute_parameter
    raise e
  File "/home/yuanmou/miniconda3/envs/kg-gateway/lib/python3.10/site-packages/nebula3/gclient/net/SessionPool.py", line 163, in execute_parameter
    resp = session.execute_parameter(stmt, params)
  File "/home/yuanmou/miniconda3/envs/kg-gateway/lib/python3.10/site-packages/nebula3/gclient/net/Session.py", line 42, in execute_parameter
    resp = self._connection.execute_parameter(self._session_id, stmt, params)
  File "/home/yuanmou/miniconda3/envs/kg-gateway/lib/python3.10/site-packages/nebula3/gclient/net/Connection.py", line 148, in execute_parameter
    raise IOErrorException(
nebula3.Exception.IOErrorException: TSocket read 0 bytes

看着像服务中间断过了

我看了下服务中间没有停过。
我网上查了下Solved: python thrift TSocket read 0 bytes - Cloudera Community - 51331 这里面也是类似的问题,里面说是 thrift 关闭了连接,不知道nebula哪里可以调thrift timeout ?

graph配置指定client_idle_timeout_secs 默认8小时

1 个赞

好哒,谢谢大佬

此话题已在最后回复的 7 天后被自动关闭。不再允许新回复。