| 26 | } |
| 27 | |
| 28 | async fn cache_mgr( |
| 29 | map: Arc<HashMap<String, Arc<MemCacheObj>>>, |
| 30 | mut submit_rx: Receiver<MemCacheMeta>, |
| 31 | ) { |
| 32 | // Wait on the channel, and when we get something proceed from there. |
| 33 | while let Some(meta) = submit_rx.recv().await { |
| 34 | log::error!("mem_cache_mgr got -> {:?}", meta.req_path); |
| 35 | let MemCacheMeta { |
| 36 | req_path, headers, content, blob, refresh |
| 37 | } = meta; |
| 38 | |
| 39 | let etag = headers |
| 40 | .iter() |
| 41 | .find_map(|(hv, hk)| { |
| 42 | if hv == "etag" { |
| 43 | Some(hk.clone()) |
| 44 | } else { |
| 45 | None |
| 46 | } |
| 47 | }) |
| 48 | .unwrap_or_else(|| "".to_string()); |
| 49 | |
| 50 | let obj = Arc::new(MemCacheObj { |
| 51 | etag, refresh, headers, content, blob |
| 52 | }); |
| 53 | |
| 54 | let mut wrtxn = map.write(); |
| 55 | let _prev = wrtxn.insert(req_path, obj); |
| 56 | wrtxn.commit(); |
| 57 | } |
| 58 | } |
| 59 | |
| 60 | pub struct MemCache { |
| 61 | map: Arc<HashMap<String, Arc<MemCacheObj>>>, |