Conversation
Every request that was in flight when a custom multi-buy channel died called inc_backoff separately, so one dropped connection doubled the delay once per failed request. Eight concurrent failures walked the window from 1s to over two minutes, and on a route with fail_on_unavailable set that meant every packet was dropped for the whole time. None of it was visible either: the backoff short-circuit and the cold-channel path emitted no metrics, so a route dropping everything looked the same as a route with no traffic. - Escalate the backoff once per window instead of once per failed request. - Cap the window at 60s for routes that fail closed. Dropping every packet is a heavy penalty and shouldn't ride the 5 minute ceiling meant for routes that fall back to local counting. - Let a single probe through when a window expires and hold the rest back until it reports, so a service that is still down costs one call rather than one per packet. The hold expires on its own, so a probe that never answers can't wedge the route. - Count every decision in hpr_multi_buy_decision_counter, including the drops that were previously silent. - Stop the grpc channel and clear its backoff entry when a route is removed or repointed at a different host, instead of leaking both for the life of the node.
helium/enacl declared the NIF unload hook with the upgrade signature, which older compilers only warned about. The base image ships gcc 14, where -Wincompatible-pointer-types is an error, so compiling the C sources fails outright. CI got away with it until now only because the _build cache always carried a prebuilt enacl_nif.so; once that cache expired, the first from-scratch build of the test profile broke. libp2p_crypto already asks for enacl master, which has carried the fix since helium/enacl#2, but our lock still pinned a commit from before it. rebar3 refuses to upgrade a transitive dep, so promote enacl to a top-level dep and relock it. The corrected unload signature is the only difference between the two commits.
michaeldjeffrey
approved these changes
Sep 25, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Every request that was in flight when a custom multi-buy channel died called inc_backoff separately, so one dropped connection doubled the delay once per failed request. Eight concurrent failures walked the window from 1s to over two minutes, and on a route with fail_on_unavailable set that meant every packet was dropped for the whole time. None of it was visible either: the backoff short-circuit and the cold-channel path emitted no metrics, so a route dropping everything looked the same as a route with no traffic.