fix: end the address-list read on shutdown, and bound silences, not replies (#155)
The read of the bouncer's own list at the start of a reconciliation
ignored the context, so a shutdown during it waited for the whole list.
rosapi.RunArgsContext now watches its context: once it is done, a
blocked write or read ends at once, and routeros.Client.RunContext
closes the connection the command was cut short on instead of retrying
it. ListAddresses takes the reconcile context, and a read a shutdown
ended is logged as one Info line.
command_timeout covered a whole reply with one deadline, so a read that
took longer than the timeout failed every time, its retry included. The
deadline now starts again with every sentence of the reply.
A command whose retry failed on the transport left half a reply on its
connection, and the next command read the rest; that connection is now
closed.
On a virtual RouterOS 7.24.4 with 30,000 entries: SIGTERM during the
read exits in 0.26 s with the rules removed (killed at 10 s with 4 rules
left before); a read that takes ~30 s goes through with
command_timeout: 5s; a full pass costs the same as before.
fix: an unreachable LAPI at startup no longer empties the router's lists, and close 1.7.2 (#147)
An unreachable CrowdSec LAPI at startup emptied the router's address
lists: with retry_initial_connect (the default) go-cs-bouncer retries it
silently, the startup collection ended after 10 s with no decisions, and
the first reconciliation removed every entry the bouncer owned. The
stream now closes Synced once the LAPI's first answer, empty or not, has
been forwarded; the first reconciliation waits for it, logging a warning
every 30 s and leaving the lists as they are, then drains what the
stream queued. Reproduced in a virtual RouterOS 7.24.4: 1.7.1 emptied a
40-entry list 10 s after starting with the LAPI down; with the fix the
list stayed for 70 s and the pass added 5 when the LAPI came back.
go-cs-bouncer's logrus lines, including the one naming why the LAPI
refuses the bouncer, now go to the bouncer's own log instead of stderr.
The release-notes Docker line named untagged images (1.7.1 instead of
v1.7.1); the GoReleaser footer is fixed, and the notes of the 17 releases
that carried it were corrected. The docs give the address cache's real
type and describe the startup wait and retry_initial_connect.
Closes 1.7.2: CHANGELOG [1.7.2] - 2026-10-06, the bug report placeholder
and the build-from-source commands.