MagicStack / MagicStack/asyncpg

Fetching from pgpool-II hangs indefinitely

Ouverte
#573 34 commentaires 0 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
* **PostgreSQL version**: 12.2
* **Do you use a PostgreSQL SaaS? If so, which? Can you reproduce
the issue with a local PostgreSQL install?**: No.
* **Python version**: Python 3.7.7 (default, Apr 23 2020, 14:43:26)
* **Platform**: [GCC 8.3.0] on linux
* **Do you use pgbouncer?**: No, I use pgpool-II 4.1.1
* **Did you install asyncpg with pip?**: No, with poetry
* **If you built asyncpg locally, which version of Cython did you use?**: No
* **Can the issue be reproduced under both asyncio and
[uvloop](https://github.com/magicstack/uvloop)?**: Yes

When querying the database through pgpool-II it hangs indefinitely, without raising any kind of exception. Connecting to database seems to be working, since for instance invalid password raises an exception:
```
asyncpg.exceptions.InternalServerError: md5 authentication failed
DETAIL: password does not match
```

Steps to reproduce:
```python
import asyncio
import asyncpg

async def run():
conn = await asyncpg.connect(user='user', password='password',
database='database', host='127.0.0.1') # connect to pgpool-II
values = await conn.fetch('''SELECT 1''') # hangs here indefinitely
await conn.close()

loop = asyncio.get_event_loop()
loop.run_until_complete(run())
```
When connecting to the PostgreSQL directly, the example above works flawlessly.

Log from pgpool-II:
```
May 13 20:56:00 pg01 pgpool[11982]: 2020-05-13 20:56:00: pid 13189: ERROR: unable to read data from frontend
May 13 20:56:00 pg01 pgpool[11982]: 2020-05-13 20:56:00: pid 13189: DETAIL: EOF encountered with frontend
```

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 la reproduction Python fournie, en l’exécutant via pgpool-II et directement contre PostgreSQL afin de confirmer où le comportement diffère. Examinez le chemin asyncpg connection et conn.fetch en vous appuyant sur le journal de pgpool-II comme preuve ; le travail est terminé lorsque SELECT 1 s’exécute jusqu’au bout ou qu’une exception utile est levée au lieu de rester bloqué indéfiniment.

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

Évaluation

Stack technique
postgresql, python
Domaine
databases
Type d'issue
Bug
Difficulté
4/5
Temps estimé
3-5 jours
Activité
À l'abandon
Clarté
Plutôt claire
Accessibilité débutants
35/100

Recevez les nouvelles issues par e-mail

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