MagicStack / MagicStack/asyncpg

cannot switch to state 15; another operation (2) is in progress

オープン
#784 コメント 2 件 リアクション 3 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

主要言語
Python
スター
8.1k
フォーク
469
平均マージ
18分
マージ済み PR(30日)
4

説明

  • asyncpg version: 0.23.0
  • PostgreSQL version: Aurora PostgreSQL 10.14
  • Do you use a PostgreSQL SaaS? If so, which? Can you reproduce
    the issue with a local PostgreSQL install?
    : RDS Aurora (and hard to repro)
  • Python version: 3.9
  • Platform: Linux
  • Do you use pgbouncer?: no
  • Did you install asyncpg with pip?: pip3.9 install --user
  • If you built asyncpg locally, which version of Cython did you use?:
  • Can the issue be reproduced under both asyncio and uvloop?: repro'd with uvloop
  File "/root/.local/lib/python3.9/site-packages/asyncpg/pool.py", line 792, in __aexit__
    await self.pool.release(con)
  File "/root/.local/lib/python3.9/site-packages/asyncpg/pool.py", line 666, in release
    return await asyncio.shield(ch.release(timeout))
  File "/usr/lib/python3.9/asyncio/futures.py", line 284, in __await__
    yield self  # This tells Task to wait for completion.
  File "/usr/lib/python3.9/asyncio/tasks.py", line 328, in __wakeup
    future.result()
  File "/usr/lib/python3.9/asyncio/futures.py", line 201, in result
    raise self._exception
  File "/usr/lib/python3.9/asyncio/tasks.py", line 256, in __step
    result = coro.send(None)
  File "/root/.local/lib/python3.9/site-packages/asyncpg/pool.py", line 218, in release
    raise ex
  File "/root/.local/lib/python3.9/site-packages/asyncpg/pool.py", line 208, in release
    await self._con.reset(timeout=budget)
  File "/root/.local/lib/python3.9/site-packages/asyncpg/connection.py", line 1311, in reset
    await self.execute(reset_query, timeout=timeout)
  File "lib/common.py", line 164, in execute
    return await self._with_logger(super(PSQLLoggerMixin, self).execute)(*args, **kwargs)
  File "lib/common.py", line 119, in wrapper
    ret_val = await func(*args, **kwargs)
  File "/root/.local/lib/python3.9/site-packages/asyncpg/connection.py", line 297, in execute
    return await self._protocol.query(query, timeout)
  File "asyncpg/protocol/protocol.pyx", line 338, in query
  File "/usr/lib/python3.9/asyncio/futures.py", line 287, in __await__
    return self.result()  # May raise too.
  File "/usr/lib/python3.9/asyncio/futures.py", line 201, in result
    raise self._exception
  File "asyncpg/protocol/protocol.pyx", line 331, in asyncpg.protocol.protocol.BaseProtocol.query
  File "asyncpg/protocol/coreproto.pyx", line 1061, in asyncpg.protocol.protocol.CoreProtocol._simple_query
  File "asyncpg/protocol/coreproto.pyx", line 768, in asyncpg.protocol.protocol.CoreProtocol._set_state
asyncpg.exceptions._base.InternalClientError: cannot switch to state 15; another operation (2) is in progress

コントリビューションガイド

このリポジトリのコントリビューションガイドは索引されていません

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

調査の方向性

asyncpg/pool.py の release 周辺、asyncpg/connection.py の reset 周辺、asyncpg/protocol/coreproto.pyx の _set_state 周辺から着手してください。traceback を確認し、並行操作の経路を調査してください。報告された問題は再現が難しく、uvloop と Aurora PostgreSQL で発生していたことに注意してください。原因を再現できるか説明でき、接続の解放を壊さずに状態切り替えの失敗を修正できれば完了です。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
postgresql, python
領域
databases
issue の種類
バグ
難易度
4/5
見積もり時間
3〜5日
活発さ
停滞
明瞭さ
説明が足りない
初心者へのやさしさ
25/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。