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.
46 lines
2.0 KiB
Docker
46 lines
2.0 KiB
Docker
# tidalDB cluster server image — PACKAGING ONLY (no in-container compile).
|
|
#
|
|
# Committed promotion of tmp/img-build/Dockerfile. The `tidal-server` binary in
|
|
# the build context is a HOST cross-compile (mac-arm64 -> x86_64-unknown-linux-gnu)
|
|
# produced by scripts/build-release.sh. It NEEDs libmvec.so.1 (glibc 2.41
|
|
# vectorized math), so the runtime base MUST be trixie (glibc 2.41) — bookworm
|
|
# (2.36) lacks libmvec and aborts at startup. Verified NEEDED: libstdc++.so.6,
|
|
# libgcc_s.so.1, libmvec.so.1 + glibc.
|
|
#
|
|
# Built by scripts/build-release.sh via the amd64 buildx builder. Do not build by
|
|
# hand — the script pins the toolchain + digests the result.
|
|
FROM debian:trixie-slim
|
|
|
|
ARG DEBIAN_FRONTEND=noninteractive
|
|
|
|
# usearch's HNSW C++ core needs the C++ runtime; ca-certificates/curl for TLS +
|
|
# operator healthchecks. glibc (incl. libmvec.so.1) ships in the base image.
|
|
RUN apt-get update && \
|
|
apt-get install -y --no-install-recommends libstdc++6 libgcc-s1 ca-certificates curl && \
|
|
rm -rf /var/lib/apt/lists/*
|
|
|
|
# Non-root, uid 10001 to match the StatefulSet securityContext (runAsUser 10001,
|
|
# fsGroup 10001) and the init-datadir chown.
|
|
RUN useradd --system -u 10001 --home /srv tidal
|
|
|
|
COPY --chown=tidal:tidal tidal-server /usr/local/bin/tidal-server
|
|
COPY --chown=tidal:tidal config /etc/tidal-server
|
|
|
|
USER tidal
|
|
WORKDIR /srv
|
|
EXPOSE 9500 9601 9091
|
|
|
|
# Self-contained config path (overridden at runtime by the StatefulSet's explicit
|
|
# --schema/--topology flags pointing at mounted ConfigMaps).
|
|
ENV TIDAL_CONFIG=/etc/tidal-server
|
|
ENV TIDAL_SERVER_LOG=info
|
|
# Cluster mode is gated experimental; the StatefulSet also sets this.
|
|
ENV TIDAL_ALLOW_EXPERIMENTAL_CLUSTER=1
|
|
|
|
# Bare binary ENTRYPOINT so `docker run img verify ...`/subcommand overrides work;
|
|
# the StatefulSet supplies the full `cluster ...` argv.
|
|
ENTRYPOINT ["tidal-server"]
|
|
CMD ["cluster", "--listen", "0.0.0.0:9500", \
|
|
"--schema", "/etc/tidal-server/default-schema.yaml", \
|
|
"--topology", "/etc/tidal-server/default-cluster.yaml"]
|