Skip to content

Commit 0129fc4

Browse files
committed
fix ydb: fix flaky retry budget metrics tests
Use `metrics_diff` to avoid effect of previous tests on our metrics. commit_hash:dea3223f0c1dd786b2daad516a93e8e5a5cea530
1 parent 16914da commit 0129fc4

3 files changed

Lines changed: 79 additions & 149 deletions

File tree

.mapping.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5981,13 +5981,13 @@
59815981
"ydb/functional_tests/basic/static_config.yaml":"taxi/uservices/userver/ydb/functional_tests/basic/static_config.yaml",
59825982
"ydb/functional_tests/basic/tests-metrics/static/metrics_values.txt":"taxi/uservices/userver/ydb/functional_tests/basic/tests-metrics/static/metrics_values.txt",
59835983
"ydb/functional_tests/basic/tests-metrics/test_metrics.py":"taxi/uservices/userver/ydb/functional_tests/basic/tests-metrics/test_metrics.py",
5984-
"ydb/functional_tests/basic/tests/retry_budget_dyn_conf.py":"taxi/uservices/userver/ydb/functional_tests/basic/tests/retry_budget_dyn_conf.py",
59855984
"ydb/functional_tests/basic/tests/static/fill_events.sql":"taxi/uservices/userver/ydb/functional_tests/basic/tests/static/fill_events.sql",
59865985
"ydb/functional_tests/basic/tests/test_deadline_propagation.py":"taxi/uservices/userver/ydb/functional_tests/basic/tests/test_deadline_propagation.py",
59875986
"ydb/functional_tests/basic/tests/test_describe_table.py":"taxi/uservices/userver/ydb/functional_tests/basic/tests/test_describe_table.py",
59885987
"ydb/functional_tests/basic/tests/test_distlock.py":"taxi/uservices/userver/ydb/functional_tests/basic/tests/test_distlock.py",
59895988
"ydb/functional_tests/basic/tests/test_list.py":"taxi/uservices/userver/ydb/functional_tests/basic/tests/test_list.py",
59905989
"ydb/functional_tests/basic/tests/test_operation_settings.py":"taxi/uservices/userver/ydb/functional_tests/basic/tests/test_operation_settings.py",
5990+
"ydb/functional_tests/basic/tests/test_retry_budget_dyn_conf.py":"taxi/uservices/userver/ydb/functional_tests/basic/tests/test_retry_budget_dyn_conf.py",
59915991
"ydb/functional_tests/basic/tests/test_select.py":"taxi/uservices/userver/ydb/functional_tests/basic/tests/test_select.py",
59925992
"ydb/functional_tests/basic/tests/test_upsert.py":"taxi/uservices/userver/ydb/functional_tests/basic/tests/test_upsert.py",
59935993
"ydb/functional_tests/basic/views/base_handler.hpp":"taxi/uservices/userver/ydb/functional_tests/basic/views/base_handler.hpp",

ydb/functional_tests/basic/tests/retry_budget_dyn_conf.py

Lines changed: 0 additions & 148 deletions
This file was deleted.
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
import pytest
2+
import pytest_userver.client
3+
import pytest_userver.dynconf
4+
5+
6+
async def _make_success_request(service_client: pytest_userver.client.Client) -> None:
7+
response = await service_client.post(
8+
'ydb/select-rows',
9+
json={
10+
'service': 'srv',
11+
'channels': [1, 2, 3],
12+
'created': '2019-10-30T11:20:00+00:00',
13+
},
14+
)
15+
assert response.status_code == 200
16+
17+
18+
@pytest.mark.parametrize('requests_count', [1, 10])
19+
async def test_retry_budget(
20+
dynamic_config: pytest_userver.dynconf.DynamicConfig,
21+
service_client: pytest_userver.client.Client,
22+
monitor_client: pytest_userver.client.ClientMonitor,
23+
requests_count: int,
24+
) -> None:
25+
# The default value of token-ratio is 0.1. We set the value to 1 and expect
26+
# that the 'approx_token_count' will be increased by 1 after each request.
27+
max_token_count = 150
28+
dynamic_config.set(
29+
YDB_RETRY_BUDGET={
30+
'sampledb': {
31+
'max-tokens': max_token_count,
32+
'token-ratio': 1,
33+
'enabled': True,
34+
},
35+
},
36+
)
37+
await service_client.update_server_state()
38+
39+
async with monitor_client.metrics_diff(prefix='ydb.retry_budget') as differ:
40+
for _ in range(requests_count):
41+
await _make_success_request(service_client)
42+
43+
assert differ.value_at('account_ok') == requests_count
44+
assert differ.value_at('account_fail') == 0
45+
assert differ.current.value_at('ydb.retry_budget.approx_token_count') == (
46+
differ.baseline.value_at('ydb.retry_budget.approx_token_count') + requests_count
47+
)
48+
assert differ.current.value_at('ydb.retry_budget.max_token_count') == max_token_count
49+
50+
51+
async def test_retry_budget_success_limit(
52+
dynamic_config: pytest_userver.dynconf.DynamicConfig,
53+
service_client: pytest_userver.client.Client,
54+
monitor_client: pytest_userver.client.ClientMonitor,
55+
) -> None:
56+
async with monitor_client.metrics_diff(prefix='ydb.retry_budget') as differ:
57+
current_approx_token_count = differ.baseline.value_at('ydb.retry_budget.approx_token_count')
58+
59+
dynamic_config.set(
60+
YDB_RETRY_BUDGET={
61+
'sampledb': {
62+
'max-tokens': current_approx_token_count,
63+
'token-ratio': 1,
64+
'enabled': True,
65+
},
66+
},
67+
)
68+
await service_client.update_server_state()
69+
70+
# We can't increase the approx_token_count more than the max-tokens, so the approx_token_count won't change.
71+
requests_count = 10
72+
for _ in range(requests_count):
73+
await _make_success_request(service_client)
74+
75+
assert differ.value_at('account_ok') == requests_count
76+
assert differ.value_at('account_fail') == 0
77+
assert differ.current.value_at('ydb.retry_budget.approx_token_count') == current_approx_token_count
78+
assert differ.current.value_at('ydb.retry_budget.max_token_count') == current_approx_token_count

0 commit comments

Comments
 (0)