Attempts for no-response delivery failures carry no diagnostic information
Maintainer thường phản hồi trong vòng 1 ngày
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 5/5
- Thời gian dự kiến
- Hơn một tuần
- Mức phù hợp với người mới
- 35/100
Hướng nghiên cứu
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.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
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.
- Ngôn ngữ chính
- Go
- Star
- 1.1k
- Fork
- 70
- Merge trung bình
- 1 ngày 18 giờ
- Pull request đã merge (30 ngày)
- 56
Chuẩn bị môi trường
Dự án này không cung cấp dev container, Dockerfile hay hướng dẫn đóng góp, nên bạn cần tự thiết lập môi trường: hãy bắt đầu từ README và xem hướng dẫn đóng góp lần đầu của chúng tôi để biết các bước chung.
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của hookdeck/outpost
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 76/100
Maintainer thường phản hồi trong vòng 1 ngày
-
enhancement
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 48/100
hookdeck/outpost#1117 · 1 bình luận · 1 reaction ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 35/100
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 45/100
Maintainer thường phản hồi trong vòng 1 ngày
Tất cả issue của hookdeck/outpost
Issue tương tự
-
enhancement
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 70/100
Maintainer thường phản hồi trong vòng 2 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 70/100
superplanehq/superplane#8604 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
Maintainer thường phản hồi trong vòng 1 ngày
-
documentation hacktoberfest priority: low skill: good first issue status: ready for dev
Độ khó 2/5 Nửa ngày Mức phù hợp với người mới 85/100
hyperledger-labs/fabric-smart-client#2142 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
numberly/vault-db-injector#107 ·
Maintainer thường phản hồi trong vòng 1 ngày