Attempts for no-response delivery failures carry no diagnostic information
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
- 35/100
Direzione di ricerca
Read the discussion on PR #1018 and compare the two response_data design positions described here before changing behavior. Trace how connection-level failures, format failures, and publisher-resolution failures are recorded, and review the attempt model, log store schemas, API type, and SDKs if choosing a dedicated field. Done means no-response attempts expose useful diagnostics assembled only from allowlisted data, without persisting raw transport error strings; the EADDRNOTAVAIL classification is a separate, severable change.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Problem
When a webhook delivery fails before receiving an HTTP response — DNS failure, connection refused, TLS error, dial timeout — the attempt records a code and nothing else. response_data is NULL.
| failure | code |
response_data |
|---|---|---|
| destination returns 4xx/5xx | "503" |
status, body |
| payload format failure | "ERR" |
the error message |
| publisher resolution failure | "ERR" |
the error message |
| connection-level failure | connection_refused, dns_error, network_error, … |
NULL |
A destination that returns a 500 with an empty body leaves more diagnostic trace than one that could not be reached at all. The network_error catch-all is the worst case: an attempt with that code carries no information whatsoever, so the end user cannot distinguish "my DNS points at a stale IP" from "my service is down" from "my TLS cert expired" without contacting support.
Constraints on a fix
Message content must be safe by construction. Raw Go transport error strings cannot be stored verbatim: proxy failures embed operator-side proxy diagnostics, net.OpError can include a source (pod) address, and errno text reveals sender-host state. Any recorded cause should be assembled from allowlisted parts — classification code, the customer-configured destination host/port, optionally the resolved IP — never from err.Error() passthrough.
Field design needs a decision. Two positions:
response_datais the attempt's explanation field and the name is historical. Two existing no-response paths (format failure, publisher resolution) already store{"error": ...}there, andNewFormatError's doc comment calls it "the customer-facing string persisted on the attempt."response_datashould strictly mean an HTTP response, and failure causes belong in a dedicated field (failure_reason/error) — cleaner, but touchesmodels.Attempt, both log store schemas, the API type, the SDKs, and the{"error": ...}values already in customers' attempt histories.
The inconsistency is customer-visible either way, so whichever path a fix takes should settle this first.
Prior art
PR #1018 implemented position 1 with raw err.Error() on the non-proxy path (proxy errors already stored classification only). Parked: no user demand yet, and the raw passthrough could not be proven leak-free. See discussion there.
Related, severable piece from that PR: classifying source-side ephemeral port exhaustion (EADDRNOTAVAIL) as address_unavailable instead of the network_error catch-all, so sender-side failures are not charged to the destination.
- Lingua principale
- Go
- Stelle
- 1.1k
- Fork
- 70
- Merge medio
- 1g 18h
- PR unite (30g)
- 56
Preparare l'ambiente
Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.
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 hookdeck/outpost
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
I maintainer di solito rispondono entro 1 giorno
-
enhancement
Difficoltà 4/5 3-5 giorni Idoneità per principianti 48/100
hookdeck/outpost#1117 · 1 commento · 1 reazione ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 35/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 45/100
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di hookdeck/outpost
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
praetorian-inc/augustus#334 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 66/100
I maintainer di solito rispondono entro 1 giorno
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
I maintainer di solito rispondono entro 1 giorno
-
TestTOMLBigFileParsesInLinearTime: a 1s wall-clock bound on a 3 MB parse fails under load (1.27s)Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 88/100