pub struct HistoryCacheStats {
pub len: AtomicUsize,
pub evicted: AtomicU64,
pub max_sn: AtomicI64,
pub min_sn: AtomicI64,
}Expand description
Atomar-aktualisierte Snapshot-Statistik eines HistoryCache.
**** das eigentliche BTreeMap-Storage des Caches
braucht weiter &mut self zum Mutieren (lese-/schreib-konkurrente
BTreeMap-Mutation gibt’s in std nicht), aber Statistik-Werte
(Laenge, max/min SN, Eviction-Counter) werden parallel in einem
Arc<HistoryCacheStats> mitgefuehrt. Monitoring-Threads, SEDP-Tick-
Loops und Telemetrie koennen so zustimmungsfrei pollen, ohne den
Writer/Reader-Lock zu nehmen.
Konsistenz-Garantie: jede mutierende Methode des Caches updated die
Atomics nach der BTreeMap-Mutation, mit Release-Ordering.
Reader nutzen Acquire-Ordering — sie sehen einen konsistenten
Stand der letzten abgeschlossenen Cache-Operation, nie einen
halb-aktualisierten Zustand der einzelnen Atomics.
Was nicht garantiert ist: cross-field-Konsistenz. Wenn ein
Reader len und dann max_sn liest, koennen zwischen den
Loads weitere Inserts passiert sein. Das ist akzeptabel fuer
Monitoring; fuer harte Wire-Pfade (Heartbeat-Build) wird weiter
der Writer-Lock genommen.
Fields§
§len: AtomicUsizeAnzahl Changes im Cache (entspricht BTreeMap::len).
evicted: AtomicU64Anzahl per KeepLast-Eviction verworfener Samples seit Start.
max_sn: AtomicI64Hoechste SN im Cache, oder [STATS_SENTINEL_NO_SN] wenn leer.
min_sn: AtomicI64Niedrigste SN im Cache, oder [STATS_SENTINEL_NO_SN] wenn leer.
Implementations§
Source§impl HistoryCacheStats
impl HistoryCacheStats
Sourcepub fn snapshot(&self) -> HistoryCacheSnapshot
pub fn snapshot(&self) -> HistoryCacheSnapshot
Snapshot der vier Atomics als Plain-Old-Data-Struct. Wird mit
Acquire-Ordering geladen — synchronisiert mit der
Release-Speicheroperation in HistoryCache::insert /
HistoryCache::remove_up_to.