|
14 | 14 |
|
15 | 15 | from time import sleep |
16 | 16 |
|
| 17 | +MAX_PG_QS_RETRIES = 50 |
| 18 | +TPC_DS_EXCLUDE_LIST = [] # actual numbers of TPC-DS tests to exclude |
| 19 | +TPC_DS_STATEMENT_TIMEOUT = 20000 # statement_timeout in ms |
| 20 | +stress_in_progress = False |
| 21 | + |
17 | 22 | def wait(conn): |
18 | 23 | """wait for some event on connection to postgres""" |
19 | 24 | while 1: |
@@ -98,18 +103,21 @@ def pg_query_state(config, pid, verbose=False, costs=False, timing=False, \ |
98 | 103 |
|
99 | 104 | conn = psycopg2.connect(**config) |
100 | 105 | curs = conn.cursor() |
101 | | - set_guc(conn, 'statement_timeout', 10000) |
| 106 | + |
| 107 | + if stress_in_progress: |
| 108 | + set_guc(conn, 'statement_timeout', TPC_DS_STATEMENT_TIMEOUT) |
| 109 | + n_retries = 0 |
102 | 110 |
|
103 | 111 | result = [] |
104 | | - n_retries = 0 |
105 | 112 | while not result: |
106 | 113 | curs.callproc('pg_query_state', (pid, verbose, costs, timing, buffers, triggers, format)) |
107 | 114 | result = curs.fetchall() |
108 | | - n_retries += 1 |
109 | 115 |
|
110 | | - if n_retries == 25: |
111 | | - print('pg_query_state tried 25 times with no effect') |
112 | | - break |
| 116 | + if stress_in_progress: |
| 117 | + n_retries += 1 |
| 118 | + if n_retries >= MAX_PG_QS_RETRIES: |
| 119 | + print('\npg_query_state tried %s times with no effect, giving up' % MAX_PG_QS_RETRIES) |
| 120 | + break |
113 | 121 |
|
114 | 122 | notices = conn.notices[:] |
115 | 123 | conn.close() |
@@ -565,24 +573,22 @@ def stress_test(config): |
565 | 573 |
|
566 | 574 | acon, = n_async_connect(config) |
567 | 575 |
|
568 | | - print('Starting test...') |
| 576 | + print('Starting TPC-DS queries...') |
569 | 577 | timeout_list = [] |
570 | | - exclude_list = [] |
571 | 578 | bar = progressbar.ProgressBar(max_value=len(queries)) |
572 | 579 | for i, query in enumerate(queries): |
573 | 580 | bar.update(i + 1) |
574 | | - if i + 1 in exclude_list: |
| 581 | + if i + 1 in TPC_DS_EXCLUDE_LIST: |
575 | 582 | continue |
576 | 583 | try: |
577 | | - # Set query timeout to 10 sec |
578 | | - set_guc(acon, 'statement_timeout', 10000) |
| 584 | + # Set query timeout to TPC_DS_STATEMENT_TIMEOUT / 1000 seconds |
| 585 | + set_guc(acon, 'statement_timeout', TPC_DS_STATEMENT_TIMEOUT) |
579 | 586 | qs = query_state(config, acon, query) |
580 | 587 |
|
581 | | - #TODO: Put here testgres exception when supported |
582 | 588 | except psycopg2.extensions.QueryCanceledError: |
583 | | - timeout_list.append(i) |
| 589 | + timeout_list.append(i + 1) |
584 | 590 |
|
585 | 591 | n_close((acon,)) |
586 | 592 |
|
587 | 593 | if len(timeout_list) > 0: |
588 | | - print('There were pg_query_state timeouts (10s) on queries: ', timeout_list) |
| 594 | + print('There were pg_query_state timeouts (%s s) on queries:' % TPC_DS_STATEMENT_TIMEOUT, timeout_list) |
0 commit comments