Skip to content

Commit d0e8171

Browse files
authored
Fix too many idle servers (#140)
* Fix too many idle servers * oops
1 parent 069d760 commit d0e8171

File tree

1 file changed

+15
-7
lines changed

1 file changed

+15
-7
lines changed

src/client.rs

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,9 @@ pub struct Client<S, T> {
7373
/// Last server process id we talked to.
7474
last_server_id: Option<i32>,
7575

76+
/// Connected to server
77+
connected_to_server: bool,
78+
7679
/// Name of the server pool for this client (This comes from the database name in the connection string)
7780
target_pool_name: String,
7881

@@ -429,6 +432,7 @@ where
429432
target_pool_name: target_pool_name.clone(),
430433
target_user_name: target_user_name.clone(),
431434
shutdown_event_receiver: shutdown_event_receiver,
435+
connected_to_server: false,
432436
});
433437
}
434438

@@ -461,6 +465,7 @@ where
461465
target_pool_name: String::from("undefined"),
462466
target_user_name: String::from("undefined"),
463467
shutdown_event_receiver: shutdown_event_receiver,
468+
connected_to_server: false,
464469
});
465470
}
466471

@@ -652,6 +657,7 @@ where
652657
// Server is assigned to the client in case the client wants to
653658
// cancel a query later.
654659
server.claim(self.process_id, self.secret_key);
660+
self.connected_to_server = true;
655661

656662
// Update statistics.
657663
if let Some(last_address_id) = self.last_address_id {
@@ -875,6 +881,7 @@ where
875881
// The server is no longer bound to us, we can't cancel it's queries anymore.
876882
debug!("Releasing server back into the pool");
877883
self.stats.server_idle(server.process_id(), address.id);
884+
self.connected_to_server = false;
878885
self.release();
879886
self.stats.client_idle(self.process_id, address.id);
880887
}
@@ -1002,15 +1009,16 @@ impl<S, T> Drop for Client<S, T> {
10021009
let mut guard = self.client_server_map.lock();
10031010
guard.remove(&(self.process_id, self.secret_key));
10041011

1005-
// Update statistics.
1006-
if let Some(address_id) = self.last_address_id {
1007-
self.stats.client_disconnecting(self.process_id, address_id);
1012+
// Dirty shutdown
1013+
// TODO: refactor, this is not the best way to handle state management.
1014+
if self.connected_to_server {
1015+
if let Some(address_id) = self.last_address_id {
1016+
self.stats.client_disconnecting(self.process_id, address_id);
10081017

1009-
if let Some(process_id) = self.last_server_id {
1010-
self.stats.server_idle(process_id, address_id);
1018+
if let Some(process_id) = self.last_server_id {
1019+
self.stats.server_idle(process_id, address_id);
1020+
}
10111021
}
10121022
}
1013-
1014-
// self.release();
10151023
}
10161024
}

0 commit comments

Comments
 (0)