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:
2026-03-21 22:23:38 +00:00
parent 33fdf42a70
commit fc04a0210b
78 changed files with 331 additions and 10754 deletions

View File

@@ -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());
}
}