Repository navigation
chore: release v0.7.0 - #308
Merged
Merged
Conversation
Contributor
QualOps Code Quality AnalysisStatus: Summary
🟡 Medium Issues (1)
📊 Full ReportPowered by QualOps |
afiodorov
approved these changes
Oct 6, 2026
This branch was successfully deployed
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.
Release v0.7.0
Fixed
subscribe(..., retry_on_idle_ms=...)withoutmax_recordsreadevery waiting entry in one
XREADGROUP(noCOUNT). All of them enteredthe consumer's PEL at once and were handled one by one, so an entry queued
behind slow handlers went idle past
retry_on_idle_msbefore it started,and the reclaimer re-delivered it: the handler ran twice,
_retry_countclimbed (up to the DLQ) without a failure, a large backlog came back as one
reply, and other replicas got nothing to do.
max_recordsnow defaults to1 when
retry_on_idle_msis set (not withbatch=True), on the main andthe retry stream. An explicit
max_recordsis kept. This means oneXREADGROUPper entry: setups that relied on the unbounded read forthroughput with small, fast messages can set
max_recordsexplicitly.RedisTransportnow dials its background clients (the PEL reclaimer, the groupmonitor, and the delete-on-ack client) with the broker's own connection settings,
instead of a hand-maintained whitelist of forwarded kwargs. The whitelist silently
dropped everything outside it, so against a server that needs authentication the
background clients connected unauthenticated and were rejected
(
AuthenticationError: HELLO must be called with the client already authenticated)even while the broker connected fine — and
db=/ssl=/client_namedivergedtoo (e.g. the reclaimer scanned db 0 while the broker ran on db 3). Now
username,password,db,ssl,credential_provider(ACL users and rotating tokens suchas Azure Managed Redis / Microsoft Entra ID) and the resilience kwargs all match the
broker, including when a pre-built
broker=is supplied.Requires faststream >= 0.7 — on 0.6.0
RedisBroker(url, credential_provider=…)(and
password=) raisesTypeError.(
AuthenticationErroris aConnectionError, not aResponseError, so it escapedthe loop's handler): a failed cycle is logged and retried next interval, by when
redis-py has reconnected and the credential provider has re-authenticated. A dying
monitor previously left
disconnect()re-raising and skipping reclaimer/broker/delete-client shutdown.
connect(): a secondconnect()on a shared transport reuses the existing client instead of replacingit without closing the old one.
After merging, the release will be automatically tagged and published to PyPI.