Make RabbitMQ direct selects tolerate slow consumption by pamarcos · Pull Request #108364 · ClickHouse/ClickHouse · GitHub
Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 29 additions & 0 deletions tests/integration/test_storage_rabbitmq/__init__.py
83 changes: 21 additions & 62 deletions tests/integration/test_storage_rabbitmq/test.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
from helpers.client import QueryRuntimeException
from helpers.cluster import ClickHouseCluster
from helpers.test_tools import TSV
from . import poll_direct_select_result

pytestmark = pytest.mark.timeout(1200)

Expand Down Expand Up @@ -63,6 +64,19 @@ def rabbitmq_check_result(result, check=False, reference=None):
return TSV(result) == TSV(reference)


def check_direct_select_result_polling(query, reference=None, timeout=DEFAULT_TIMEOUT_SEC):
if reference is None:
reference = "\n".join([f"{i}\t{i}" for i in range(50)])

result = poll_direct_select_result(
instance,
query,
lambda current_result: rabbitmq_check_result(current_result, reference=reference),
timeout,
)
rabbitmq_check_result(result, True, reference=reference)


# Fixtures


Expand Down Expand Up @@ -175,21 +189,7 @@ def test_rabbitmq_select(rabbitmq_cluster, secure, db, unique):
# The order of messages in select * from {db}.rabbitmq is not guaranteed, so sleep to collect everything in one select
time.sleep(1)

result = ""
deadline = time.monotonic() + DEFAULT_TIMEOUT_SEC
while time.monotonic() < deadline:
result += instance.query(
f"SELECT * FROM {db}.rabbitmq ORDER BY key", ignore_error=True
)
if rabbitmq_check_result(result):
break
time.sleep(0.05)
else:
pytest.fail(
f"Time limit of {DEFAULT_TIMEOUT_SEC} seconds reached. The result did not match the expected value."
)

rabbitmq_check_result(result, True)
check_direct_select_result_polling(f"SELECT * FROM {db}.rabbitmq ORDER BY key")


def test_rabbitmq_select_empty(rabbitmq_cluster, db, unique):
Expand Down Expand Up @@ -248,22 +248,7 @@ def test_rabbitmq_json_without_delimiter(rabbitmq_cluster, db, unique):
connection.close()
time.sleep(1)

result = ""
deadline = time.monotonic() + DEFAULT_TIMEOUT_SEC
while time.monotonic() < deadline:
result += instance.query(
f"SELECT * FROM {db}.rabbitmq ORDER BY key", ignore_error=True
)
Comment thread
pamarcos marked this conversation as resolved.
if rabbitmq_check_result(result):
break

time.sleep(0.05)
else:
pytest.fail(
f"Time limit of {DEFAULT_TIMEOUT_SEC} seconds reached. The result did not match the expected value."
)

rabbitmq_check_result(result, True)
check_direct_select_result_polling(f"SELECT * FROM {db}.rabbitmq ORDER BY key")


def test_rabbitmq_csv_with_delimiter(rabbitmq_cluster, db, unique):
Expand Down Expand Up @@ -298,22 +283,7 @@ def test_rabbitmq_csv_with_delimiter(rabbitmq_cluster, db, unique):
connection.close()
time.sleep(1)

result = ""
deadline = time.monotonic() + DEFAULT_TIMEOUT_SEC
while time.monotonic() < deadline:
result += instance.query(
f"SELECT * FROM {db}.rabbitmq ORDER BY key", ignore_error=True
)
if rabbitmq_check_result(result):
break

time.sleep(0.05)
else:
pytest.fail(
f"Time limit of {DEFAULT_TIMEOUT_SEC} seconds reached. The result did not match the expected value."
)

rabbitmq_check_result(result, True)
check_direct_select_result_polling(f"SELECT * FROM {db}.rabbitmq ORDER BY key")


def test_rabbitmq_tsv_with_delimiter(rabbitmq_cluster, db, unique):
Expand Down Expand Up @@ -398,21 +368,7 @@ def test_rabbitmq_macros(rabbitmq_cluster, db, unique):
connection.close()
time.sleep(1)

result = ""
deadline = time.monotonic() + DEFAULT_TIMEOUT_SEC
while time.monotonic() < deadline:
result += instance.query(
f"SELECT * FROM {db}.rabbitmq ORDER BY key", ignore_error=True
)
if rabbitmq_check_result(result):
break
time.sleep(0.05)
else:
pytest.fail(
f"Time limit of {DEFAULT_TIMEOUT_SEC} seconds reached. The result did not match the expected value."
)

rabbitmq_check_result(result, True)
check_direct_select_result_polling(f"SELECT * FROM {db}.rabbitmq ORDER BY key")


def test_rabbitmq_materialized_view(rabbitmq_cluster, db, unique):
Expand Down Expand Up @@ -585,6 +541,9 @@ def test_rabbitmq_many_materialized_views(rabbitmq_cluster, db, unique):
channel.basic_publish(exchange=f"{unique}_mmv", routing_key="", body=message)

is_check_passed = False
result1 = ""
result2 = ""
result3 = ""
deadline = time.monotonic() + DEFAULT_TIMEOUT_SEC
while time.monotonic() < deadline:
result1 = instance.query(f"SELECT * FROM {db}.view1 ORDER BY key")
Expand Down
28 changes: 15 additions & 13 deletions tests/integration/test_storage_rabbitmq/test_shutdown.py
Loading