MagicStack / MagicStack/asyncpg
Cockroachdb unimplemented feature multiple active portals not supported
Chưa có ai nhận issue này.
- Ngôn ngữ chính
- Python
- Star
- 8.1k
- Fork
- 468
- Chỉ số merge pull request
- Không có pull request nào được merge trong 30 ngày
Mô tả
- asyncpg version: 0.20.1
- Cockroachdb version: v20.1.0 (connected to a 5-node on premise cluster)
- Python version: 3.8.0
- Platform: Linux
- Do you use pgbouncer?: No
- Did you install asyncpg with pip?: Yes
Example code:
async with pool.acquire() as conn:
async with conn.transaction():
if not await conn.table_exists("sys_app_config"):
await conn.execute("""
CREATE TABLE sys_app_config(
key text NOT NULL PRIMARY KEY,
value jsonb
);
""")
The table_exists method looks like this:
class MyConnection(Connection):
async def table_exists(self, table_name: str) -> bool:
"""Tell if a table exists."""
return await self.fetchval(
"select table_name from information_schema.tables where table_name=$1", table_name) is not None
This code is actually called from tornado.ioloop.IOLoop.current().run_sync so it is guaranteed that nothing else is running queries concurrently.
Here is the traceback that I'm getting:
File "/home/user/my_project/db/initialize.py", line 19, in init_database
if not await conn.table_exists("sys_app_config"):
File "/home/user/.local/share/virtualenvs/backend-YgzYW8Ky/lib/python3.8/site-packages/asyncpg/transaction.py", line 91, in __aexit__
await self.__commit()
File "/home/user/.local/share/virtualenvs/backend-YgzYW8Ky/lib/python3.8/site-packages/asyncpg/transaction.py", line 179, in __commit
await self._connection.execute(query)
File "/home/user/.local/share/virtualenvs/backend-YgzYW8Ky/lib/python3.8/site-packages/asyncpg/connection.py", line 272, in execute
return await self._protocol.query(query, timeout)
File "asyncpg/protocol/protocol.pyx", line 316, in query
asyncpg.exceptions.FeatureNotSupportedError: unimplemented: multiple active portals not supported
HINT: You have attempted to use a feature that is not yet implemented.
See: https://github.com/cockroachdb/cockroach/issues/40195
The referenced issue tells that it is not possible to keep multiple queries open and fetch from them interleaved.
However, I'm not doing anything that should result in opening multiple queries and fetching from them that way. As far as I see, my code should not open a new query before closing the previous one.
I suspect that asyncpg itself forgot to close something in the background.
Hướng dẫn đóng góp
Chưa lập chỉ mục được hướng dẫn đóng góp cho kho mã nguồn này
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Hướng nghiên cứu
Bắt đầu với đường dẫn commit của giao dịch trong asyncpg/transaction.py, sau đó kiểm tra asyncpg/connection.py và asyncpg/protocol/protocol.pyx xung quanh execute và query. Tái hiện ví dụ table_exists với thiết lập CockroachDB đã nêu và theo dõi xem driver có để lại một portal đang hoạt động trước khi commit hay không. Hoàn tất nghĩa là xác định hành vi của driver hoặc xác nhận sự không tương thích của cơ sở dữ liệu, đồng thời ghi lại bằng chứng.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- postgresql, python
- Lĩnh vực
- backend, databases
- Loại issue
- Lỗi
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức độ hoạt động
- Đình trệ
- Độ rõ ràng
- Cần làm rõ
- Mức phù hợp với người mới
- 28/100