diff --git a/test/pylib/manager_client.py b/test/pylib/manager_client.py index c0aea2666d..182af29b2a 100644 --- a/test/pylib/manager_client.py +++ b/test/pylib/manager_client.py @@ -32,6 +32,10 @@ import asyncio logger = logging.getLogger(__name__) +class NoSuchProcess(Exception): + ... + + class ManagerClient(): """Helper Manager API client Args: @@ -626,3 +630,12 @@ class ManagerClient(): async def server_get_exe(self, server_id: ServerNum) -> str: return await self.client.get_json(f"/cluster/server/{server_id}/exe") + + async def server_get_returncode(self, server_id: ServerNum) -> int | None: + match await self.client.get_json(f"/cluster/server/{server_id}/returncode"): + case "NO_SUCH_PROCESS": + raise NoSuchProcess(f"No process found for {server_id=}") + case "RUNNING": + return None + case returncode: + return int(returncode) diff --git a/test/pylib/scylla_cluster.py b/test/pylib/scylla_cluster.py index 92352230f7..5db2beb23e 100644 --- a/test/pylib/scylla_cluster.py +++ b/test/pylib/scylla_cluster.py @@ -1482,6 +1482,7 @@ class ScyllaClusterManager: add_put('/cluster/server/{server_id}/wipe_sstables', self._cluster_server_wipe_sstables) add_get('/cluster/server/{server_id}/sstables_disk_usage', self._server_get_sstables_disk_usage) add_get('/cluster/server/{server_id}/process_status', self._server_get_process_status) + add_get('/cluster/server/{server_id}/returncode', self._server_get_returncode) async def _manager_up(self, _request) -> bool: return self.is_running @@ -1821,6 +1822,14 @@ class ScyllaClusterManager: async def _server_get_exe(self, request: aiohttp.web.Request) -> str: return str(await self._server_get_attribute(request, "exe")) + async def _server_get_returncode(self, request: aiohttp.web.Request) -> str: + if cmd := await self._server_get_attribute(request=request, attribute="cmd"): + returncode = cmd.returncode + if returncode is None: + return "RUNNING" + return cmd.returncode + return "NO_SUCH_PROCESS" + async def _cluster_server_wipe_sstables(self, request: aiohttp.web.Request): data = await request.json() server_id = ServerNum(int(request.match_info["server_id"]))