Repository navigation
fix(broadcast): restart event sampling for send-only channels - #2466
Merged
Merged
Conversation
edgurgel
approved these changes
Nov 3, 2026
|
🎉 This PR is included in version 2.151.7 🎉 The release is available on GitHub release Your semantic-release bot 📦🚀 |
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.
A send-only WebSocket channel (
self: false, no other listeners) keeps acknowledging Broadcast messages after its events sampler stops for idleness, but never restarts sampling. The handler increments the raw counter while only receiving channels request sampler recovery.Ensure the sampler exists before incrementing the accepted send. Restart arguments come from the current tenant cache, preserving updated limits. Initialization must precede the increment because it resets the raw counter. The existing one-second shutdown cache grace is unchanged; recovery is covered after that entry expires. This restores sampling and telemetry without adding sender-side rate enforcement.
Regression tests use actual acknowledged channel sends after normal idle shutdown and verify all three events reach the sampled bucket. The existing raised-limit test now restarts through real sends and verifies the current limit and all 100 sampled events.
Validated on upstream
f5f0dab9:git diff --checkpass. Dialyzer retains 13 configured ignores and zero unnecessary skips.Local validation uses Elixir 1.19.5, OTP 28.5.0.8 and native PostgreSQL 17.11 with repository auth fixtures. CI pins OTP 28.5.0.4. Docker integration/E2E and hosted CI are not established by these local checks.
Closes #2465.