(&self, catalog: &SystemCatalog)
| 51 | } |
| 52 | |
| 53 | pub fn load_from(&self, catalog: &SystemCatalog) -> crate::Result<()> { |
| 54 | let stored = catalog.load_all_roles()?; |
| 55 | let mut roles = self.roles.write().map_err(|e| crate::Error::Internal { |
| 56 | detail: format!("role store lock poisoned: {e}"), |
| 57 | })?; |
| 58 | for s in stored { |
| 59 | let role = CustomRole { |
| 60 | name: s.name.clone(), |
| 61 | tenant_id: TenantId::new(s.tenant_id), |
| 62 | parent: if s.parent.is_empty() { |
| 63 | None |
| 64 | } else { |
| 65 | Some(s.parent) |
| 66 | }, |
| 67 | created_at: s.created_at, |
| 68 | }; |
| 69 | roles.insert(role.name.clone(), role); |
| 70 | } |
| 71 | if !roles.is_empty() { |
| 72 | tracing::info!(count = roles.len(), "loaded custom roles from catalog"); |
| 73 | } |
| 74 | Ok(()) |
| 75 | } |
| 76 | |
| 77 | /// Clear the in-memory role map and re-run `load_from`. |
| 78 | /// Used by the catalog recovery sanity checker to repair |
no test coverage detected