MagicStack / MagicStack/asyncpg

Cockroachdb unimplemented feature multiple active portals not supported

Ouverte
#580 19 commentaires 2 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Langage dominant
Python
Étoiles
8.1k
Forks
468
Métriques de merge des PR
Aucune PR mergée en 30 j

Description

* **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:
```python

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:

```python

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.

Guide de contribution

Aucun guide de contribution indexé pour ce dépôt

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Piste de recherche

Commencez par le chemin de commit de la transaction dans asyncpg/transaction.py, puis inspectez asyncpg/connection.py et asyncpg/protocol/protocol.pyx autour de execute et query. Reproduisez l’exemple table_exists avec la configuration CockroachDB indiquée et vérifiez si le pilote laisse un portail actif avant le commit. Le travail est terminé lorsque le comportement du pilote est identifié ou que l’incompatibilité de la base de données est confirmée, et que les éléments de preuve sont documentés.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
postgresql, python
Domaine
backend, databases
Type d'issue
Bug
Difficulté
4/5
Temps estimé
3-5 jours
Activité
À l'abandon
Clarté
À clarifier
Accessibilité débutants
28/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.