test.py: manager: add server_get_returncode() method

The method return None if Scylla process is still running or returncode.
If there is no Scylla process launched then raise NoSuchProcess exception.
This commit is contained in:
Evgeniy Naydanov
2025-01-22 12:34:13 +00:00
parent d874beb17f
commit 2cb640f95c
2 changed files with 22 additions and 0 deletions

View File

@@ -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)

View File

@@ -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"]))