From 6b0324f09b584a10720ad948a5a105b47b124593 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Stucke?= Date: Fri, 5 Jul 2024 16:28:15 +0200 Subject: [PATCH] backend: better handling of too many open files errors --- src/scheduler/unpacking_scheduler.py | 8 +++++--- src/start_fact_backend.py | 10 ++++++++-- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/scheduler/unpacking_scheduler.py b/src/scheduler/unpacking_scheduler.py index 006d3f4d9..b0279b1b5 100644 --- a/src/scheduler/unpacking_scheduler.py +++ b/src/scheduler/unpacking_scheduler.py @@ -107,7 +107,8 @@ def shutdown(self): ) self.stop_containers() self._clean_tmp_dirs() - self.manager.shutdown() + if self.manager: + self.manager.shutdown() logging.info('Unpacking scheduler offline') def _clean_tmp_dirs(self): @@ -138,8 +139,9 @@ def create_containers(self): self.worker_tmp_dirs.append(tmp_dir) def stop_containers(self): - with ThreadPoolExecutor(max_workers=len(self.workers)) as pool: - pool.map(lambda container: container.stop(), self.workers) + if self.workers: + with ThreadPoolExecutor(max_workers=len(self.workers)) as pool: + pool.map(lambda container: container.stop(), self.workers) def extraction_loop(self): logging.debug(f'Starting unpacking scheduler loop (pid={os.getpid()})') diff --git a/src/start_fact_backend.py b/src/start_fact_backend.py index 460e047a5..b8b49232a 100755 --- a/src/start_fact_backend.py +++ b/src/start_fact_backend.py @@ -127,5 +127,11 @@ def _check_ulimit(): if __name__ == '__main__': - FactBackend().main() - sys.exit(0) + backend = FactBackend() + try: + backend.main() + sys.exit(0) + except OSError as error: + logging.exception(f'Exception during start: {error}') + backend.shutdown() + sys.exit(1)