From d99bb73a9b217565912b74ffff74295c9a3c5072 Mon Sep 17 00:00:00 2001 From: aitbc1 Date: Thu, 19 Mar 2026 12:19:17 +0100 Subject: [PATCH] refactor(combined_main): remove P2P placeholder and improve shutdown handling - Remove P2P placeholder server integration - Add global service instance for signal handlers - Add set_stop_event method for clean shutdown - Improve signal handler to properly trigger stop event - Store event loop reference for shutdown coordination - Update logging to reflect P2P removal --- .../src/aitbc_chain/combined_main.py | 26 ++++++++++++------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/apps/blockchain-node/src/aitbc_chain/combined_main.py b/apps/blockchain-node/src/aitbc_chain/combined_main.py index 57996e83..5dccc5fc 100644 --- a/apps/blockchain-node/src/aitbc_chain/combined_main.py +++ b/apps/blockchain-node/src/aitbc_chain/combined_main.py @@ -15,7 +15,6 @@ from pathlib import Path sys.path.insert(0, str(Path(__file__).parent.parent)) from aitbc_chain.main import BlockchainNode, _run as run_node -from aitbc_chain.p2p_placeholder import run_server as run_p2p_server from aitbc_chain.config import settings logging.basicConfig(level=logging.INFO) @@ -25,22 +24,23 @@ class CombinedService: def __init__(self): self._stop_event = asyncio.Event() self._tasks = [] + self._loop = None + + def set_stop_event(self): + """Set the stop event to trigger shutdown""" + if self._stop_event and not self._stop_event.is_set(): + self._stop_event.set() async def start(self): """Start both blockchain node and P2P server""" + self._loop = asyncio.get_running_loop() logger.info("Starting combined blockchain service") - # Start P2P server - p2p_task = asyncio.create_task( - run_p2p_server(settings.p2p_bind_host, settings.p2p_bind_port) - ) - self._tasks.append(p2p_task) - # Start blockchain node in background node_task = asyncio.create_task(run_node()) self._tasks.append(node_task) - logger.info(f"Combined service started - P2P on {settings.p2p_bind_host}:{settings.p2p_bind_port}, Node on mainnet") + logger.info(f"Combined service started - Node on mainnet") try: await self._stop_event.wait() @@ -62,14 +62,21 @@ class CombinedService: self._tasks.clear() logger.info("Combined service stopped") +# Global service instance for signal handler +_service_instance = None + def signal_handler(signum, frame): """Handle shutdown signals""" logger.info(f"Received signal {signum}, initiating shutdown") - # The event will be checked in the main loop + global _service_instance + if _service_instance: + _service_instance.set_stop_event() async def main(): """Main entry point""" + global _service_instance service = CombinedService() + _service_instance = service # Set up signal handlers signal.signal(signal.SIGTERM, signal_handler) @@ -81,6 +88,7 @@ async def main(): logger.info("Received keyboard interrupt") finally: await service.stop() + _service_instance = None if __name__ == "__main__": asyncio.run(main())