go client reports `invalid connection` after idle for wait_timeout
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Idoneità per principianti
- 20/100
- Tipo di issue
- Bug
- Chiarezza
- Da chiarire
- Stato di attività
- Ferma
- Stack tecnologico
- go
- Ambito
- databases, networking
Direzione di ricerca
Esegui la riproduzione in Go indicata nell'issue, quindi esamina packets.go:37 e packets.go:122 insieme al comportamento di retry di database/sql nelle righe collegate 1536-1546 di sql.go. L'issue non specifica alcuna modifica al codice proposta; per procedere sarebbe necessario determinare se il percorso della connessione non valida può essere modificato in modo da gestire correttamente il comportamento osservato di wait_timeout.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Bug Report
Please answer these questions before submitting your issue. Thanks!
1. Minimal reproduce step (Required)
dbt.mustExec("SET @@SESSION.wait_timeout = 2")
// wait for TiDB to close our connection
time.Sleep(3 * time.Second)
tx, err := dbt.db.Begin()
if err != nil {
dbt.Fatal(err)
}
2. What did you expect to see? (Required)
The driver logs packets.go:122: closing bad idle connection: EOF 3 times but dbt.db.Begin doesn't report any errors because it creates a new connection internally and then retry.
3. What did you see instead (Required)
The driver logs packets.go:37: unexpected EOF and dbt.db.Begin reports invalid connection.
4. What is your version? (Required)
master.
The reason:
TiProxy doesn't close the connection immediately after wait_timeout and still receives requests. After it receives the request, it finds that TiDB has disconnected and then closes the client connection. So the client encounters an ErrInvalidConn in readPacket instead of ErrBadConn in writePacket.
The client will retry by creating a new connection if encounters ErrBadConn but won't retry if encounters ErrInvalidConn, see https://github.com/golang/go/blob/master/src/database/sql/sql.go#L1536-1546
I think there's no way to solve it.
- Lingua principale
- Go
- Stelle
- 73
- Fork
- 41
- Merge medio
- 12h 38m
- PR unite (30g)
- 21
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
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 pingcap/tiproxy
-
contribution first-time-contributor type/enhancement
Difficoltà 4/5 3-5 giorni Idoneità per principianti 48/100
pingcap/tiproxy#1239 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
type/enhancement
Difficoltà 5/5 Più di una settimana Idoneità per principianti 35/100
I maintainer di solito rispondono entro 1 giorno
-
severity/minor type/bug
Difficoltà 3/5 1-2 giorni Idoneità per principianti 55/100
I maintainer di solito rispondono entro 1 giorno
-
type/bug
Difficoltà 3/5 1-2 giorni Idoneità per principianti 64/100
I maintainer di solito rispondono entro 1 giorno
-
enhancement
Difficoltà 5/5 Più di una settimana Idoneità per principianti 38/100
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di pingcap/tiproxy
Issue simili
-
area/docs kind/documentation priority/backlog triage/accepted
Difficoltà 2/5 1-3 ore Idoneità per principianti 88/100
lexfrei/cloudflare-tunnel-gateway-controller#943 ·
I maintainer di solito rispondono entro 1 giorno
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
keyxmakerx/Chronicle#967 ·
I maintainer di solito rispondono entro 1 giorno
-
Broken links in the docsAperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
I maintainer di solito rispondono entro 1 giorno
-
type/bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
I maintainer di solito rispondono entro 1 giorno
-
[E2E Scenario Tests] HTTP logs capture export requests from test framework, polluting golden filesAperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 88/100
GoogleCloudPlatform/k8s-config-connector#13675 ·
I maintainer di solito rispondono entro 1 giorno