Durable `leader_acked` frontier in `ShardReplica` tracks the highest seqno acked under `ack=leader` (journal-only, un-replicated); `decide_join` now quarantines on THIS node's own frontier rather than comparing stream numbers across stream boundaries — eliminates false-quarantine churn on rolling restarts. `SHUTDOWN_HANDOFF_WAIT` (3s) drains the leader's tail to quorum before step-down so the next leader inherits a clean prefix. New `load_leader_acked`/`persist_leader_acked` helpers; `cluster_reseed.rs` gains the divergence-fix regression suite; `replication_ops.rs` threads the signal. Soak-eval: `tidal_stress::soak_eval` + `soak-eval` binary implement the 30-night streak (ledger.tsv × restarts.tsv → streak.tsv); monitor and nightly CronJob k8s YAMLs updated; phase-9 doc clarifies the dual-stream streak definition (ledger PASS AND zero pod restarts in window). `run-reliability.sh` gates the election-divergence suite before any k8s push. Release tooling: `docker/release/` multi-stage Dockerfile + DR image; `scripts/build-release.sh` single repeatable cross-compile+buildx path.
33 lines
1.4 KiB
YAML
33 lines
1.4 KiB
YAML
# Durable result sink for the 30-night soak (GA bar: nightly suite green 30
|
||
# consecutive days — docs/planning/milestone-11/phase-9.md "Exit gate").
|
||
#
|
||
# longhorn-rwx: RWX so the nightly soak CronJob pods (writers) and the always-on
|
||
# soak-monitor (reader + evaluator) can mount it concurrently, and Retain reclaim
|
||
# policy so the 30 nights of JSON summaries survive a PVC delete / job churn /
|
||
# operator session ending. Each night writes /results/soak-YYYY-MM-DD.json +
|
||
# appends one line to /results/ledger.tsv; the monitor appends restarts.tsv every
|
||
# 5 min and the evaluator rewrites streak.tsv.
|
||
#
|
||
# SIZING (30-night budget): 30 × soak-*.json (per-stage latency histograms, up to
|
||
# ~30 MiB each on a full run) ≈ 1 GiB, + restarts.tsv (288 samples/day × 3 pods ×
|
||
# 30 nights ≈ 26k rows ≈ a few MiB) + ledger/streak (KiB). 5Gi gives ~2× headroom.
|
||
# The evaluator container PRUNES soak-*.json older than 31 days each loop so the
|
||
# Retain volume stays bounded across successive windows (it never auto-shrinks).
|
||
#
|
||
# Apply: kubectl apply -f tidal-stress/k8s/soak-results-pvc.yaml
|
||
apiVersion: v1
|
||
kind: PersistentVolumeClaim
|
||
metadata:
|
||
name: tidal-soak-results
|
||
namespace: tidaldb-cluster
|
||
labels:
|
||
app.kubernetes.io/name: tidal-soak
|
||
app.kubernetes.io/part-of: tidaldb
|
||
spec:
|
||
accessModes:
|
||
- ReadWriteMany
|
||
storageClassName: longhorn-rwx
|
||
resources:
|
||
requests:
|
||
storage: 5Gi
|