mirror of
https://github.com/hanzoai/datastore.git
synced 2026-09-26 13:55:07 +00:00
Follow-up to #105171, which added `ruff` with a deliberately narrow, bug-class-only rule set and left the unused-name and star-import rules off pending a dedicated cleanup pass. This enables that second batch in `pyproject.toml` and fixes every violation across the tree (the bulk in integration tests): - `F401` unused-import and `F841` unused-variable: removed, preserving any side-effecting right-hand side (e.g. `result = node.query(...)` becomes `node.query(...)`). Two `try: import ...` feature probes are kept with `# noqa: F401`. - `F541` f-string-missing-placeholders: dropped the redundant `f` prefix. - `F403`/`F405` star imports: every `from module import *` is expanded into explicit imports of the names actually used, taken from each name's real origin, so stdlib/third-party names import from their real source rather than through a test "convenience bundle". The now-empty `tests/integration/helpers/kafka/common_direct.py` bundle is removed and its three remaining consumers import `_VarintBytes`/`KafkaAdminClient` directly. Eliminating the star imports surfaced a real bug the wildcard had masked from `F821`: `generate_presets.py` in `test_prometheus_protocols` called an undefined `execute_instant_query_with_http_api`; fixed to the existing `execute_query_via_http_api`. No `black`/`isort` reformatting was applied (neither is enforced in the style check), so the diff is limited to the lint fixes themselves. Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
77 lines
2.8 KiB
Python
Executable File
77 lines
2.8 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
import time
|
|
|
|
import pytest
|
|
|
|
from helpers.cluster import ClickHouseCluster, CLICKHOUSE_START_COMMAND
|
|
from helpers.client import QueryRuntimeException
|
|
|
|
|
|
cluster = ClickHouseCluster(__file__)
|
|
node1 = cluster.add_instance(
|
|
"node1",
|
|
main_configs=["configs/min_cpu_busy_time.xml"],
|
|
clickhouse_start_cmd=f"taskset -c 0 {CLICKHOUSE_START_COMMAND}",
|
|
)
|
|
node2 = cluster.add_instance(
|
|
"node2",
|
|
main_configs=["configs/early_drop.xml"],
|
|
clickhouse_start_cmd=f"taskset -c 1 {CLICKHOUSE_START_COMMAND}",
|
|
)
|
|
|
|
|
|
@pytest.fixture(scope="module")
|
|
def started_cluster():
|
|
try:
|
|
cluster.start()
|
|
yield cluster
|
|
finally:
|
|
cluster.shutdown()
|
|
|
|
|
|
def test_overload(started_cluster):
|
|
queries = []
|
|
for i in range(4):
|
|
queries.append(node1.get_query_request("select * from numbers(1e18) format null", ignore_error=True, timeout=30))
|
|
|
|
def wait_for_queries():
|
|
for query in queries:
|
|
query.get_answer()
|
|
|
|
for i in range(60):
|
|
try:
|
|
node1.query("select 1 settings min_os_cpu_wait_time_ratio_to_throw=1, max_os_cpu_wait_time_ratio_to_throw=6")
|
|
except QueryRuntimeException as ex:
|
|
assert "(SERVER_OVERLOADED)" in str(ex), "Only server overloaded error is expected"
|
|
wait_for_queries() # Needed for flaky check to make sure CPU is not loaded with queries from previous runs
|
|
return
|
|
time.sleep(0.3)
|
|
|
|
assert False, "Expected to get the server overloaded error at least once"
|
|
wait_for_queries() # Needed for flaky check to make sure CPU is not loaded with queries from previous runs
|
|
|
|
|
|
def test_drop_connections(started_cluster):
|
|
queries = []
|
|
for i in range(4):
|
|
queries.append(node2.get_query_request("select * from numbers(1e18) format null", ignore_error=True, timeout=30))
|
|
|
|
def wait_for_queries():
|
|
for query in queries:
|
|
query.get_answer()
|
|
|
|
for i in range(60):
|
|
try:
|
|
node2.query("select 1")
|
|
except QueryRuntimeException as ex:
|
|
assert "Connection reset by peer" in str(ex), "Only connection drop is expected"
|
|
assert node2.contains_in_log("CPU is overloaded, CPU is waiting for execution way more than executing"), "Expected server overloaded error in the log"
|
|
assert node2.contains_in_log("probability used to decide whether to drop the connection"), "Expected message that the connection was dropped due to server overload in the log"
|
|
wait_for_queries() # Needed for flaky check to make sure CPU is not loaded with queries from previous runs
|
|
return
|
|
time.sleep(0.3)
|
|
|
|
assert False, "Expected to drop the connection due to the server being overloaded at least once"
|
|
wait_for_queries() # Needed for flaky check to make sure CPU is not loaded with queries from previous runs
|