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(
15    id: CatalystId,
16    chain: RegistrationChain,
17) {
18    CassandraSession::get(true).inspect(|session| {
19        session.caches().rbac_persistent_chains().insert(id, chain);
20    });
21}
22
23/// Returns a cached persistent chain by the given Catalyst ID.
24pub fn cached_persistent_rbac_chain(
25    session: &CassandraSession,
26    id: &CatalystId,
27) -> Option<RegistrationChain> {
28    let cache = session.caches().rbac_persistent_chains();
29    if !cache.is_enabled() {
30        return None;
31    }
32    cache
33        .get(id)
34        .inspect(|_| {
35            rbac_persistent_chains_cache_hits_inc();
36        })
37        .or_else(|| {
38            rbac_persistent_chains_cache_miss_inc();
39            None
40        })
41}