GremlinPython: ConnectionResetError: невозможно записать в закрывающийся транспорт
Я очень часто сталкиваюсь с проблемой ниже в AWS lambda - Neptune. используя последнюю версию
gremlinpython==3.5.1
. Как исправить? даже в предыдущей версии - та же проблема
user_available = g().V(cognito_username).hasNext()
File "/var/task/gremlin_python/process/traversal.py", line 80, in hasNext
self.traversal_strategies.apply_strategies(self)
File "/var/task/gremlin_python/process/traversal.py", line 548, in apply_strategies
traversal_strategy.apply(traversal)
File "/var/task/gremlin_python/driver/remote_connection.py", line 63, in apply
remote_traversal = self.remote_connection.submit(traversal.bytecode)
File "/var/task/gremlin_python/driver/driver_remote_connection.py", line 59, in submit
result_set = self._client.submit(bytecode, request_options=self._extract_request_options(bytecode))
File "/var/task/gremlin_python/driver/client.py", line 123, in submit
return self.submitAsync(message, bindings=bindings, request_options=request_options).result()
File "/var/lang/lib/python3.6/concurrent/futures/_base.py", line 432, in result
return self.__get_result()
File "/var/lang/lib/python3.6/concurrent/futures/_base.py", line 384, in __get_result
raise self._exception
File "/var/task/gremlin_python/driver/connection.py", line 66, in cb
f.result()
File "/var/lang/lib/python3.6/concurrent/futures/_base.py", line 425, in result
return self.__get_result()
File "/var/lang/lib/python3.6/concurrent/futures/_base.py", line 384, in __get_result
raise self._exception
File "/var/lang/lib/python3.6/concurrent/futures/thread.py", line 56, in run
result = self.fn(*self.args, **self.kwargs)
File "/var/task/gremlin_python/driver/protocol.py", line 86, in write
self._transport.write(message)
File "/var/task/gremlin_python/driver/aiohttp/transport.py", line 86, in write
self._loop.run_until_complete(async_write())
File "/var/lang/lib/python3.6/asyncio/base_events.py", line 488, in run_until_complete
return future.result()
File "/var/task/gremlin_python/driver/aiohttp/transport.py", line 83, in async_write
await self._websocket.send_bytes(message)
File "/var/task/aiohttp/client_ws.py", line 155, in send_bytes
await self._writer.send(data, binary=True, compress=compress)
File "/var/task/aiohttp/http_websocket.py", line 685, in send
await self._send_frame(message, WSMsgType.BINARY, compress)
File "/var/task/aiohttp/http_websocket.py", line 598, in _send_frame
raise ConnectionResetError("Cannot write to closing transport")
ConnectionResetError: Cannot write to closing transport
1 ответ
Трудно понять, не видя кода, но похоже, что в какой-то момент ваша функция пытается использовать соединение Gremlin, которое больше не открыто.
Насколько я понимаю, Нептун закрывает незанятые соединения с веб-сокетами через некоторое время (около 20 минут), поэтому, если вы используете постоянное соединение во всем контексте выполнения Lambda (как рекомендовано здесь ), вам необходимо убедиться, что вы обрабатываете соответствующие исключения и сбросить соединение соответствующим образом.
Вы можете найти пример Python о том, как это сделать, здесь
У меня была проблема, очень похожая на вашу в прошлом, и логика «повторить попытку и сбросить соединение» в приведенном выше примере решила ее.