44
55from prometheus_client import start_http_server
66
7- from .receptor import Receptor
87from .controller import Controller
9- from . import node
108
119logger = logging .getLogger (__name__ )
1210
1311
1412def run_as_node (config ):
15- receptor = Receptor (config )
16- logger .info (f'Running as Receptor node with ID: { receptor .node_id } ' )
13+ async def node_keepalive ():
14+ for node_id in controller .receptor .router .get_nodes ():
15+ await controller .ping (node_id , expected_response = False )
16+ absolute_call_time = (((int (controller .loop .time ()) + 1 ) // config .node_keepalive_interval ) + 1 ) * config .node_keepalive_interval
17+ controller .loop .call_at (absolute_call_time ,
18+ controller .loop .create_task ,
19+ node_keepalive ())
20+
21+ controller = Controller (config )
22+ logger .info (f'Running as Receptor node with ID: { controller .receptor .node_id } ' )
1723 if config .node_stats_enable :
1824 logger .info (f'Starting stats on port { config .node_stats_port } ' )
1925 start_http_server (config .node_stats_port )
20- node .mainloop (receptor , config .node_ping_interval )
26+ if not config .node_server_disable :
27+ controller .enable_server (config .node_listen_address ,
28+ config .node_listen_port )
29+ for peer in config .node_peers :
30+ controller .loop .create_task (controller .add_peer (peer ))
31+ if config .node_keepalive_interval > 1 :
32+ controller .loop .create_task (node_keepalive ())
33+ controller .loop .create_task (controller .receptor .watch_expire ())
34+ controller .run ()
2135
2236
2337def run_as_controller (config ):
@@ -27,6 +41,7 @@ def run_as_controller(config):
2741 start_http_server (config .controller_stats_port )
2842 controller .enable_server (config .controller_listen_address ,
2943 config .controller_listen_port )
44+ controller .loop .create_task (controller .receptor .watch_expire ())
3045 controller .run ()
3146
3247
@@ -39,28 +54,28 @@ def ping_iter():
3954 while True :
4055 yield 0
4156
42- async def handle_ping ():
57+ async def ping_entrypoint ():
4358 read_task = controller .loop .create_task (read_responses ())
4459 await controller .add_peer (config .ping_peer )
4560 start_wait = time .time ()
4661 while not controller .receptor .router .node_is_known (config .ping_recipient ) and (time .time () - start_wait < 5 ):
4762 await asyncio .sleep (0.1 )
48- await do_ping ()
63+ await send_pings ()
4964 await read_task
5065
5166 async def read_responses ():
5267 for _ in ping_iter ():
5368 payload = await controller .recv ()
5469 print ("{}" .format (payload ))
5570
56- async def do_ping ():
71+ async def send_pings ():
5772 for _ in ping_iter ():
5873 await controller .ping (config .ping_recipient )
5974 await asyncio .sleep (config .ping_delay )
6075
6176 logger .info (f'Sending ping to { config .ping_recipient } via { config .ping_peer } .' )
6277 controller = Controller (config )
63- controller .run (handle_ping )
78+ controller .run (ping_entrypoint )
6479
6580
6681def run_as_send (config ):
0 commit comments