mirror of
https://github.com/seaweedfs/seaweedfs.git
synced 2026-10-30 17:00:48 +01:00
The vectors gateway backs off discovery for 5s between resolutions, but the backoff also suppressed rediscovery after an empty lookup. A worker that landed its KeepConnected registration a moment after the first query stayed invisible for the whole window — longer than a client's retry budget — so the S3 Vectors e2e flaked: CreateIndex raced the registration, got InternalFailure, and every boto retry fell inside the same 5s fast-fail window. With no cached backend, recheck every 500ms instead; the 5s interval now only bounds membership refreshes against a live client, and an absent worker still cannot flood the master with lookups. The empty-membership error also becomes codes.Unavailable so the API answers 503 rather than InternalFailure. cluster.ps lists registered vector nodes like the other node types, and the e2e harness polls it for the engine's registration instead of only checking the gRPC port — a listening engine is not discoverable until the registration lands.
66 lines
2.0 KiB
Bash
Executable File
66 lines
2.0 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Spin a mini cluster plus the vectors gateway and engine, run the boto3
|
|
# conformance subset, tear everything down.
|
|
set -euo pipefail
|
|
cd "$(dirname "$0")"
|
|
|
|
DATA=mini-data
|
|
rm -rf "$DATA"
|
|
PIDS=()
|
|
cleanup() {
|
|
kill "${PIDS[@]}" 2>/dev/null || true
|
|
rm -rf "$DATA"
|
|
}
|
|
trap cleanup EXIT
|
|
|
|
./weed mini -dir "$DATA" \
|
|
-s3=false -webdav=false -admin.ui=false &
|
|
PIDS+=($!)
|
|
|
|
./weed s3 \
|
|
-filer 127.0.0.1:8888 \
|
|
-config s3.json \
|
|
-ip 127.0.0.1 \
|
|
-ip.bind 127.0.0.1 \
|
|
-port 8334 \
|
|
-port.lance 9102 &
|
|
PIDS+=($!)
|
|
|
|
./weed-vector \
|
|
--namespace http://127.0.0.1:9102 \
|
|
--masters 127.0.0.1:9333 \
|
|
--storage-option aws_access_key_id=test \
|
|
--storage-option aws_secret_access_key=test \
|
|
--listen 127.0.0.1:9301 &
|
|
PIDS+=($!)
|
|
|
|
# Any HTTP response (even an auth rejection) means the lance catalog is up.
|
|
for _ in $(seq 1 60); do
|
|
code=$(curl -s -o /dev/null -w '%{http_code}' http://127.0.0.1:9102/v1/namespace/root/list || true)
|
|
[ "$code" != "000" ] && break
|
|
sleep 1
|
|
done
|
|
[ "${code:-000}" != "000" ] || { echo "lance catalog on :9102 never came up" >&2; exit 1; }
|
|
|
|
for _ in $(seq 1 60); do
|
|
(exec 3<>/dev/tcp/127.0.0.1/9301) 2>/dev/null && break
|
|
sleep 1
|
|
done
|
|
(exec 3<>/dev/tcp/127.0.0.1/9301) 2>/dev/null || { echo "vector server on :9301 never came up" >&2; exit 1; }
|
|
|
|
# A listening engine still has to land its KeepConnected registration before
|
|
# the gateway's lazy discovery can find it — poll the cluster list for the
|
|
# vector node rather than race the first request against it.
|
|
vector_registered() {
|
|
# grep -q would close the pipe on first match and SIGPIPE the shell mid-write
|
|
# under `set -o pipefail`; a full read lets cluster.ps finish.
|
|
printf 'cluster.ps\n' | ./weed shell -master 127.0.0.1:9333 2>/dev/null | grep "vector servers" >/dev/null
|
|
}
|
|
for _ in $(seq 1 60); do
|
|
vector_registered && break
|
|
sleep 1
|
|
done
|
|
vector_registered || { echo "vector server never registered with the master" >&2; exit 1; }
|
|
|
|
python3 -m pytest -xvs s3vectors_test.py
|