Skip to content

Commit 2a35767

Browse files
authored
Improve secondary index stress-test (#30457)
1 parent 970b791 commit 2a35767

File tree

3 files changed

+17
-6
lines changed

3 files changed

+17
-6
lines changed

ydb/tests/stress/common/common.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,13 @@ def __init__(self, endpoint, database, use_query_service=False, sessions=100):
1919
def wait_connection(self, timeout=5):
2020
self.driver.wait(timeout, fail_fast=True)
2121

22-
def query(self, statement, is_ddl, parameters=None, retry_settings=None):
22+
def query(self, statement, is_ddl, parameters=None, retry_settings=None, log_error=True):
2323
if self.use_query_service:
2424
try:
2525
return self.session_pool.execute_with_retries(query=statement, parameters=parameters, retry_settings=retry_settings)
2626
except Exception as e:
27-
logger.error(f"Error: {e} while executing query: {statement}")
27+
if log_error:
28+
logger.error(f"Error: {e} while executing query: {statement}")
2829
raise e
2930
else:
3031
if is_ddl:

ydb/tests/stress/oltp_workload/__main__.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
# -*- coding: utf-8 -*-
22
import argparse
3+
import logging
4+
import os
35

46
from ydb.tests.stress.oltp_workload.workload import WorkloadRunner
57
from ydb.tests.stress.common.common import YdbClient
68

9+
logging.basicConfig(level=os.getenv('LOG_LEVEL', 'INFO'))
710

811
if __name__ == "__main__":
912
parser = argparse.ArgumentParser(

ydb/tests/stress/oltp_workload/workload/type/secondary_index.py

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ class WorkloadConfig:
2323
cover_max_columns: int = 2
2424
allowed_secondary_indexes_count: List[int] = field(default_factory=lambda: [1, 2, 3, 8, 16])
2525
unique_indexes_allowed: bool = True
26-
unique_index_probability: float = 0.1
26+
unique_index_probability: float = 0.05
2727
null_probability: float = 0.05
2828

2929
# Column types
@@ -476,6 +476,8 @@ def run_for_table(self, table_name: str) -> None:
476476
self.verify_table(table_name, table_info)
477477
self.drop_table(table_name)
478478

479+
print(f"Workload for table {table_name} completed.")
480+
479481
def _get_batch(self, pk_size: int, pk_only: bool, table_info: TableInfo = None) -> List[List[Any]]:
480482
"""Generate a batch of rows for operations"""
481483
batch_rows = []
@@ -550,9 +552,9 @@ def _execute_query_with_retry(self, query: str, is_ddl: bool, parameters: Dict[s
550552
try:
551553
if parameters:
552554
logger.debug(f"Query: {query} Params: {parameters}")
553-
return self.client.query(query, is_ddl, parameters)
555+
return self.client.query(query, is_ddl, parameters, log_error=False)
554556
else:
555-
return self.client.query(query, is_ddl)
557+
return self.client.query(query, is_ddl, log_error=False)
556558
except (ydb.issues.Aborted, ydb.issues.Unavailable, ydb.issues.Undetermined) as e:
557559
last_exception = e
558560
if attempt < self.config.max_retries - 1:
@@ -820,9 +822,10 @@ def _verify_index_uniqueness(
820822

821823
def _loop(self):
822824
"""Main loop for the workload"""
825+
iteration = 0
823826
while not self.is_stop_requested():
824827
threads = []
825-
for table_name in [f'test{i}' for i in range(self.config.tables_inflight)]:
828+
for table_name in [f'test_{iteration}_{i}' for i in range(self.config.tables_inflight)]:
826829
threads.append(
827830
threading.Thread(target=lambda t=table_name: self.run_for_table(t), name=f'{table_name}')
828831
)
@@ -833,6 +836,10 @@ def _loop(self):
833836
for thread in threads:
834837
thread.join()
835838

839+
print(f"Iteration {iteration} finished.")
840+
print(self.stats.get_stats())
841+
iteration += 1
842+
836843
def get_workload_thread_funcs(self):
837844
"""Get the thread functions for the workload"""
838845
return [self._loop]

0 commit comments

Comments
 (0)