From b8a9e23dc92e110122220f093840357fc137571e Mon Sep 17 00:00:00 2001 From: Greg Furman Date: Wed, 29 Jan 2025 14:40:37 +0200 Subject: [PATCH] fix: Explicitly stop ESM workers on LocalStack shutdown --- .../services/lambda_/event_source_mapping/esm_worker.py | 5 +++++ localstack-core/localstack/services/lambda_/provider.py | 3 +++ 2 files changed, 8 insertions(+) diff --git a/localstack-core/localstack/services/lambda_/event_source_mapping/esm_worker.py b/localstack-core/localstack/services/lambda_/event_source_mapping/esm_worker.py index f13e52c979d40..4287656b20581 100644 --- a/localstack-core/localstack/services/lambda_/event_source_mapping/esm_worker.py +++ b/localstack-core/localstack/services/lambda_/event_source_mapping/esm_worker.py @@ -79,6 +79,11 @@ def __init__( def uuid(self) -> str: return self.esm_config["UUID"] + def stop_for_shutdown(self): + # Signal the worker's poller_loop thread to gracefully shutdown + # TODO: Once ESM state is de-coupled from lambda store, re-think this approach. + self._shutdown_event.set() + def create(self): if self.enabled: with self._state_lock: diff --git a/localstack-core/localstack/services/lambda_/provider.py b/localstack-core/localstack/services/lambda_/provider.py index f9a0415676976..c0a8da7bf8df7 100644 --- a/localstack-core/localstack/services/lambda_/provider.py +++ b/localstack-core/localstack/services/lambda_/provider.py @@ -382,6 +382,9 @@ def on_after_init(self): get_runtime_executor().validate_environment() def on_before_stop(self) -> None: + for esm_worker in self.esm_workers.values(): + esm_worker.stop_for_shutdown() + # TODO: should probably unregister routes? self.lambda_service.stop() # Attempt to signal to the Lambda Debug Mode session object to stop.