-
Notifications
You must be signed in to change notification settings - Fork 2.6k
Prevent RuntimeError while reinitializing clusters - sync and async #3633
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
base: master
Are you sure you want to change the base?
Prevent RuntimeError while reinitializing clusters - sync and async #3633
Conversation
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.
Pull Request Overview
This PR fixes issue #3565 by preventing runtime errors when reinitializing clusters in both synchronous and asynchronous modes. The changes ensure safe iteration over startup nodes by converting the dictionary values to a tuple.
- Changed iteration in redis/cluster.py to iterate over a tuple of startup nodes.
- Changed iteration in redis/asyncio/cluster.py similarly to avoid runtime errors.
Reviewed Changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 2 comments.
File | Description |
---|---|
redis/cluster.py | Iteration over startup_nodes now uses tuple conversion to avoid runtime errors during reinitialization. |
redis/asyncio/cluster.py | Similar tuple conversion applied for asynchronous startup_nodes iteration. |
@@ -1674,7 +1674,7 @@ def initialize(self): | |||
fully_covered = False | |||
kwargs = self.connection_kwargs | |||
exception = None |
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.
[nitpick] Consider adding an inline comment explaining the use of tuple conversion to prevent RuntimeError in case the startup_nodes dictionary gets modified during iteration.
exception = None | |
exception = None | |
# Convert to tuple to prevent RuntimeError if self.startup_nodes is modified during iteration |
Copilot uses AI. Check for mistakes.
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.
Done.
@@ -1313,7 +1313,7 @@ async def initialize(self) -> None: | |||
startup_nodes_reachable = False | |||
fully_covered = False | |||
exception = None |
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.
[nitpick] Consider adding a comment clarifying that tuple conversion is used to safely iterate over startup_nodes, avoiding potential runtime errors if the dictionary is updated concurrently.
exception = None | |
exception = None | |
# Convert to tuple to safely iterate over startup_nodes, avoiding potential | |
# runtime errors if the dictionary is updated concurrently. |
Copilot uses AI. Check for mistakes.
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.
Done.
Pull Request check-list
Please make sure to review and check all of these items:
NOTE: these things are not required to open a PR and can be done
afterwards / while the PR is open.
Description of change
Fix for issue #3565
Thanks to @jakob-keller