Get or create circuit breaker for an agent
(&self, agent_id: &crate::types::AgentId)
| 286 | |
| 287 | /// Get or create circuit breaker for an agent |
| 288 | async fn get_circuit_breaker(&self, agent_id: &crate::types::AgentId) -> CircuitBreaker { |
| 289 | // Try to read first (more efficient for existing breakers) |
| 290 | { |
| 291 | let breakers = self.circuit_breakers.read().await; |
| 292 | if let Some(breaker) = breakers.get(agent_id) { |
| 293 | return breaker.clone(); |
| 294 | } |
| 295 | } |
| 296 | |
| 297 | // If not found, acquire write lock and create |
| 298 | let mut breakers = self.circuit_breakers.write().await; |
| 299 | breakers |
| 300 | .entry(agent_id.clone()) |
| 301 | .or_insert_with(|| CircuitBreaker::new(self.circuit_breaker_config.clone())) |
| 302 | .clone() |
| 303 | } |
| 304 | |
| 305 | /// Get current concurrency limit |
| 306 | pub async fn max_concurrency(&self) -> usize { |
no test coverage detected