Look up or create the merger for `(session_id, array)`.
(&self, session_id: &str, array: &str)
| 250 | |
| 251 | /// Look up or create the merger for `(session_id, array)`. |
| 252 | pub fn get_or_create(&self, session_id: &str, array: &str) -> Arc<MultiShardMerger> { |
| 253 | let mut mergers = match self.mergers.lock() { |
| 254 | Ok(g) => g, |
| 255 | Err(e) => { |
| 256 | warn!("merger_registry: lock poisoned — returning fresh merger: {e}"); |
| 257 | return Arc::new(MultiShardMerger::new(session_id, array)); |
| 258 | } |
| 259 | }; |
| 260 | mergers |
| 261 | .entry((session_id.to_owned(), array.to_owned())) |
| 262 | .or_insert_with(|| Arc::new(MultiShardMerger::new(session_id, array))) |
| 263 | .clone() |
| 264 | } |
| 265 | |
| 266 | /// Remove all mergers for `session_id` (called on disconnect). |
| 267 | pub fn remove_session(&self, session_id: &str) { |