mirror of
https://github.com/scylladb/scylladb.git
synced 2026-06-04 05:53:13 +00:00
test: add expected_error to rebuild_node operation
This commit is contained in:
@@ -326,10 +326,12 @@ class ManagerClient():
|
||||
timeout=ScyllaServer.TOPOLOGY_TIMEOUT)
|
||||
self._driver_update()
|
||||
|
||||
async def rebuild_node(self, server_id: ServerNum) -> None:
|
||||
async def rebuild_node(self, server_id: ServerNum,
|
||||
expected_error: str | None = None) -> None:
|
||||
"""Tell a node to rebuild with Scylla REST API"""
|
||||
logger.debug("ManagerClient rebuild %s", server_id)
|
||||
await self.client.put_json(f"/cluster/rebuild-node/{server_id}",
|
||||
data = {"expected_error": expected_error}
|
||||
await self.client.put_json(f"/cluster/rebuild-node/{server_id}", data,
|
||||
timeout=ScyllaServer.TOPOLOGY_TIMEOUT)
|
||||
self._driver_update()
|
||||
|
||||
|
||||
@@ -1371,16 +1371,32 @@ class ScyllaClusterManager:
|
||||
async def _cluster_rebuild_node(self, request) -> None:
|
||||
"""Run rebuild node on Scylla REST API for a specified server"""
|
||||
assert self.cluster
|
||||
data = await request.json()
|
||||
server_id = ServerNum(int(request.match_info["server_id"]))
|
||||
self.logger.info("_cluster_rebuild_node %s", server_id)
|
||||
assert server_id in self.cluster.running, "Can't rebuild not running node"
|
||||
server = self.cluster.running[server_id]
|
||||
expected_error = data["expected_error"]
|
||||
try:
|
||||
await self.cluster.api.rebuild_node(server.ip_addr, timeout=ScyllaServer.TOPOLOGY_TIMEOUT)
|
||||
except (RuntimeError, HTTPError) as exc:
|
||||
raise RuntimeError(
|
||||
f"rebuild failed (server: {server}), check log at {server.log_filename},"
|
||||
f" error: \"{exc}\"")
|
||||
if expected_error:
|
||||
if expected_error not in str(exc):
|
||||
raise RuntimeError(
|
||||
f"rebuild failed (server: {server}) but did not contain expected error"
|
||||
f"(\"{expected_error}\", check log file at {server.log_filename}, error: \"{exc}\"")
|
||||
else:
|
||||
return
|
||||
else:
|
||||
raise RuntimeError(
|
||||
f"rebuild failed (server: {server}), check log at {server.log_filename},"
|
||||
f" error: \"{exc}\"")
|
||||
else:
|
||||
if expected_error:
|
||||
raise RuntimeError(
|
||||
f"rebuild succeeded when it should have failed (server: {server},"
|
||||
f" expected_error: \"{expected_error}\"), check log file at {server.log_filename}")
|
||||
|
||||
await self.cluster.server_stop(server_id, gracefully=True)
|
||||
|
||||
async def _server_get_config(self, request: aiohttp.web.Request) -> dict[str, object]:
|
||||
|
||||
Reference in New Issue
Block a user