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 о том, как это сделать, здесь

У меня была проблема, очень похожая на вашу в прошлом, и логика «повторить попытку и сбросить соединение» в приведенном выше примере решила ее.

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