From ddeec2ff4c3edd76e02f19104e99cb6410abc543 Mon Sep 17 00:00:00 2001 From: Jorrit Schaap <schaap@astron.nl> Date: Thu, 31 Dec 2020 12:26:43 +0100 Subject: [PATCH] TMSS-493: start background services in parallel in the background (because to are independent of each other, and this saves startup wait time) --- SAS/TMSS/test/test_utils.py | 35 +++++++++++++++++++++++++++-------- 1 file changed, 27 insertions(+), 8 deletions(-) diff --git a/SAS/TMSS/test/test_utils.py b/SAS/TMSS/test/test_utils.py index 383f86c2eb6..2566fba2cc7 100644 --- a/SAS/TMSS/test/test_utils.py +++ b/SAS/TMSS/test/test_utils.py @@ -362,17 +362,22 @@ class TMSSTestEnvironment: user.is_superuser = True user.save() - logger.debug("started TMSSTestEnvironment ldap/database/django in %.1fs", (datetime.datetime.utcnow()-starttime).total_seconds()) + logger.info("started TMSSTestEnvironment ldap/database/django in %.1fs", (datetime.datetime.utcnow()-starttime).total_seconds()) + + # start all (needed) services in background threads, keep track of them. + service_threads = [] if self._start_ra_test_environment: self.ra_test_environment = RATestEnvironment(exchange=self._exchange, broker=self._broker) - self.ra_test_environment.start() + service_threads.append(threading.Thread(target=self.ra_test_environment.start)) + service_threads[-1].start() if self._start_postgres_listener: # start the TMSSPGListener, so the changes in the database are posted as EventMessages on the bus from lofar.sas.tmss.services.tmss_postgres_listener import TMSSPGListener self.postgres_listener = TMSSPGListener(exchange=self._exchange, broker=self._broker, dbcreds=self.database.dbcreds) - self.postgres_listener.start() + service_threads.append(threading.Thread(target=self.postgres_listener.start)) + service_threads[-1].start() if self._start_websocket: # start the websocket service, so the changes in the database are posted (via the messagebus) to an http web socket @@ -380,12 +385,15 @@ class TMSSTestEnvironment: self._start_pg_listener = True from lofar.sas.tmss.services.websocket_service import create_service self.websocket_service = create_service(exchange=self._exchange, broker=self._broker) - self.websocket_service.start_listening() + service_threads.append(threading.Thread(target=self.websocket_service.start_listening)) + service_threads[-1].start() + if self._start_subtask_scheduler: from lofar.sas.tmss.services.scheduling.subtask_scheduling import create_subtask_scheduling_service self.subtask_scheduler = create_subtask_scheduling_service(exchange=self._exchange, broker=self._broker) - self.subtask_scheduler.start_listening() + service_threads.append(threading.Thread(target=self.subtask_scheduler.start_listening())) + service_threads[-1].start() if self._start_dynamic_scheduler: from lofar.sas.tmss.services.scheduling.dynamic_scheduling import create_dynamic_scheduling_service, models @@ -395,27 +403,38 @@ class TMSSTestEnvironment: setting.value = True setting.save() self.dynamic_scheduler = create_dynamic_scheduling_service(exchange=self._exchange, broker=self._broker) - self.dynamic_scheduler.start_listening() + service_threads.append(threading.Thread(target=self.dynamic_scheduler.start_listening)) + service_threads[-1].start() if self._start_workflow_service: from lofar.sas.tmss.services.workflow_service import create_workflow_service self.workflow_service = create_workflow_service(exchange=self._exchange, broker=self._broker) - self.workflow_service.start_listening() + service_threads.append(threading.Thread(target=self.workflow_service.start_listening)) + service_threads[-1].start() if self._start_feedback_service: try: from lofar.sas.tmss.services.feedback_handling import TMSSFeedbackListener self.feedback_service = TMSSFeedbackListener() - self.feedback_service.start_handling() + service_threads.append(threading.Thread(target=self.feedback_service.start_handling)) + service_threads[-1].start() except Exception as e: logger.exception(e) + # wait for all services to be fully started in their background threads + for thread in service_threads: + thread.join() + + logger.info("started TMSSTestEnvironment ldap/database/django + services in %.1fs", (datetime.datetime.utcnow()-starttime).total_seconds()) + if self._populate_schemas or self._populate_test_data: self.populate_schemas() if self._populate_test_data: self.populate_test_data() + logger.info("started TMSSTestEnvironment ldap/database/django + services + schemas + data in %.1fs", (datetime.datetime.utcnow()-starttime).total_seconds()) + def stop(self): if self.workflow_service is not None: -- GitLab