cat_gateway/rbac/
chains_cache.rs

1//! A cache of RBAC chains.
2
3use catalyst_types::catalyst_id::CatalystId;
4use rbac_registration::registration::cardano::RegistrationChain;
5
6use crate::{
7    db::index::session::CassandraSession,
8    metrics::caches::rbac::{
9        rbac_persistent_chains_cache_hits_inc, rbac_persistent_chains_cache_miss_inc,
10    },
11};
12
13/// Add (or update) a persistent chain to the cache.
14pub fn cache_persistent_rbac_chain(id: CatalystId, chain: RegistrationChain) {
15    CassandraSession::get(true).inspect(|session| {
16        session.caches().rbac_persistent_chains().insert(id, chain);
17    });
18}
19
20/// Returns a cached persistent chain by the given Catalyst ID.
21pub fn cached_persistent_rbac_chain(
22    session: &CassandraSession, id: &CatalystId,
23) -> Option<RegistrationChain> {
24    let cache = session.caches().rbac_persistent_chains();
25    if !cache.is_enabled() {
26        return None;
27    }
28    cache
29        .get(id)
30        .inspect(|_| {
31            rbac_persistent_chains_cache_hits_inc();
32        })
33        .or_else(|| {
34            rbac_persistent_chains_cache_miss_inc();
35            None
36        })
37}