chio-bounded 0.1.2

Reusable bounded in-memory collections (ring, capacity-and-TTL map) with a live size gauge, for Chio serving processes
Documentation
  • Coverage
  • 100%
    4 out of 4 items documented0 out of 0 items with examples
  • Size
  • Source code size: 53.01 kB This is the summed size of all the files inside the crates.io package for this release.
  • Documentation size: 479.26 kB This is the summed size of all files generated by rustdoc for all configured targets
  • Ø build duration
  • this release: 7s Average build duration of successful builds.
  • all releases: 7s Average build duration of successful builds in releases after 2024-10-23.
  • Links
  • backbay-labs/chio
    2 0 0
  • crates.io
  • Dependencies
  • Versions
  • Owners
  • bb-connor

chio-bounded

Reusable bounded in-memory collections for Chio serving processes: a capacity-and-TTL map, an append-only ring, and a live size gauge shared by both. The crate's one invariant: no long-lived collection in a serving process exists without a capacity policy and a live size metric.

Responsibilities

  • Provide Ring<T>, a fixed-capacity append-only buffer that evicts oldest-first and hands the evicted item back to the caller.
  • Provide BoundedMap<K, V>, a capacity-bounded cache with approximate-LRU eviction (oldest-insert order) and an optional idle-TTL sweep.
  • Provide SizeGauge, a cloneable atomic handle to a collection's live entry count, readable by any holder but mutable only from inside this crate.
  • Treat capacity == 0 as an explicit disabled mode on both collections: nothing is stored, and each item is handed straight back.

Public API

  • Ring<T> - with_capacity(capacity, gauge), push(item) -> Option<T>, iter(), len(), is_empty(), capacity(). Clone (where T: Clone) produces a snapshot with its own independent SizeGauge.
  • BoundedMap<K, V> - new(capacity, idle_ttl_secs, gauge), insert(key, value, now_secs) -> Option<(K, V)>, get(&mut self, key, now_secs) -> Option<&V> (refreshes the idle timestamp, hence &mut self), len(), is_empty(), capacity().
  • SizeGauge - new(), get() -> usize. Construct one per collection and clone it out to whatever reads live counts (a telemetry exporter, a health check); the collection itself is the only writer.

Usage

use chio_bounded::{BoundedMap, SizeGauge};

let gauge = SizeGauge::new();
let mut cache: BoundedMap<String, Vec<u8>> =
    BoundedMap::new(1024, 300, gauge.clone());

// `insert` returns the evicted (key, value) pair when capacity forces an
// eviction, so the caller can persist it before it drops.
if let Some((evicted_key, evicted_value)) = cache.insert(key, value, now_secs) {
    // persist-before-drop
}

// Elsewhere, e.g. a telemetry exporter: read the live count without locking.
let live = gauge.get();

Testing

cargo test -p chio-bounded runs the unit, property, and std-thread stress tests. The exhaustive loom concurrency model is nightly-only and not part of that run:

RUSTFLAGS="--cfg loom" cargo test -p chio-bounded --test loom_bounded_map

See also

  • chio-kernel - uses Ring for its ReceiptLog and ChildReceiptLog mirrors and BoundedMap for the federation dual-signed-receipt and DSSE-envelope stores.
  • chio-http-session - uses Ring for the session journal and tool-call sequence.