File tree Expand file tree Collapse file tree 2 files changed +38
-2
lines changed Expand file tree Collapse file tree 2 files changed +38
-2
lines changed Original file line number Diff line number Diff line change @@ -740,7 +740,10 @@ impl Collector {
740
740
address_id,
741
741
} => {
742
742
match client_states. get_mut ( & client_id) {
743
- Some ( client_info) => client_info. error_count += stat. value as u64 ,
743
+ Some ( client_info) => {
744
+ client_info. state = ClientState :: Idle ;
745
+ client_info. error_count += stat. value as u64 ;
746
+ }
744
747
None => warn ! ( "Got event {:?} for unregistered client" , stat. name) ,
745
748
}
746
749
@@ -757,7 +760,10 @@ impl Collector {
757
760
address_id,
758
761
} => {
759
762
match client_states. get_mut ( & client_id) {
760
- Some ( client_info) => client_info. error_count += stat. value as u64 ,
763
+ Some ( client_info) => {
764
+ client_info. state = ClientState :: Idle ;
765
+ client_info. error_count += stat. value as u64 ;
766
+ }
761
767
None => warn ! ( "Got event {:?} for unregistered client" , stat. name) ,
762
768
}
763
769
Original file line number Diff line number Diff line change 146
146
end
147
147
end
148
148
149
+ context "client fail to checkout connection from the pool" do
150
+ it "counts clients as idle" do
151
+ new_configs = processes . pgcat . current_config
152
+ new_configs [ "general" ] [ "connect_timeout" ] = 500
153
+ new_configs [ "general" ] [ "ban_time" ] = 1
154
+ new_configs [ "general" ] [ "shutdown_timeout" ] = 1
155
+ new_configs [ "pools" ] [ "sharded_db" ] [ "users" ] [ "0" ] [ "pool_size" ] = 1
156
+ processes . pgcat . update_config ( new_configs )
157
+ processes . pgcat . reload_config
158
+
159
+ threads = [ ]
160
+ connections = Array . new ( 5 ) { PG ::connect ( "#{ pgcat_conn_str } ?application_name=one_query" ) }
161
+ connections . each do |c |
162
+ threads << Thread . new { c . async_exec ( "SELECT pg_sleep(1)" ) rescue PG ::SystemError }
163
+ end
164
+
165
+ sleep ( 2 )
166
+ admin_conn = PG ::connect ( processes . pgcat . admin_connection_string )
167
+ results = admin_conn . async_exec ( "SHOW POOLS" ) [ 0 ]
168
+ %w[ cl_active cl_waiting cl_cancel_req sv_active sv_used sv_tested sv_login maxwait ] . each do |s |
169
+ raise StandardError , "Field #{ s } was expected to be 0 but found to be #{ results [ s ] } " if results [ s ] != "0"
170
+ end
171
+ expect ( results [ "cl_idle" ] ) . to eq ( "5" )
172
+ expect ( results [ "sv_idle" ] ) . to eq ( "1" )
173
+
174
+ threads . map ( &:join )
175
+ connections . map ( &:close )
176
+ end
177
+ end
178
+
149
179
context "clients overwhelm server pools" do
150
180
let ( :processes ) { Helpers ::Pgcat . single_instance_setup ( "sharded_db" , 2 ) }
151
181
You can’t perform that action at this time.
0 commit comments