You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
work-unit: logfwd-output — sink retry and HTTP output #1495
tl;dr: Outcome A — Ready for implementation. Retry classification is already fixed in current main; remaining mechanical work is (1) wire real http output support in sink factory/runtime and (2) make Arrow IPC receiver 429 handling all-or-nothing to prevent duplicate delivery on retried requests.
crates/logfwd-output/src/lib.rs:540-735 — build_sink_factory(...) match has no OutputType::Http arm and falls to _ => ... not yet supported.
crates/logfwd-output/src/lib.rs:1108-1122 — test explicitly asserts http is "not yet supported".
Arrow IPC receiver can partially accept then return 429
crates/logfwd-io/src/arrow_ipc_receiver.rs:199-208 — request decodes to Vec(RecordBatch).
crates/logfwd-io/src/arrow_ipc_receiver.rs:213-223 — batches are enqueued one-by-one via tx.try_send(...); Full stops mid-loop.
crates/logfwd-io/src/arrow_ipc_receiver.rs:232-239 — returns 429 after partial enqueue, enabling sender retry of full payload.
Docs currently conflict on HTTP support status
book/src/config/outputs.md:20-31 — documents HTTP output usage as available.
book/src/config/reference.md:226-239, 299-303 — marks HTTP output as "not yet supported".
3) Verification
Commands and output
$ cargo test -p logfwd-output test_build_sink_factory_http_not_yet_supported
test tests::test_build_sink_factory_http_not_yet_supported ... ok
$ cargo test -p logfwd-output send_payload_returns_rejected_on_4xx
test otlp_sink::tests::send_payload_returns_rejected_on_4xx ... ok
$ cargo test -p logfwd-io receiver_reports_degraded_on_backpressure_and_recovers
test arrow_ipc_receiver::tests::receiver_reports_degraded_on_backpressure_and_recovers ... ok
4) Detailed Action Plan
Mechanical implementation spec
A. HTTP output wiring
Add/enable an async HTTP sink factory (NDJSON POST) in crates/logfwd-output/src/.
Reuse existing serialization path from JsonLinesSink (crates/logfwd-output/src/json_lines.rs:15-117) for payload generation.
Ensure send path returns SendResult via shared HTTP classification (http_classify).
Open PRs in area: checked current open PR list; no active PR appears to target HTTP sink wiring or Arrow IPC 429 duplicate handling directly.
Note
🔒 Integrity filtering filtered 11 items
Integrity filtering activated and filtered the following items during workflow execution.
This happens when a tool call accesses a resource that does not meet the required integrity or secrecy level of the workflow.
resource:search_pull_requests (search_pull_requests: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".)
Audit update (2026-04-08): this work-unit is mostly complete via PR #1568, and linked issues #1230, #1342, and #1537 are now closed. Remaining blocker for full closure is #1046 (Arrow IPC partial-delivery/429 semantics).
Consolidated as of 2026-04-08. Completed scope was closed in prior pass (#1230, #1342, #1537). Remaining ingress-focused correctness work is now tracked in focused work-unit #1581 (#1046, #1551, #1557).
Activity
github-actions commentedon Apr 7, 2026
tl;dr: Outcome A — Ready for implementation. Retry classification is already fixed in current
main; remaining mechanical work is (1) wire realhttpoutput support in sink factory/runtime and (2) make Arrow IPC receiver429handling all-or-nothing to prevent duplicate delivery on retried requests.1) Recommendation
Implement issue #1495 as two code changesets:
logfwd-outputfactory/runtime.No additional design decision is required; behavior targets are already explicit in code/tests and issue done-criteria.
2) Findings
Code evidence (file:line)
Retry/permanent classification is already correct
crates/logfwd-output/src/sink.rs:30-40—SendResultalready distinguishesIoError,RetryAfter,Rejected.crates/logfwd-output/src/http_classify.rs:86-89— non-408/4294xxreturnsSendResult::Rejected.crates/logfwd/src/worker_pool.rs:805-808—Rejectedis treated as terminal (no retry loop).HTTP output type exists in config but is not wired in sink factory
crates/logfwd-config/src/lib.rs:92-96, 139-141—OutputType::Httpenum + deserialization exist.crates/logfwd-output/src/lib.rs:540-735—build_sink_factory(...)match has noOutputType::Httparm and falls to_ => ... not yet supported.crates/logfwd-output/src/lib.rs:1108-1122— test explicitly assertshttpis "not yet supported".Arrow IPC receiver can partially accept then return 429
crates/logfwd-io/src/arrow_ipc_receiver.rs:199-208— request decodes toVec(RecordBatch).crates/logfwd-io/src/arrow_ipc_receiver.rs:213-223— batches are enqueued one-by-one viatx.try_send(...);Fullstops mid-loop.crates/logfwd-io/src/arrow_ipc_receiver.rs:232-239— returns429after partial enqueue, enabling sender retry of full payload.Docs currently conflict on HTTP support status
book/src/config/outputs.md:20-31— documents HTTP output usage as available.book/src/config/reference.md:226-239, 299-303— marks HTTP output as "not yet supported".3) Verification
Commands and output
4) Detailed Action Plan
Mechanical implementation spec
A. HTTP output wiring
Add/enable an async HTTP sink factory (NDJSON POST) in
crates/logfwd-output/src/.JsonLinesSink(crates/logfwd-output/src/json_lines.rs:15-117) for payload generation.SendResultvia shared HTTP classification (http_classify).Wire
OutputType::Httpinbuild_sink_factory(...):crates/logfwd-output/src/lib.rs:530-735OutputType::Http => { ... }arm (endpoint required; auth headers pass-through; compression handling explicit)._ => not yet supportedforHttp.Tests to update/add
test_build_sink_factory_http_not_yet_supportedatcrates/logfwd-output/src/lib.rs:1108-1122to assert successful factory creation.4xx=>Rejectedand429/408=>RetryAfteron the HTTP sink path (pattern from existingotlp_sinkstatus tests).Docs sync
book/src/config/reference.mdwith implemented status (remove "not yet supported" once code lands).B. Arrow IPC 429 duplicate-prevention
Make request enqueue atomic (all-or-nothing per HTTP request)
crates/logfwd-io/src/arrow_ipc_receiver.rs:210-239try_sendloop with a single enqueue unit per request.Coalesce decoded batches before enqueue
Vec(RecordBatch)fromdecode_ipc_stream(:363-373) and combine into oneRecordBatch(same-schema concat) beforetry_send.Full), return429with no partial request acceptance.Regression test to add
crates/logfwd-io/src/arrow_ipc_receiver.rstests section (nearreceiver_reports_degraded_on_backpressure_and_recovers,:529-565).429and assert receiver queue contains no prefix from rejected request.Verification commands after implementation
cargo test -p logfwd-output test_build_sink_factory_httpcargo test -p logfwd-output httpcargo test -p logfwd-io arrow_ipc_receiverjust test5) Related Items
Issues / PRs / files
crates/logfwd-output/src/lib.rsOutputType::Httpsink-factory armcrates/logfwd-io/src/arrow_ipc_receiver.rs429crates/logfwd-output/src/http_classify.rsOpen PRs in area: checked current open PR list; no active PR appears to target HTTP sink wiring or Arrow IPC 429 duplicate handling directly.
Note
🔒 Integrity filtering filtered 11 items
Integrity filtering activated and filtered the following items during workflow execution.
This happens when a tool call accesses a resource that does not meet the required integrity or secrecy level of the workflow.
issue_read: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".)issue_read: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".)issue_read: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".)issue_read: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".)issue_read: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".)search_pull_requests: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".)pull_request_read: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".)pull_request_read: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".)pull_request_read: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".)pull_request_read: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".)issue_read: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".)What is this? | From workflow: Issue Triage
Give us feedback! React with 🚀 if perfect, 👍 if helpful, 👎 if not.
strawgate commentedon Apr 7, 2026
Execution Owner: Codex
Objective
Complete #1495 by fixing output delivery correctness across retry classification, HTTP sink wiring, partial-delivery duplicate risk, and benchmark signal validity (
#1342 #1230 #1046 #1537).Scope lock
Implementation steps (in order)
AGENTS.md,DEVELOPING.md, issue bodies bug(sink): permanent failures (4xx, 413, encode errors) retried forever via IoError (#1156) #1342 bug: http output is unsupported on latest master despite being documented and implemented previously #1230 bug: Arrow IPC receiver returns 429 after partial batch delivery — client retry causes duplicate records #1046 fix(bench): elasticsearch_arrow ignores IoError/RetryAfter send results #1537.Required verification
cargo test -p logfwd-outputcargo test -p logfwd-iocargo test -p logfwd-benchjust ciPR requirements
fix(output): delivery semantics and HTTP/benchmark correctness (#1495)Fixes #1342,Fixes #1230,Fixes #1046,Fixes #1537,Refs #1495.Done checklist
strawgate commentedon Apr 7, 2026
Cloud task launched (Codex queue): task_e_69d577fd28ec832e8ac919a68c76dfe9 (3 attempts).\nhttps://chatgpt.com/codex/tasks/task_e_69d577fd28ec832e8ac919a68c76dfe9
fix(output): delivery correctness and fail-fast propagation (#1495)
fix(output): delivery correctness and fail-fast propagation (#1495) (#…
strawgate commentedon Apr 8, 2026
Audit update (2026-04-08): this work-unit is mostly complete via PR #1568, and linked issues #1230, #1342, and #1537 are now closed. Remaining blocker for full closure is #1046 (Arrow IPC partial-delivery/429 semantics).
strawgate commentedon Apr 8, 2026
Consolidated as of 2026-04-08. Completed scope was closed in prior pass (#1230, #1342, #1537). Remaining ingress-focused correctness work is now tracked in focused work-unit #1581 (#1046, #1551, #1557).