Files
Alexey MilovidovandClaude Opus 4.8 295ced78d1 Enable more Ruff checks (F401/F403/F405/F541/F841) and clean up tests
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]>
2026-06-18 23:22:25 +00:00

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