Silent port conflict goes undetected
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Idoneità per principianti
- 28/100
- Tipo di issue
- Bug
- Chiarezza
- Abbastanza chiara
- Stato di attività
- Ferma
- Stack tecnologico
- docker, postgresql
- Ambito
- databases, networking
Direzione di ricerca
Start by reproducing the Docker and Postgres.app setup in the issue, then inspect the source references to SO_REUSEPORT and SO_REUSEADDR and compare the context from #676. Done means a conflicting listener is detected and reported reliably without allowing traffic to reach different clusters unexpectedly.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
I ran into a confusing scenario where I think Postgres.app should have reported "Port in use" and failed to start, but instead managed to bind and steal traffic from a process that was already listening on that port.
I have a Docker container running PostGIS and exposing container port 5432 on host port 5432. I was able to open a psql shell on port 5432, but was confused because the database didn't have the right data. Eventually I figured out that Postgres.app was also listening on port 5432:
$ sudo lsof -i :5432
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
com.docke 1029 wchargin 128u IPv6 0x97e222976b6cf6c5 0t0 TCP *:postgresql (LISTEN)
postgres 45709 wchargin 7u IPv6 0x91b1855dc1c99cac 0t0 TCP localhost:postgresql (LISTEN)
postgres 45709 wchargin 8u IPv4 0xa012493f18604ea9 0t0 TCP localhost:postgresql (LISTEN)
$ ps -p 45709 -o comm
COMM
/Applications/Postgres.app/Contents/Versions/16/bin/postgres
I searched the source for SO_REUSEPORT / SO_REUSEADDR and found the comment leading to #676. I'm glad that that issue is resolved, but it seems like this issue is an unfortunate consequence of the fix.
I do think that it may be somewhat confusing to use this socket option, since it subverts the application that if an application is listening on a port then it will be able to receive packets sent to that port. Notably, this confusion only occurs because my Docker container is listening on all interfaces. If I expose 127.0.0.1:5432:5432 instead of just 5432:5432, then Postgres.app properly reports "Port in use" or the Docker container fails with "Ports are not available". So it feels a bit clumsy and unpredictable that Postgres.app behaves this way.
Might there be a different way of solving the original issue that doesn't cause this side-effect?
Steps to reproduce
- Make sure that Postgres.app is stopped.
- Run
docker run --rm -e POSTGRES_PASSWORD=password -p 5432:5432 -it postgres, and leave that running in its own terminal. - Run
psql -h localhost -p 5432 -U postgres, and execute (say)CREATE TABLE tab(),SELECT count(1) FROM tab. - Start Postgres.app. Note that it moves to the "Running" state without any error.
- Run
psql -h localhost -p 5432 -U postgresagain. Note thatSELECT count(1) FROM tabnow fails: no such relation.
If you have the psql shells from (3) and (5) open at the same time, you can note that their \conninfos report identical results:
You are connected to database "postgres" as user "postgres" on host "localhost" (address "::1") at port "5432".
…yet they are actually talking to different clusters!
(Then you can Ctrl-C in the terminal from step 2, which will destroy the container.)
- Lingua principale
- Makefile
- Stelle
- 7.8k
- Fork
- 404
- Merge medio
- 6h 55m
- PR unite (30g)
- 6
Guida per i contributori
Nessuna guida per i contributori indicizzata per questo repository
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di PostgresApp/PostgresApp
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 48/100
PostgresApp/PostgresApp#859 ·
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 48/100
PostgresApp/PostgresApp#844 · 7 commenti · 1 reazione ·
-
Postgres.app 3.0 Aperta
Difficoltà 5/5 Più di una settimana Idoneità per principianti 25/100
PostgresApp/PostgresApp#842 · 1 commento · 7 reazioni ·
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 25/100
PostgresApp/PostgresApp#834 ·
-
Apple Script Support Aperta
Difficoltà 5/5 Più di una settimana Idoneità per principianti 35/100
PostgresApp/PostgresApp#833 ·
Tutte le issue di PostgresApp/PostgresApp
Issue simili
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 85/100
-
[BUG]: "Clear All" in Settings doesn't clear the saved analysis, old data comes back after reload Apertabug
Difficoltà 2/5 1-3 ore Idoneità per principianti 88/100
AOSSIE-Org/OrgExplorer#253 · 1 commento ·
-
enhancement
Difficoltà 2/5 1-3 ore Idoneità per principianti 88/100
-
needs triage receiver/oracledb
Difficoltà 2/5 1-2 giorni Idoneità per principianti 84/100
open-telemetry/opentelemetry-collector-contrib#51400 · 1 commento ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100