@@ -78,26 +78,28 @@ def run_tpcds(config):
78
78
79
79
# periodically run pg_query_state on running backend trying to get
80
80
# crash of PostgreSQL
81
- MAX_PG_QS_RETRIES = 10
82
- PG_QS_DELAY ,BEFORE_GOT_QS_DELAY = 0.1 ,0.1
83
- BEFORE_GOT_QS , GOT_QS = range (2 )
84
- state ,n_retries = BEFORE_GOT_QS ,0
81
+ MAX_FIRST_GETTING_QS_RETRIES = 10
82
+ PG_QS_DELAY ,BEFORE_GETTING_QS_DELAY = 0.1 ,0.1
83
+ BEFORE_GETTING_QS , GETTING_QS = range (2 )
84
+ state ,n_first_getting_qs_retries = BEFORE_GETTING_QS ,0
85
85
while True :
86
- result ,_ = common .pg_query_state (config ,pid )
87
- if state == BEFORE_GOT_QS :
88
- if len (result )> 0 :
89
- state = GOT_QS
86
+ result ,notices = common .pg_query_state (config ,pid )
87
+ # run state machine to determine the first getting query state
88
+ # and query finishing
89
+ if state == BEFORE_GETTING_QS :
90
+ if len (result )> 0 or common .BACKEND_IS_ACTIVE_INFO in notices :
91
+ state = GETTING_QS
90
92
continue
91
- n_retries += 1
92
- if n_retries >= MAX_PG_QS_RETRIES :
93
+ n_first_getting_qs_retries += 1
94
+ if n_first_getting_qs_retries >= MAX_FIRST_GETTING_QS_RETRIES :
93
95
# pg_query_state callings don't return any result, more likely run
94
96
# query has completed
95
97
break
96
- time .sleep (BEFORE_GOT_QS_DELAY )
97
- if state == GOT_QS :
98
- if len ( result ) == 0 :
98
+ time .sleep (BEFORE_GETTING_QS_DELAY )
99
+ elif state == GETTING_QS :
100
+ if common . BACKEND_IS_IDLE_INFO in notices :
99
101
break
100
- time .sleep (PG_QS_DELAY )
102
+ time .sleep (PG_QS_DELAY )
101
103
102
104
# wait for real query completion
103
105
common .wait (acon )