BREAKING CHANGE(ts-api,rustproxy): remove deprecated TypeScript protocol and utility exports while hardening QUIC, HTTP/3, WebSocket, and rate limiter cleanup paths
This commit is contained in:
@@ -411,11 +411,24 @@ impl MetricsCollector {
|
||||
}
|
||||
|
||||
/// Record a backend connection closing.
|
||||
/// Removes all per-backend tracking entries when the active count reaches 0.
|
||||
pub fn backend_connection_closed(&self, key: &str) {
|
||||
if let Some(counter) = self.backend_active.get(key) {
|
||||
let val = counter.load(Ordering::Relaxed);
|
||||
if val > 0 {
|
||||
counter.fetch_sub(1, Ordering::Relaxed);
|
||||
let prev = counter.fetch_sub(1, Ordering::Relaxed);
|
||||
if prev <= 1 {
|
||||
// Active count reached 0 — clean up all per-backend maps
|
||||
drop(counter); // release DashMap ref before remove
|
||||
self.backend_active.remove(key);
|
||||
self.backend_total.remove(key);
|
||||
self.backend_protocol.remove(key);
|
||||
self.backend_connect_errors.remove(key);
|
||||
self.backend_handshake_errors.remove(key);
|
||||
self.backend_request_errors.remove(key);
|
||||
self.backend_connect_time_us.remove(key);
|
||||
self.backend_connect_count.remove(key);
|
||||
self.backend_pool_hits.remove(key);
|
||||
self.backend_pool_misses.remove(key);
|
||||
self.backend_h2_failures.remove(key);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1213,10 +1226,13 @@ mod tests {
|
||||
// No entry created
|
||||
assert!(collector.backend_active.get(key).is_none());
|
||||
|
||||
// Open one, close two — should saturate at 0
|
||||
// Open one, close — entries are removed when active count reaches 0
|
||||
collector.backend_connection_opened(key, Duration::from_millis(1));
|
||||
collector.backend_connection_closed(key);
|
||||
// Entry should be cleaned up (active reached 0)
|
||||
assert!(collector.backend_active.get(key).is_none());
|
||||
// Second close on missing entry is a no-op
|
||||
collector.backend_connection_closed(key);
|
||||
assert_eq!(collector.backend_active.get(key).unwrap().load(Ordering::Relaxed), 0);
|
||||
assert!(collector.backend_active.get(key).is_none());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user