@@ -835,14 +835,9 @@ def set_response_callback(self, command, callback):
835835 """Set a custom Response Callback"""
836836 self .cluster_response_callbacks [command ] = callback
837837
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.
846841 command = args [0 ].upper ()
847842 if len (args ) >= 2 and f"{ args [0 ]} { args [1 ]} " .upper () in self .command_flags :
848843 command = f"{ args [0 ]} { args [1 ]} " .upper ()
@@ -856,28 +851,28 @@ def _determine_nodes(self, *args, **kwargs) -> Tuple[List["ClusterNode"], bool]:
856851 command_flag = self .command_flags .get (command )
857852 if command_flag == self .__class__ .RANDOM :
858853 # return a random node
859- return [self .get_random_node ()], False
854+ return [self .get_random_node ()]
860855 elif command_flag == self .__class__ .PRIMARIES :
861856 # return all primaries
862- return self .get_primaries (), False
857+ return self .get_primaries ()
863858 elif command_flag == self .__class__ .REPLICAS :
864859 # return all replicas
865- return self .get_replicas (), False
860+ return self .get_replicas ()
866861 elif command_flag == self .__class__ .ALL_NODES :
867862 # return all nodes
868- return self .get_nodes (), False
863+ return self .get_nodes ()
869864 elif command_flag == self .__class__ .DEFAULT_NODE :
870865 # return the cluster's default node
871- return [self .nodes_manager .default_node ], True
866+ return [self .nodes_manager .default_node ]
872867 elif command in self .__class__ .SEARCH_COMMANDS [0 ]:
873- return [self .nodes_manager .default_node ], True
868+ return [self .nodes_manager .default_node ]
874869 else :
875870 # get the node that holds the key's slot
876871 slot = self .determine_slot (* args )
877872 node = self .nodes_manager .get_node_from_slot (
878873 slot , self .read_from_replicas and command in READ_COMMANDS
879874 )
880- return [node ], False
875+ return [node ]
881876
882877 def _should_reinitialized (self ):
883878 # To reinitialize the cluster on every MOVED error,
@@ -1045,13 +1040,18 @@ def execute_command(self, *args, **kwargs):
10451040 res = {}
10461041 if not target_nodes_specified :
10471042 # Determine the nodes to execute the command on
1048- target_nodes , is_default_node = self ._determine_nodes (
1043+ target_nodes = self ._determine_nodes (
10491044 * args , ** kwargs , nodes_flag = passed_targets
10501045 )
10511046 if not target_nodes :
10521047 raise RedisClusterException (
10531048 f"No targets were found to execute { args } command on"
10541049 )
1050+ if (
1051+ len (target_nodes ) == 1
1052+ and target_nodes [0 ] == self .get_default_node ()
1053+ ):
1054+ is_default_node = True
10551055 for node in target_nodes :
10561056 res [node .name ] = self ._execute_command (node , * args , ** kwargs )
10571057 # Return the processed result
@@ -1935,7 +1935,7 @@ def _send_cluster_commands(
19351935 if passed_targets and not self ._is_nodes_flag (passed_targets ):
19361936 target_nodes = self ._parse_target_nodes (passed_targets )
19371937 else :
1938- target_nodes , is_default_node = self ._determine_nodes (
1938+ target_nodes = self ._determine_nodes (
19391939 * c .args , node_flag = passed_targets
19401940 )
19411941 if not target_nodes :
@@ -1948,6 +1948,8 @@ def _send_cluster_commands(
19481948 )
19491949
19501950 node = target_nodes [0 ]
1951+ if node == self .get_default_node ():
1952+ is_default_node = True
19511953
19521954 # now that we know the name of the node
19531955 # ( it's just a string in the form of host:port )
0 commit comments