Skip to content

Commit

Permalink
Fix AttributeError when client.get_default_node() returns None
Browse files Browse the repository at this point in the history
  • Loading branch information
bacchuswng committed Dec 17, 2024
1 parent 8f2276e commit 2091636
Showing 1 changed file with 16 additions and 12 deletions.
28 changes: 16 additions & 12 deletions redis/asyncio/cluster.py
Original file line number Diff line number Diff line change
Expand Up @@ -1568,18 +1568,22 @@ async def _execute(
result.args = (msg,) + result.args[1:]
raise result

default_node = nodes.get(client.get_default_node().name)
if default_node is not None:
# This pipeline execution used the default node, check if we need
# to replace it.
# Note: when the error is raised we'll reset the default node in the
# caller function.
for cmd in default_node[1]:
# Check if it has a command that failed with a relevant
# exception
if type(cmd.result) in self.__class__.ERRORS_ALLOW_RETRY:
client.replace_default_node()
break
default_cluster_node = client.get_default_node()
if default_cluster_node is not None:
# Not sure why default_cluster_node is sometimes None; maybe if the object is being
# closed during an execution? Either way, this avoids a potential AttributeError
default_node = nodes.get(default_cluster_node.name)
if default_node is not None:
# This pipeline execution used the default node, check if we need
# to replace it.
# Note: when the error is raised we'll reset the default node in the
# caller function.
for cmd in default_node[1]:
# Check if it has a command that failed with a relevant
# exception
if type(cmd.result) in self.__class__.ERRORS_ALLOW_RETRY:
client.replace_default_node()
break

return [cmd.result for cmd in stack]

Expand Down

0 comments on commit 2091636

Please sign in to comment.