Files
scylladb/test/nodetool/test_tasks.py
Aleksandra Martyniuk e37d1bcb98 api: task_manager: add /task_manager/drain
In the following patches, get_status won't be unregistering finished
tasks. However, tests need a functionality to drop a task, so that
they could manipulate only with the tasks for operations that were
invoked by these tests.

Add /task_manager/drain/{module} to unregister all finished tasks
from the module. Add respective nodetool command.
2025-01-27 11:23:45 +01:00

151 lines
7.1 KiB
Python

#
# Copyright 2024-present ScyllaDB
#
# SPDX-License-Identifier: LicenseRef-ScyllaDB-Source-Available-1.0
#
from test.nodetool.rest_api_mock import expected_request
from test.nodetool.utils import check_nodetool_fails_with_error_contains
def test_failure(nodetool, scylla_only):
check_nodetool_fails_with_error_contains(
nodetool,
("tasks"),
{"expected_requests": []},
["unrecognized operation argument"])
def test_abort(nodetool, scylla_only):
nodetool("tasks", "abort", "675ed9f4-6564-6dbd-can8-43fddce952gy", expected_requests=[
expected_request("POST", "/task_manager/abort_task/675ed9f4-6564-6dbd-can8-43fddce952gy")])
res = nodetool("tasks", "abort", "675ed9f4-6564-6dbd-can8-43fddce952gy", expected_requests=[
expected_request("POST", "/task_manager/abort_task/675ed9f4-6564-6dbd-can8-43fddce952gy", response=[], response_status=403)])
assert "Task with id 675ed9f4-6564-6dbd-can8-43fddce952gy is not abortable" in res.stdout
def test_abort_failure(nodetool, scylla_only):
check_nodetool_fails_with_error_contains(
nodetool,
("tasks", "abort"),
{"expected_requests": []},
["required parameter is missing"])
def test_drain(nodetool, scylla_only):
nodetool("tasks", "drain", expected_requests=[
expected_request("GET", "/task_manager/list_modules", response=["repair", "compaction"]),
expected_request("POST", "/task_manager/drain/repair"),
expected_request("POST", "/task_manager/drain/compaction")])
nodetool("tasks", "drain", "--module", "repair", expected_requests=[
expected_request("POST", "/task_manager/drain/repair")])
def test_user_ttl(nodetool, scylla_only):
nodetool("tasks", "user-ttl", expected_requests=[
expected_request("GET", "/task_manager/user_ttl")])
params = { "user_ttl": "10" }
nodetool("tasks", "user-ttl", "--set", params["user_ttl"], expected_requests=[
expected_request("POST", "/task_manager/user_ttl", params)])
def test_list(nodetool, scylla_only):
nodetool("tasks", "list", "repair", expected_requests=[
expected_request("GET", "/task_manager/list_module_tasks/repair", response=[])])
params = {
"keyspace": "ks",
"table": "t"
}
nodetool("tasks", "list", "compaction", "--keyspace", params["keyspace"], "--table", params["table"],
expected_requests=[expected_request("GET", "/task_manager/list_module_tasks/compaction", params, response=[])])
params = {
"internal": "true"
}
nodetool("tasks", "list", "repair", "--internal", expected_requests=[
expected_request("GET", "/task_manager/list_module_tasks/repair", params, response=[])])
iterations = 2
nodetool("tasks", "list", "repair", "--interval", "1", "--iterations", str(iterations), expected_requests=[
expected_request("GET", "/task_manager/list_module_tasks/repair", response=[]) for _ in range(0, iterations + 1)])
def test_list_failure(nodetool, scylla_only):
check_nodetool_fails_with_error_contains(
nodetool,
("tasks", "list"),
{"expected_requests": []},
["required parameter is missing"])
check_nodetool_fails_with_error_contains(
nodetool,
("tasks", "list", "repair", "--x"),
{"expected_requests": []},
["unrecognised option"])
def test_modules(nodetool, scylla_only):
nodetool("tasks", "modules", expected_requests=[
expected_request("GET", "/task_manager/list_modules", response=[])])
def test_status(nodetool, scylla_only):
nodetool("tasks", "status", "675ed9f4-6564-6dbd-can8-43fddce952gy", expected_requests=[
expected_request("GET", "/task_manager/task_status/675ed9f4-6564-6dbd-can8-43fddce952gy")])
def test_status_failure(nodetool, scylla_only):
check_nodetool_fails_with_error_contains(
nodetool,
("tasks", "status"),
{"expected_requests": []},
["required parameter is missing"])
def test_tree(nodetool, scylla_only):
nodetool("tasks", "tree", "675ed9f4-6564-6dbd-can8-43fddce952gy", expected_requests=[
expected_request("GET", "/task_manager/task_status_recursive/675ed9f4-6564-6dbd-can8-43fddce952gy", response=[])])
nodetool("tasks", "tree", expected_requests=[
expected_request("GET", "/task_manager/list_modules", response=["repair"]),
expected_request("GET", "/task_manager/list_module_tasks/repair", response=[{ "task_id": "675ed9f4-6564-6dbd-can8-43fddce952gy" }]),
expected_request("GET", "/task_manager/task_status_recursive/675ed9f4-6564-6dbd-can8-43fddce952gy", response=[])])
def test_tree_failure(nodetool, scylla_only):
check_nodetool_fails_with_error_contains(
nodetool,
("tasks", "tree", "foo", "bar"),
{"expected_requests": []},
["cannot be specified more than once"])
def test_ttl(nodetool, scylla_only):
nodetool("tasks", "ttl", expected_requests=[
expected_request("GET", "/task_manager/ttl")])
params = { "ttl": "10" }
nodetool("tasks", "ttl", "--set", params["ttl"], expected_requests=[
expected_request("POST", "/task_manager/ttl", params)])
def test_wait(nodetool, scylla_only):
nodetool("tasks", "wait", "675ed9f4-6564-6dbd-can8-43fddce952gy", expected_requests=[
expected_request("GET", "/task_manager/wait_task/675ed9f4-6564-6dbd-can8-43fddce952gy")])
res = nodetool("tasks", "wait", "675ed9f4-6564-6dbd-can8-43fddce952gy", "--timeout", "10", expected_requests=[
expected_request("GET", "/task_manager/wait_task/675ed9f4-6564-6dbd-can8-43fddce952gy", params={ "timeout": "10" }, response=[], response_status=408)], check_return_code=False)
def test_wait_quiet(nodetool, scylla_only):
nodetool("tasks", "wait", "675ed9f4-6564-6dbd-can8-43fddce952gy", "--quiet", expected_requests=[
expected_request("GET", "/task_manager/wait_task/675ed9f4-6564-6dbd-can8-43fddce952gy", response={ "state": "done" })])
res = nodetool("tasks", "wait", "675ed9f4-6564-6dbd-can8-43fddce952gy", "--quiet", expected_requests=[
expected_request("GET", "/task_manager/wait_task/675ed9f4-6564-6dbd-can8-43fddce952gy", response={ "state": "failed" })], check_return_code=False)
assert res.returncode == 123
res = nodetool("tasks", "wait", "675ed9f4-6564-6dbd-can8-43fddce952gy", "--quiet", "--timeout", "10", expected_requests=[
expected_request("GET", "/task_manager/wait_task/675ed9f4-6564-6dbd-can8-43fddce952gy", params={ "timeout": "10" }, response=[], response_status=408)], check_return_code=False)
assert res.returncode == 124
res = nodetool("tasks", "wait", "675ed9f4-6564-6dbd-can8-43fddce952gy", "--quiet", expected_requests=[
expected_request("GET", "/task_manager/wait_task/675ed9f4-6564-6dbd-can8-43fddce952gy", response=[], response_status=400)], check_return_code=False)
assert res.returncode == 125
def test_wait_failure(nodetool, scylla_only):
check_nodetool_fails_with_error_contains(
nodetool,
("tasks", "wait"),
{"expected_requests": []},
["required parameter is missing"])