From f6ce8a935c094680d367cdcbb98ea4d8f7a3a5d1 Mon Sep 17 00:00:00 2001 From: yxd92326 Date: Tue, 8 Jul 2025 10:06:51 +0100 Subject: [PATCH 1/2] Stop the dormancy check being async, and instead run as thread --- src/murfey/client/multigrid_control.py | 25 ++++++++++++++++--------- src/murfey/util/client.py | 14 ++++++++++++++ 2 files changed, 30 insertions(+), 9 deletions(-) diff --git a/src/murfey/client/multigrid_control.py b/src/murfey/client/multigrid_control.py index c3b24a050..5959811ee 100644 --- a/src/murfey/client/multigrid_control.py +++ b/src/murfey/client/multigrid_control.py @@ -9,7 +9,6 @@ from typing import Dict, List, Optional from urllib.parse import quote, urlparse -import aiohttp import requests import murfey.client.websocket @@ -22,7 +21,7 @@ from murfey.client.watchdir import DirWatcher from murfey.util import posix_path from murfey.util.api import url_path_for -from murfey.util.client import capture_post, get_machine_config_client +from murfey.util.client import capture_delete, capture_post, get_machine_config_client log = logging.getLogger("murfey.client.mutligrid_control") @@ -117,7 +116,7 @@ def _multigrid_watcher_finalised(self): self.multigrid_watcher_active = False self.dormancy_check() - async def dormancy_check(self): + def dormancy_check(self): if not self.multigrid_watcher_active: if ( all(r._finalised for r in self.rsync_processes.values()) @@ -126,14 +125,22 @@ async def dormancy_check(self): w.thread.is_alive() for w in self._environment.watchers.values() ) ): - async with aiohttp.ClientSession() as clientsession: - async with clientsession.delete( + + def call_remove_session(): + with capture_delete( f"{self._environment.url.geturl()}{url_path_for('session_control.router', 'remove_session', session_id=self.session_id)}", - json={"access_token": self.token, "token_type": "bearer"}, ) as response: - success = response.status == 200 - if not success: - log.warning(f"Could not delete database data for {self.session_id}") + success = response.status_code == 200 if response else False + if not success: + log.warning( + f"Could not delete database data for {self.session_id}" + ) + + dormancy_thread = threading.Thread( + name=f"Session deletion thread {self.session_id}", + target=call_remove_session, + ) + dormancy_thread.start() self.dormant = True def abandon(self): diff --git a/src/murfey/util/client.py b/src/murfey/util/client.py index 2721baa0f..b564a3cbc 100644 --- a/src/murfey/util/client.py +++ b/src/murfey/util/client.py @@ -123,6 +123,20 @@ def capture_get(url: str) -> Optional[requests.Response]: return response +def capture_delete(url: str) -> Optional[requests.Response]: + try: + response = requests.delete(url) + except Exception as e: + logger.error(f"Exception encountered in delete of {url}: {e}") + response = None + if response and response.status_code != 200: + logger.warning( + f"Response to delete of {url} had status code {response.status_code}. " + f"The reason given was {response.reason}" + ) + return response + + def set_default_acquisition_output( new_output_dir: Path, software_settings_output_directories: dict[str, list[str]], From fd418ffa671cd0efa394683423c78d5a15ffb3f8 Mon Sep 17 00:00:00 2001 From: yxd92326 Date: Tue, 8 Jul 2025 10:35:09 +0100 Subject: [PATCH 2/2] capture_delete is a function --- src/murfey/client/multigrid_control.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/murfey/client/multigrid_control.py b/src/murfey/client/multigrid_control.py index 5959811ee..df4531877 100644 --- a/src/murfey/client/multigrid_control.py +++ b/src/murfey/client/multigrid_control.py @@ -127,10 +127,10 @@ def dormancy_check(self): ): def call_remove_session(): - with capture_delete( + response = capture_delete( f"{self._environment.url.geturl()}{url_path_for('session_control.router', 'remove_session', session_id=self.session_id)}", - ) as response: - success = response.status_code == 200 if response else False + ) + success = response.status_code == 200 if response else False if not success: log.warning( f"Could not delete database data for {self.session_id}"