-
Notifications
You must be signed in to change notification settings - Fork 3.9k
Fix JedisBroadcastException in functionLoadReplace for Redis Cluster #4219
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
PR redis#3306 introduces broadcasting of commands like FUNCTION DELETE, FUNCTION FLUSH, FUNCTION KILL, FUNCTION RESTORE ... to all nodes of the cluster. This leads to error when command is executed on non-writable (replica) node. This commit introduces a fix to broadcast the commands only to primary nodes from the cluster.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hi @Kguswo,
Thank you for your contribution and for taking the time to work on this issue! 🙏
After reviewing your PR, I think the root cause of the problem goes back to the initial implementation when broadcasting was introduced (#3303). The original goal was to broadcast commands only to primary nodes, but it seems that currently we’re broadcasting them to all nodes. This affects all broadcasted commands, not just the FUNCTION subcommands.
To address this for all commands, we can introduce a cache of primary nodes (similar to your suggestion) and use that for all broadcasts—no need to filter by command for now. Since topology refreshes are relatively infrequent, it’s better to keep this primary-node cache updated after each topology change.
I’ve applied these changes directly in this PR so we can build on your work, and I’ll also ping the original requester of #3303 for review.
Thanks again for your effort—it’s much appreciated!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM. I will rebase my PR once it's merged. Thanks!
Change Summary
Fix JedisBroadcastException in functionLoadReplace by restricting FUNCTION commands to primary nodes only.
As FUNCTION operations are write commands, they should not be broadcast to read-only replica nodes. This change updates the broadcast logic to filter primary nodes for these commands and adds tests to verify the behavior.
Open to suggestions or corrections!
Related Issue
Closes #4144