@@ -39,6 +39,7 @@ def __init__(self, startup_nodes=None, reinitialize_steps=None, skip_full_covera
39
39
self .connection_kwargs = connection_kwargs
40
40
self .nodes = {}
41
41
self .slots = {}
42
+ self .slave_nodes_by_master = {}
42
43
self .startup_nodes = [] if startup_nodes is None else startup_nodes
43
44
self .orig_startup_nodes = [node for node in self .startup_nodes ]
44
45
self .reinitialize_counter = 0
@@ -257,6 +258,8 @@ def initialize(self):
257
258
node , node_name = self .make_node_obj (master_node [0 ], master_node [1 ], 'master' )
258
259
nodes_cache [node_name ] = node
259
260
261
+ self .slave_nodes_by_master [node_name ] = set ()
262
+
260
263
for i in range (int (slot [0 ]), int (slot [1 ]) + 1 ):
261
264
if i not in tmp_slots :
262
265
tmp_slots [i ] = [node ]
@@ -267,6 +270,7 @@ def initialize(self):
267
270
target_slave_node , slave_node_name = self .make_node_obj (slave_node [0 ], slave_node [1 ], 'slave' )
268
271
nodes_cache [slave_node_name ] = target_slave_node
269
272
tmp_slots [i ].append (target_slave_node )
273
+ self .slave_nodes_by_master [node_name ].add (slave_node_name )
270
274
else :
271
275
# Validate that 2 nodes want to use the same slot cache setup
272
276
if tmp_slots [i ][0 ]['name' ] != node ['name' ]:
@@ -409,6 +413,22 @@ def set_node(self, host, port, server_type=None):
409
413
410
414
return node
411
415
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
+
412
432
def populate_startup_nodes (self ):
413
433
"""
414
434
Do something with all startup nodes and filters out any duplicates
0 commit comments