tidaldb/docker/release/Dockerfile
jx12n 580142df49 feat(m12): election-divergence-fix + soak-eval streak + release tooling
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.
2026-06-18 13:08:53 -06:00

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"]