Skip to content

Commit 74977eb

Browse files
bacchuswngpetyaslavova
authored andcommitted
Fix AttributeError when client.get_default_node() returns None (redis#3458)
1 parent 8a28b96 commit 74977eb

File tree

1 file changed

+18
-12
lines changed

1 file changed

+18
-12
lines changed

redis/asyncio/cluster.py

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1612,18 +1612,24 @@ async def _execute(
16121612
result.args = (msg,) + result.args[1:]
16131613
raise result
16141614

1615-
default_node = nodes.get(client.get_default_node().name)
1616-
if default_node is not None:
1617-
# This pipeline execution used the default node, check if we need
1618-
# to replace it.
1619-
# Note: when the error is raised we'll reset the default node in the
1620-
# caller function.
1621-
for cmd in default_node[1]:
1622-
# Check if it has a command that failed with a relevant
1623-
# exception
1624-
if type(cmd.result) in self.__class__.ERRORS_ALLOW_RETRY:
1625-
client.replace_default_node()
1626-
break
1615+
default_cluster_node = client.get_default_node()
1616+
1617+
# Check whether the default node was used. In some cases,
1618+
# 'client.get_default_node()' may return None. The check below
1619+
# prevents a potential AttributeError.
1620+
if default_cluster_node is not None:
1621+
default_node = nodes.get(default_cluster_node.name)
1622+
if default_node is not None:
1623+
# This pipeline execution used the default node, check if we need
1624+
# to replace it.
1625+
# Note: when the error is raised we'll reset the default node in the
1626+
# caller function.
1627+
for cmd in default_node[1]:
1628+
# Check if it has a command that failed with a relevant
1629+
# exception
1630+
if type(cmd.result) in self.__class__.ERRORS_ALLOW_RETRY:
1631+
client.replace_default_node()
1632+
break
16271633

16281634
return [cmd.result for cmd in stack]
16291635

0 commit comments

Comments
 (0)