Files
scylladb/test/alternator/test_service_levels.py
Nadav Har'El 4ae45eb367 test/alternator: remove unused imports
Remove many unused "import" statements or parts of import statement.
All of them were detected by Copilot, but I verified each one manually
and prepared this patch.

Signed-off-by: Nadav Har'El <nyh@scylladb.com>

Closes scylladb/scylladb#27676
2025-12-24 13:44:28 +02:00

54 lines
2.4 KiB
Python

# Copyright 2023-present ScyllaDB
#
# SPDX-License-Identifier: LicenseRef-ScyllaDB-Source-Available-1.0
import pytest
from test.alternator.test_metrics import metrics, get_metrics, check_increases_metric
from contextlib import contextmanager
import time
from .util import random_string, unique_table_name
from .test_cql_rbac import new_role, new_dynamodb
# new_service_level() is a context manager for temporarily creating a new
# service level with a unique name and attaching it to the given role.
# The fixture returns the new service level's name.
@contextmanager
def new_service_level(cql, role):
# The service level name is not a table's name but it doesn't matter.
# Because our unique_table_name() uses (deliberately) a non-lower-case
# character, the role name has to be quoted in double quotes when used
# in CQL below.
sl = unique_table_name()
cql.execute(f'CREATE SERVICE LEVEL "{sl}"')
cql.execute(f'ATTACH SERVICE LEVEL "{sl}" TO "{role}"')
try:
yield sl
finally:
cql.execute(f'DROP SERVICE LEVEL "{sl}"')
def test_service_level_metrics(test_table, request, dynamodb, cql, metrics):
print("Please make sure authorization is enforced in your Scylla installation: alternator_enforce_authorization: true")
p = random_string()
c = random_string()
_ = get_metrics(metrics)
with new_role(cql, superuser=True) as (role, key):
with new_service_level(cql, role) as sl:
with new_dynamodb(dynamodb, role, key) as ses:
# service_level_controler acts asynchronously in a loop so we can fail metric check
# if it hasn't processed service level update yet. It can take as long as 10 seconds.
started = time.time()
timeout = 30
while True:
try:
with check_increases_metric(metrics,
['scylla_storage_proxy_coordinator_write_latency_count'],
{'scheduling_group_name': f'sl:{sl}'}):
ses.meta.client.put_item(TableName=test_table.name, Item={'p': p, 'c': c})
break # no exception, test passed
except:
if time.time() - started > timeout:
raise
else:
time.sleep(0.5) # retry