@@ -835,14 +835,9 @@ def set_response_callback(self, command, callback):
835
835
"""Set a custom Response Callback"""
836
836
self .cluster_response_callbacks [command ] = callback
837
837
838
- def _determine_nodes (self , * args , ** kwargs ) -> Tuple [List ["ClusterNode" ], bool ]:
839
- """Determine which nodes should be executed the command on
840
-
841
- Returns:
842
- tuple[list[Type[ClusterNode]], bool]:
843
- A tuple containing a list of target nodes and a bool indicating
844
- if the return node was chosen because it is the default node
845
- """
838
+ def _determine_nodes (self , * args , ** kwargs ) -> List ["ClusterNode" ]:
839
+ # Determine which nodes should be executed the command on.
840
+ # Returns a list of target nodes.
846
841
command = args [0 ].upper ()
847
842
if len (args ) >= 2 and f"{ args [0 ]} { args [1 ]} " .upper () in self .command_flags :
848
843
command = f"{ args [0 ]} { args [1 ]} " .upper ()
@@ -856,28 +851,28 @@ def _determine_nodes(self, *args, **kwargs) -> Tuple[List["ClusterNode"], bool]:
856
851
command_flag = self .command_flags .get (command )
857
852
if command_flag == self .__class__ .RANDOM :
858
853
# return a random node
859
- return [self .get_random_node ()], False
854
+ return [self .get_random_node ()]
860
855
elif command_flag == self .__class__ .PRIMARIES :
861
856
# return all primaries
862
- return self .get_primaries (), False
857
+ return self .get_primaries ()
863
858
elif command_flag == self .__class__ .REPLICAS :
864
859
# return all replicas
865
- return self .get_replicas (), False
860
+ return self .get_replicas ()
866
861
elif command_flag == self .__class__ .ALL_NODES :
867
862
# return all nodes
868
- return self .get_nodes (), False
863
+ return self .get_nodes ()
869
864
elif command_flag == self .__class__ .DEFAULT_NODE :
870
865
# return the cluster's default node
871
- return [self .nodes_manager .default_node ], True
866
+ return [self .nodes_manager .default_node ]
872
867
elif command in self .__class__ .SEARCH_COMMANDS [0 ]:
873
- return [self .nodes_manager .default_node ], True
868
+ return [self .nodes_manager .default_node ]
874
869
else :
875
870
# get the node that holds the key's slot
876
871
slot = self .determine_slot (* args )
877
872
node = self .nodes_manager .get_node_from_slot (
878
873
slot , self .read_from_replicas and command in READ_COMMANDS
879
874
)
880
- return [node ], False
875
+ return [node ]
881
876
882
877
def _should_reinitialized (self ):
883
878
# To reinitialize the cluster on every MOVED error,
@@ -1045,13 +1040,18 @@ def execute_command(self, *args, **kwargs):
1045
1040
res = {}
1046
1041
if not target_nodes_specified :
1047
1042
# Determine the nodes to execute the command on
1048
- target_nodes , is_default_node = self ._determine_nodes (
1043
+ target_nodes = self ._determine_nodes (
1049
1044
* args , ** kwargs , nodes_flag = passed_targets
1050
1045
)
1051
1046
if not target_nodes :
1052
1047
raise RedisClusterException (
1053
1048
f"No targets were found to execute { args } command on"
1054
1049
)
1050
+ if (
1051
+ len (target_nodes ) == 1
1052
+ and target_nodes [0 ] == self .get_default_node ()
1053
+ ):
1054
+ is_default_node = True
1055
1055
for node in target_nodes :
1056
1056
res [node .name ] = self ._execute_command (node , * args , ** kwargs )
1057
1057
# Return the processed result
@@ -1935,7 +1935,7 @@ def _send_cluster_commands(
1935
1935
if passed_targets and not self ._is_nodes_flag (passed_targets ):
1936
1936
target_nodes = self ._parse_target_nodes (passed_targets )
1937
1937
else :
1938
- target_nodes , is_default_node = self ._determine_nodes (
1938
+ target_nodes = self ._determine_nodes (
1939
1939
* c .args , node_flag = passed_targets
1940
1940
)
1941
1941
if not target_nodes :
@@ -1948,6 +1948,8 @@ def _send_cluster_commands(
1948
1948
)
1949
1949
1950
1950
node = target_nodes [0 ]
1951
+ if node == self .get_default_node ():
1952
+ is_default_node = True
1951
1953
1952
1954
# now that we know the name of the node
1953
1955
# ( it's just a string in the form of host:port )
0 commit comments