提问参考模版:
- nebula 版本:2.5.1
- 部署方式:分布式
- python客户端:2.0.0
- 问题的具体描述:
python客户端ConnectionPool配置了timeout, 执行超时后,立即重新获取session报错:nebula2.fbthrift.transport.TTransport.TTransportException: Transport not open。再次获取session又恢复 - 相关的 meta / storage / graph info 日志信息(尽量使用文本形式方便检索)
代码
from nebula2.gclient.net import ConnectionPool
from nebula2.Config import Config
config = Config()
config.max_connection_pool_size = 400
config.timeout = 10000
connection_pool = ConnectionPool()
connection_pool.init([(host, port)], config)
nsql = "get subgraph 10 steps from 'vid' out edge"
nebula_session = connection_pool.get_session("root", "nebula",retry_connect=False)
nebula_session.execute("use space")
subgraph = nebula_session.execute(nsql)
第一次执行报错超时符合预期
timeout Traceback (most recent call last)
/data/miniconda3/envs/env-3.8.8/lib/python3.8/site-packages/nebula2/fbthrift/transport/TSocket.py in read(self, sz)
304 try:
--> 305 buff = self.handle.recv(sz)
306 if len(buff) == 0:
timeout: timed out
During handling of the above exception, another exception occurred:
TTransportException Traceback (most recent call last)
/data/miniconda3/envs/env-3.8.8/lib/python3.8/site-packages/nebula2/gclient/net/__init__.py in execute(self, session_id, stmt)
441 try:
--> 442 resp = self._connection.execute(session_id, stmt)
443 return resp
/data/miniconda3/envs/env-3.8.8/lib/python3.8/site-packages/nebula2/graph/GraphService.py in execute(self, sessionId, stmt)
902 self.send_execute(sessionId, stmt)
--> 903 return self.recv_execute()
904
/data/miniconda3/envs/env-3.8.8/lib/python3.8/site-packages/nebula2/graph/GraphService.py in recv_execute(self)
914 def recv_execute(self, ):
--> 915 (fname, mtype, rseqid) = self._iprot.readMessageBegin()
916 if mtype == TMessageType.EXCEPTION:
/data/miniconda3/envs/env-3.8.8/lib/python3.8/site-packages/nebula2/fbthrift/protocol/TBinaryProtocol.py in readMessageBegin(self)
136 def readMessageBegin(self):
--> 137 sz = self.readI32()
138 if sz < 0:
/data/miniconda3/envs/env-3.8.8/lib/python3.8/site-packages/nebula2/fbthrift/protocol/TBinaryProtocol.py in readI32(self)
215 def readI32(self):
--> 216 buff = self.trans.readAll(4)
217 val, = unpack(b'!i', buff)
/data/miniconda3/envs/env-3.8.8/lib/python3.8/site-packages/nebula2/fbthrift/transport/TTransport.py in readAll(self, sz)
71 while need:
---> 72 chunk = self.read(need)
73 if not chunk:
/data/miniconda3/envs/env-3.8.8/lib/python3.8/site-packages/nebula2/fbthrift/transport/TTransport.py in read(self, sz)
182
--> 183 self.__rbuf = StringIO(self.__trans.read(max(sz, self.__rbuf_size)))
184 return self.__rbuf.read(sz)
/data/miniconda3/envs/env-3.8.8/lib/python3.8/site-packages/nebula2/fbthrift/transport/TSocket.py in read(self, sz)
309 except socket.error as e:
--> 310 raise TTransportException(
311 type=TTransportException.END_OF_FILE,
TTransportException: Socket read failed: timed out
During handling of the above exception, another exception occurred:
IOErrorException Traceback (most recent call last)
<ipython-input-109-c67587a91bec> in <module>
6 nebula_session = connection_pool.get_session("root", "nebula",retry_connect=False)
7 nebula_session.execute("use xdr")
----> 8 subgraph = nebula_session.execute(nsql)
/data/miniconda3/envs/env-3.8.8/lib/python3.8/site-packages/nebula2/gclient/net/__init__.py in execute(self, stmt)
72 try:
73 start_time = time.time()
---> 74 resp = self._connection.execute(self._session_id, stmt)
75 end_time = time.time()
76 return ResultSet(resp,
/data/miniconda3/envs/env-3.8.8/lib/python3.8/site-packages/nebula2/gclient/net/__init__.py in execute(self, session_id, stmt)
445 if te.type == TTransportException.END_OF_FILE:
446 self.close()
--> 447 raise IOErrorException(IOErrorException.E_CONNECT_BROKEN, te.message)
448
449 def signout(self, session_id):
IOErrorException: Socket read failed: timed out
第二次执行报错信息
Traceback (most recent call last):
File "/data/miniconda3/envs/env-3.8.8/lib/python3.8/site-packages/nebula2/gclient/net/__init__.py", line 425, in authenticate
resp = self._connection.authenticate(user_name, password)
File "/data/miniconda3/envs/env-3.8.8/lib/python3.8/site-packages/nebula2/graph/GraphService.py", line 856, in authenticate
self.send_authenticate(username, password)
File "/data/miniconda3/envs/env-3.8.8/lib/python3.8/site-packages/nebula2/graph/GraphService.py", line 866, in send_authenticate
self._oprot.trans.flush()
File "/data/miniconda3/envs/env-3.8.8/lib/python3.8/site-packages/nebula2/fbthrift/transport/TTransport.py", line 193, in flush
self.__trans.write(out)
File "/data/miniconda3/envs/env-3.8.8/lib/python3.8/site-packages/nebula2/fbthrift/transport/TSocket.py", line 318, in write
raise TTransportException(TTransportException.NOT_OPEN,
nebula2.fbthrift.transport.TTransport.TTransportException: Transport not open
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "<ipython-input-94-7e3147431ceb>", line 170, in investigate
nebula_session = connection_pool.get_session("root", "nebula", retry_connect=False)
File "/data/miniconda3/envs/env-3.8.8/lib/python3.8/site-packages/nebula2/gclient/net/__init__.py", line 205, in get_session
auth_result = connection.authenticate(user_name, password)
File "/data/miniconda3/envs/env-3.8.8/lib/python3.8/site-packages/nebula2/gclient/net/__init__.py", line 432, in authenticate
raise IOErrorException(IOErrorException.E_CONNECT_BROKEN, te.message)
nebula2.Exception.IOErrorException: Transport not open