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 ('\n pg_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 ()
@@ -549,6 +557,7 @@ def load_tpcds_data(config):
549
557
550
558
def stress_test (config ):
551
559
"""TPC-DS stress test"""
560
+ stress_in_progress = True
552
561
load_tpcds_data (config )
553
562
554
563
print ('Preparing TPC-DS queries...' )
@@ -565,24 +574,24 @@ def stress_test(config):
565
574
566
575
acon , = n_async_connect (config )
567
576
568
- print ('Starting test ...' )
577
+ print ('Starting TPC-DS queries ...' )
569
578
timeout_list = []
570
- exclude_list = []
571
579
bar = progressbar .ProgressBar (max_value = len (queries ))
572
580
for i , query in enumerate (queries ):
573
581
bar .update (i + 1 )
574
- if i + 1 in exclude_list :
582
+ if i + 1 in TPC_DS_EXCLUDE_LIST :
575
583
continue
576
584
try :
577
- # Set query timeout to 10 sec
578
- set_guc (acon , 'statement_timeout' , 10000 )
585
+ # Set query timeout to TPC_DS_STATEMENT_TIMEOUT / 1000 seconds
586
+ set_guc (acon , 'statement_timeout' , TPC_DS_STATEMENT_TIMEOUT )
579
587
qs = query_state (config , acon , query )
580
588
581
- #TODO: Put here testgres exception when supported
582
589
except psycopg2 .extensions .QueryCanceledError :
583
- timeout_list .append (i )
590
+ timeout_list .append (i + 1 )
584
591
585
592
n_close ((acon ,))
586
593
587
594
if len (timeout_list ) > 0 :
588
- print ('There were pg_query_state timeouts (10s) on queries: ' , timeout_list )
595
+ print ('There were pg_query_state timeouts (%s s) on queries:' % TPC_DS_STATEMENT_TIMEOUT , timeout_list )
596
+
597
+ stress_in_progress = False
0 commit comments