@@ -117,6 +117,19 @@ async def switch(self, master: bool):
117117 }
118118 }, node = node )
119119 else :
120+ # figure the master node
121+ async with self .node .cpool .connection () as conn :
122+ cursor = await conn .execute ("SELECT master FROM cluster WHERE guild_id = %s" , (self .node .guild_id , ))
123+ row = await cursor .fetchone ()
124+ if not row :
125+ self .log .warning ("No master available, can't register." )
126+ return
127+ master = row [0 ]
128+
129+ if master not in await self .node .get_active_nodes ():
130+ self .log .debug (f"Master node { master } is not active (yet), waiting ..." )
131+ return
132+
120133 await self .send_to_node ({
121134 "command" : "rpc" ,
122135 "service" : self .__class__ .__name__ ,
@@ -274,8 +287,16 @@ async def register_remote_node(self, name: str, public_ip: str, dcs_version: str
274287 if name == self .node .name :
275288 return
276289
277- self .log .info (f"- Registering remote node { name } ..." )
290+ if self .node .all_nodes .get (name ):
291+ self .log .debug (f"Node { name } already registered, skipping registration request." )
292+ return
293+
278294 node = NodeProxy (self .node , name , public_ip , dcs_version )
295+ if not await node .is_alive (self .node .config .get ('cluster' , {}).get ('heartbeat' , 30 )):
296+ self .log .warning (f"Node { name } is not alive (anymore). Skipping registration request." )
297+ return
298+
299+ self .log .info (f"- Registering remote node { name } ..." )
279300 # we did not find a configuration for this node, load it from remote
280301 if not node .locals :
281302 node .locals = await node .get_config ()
@@ -466,12 +487,12 @@ async def is_banned(self, ucid: str) -> dict | None:
466487 return await cursor .fetchone ()
467488
468489 async def init_remote_server (self , server_name : str , status : str , instance : str , home : str ,
469- settings : dict , options : dict , node : Node , channels : dict , dcs_port : int ,
490+ settings : dict , options : dict , node : Node | str , channels : dict , dcs_port : int ,
470491 webgui_port : int , maintenance : bool ) -> None :
471492 from core import InstanceProxy
472493
473494 # init event for an unregistered remote node received or a race condition due to master switches, ignoring
474- if not node or node == self .node :
495+ if not node or node == self .node or isinstance ( node , str ) :
475496 return
476497 try :
477498 server : ServerProxy = cast (ServerProxy , self .servers .get (server_name ))
0 commit comments