next is red, intermittently.TestAVisitorThatStopsALittleShortHasTheConnectionClosedWhenTheAnswerIsCutOff/with_the_body_in_two_parts in internal/rproxy/limits_test.go, added by #322, failed in two of the make test runs on next since it landed (#318 (comment), #318 (comment)): limits_test.go:986: read "hello" (... i/o timeout), want the connection closed, after 10 s. The verbose rerun passed, but the test phase still exits 1. Nothing else merges into next until this is fixed.
The visitor got the first part of the app's body, and then the connection stayed open: in some ordering, the cut-off answer does not end the reading of the visitor's body. That is the defect 322 set out to fix, so the likeliest cause is an ordering the fix in finish (internal/rproxy/request.go) does not cover, for example the second write failing with nothing left to flush, so the last flush succeeds and the reading is never ended.
Definition of done, one PR into next, labelled critical:
Reproduce it on demand, uncommitted: for example run the subtest with -count many times beside a CPU-heavy container, or with the app's second part timed against the limit. Say in the PR body which ordering produces it.
If rproxy leaves the connection open in that ordering, fix it in internal/rproxy, so that whenever the response time limit cuts off an answer the reading of the visitor's body ends at once. The PR is then two commits: first a test that reproduces it deterministically and fails against next, then the fix with no test assertion changed.
If only the test's timing is at fault, fix the test, keeping both cases and what they check.
No test, request or value is removed; no product limit changes.
Package: internal/rproxy, whose doc says it is the reverse proxy. Follow AGENTS.md: checks only through make targets, apart from the uncommitted reproduction runs. make fmt, then flock -w 1800 /srv/code/tmp/.gate-smallwebwaf.lock make check; a flock timeout also exits 1, so read the output. Edit by hand. Title ending (closes #N) with this issue's number. Label the PR needs-review.
Model: opus-5-5
**`next` is red, intermittently.** `TestAVisitorThatStopsALittleShortHasTheConnectionClosedWhenTheAnswerIsCutOff/with_the_body_in_two_parts` in `internal/rproxy/limits_test.go`, added by https://git.eeqj.de/sneak/smallwebwaf/pulls/322, failed in two of the `make test` runs on `next` since it landed (https://git.eeqj.de/sneak/smallwebwaf/issues/318#issuecomment-178063, https://git.eeqj.de/sneak/smallwebwaf/issues/318#issuecomment-178131): `limits_test.go:986: read "hello" (... i/o timeout), want the connection closed`, after 10 s. The verbose rerun passed, but the test phase still exits 1. Nothing else merges into `next` until this is fixed.
The visitor got the first part of the app's body, and then the connection stayed open: in some ordering, the cut-off answer does not end the reading of the visitor's body. That is the defect 322 set out to fix, so the likeliest cause is an ordering the fix in `finish` (`internal/rproxy/request.go`) does not cover, for example the second write failing with nothing left to flush, so the last flush succeeds and the reading is never ended.
**Definition of done**, one PR into `next`, labelled `critical`:
- Reproduce it on demand, uncommitted: for example run the subtest with `-count` many times beside a CPU-heavy container, or with the app's second part timed against the limit. Say in the PR body which ordering produces it.
- If `rproxy` leaves the connection open in that ordering, fix it in `internal/rproxy`, so that whenever the response time limit cuts off an answer the reading of the visitor's body ends at once. The PR is then two commits: first a test that reproduces it deterministically and fails against `next`, then the fix with no test assertion changed.
- If only the test's timing is at fault, fix the test, keeping both cases and what they check.
- No test, request or value is removed; no product limit changes.
Package: `internal/rproxy`, whose doc says it is the reverse proxy. Follow `AGENTS.md`: checks only through `make` targets, apart from the uncommitted reproduction runs. `make fmt`, then `flock -w 1800 /srv/code/tmp/.gate-smallwebwaf.lock make check`; a `flock` timeout also exits 1, so read the output. Edit by hand. Title ending ` (closes #N)` with this issue's number. Label the PR `needs-review`.
Model: opus-5-5
clawbot
self-assigned this 2026-11-11 08:47:50 +01:00
Fixed in #348. Here is the cause: when the app's answer arrived before the app had been sent the whole request, no timer enforced SWRP_MAX_RESPONSE_TIME_MS. An app that sent a first part and then stalled kept the connection open. On a busy host the test's first part got through, which hit that case. The PR body names the ordering and explains the test changes.
Model: opus-5-5
Fixed in https://git.eeqj.de/sneak/smallwebwaf/pulls/348. Here is the cause: when the app's answer arrived before the app had been sent the whole request, no timer enforced `SWRP_MAX_RESPONSE_TIME_MS`. An app that sent a first part and then stalled kept the connection open. On a busy host the test's first part got through, which hit that case. The PR body names the ordering and explains the test changes.
Model: opus-5-5
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
nextis red, intermittently.TestAVisitorThatStopsALittleShortHasTheConnectionClosedWhenTheAnswerIsCutOff/with_the_body_in_two_partsininternal/rproxy/limits_test.go, added by #322, failed in two of themake testruns onnextsince it landed (#318 (comment), #318 (comment)):limits_test.go:986: read "hello" (... i/o timeout), want the connection closed, after 10 s. The verbose rerun passed, but the test phase still exits 1. Nothing else merges intonextuntil this is fixed.The visitor got the first part of the app's body, and then the connection stayed open: in some ordering, the cut-off answer does not end the reading of the visitor's body. That is the defect 322 set out to fix, so the likeliest cause is an ordering the fix in
finish(internal/rproxy/request.go) does not cover, for example the second write failing with nothing left to flush, so the last flush succeeds and the reading is never ended.Definition of done, one PR into
next, labelledcritical:-countmany times beside a CPU-heavy container, or with the app's second part timed against the limit. Say in the PR body which ordering produces it.rproxyleaves the connection open in that ordering, fix it ininternal/rproxy, so that whenever the response time limit cuts off an answer the reading of the visitor's body ends at once. The PR is then two commits: first a test that reproduces it deterministically and fails againstnext, then the fix with no test assertion changed.Package:
internal/rproxy, whose doc says it is the reverse proxy. FollowAGENTS.md: checks only throughmaketargets, apart from the uncommitted reproduction runs.make fmt, thenflock -w 1800 /srv/code/tmp/.gate-smallwebwaf.lock make check; aflocktimeout also exits 1, so read the output. Edit by hand. Title ending(closes #N)with this issue's number. Label the PRneeds-review.Model: opus-5-5
Fixed in #348. Here is the cause: when the app's answer arrived before the app had been sent the whole request, no timer enforced
SWRP_MAX_RESPONSE_TIME_MS. An app that sent a first part and then stalled kept the connection open. On a busy host the test's first part got through, which hit that case. The PR body names the ordering and explains the test changes.Model: opus-5-5