103 lines
2.8 KiB
Bash
Executable file
103 lines
2.8 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
if [[ -z "${IN_NIX_SHELL:-}" ]] && command -v nix >/dev/null 2>&1; then
|
|
exec nix develop -c "$0" "$@"
|
|
fi
|
|
|
|
WORKDIR=$(mktemp -d)
|
|
PD_LOG="${WORKDIR}/flaredb-pd.log"
|
|
S1_LOG="${WORKDIR}/flaredb-server-1.log"
|
|
S2_LOG="${WORKDIR}/flaredb-server-2.log"
|
|
|
|
run_client() {
|
|
local addr="$1"
|
|
shift
|
|
local output=""
|
|
local status=0
|
|
local attempt=0
|
|
while (( attempt < 20 )); do
|
|
if output=$(cargo run --quiet --bin flaredb-client -- --addr "${addr}" --pd-addr 127.0.0.1:2479 "$@" 2>&1); then
|
|
printf '%s\n' "${output}" | awk 'NF { last = $0 } END { print last }'
|
|
return 0
|
|
fi
|
|
status=$?
|
|
attempt=$((attempt + 1))
|
|
sleep 1
|
|
done
|
|
printf '%s\n' "${output}" >&2
|
|
return "${status}"
|
|
}
|
|
|
|
cleanup() {
|
|
local exit_code=$?
|
|
if [[ -n "${PD_PID:-}" ]]; then
|
|
kill "${PD_PID}" >/dev/null 2>&1 || true
|
|
fi
|
|
if [[ -n "${S1_PID:-}" ]]; then
|
|
kill "${S1_PID}" >/dev/null 2>&1 || true
|
|
fi
|
|
if [[ -n "${S2_PID:-}" ]]; then
|
|
kill "${S2_PID}" >/dev/null 2>&1 || true
|
|
fi
|
|
if (( exit_code != 0 )); then
|
|
echo "verify-sharding failed; logs preserved at ${WORKDIR}" >&2
|
|
[[ -f "${PD_LOG}" ]] && { echo "--- ${PD_LOG} ---" >&2; tail -n 200 "${PD_LOG}" >&2; }
|
|
[[ -f "${S1_LOG}" ]] && { echo "--- ${S1_LOG} ---" >&2; tail -n 200 "${S1_LOG}" >&2; }
|
|
[[ -f "${S2_LOG}" ]] && { echo "--- ${S2_LOG} ---" >&2; tail -n 200 "${S2_LOG}" >&2; }
|
|
return "${exit_code}"
|
|
fi
|
|
rm -rf "${WORKDIR}"
|
|
}
|
|
trap cleanup EXIT
|
|
|
|
echo "Building workspace..."
|
|
cargo build
|
|
|
|
echo "Starting PD..."
|
|
cargo run --bin flaredb-pd -- --addr 127.0.0.1:2479 >"${PD_LOG}" 2>&1 &
|
|
PD_PID=$!
|
|
sleep 2
|
|
|
|
echo "Starting Server 1 (127.0.0.1:50001, data1)..."
|
|
cargo run --bin flaredb-server -- \
|
|
--store-id 1 \
|
|
--addr 127.0.0.1:50001 \
|
|
--http-addr 127.0.0.1:8083 \
|
|
--data-dir "${WORKDIR}/data1" \
|
|
--pd-addr 127.0.0.1:2479 \
|
|
--metrics-port 9093 \
|
|
--namespace-mode raw=eventual \
|
|
>"${S1_LOG}" 2>&1 &
|
|
S1_PID=$!
|
|
sleep 4
|
|
|
|
echo "Starting Server 2 (127.0.0.1:50002, data2)..."
|
|
cargo run --bin flaredb-server -- \
|
|
--store-id 2 \
|
|
--addr 127.0.0.1:50002 \
|
|
--http-addr 127.0.0.1:8084 \
|
|
--data-dir "${WORKDIR}/data2" \
|
|
--pd-addr 127.0.0.1:2479 \
|
|
--metrics-port 9094 \
|
|
--namespace-mode raw=eventual \
|
|
>"${S2_LOG}" 2>&1 &
|
|
S2_PID=$!
|
|
|
|
sleep 5 # Wait for registration and leader routing to settle
|
|
|
|
echo "Running Client Verification (multi-node routing smoke)..."
|
|
|
|
echo "Testing Put 'a'..."
|
|
run_client 127.0.0.1:50001 --namespace raw raw-put --key a --value val_a >/dev/null
|
|
|
|
echo "Testing Put 'z'..."
|
|
run_client 127.0.0.1:50002 --namespace raw raw-put --key z --value val_z >/dev/null
|
|
|
|
echo "Testing reads from both nodes..."
|
|
VALUE_A=$(run_client 127.0.0.1:50002 --namespace raw raw-get --key a)
|
|
VALUE_Z=$(run_client 127.0.0.1:50001 --namespace raw raw-get --key z)
|
|
[[ "${VALUE_A}" == "val_a" ]]
|
|
[[ "${VALUE_Z}" == "val_z" ]]
|
|
|
|
echo "Sharding Verification Complete!"
|