From 498368a20a22fbc58ca27d0b2ebab12fbfce6949 Mon Sep 17 00:00:00 2001 From: Ouziel Slama Date: Tue, 25 Feb 2025 17:04:47 +0000 Subject: [PATCH] fix shutdown after rebuild --- .../counterpartycore/lib/cli/server.py | 17 +++++++++++++---- .../test/integrations/rebuild_test.py | 2 +- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/counterparty-core/counterpartycore/lib/cli/server.py b/counterparty-core/counterpartycore/lib/cli/server.py index e677b71db6..a433cd0e26 100755 --- a/counterparty-core/counterpartycore/lib/cli/server.py +++ b/counterparty-core/counterpartycore/lib/cli/server.py @@ -655,7 +655,8 @@ def run(self): def stop(self): logger.info("Stopping Asset Conservation Checker thread...") self.stop_event.set() - self.db.interrupt() + if self.db is not None: + self.db.interrupt() self.join() if self.db is not None: self.db.close() @@ -679,6 +680,7 @@ def __init__(self, args, log_stream=None, stop_when_ready=False): self.log_stream = log_stream self.profiler = None self.stop_when_ready = stop_when_ready + self.stopped = False # Log all config parameters, sorted by key # Filter out default values #TODO: these should be set in a different way @@ -766,13 +768,14 @@ def run_server(self): logger.info("Starting profiler before catchup...") self.profiler = cProfile.Profile() self.profiler.enable() - blocks.catch_up(self.db, self.api_stop_event) + blocks.catch_up(self.db) logger.info("Stopping profiler after catchup...") self.profiler.disable() else: - blocks.catch_up(self.db, self.api_stop_event) + blocks.catch_up(self.db) if self.stop_when_ready: + self.stop() # stop here return # Blockchain Watcher @@ -788,6 +791,8 @@ def run(self): _thread.interrupt_main() def stop(self): + if self.stopped: + return logger.info("Shutting down...") if self.db: CurrentState().set_ledger_state(self.db, "Stopping") @@ -822,6 +827,7 @@ def stop(self): logger.error("Error dumping profiler stats: %s", e) self.profiler = None + self.stopped = True logger.info("Shutdown complete.") @@ -830,7 +836,10 @@ def start_all(args, log_stream=None, stop_when_ready=False): try: server.start() while True: - server.join(1) + if not server.stopped: + server.join(1) + else: + break except KeyboardInterrupt: logger.warning("Interruption received. Shutting down...") finally: diff --git a/counterparty-core/counterpartycore/test/integrations/rebuild_test.py b/counterparty-core/counterpartycore/test/integrations/rebuild_test.py index 98f9b02aa8..d582875a06 100644 --- a/counterparty-core/counterpartycore/test/integrations/rebuild_test.py +++ b/counterparty-core/counterpartycore/test/integrations/rebuild_test.py @@ -3,4 +3,4 @@ def test_rebuild(): sh_counterparty_server, _db_file, _api_url = prepare("testnet4") - sh_counterparty_server("rebuild") + sh_counterparty_server("rebuild", "-vv")