@@ -39,6 +39,7 @@ def __init__(self, startup_nodes=None, reinitialize_steps=None, skip_full_covera
3939 self .connection_kwargs = connection_kwargs
4040 self .nodes = {}
4141 self .slots = {}
42+ self .slave_nodes_by_master = {}
4243 self .startup_nodes = [] if startup_nodes is None else startup_nodes
4344 self .orig_startup_nodes = [node for node in self .startup_nodes ]
4445 self .reinitialize_counter = 0
@@ -257,6 +258,8 @@ def initialize(self):
257258 node , node_name = self .make_node_obj (master_node [0 ], master_node [1 ], 'master' )
258259 nodes_cache [node_name ] = node
259260
261+ self .slave_nodes_by_master [node_name ] = set ()
262+
260263 for i in range (int (slot [0 ]), int (slot [1 ]) + 1 ):
261264 if i not in tmp_slots :
262265 tmp_slots [i ] = [node ]
@@ -267,6 +270,7 @@ def initialize(self):
267270 target_slave_node , slave_node_name = self .make_node_obj (slave_node [0 ], slave_node [1 ], 'slave' )
268271 nodes_cache [slave_node_name ] = target_slave_node
269272 tmp_slots [i ].append (target_slave_node )
273+ self .slave_nodes_by_master [node_name ].add (slave_node_name )
270274 else :
271275 # Validate that 2 nodes want to use the same slot cache setup
272276 if tmp_slots [i ][0 ]['name' ] != node ['name' ]:
@@ -409,6 +413,22 @@ def set_node(self, host, port, server_type=None):
409413
410414 return node
411415
416+ def get_node (self , host , port , server_type = None ):
417+ node , node_name = self .make_node_obj (host , port , server_type )
418+ if node_name not in self .nodes :
419+ self .nodes [node_name ] = node
420+ return self .nodes [node_name ]
421+
422+ def move_slot_to_node (self , slot , node ):
423+ node_name = node ['name' ]
424+ self .slots [slot ] = [node ]
425+ slave_nodes = self .slave_nodes_by_master .get (node_name )
426+ if slave_nodes :
427+ for slave_name in slave_nodes :
428+ slave_node = self .nodes .get (slave_name )
429+ if slave_node :
430+ self .slots [slot ].append (slave_node )
431+
412432 def populate_startup_nodes (self ):
413433 """
414434 Do something with all startup nodes and filters out any duplicates
0 commit comments