Skip to content

HydraCache 0.39.0

Choose a tag to compare

@github-actions github-actions released this 13 Jul 15:59
· 1437 commits to main since this release

HydraCache 0.39.0

0.39.0 is a cluster staging-hardening release. It does not claim that
HydraCache is a production distributed data grid. Instead, it turns the existing
cluster building blocks into a repeatable staging gate with structured health,
load reporting, actuator output, transport checks, raft metadata smoke coverage,
and sandbox replay routes.

Highlights

  • Deterministic in-memory cluster staging harness with 2-member/2-client gate
    coverage, generation-safe invalidation propagation, stale-generation fencing,
    owner-load, remote-fetch, hot-cache-hit, auth, and wire-version scenarios.
  • New ClusterHealthState, ClusterHealthReason, and ClusterStagingHealth
    summaries with machine-readable Healthy, Degraded, and NotReady states.
  • New ClusterLoadReport for logical staging counters. Wall-clock duration is
    recorded but never used by the deterministic gate.
  • Separate owner-load, remote-fetch, and hot-cache-hit counters surfaced through
    runtime APIs, observability registry helpers, actuator JSON, and sandbox
    reports.
  • Gossip-reset diagnostic fields (tombstone_age_ms, gossip_reset_count) that
    downgrade staging health to Degraded when recent reset signals are present.
  • ClusterComponent and ClusterLifecycleComponent lifecycle primitives for
    background cluster components without changing local cache hot-path reads.
  • New actuator route: GET /actuator/hydracache/cluster/staging-health.
  • New sandbox replay routes:
    • POST /sandbox/cluster/staging-gate
    • POST /sandbox/cluster/leave-rejoin
    • POST /sandbox/cluster/stale-generation
    • POST /sandbox/cluster/peer-fetch-auth-wire

Changes

  • Add hydracache::testing::StagingClusterHarness, GatePlan, and
    StagingGateOutcome for deterministic release gates and sandbox scenarios.
  • Add HydraCache::cluster_fill_counters,
    HydraCache::cluster_staging_counters, and
    HydraCache::cluster_staging_health.
  • Add explicit recording methods for owner-load, remote-fetch, hot-cache,
    auth/wire rejection, stale-generation, and gossip-reset staging counters.
  • Wire read-through and owner-load paths in
    hydracache-cluster-transport-axum to the three-part fill counters.
  • Add transport staging gate tests for auth accept/deny and wire-version
    accept/reject behavior.
  • Add raft staging gate coverage that persists generation metadata through
    InMemoryRaftMetadataStore and rejects stale generation after recovery.
  • Add hydracache-observability registry helpers for staging health snapshots.
  • Add actuator JSON snapshot coverage for stable ClusterStagingHealth shape.
  • Add sandbox route integration tests for every staging replay endpoint and
    update the generated sandbox fetch client.
  • Update docs/PRODUCTION_CLUSTER_READINESS.md with the 0.39 staging runbook.
  • Bump the workspace crates to 0.39.0.

Verification

This release should pass:

  • cargo fmt --all -- --check
  • cargo check --workspace --all-targets --locked
  • cargo test --workspace --all-targets --locked
  • cargo test --doc --workspace --locked
  • RUSTDOCFLAGS="-D warnings" cargo doc --workspace --no-deps --locked
  • cargo test -p hydracache --test cluster_staging_gate --locked
  • cargo test -p hydracache --test cluster_component_lifecycle --locked
  • cargo test -p hydracache cluster::tests::staging_health --locked
  • cargo test -p hydracache cluster::tests::fill_ --locked
  • cargo test -p hydracache-actuator-axum --test cluster_staging_health_snapshot --locked
  • cargo test -p hydracache-cluster-transport-axum --test staging_gate --locked
  • cargo test -p hydracache-cluster-raft --test staging_gate --locked
  • cargo test -p hydracache-sandbox --test cluster_staging_routes --locked

Ignored soak remains manual and is the only wall-clock-budget assertion:

$env:HC_SOAK_REQUESTS = "10000"
$env:HC_SOAK_CONCURRENCY = "32"
cargo test -p hydracache --test cluster_staging_gate --locked -- --ignored cluster_staging_gate_soak_under_sustained_load