test: pylib: ScyllaCluster: server pause/unpause API

This commit is contained in:
Kamil Braun
2023-05-11 13:35:36 +02:00
parent 63229e48e8
commit e02249f0cd
2 changed files with 51 additions and 0 deletions

View File

@@ -161,6 +161,16 @@ class ManagerClient():
await self.server_sees_others(server_id, wait_others, interval = wait_interval)
self._driver_update()
async def server_pause(self, server_id: ServerNum) -> None:
"""Pause the specified server."""
logger.debug("ManagerClient pausing %s", server_id)
await self.client.get(f"/cluster/server/{server_id}/pause")
async def server_unpause(self, server_id: ServerNum) -> None:
"""Unpause the specified server."""
logger.debug("ManagerClient unpausing %s", server_id)
await self.client.get(f"/cluster/server/{server_id}/unpause")
async def server_add(self, replace_cfg: Optional[ReplaceConfig] = None, cmdline: Optional[List[str]] = None, config: Optional[dict[str, Any]] = None, start: bool = True) -> ServerInfo:
"""Add a new server"""
try:

View File

@@ -517,6 +517,16 @@ class ScyllaServer:
self.logger.info("gracefully stopped %s", self)
self.cmd = None
def pause(self) -> None:
"""Pause a running server."""
if self.cmd:
self.cmd.send_signal(signal.SIGSTOP)
def unpause(self) -> None:
"""Unpause a paused server."""
if self.cmd:
self.cmd.send_signal(signal.SIGCONT)
async def uninstall(self) -> None:
"""Clear all files left from a stopped server, including the
data files and log files."""
@@ -850,6 +860,21 @@ class ScyllaCluster:
return ret
return await self.server_start(server_id)
def server_pause(self, server_id: ServerNum) -> None:
"""Pause a running server process."""
self.logger.info("Cluster %s pausing server %s", self.name, server_id)
assert server_id in self.running
self.is_dirty = True
server = self.running[server_id]
server.pause()
def server_unpause(self, server_id: ServerNum) -> None:
"""Unpause a paused server process."""
self.logger.info("Cluster %s unpausing server %s", self.name, server_id)
assert server_id in self.running
server = self.running[server_id]
server.unpause()
def get_config(self, server_id: ServerNum) -> ActionReturn:
"""Get conf/scylla.yaml of the given server as a dictionary.
Fails if the server cannot be found."""
@@ -1009,6 +1034,8 @@ class ScyllaClusterManager:
add_get('/cluster/server/{server_id}/stop_gracefully', self._cluster_server_stop_gracefully)
add_get('/cluster/server/{server_id}/start', self._cluster_server_start)
add_get('/cluster/server/{server_id}/restart', self._cluster_server_restart)
add_get('/cluster/server/{server_id}/pause', self._cluster_server_pause)
add_get('/cluster/server/{server_id}/unpause', self._cluster_server_unpause)
add_put('/cluster/addserver', self._cluster_server_add)
add_put('/cluster/remove-node/{initiator}', self._cluster_remove_node)
add_get('/cluster/decommission-node/{server_id}', self._cluster_decommission_node)
@@ -1106,6 +1133,20 @@ class ScyllaClusterManager:
ret = await self.cluster.server_restart(server_id)
return aiohttp.web.Response(status=200 if ret[0] else 500, text=ret[1])
async def _cluster_server_pause(self, request) -> aiohttp.web.Response:
"""Pause the specified server."""
assert self.cluster
server_id = ServerNum(int(request.match_info["server_id"]))
self.cluster.server_pause(server_id)
return aiohttp.web.Response(status=200)
async def _cluster_server_unpause(self, request) -> aiohttp.web.Response:
"""Pause the specified server."""
assert self.cluster
server_id = ServerNum(int(request.match_info["server_id"]))
self.cluster.server_unpause(server_id)
return aiohttp.web.Response(status=200)
async def _cluster_server_add(self, request) -> aiohttp.web.Response:
"""Add a new server"""
assert self.cluster