Adding spdk loader
This commit is contained in:
@@ -23,6 +23,12 @@ DISCOVERY_NQN="nqn.2014-08.org.nvmexpress.discovery"
|
||||
TGT=$(command -v nvmf_tgt || echo /usr/libexec/spdk/spdk/build/bin/nvmf_tgt)
|
||||
RPC=$(command -v rpc.py || echo /usr/libexec/spdk/scripts/rpc.py)
|
||||
RELEASE_CTL=$(command -v spdk-release || echo /usr/local/bin/spdk-release)
|
||||
# Optional explicit RPC socket. Set it (compose does, on a shared volume) so a
|
||||
# SEPARATE loader container can reach this target's JSON-RPC and add/remove
|
||||
# versions online. Empty -> nvmf_tgt's default socket (single-container case).
|
||||
RPC_SOCK="${RPC_SOCK:-}"
|
||||
rpc() { if [ -n "$RPC_SOCK" ]; then "$RPC" -s "$RPC_SOCK" "$@"; else "$RPC" "$@"; fi; }
|
||||
[ -n "$RPC_SOCK" ] && mkdir -p "$(dirname "$RPC_SOCK")"
|
||||
|
||||
# Ensure hugepages exist — DPDK needs them. vm.nr_hugepages isn't namespaced, so
|
||||
# a privileged container writes the host value; re-applied after a host reboot
|
||||
@@ -38,8 +44,10 @@ fi
|
||||
free=$(awk '/HugePages_Free/{print $2}' /proc/meminfo 2>/dev/null || echo 0)
|
||||
[ "${free:-0}" -gt 0 ] || echo "WARNING: no free hugepages — SPDK will fail; allocate vm.nr_hugepages on the host." >&2
|
||||
|
||||
echo "==> starting LONG-LIVED nvmf_tgt (cpumask ${CPUMASK})"
|
||||
"$TGT" -m "$CPUMASK" &
|
||||
echo "==> starting LONG-LIVED nvmf_tgt (cpumask ${CPUMASK})${RPC_SOCK:+ rpc-sock $RPC_SOCK}"
|
||||
TGT_ARGS=(-m "$CPUMASK")
|
||||
[ -n "$RPC_SOCK" ] && TGT_ARGS+=(-r "$RPC_SOCK")
|
||||
"$TGT" "${TGT_ARGS[@]}" &
|
||||
TGT_PID=$!
|
||||
# A TERM/INT here stops the target and DROPS EVERY connection — only on container
|
||||
# stop, never for a version change. Make the intent loud.
|
||||
@@ -48,16 +56,16 @@ trap 'kill "$TGT_PID" 2>/dev/null || true' EXIT
|
||||
|
||||
# Wait for the RPC socket.
|
||||
for _ in $(seq 1 30); do
|
||||
"$RPC" framework_get_config >/dev/null 2>&1 && break
|
||||
rpc framework_get_config >/dev/null 2>&1 && break
|
||||
sleep 1
|
||||
done
|
||||
|
||||
echo "==> creating TCP transport"
|
||||
"$RPC" nvmf_create_transport -t TCP -u 16384 -m 8 -c 8192 \
|
||||
rpc nvmf_create_transport -t TCP -u 16384 -m 8 -c 8192 \
|
||||
|| echo "WARNING: nvmf_create_transport failed (already present?)" >&2
|
||||
|
||||
echo "==> registering discovery listener ${TADDR}:${TPORT}"
|
||||
"$RPC" nvmf_subsystem_add_listener "$DISCOVERY_NQN" -t tcp -a "$TADDR" -s "$TPORT" 2>/dev/null || true
|
||||
rpc nvmf_subsystem_add_listener "$DISCOVERY_NQN" -t tcp -a "$TADDR" -s "$TPORT" 2>/dev/null || true
|
||||
|
||||
# Bootstrap convenience: if a single OCI artifact image is mounted at /artifacts
|
||||
# (the simple one-version `docker compose up` flow) and that version isn't yet
|
||||
@@ -78,7 +86,7 @@ if [ -s /artifacts/verity.json ] && [ -n "${IMAGE_VERSION:-}" ]; then
|
||||
fi
|
||||
|
||||
echo "==> reconciling releases under $RELEASES_DIR"
|
||||
RELEASES_DIR="$RELEASES_DIR" TARGET_ADDR="$TADDR" TARGET_PORT="$TPORT" \
|
||||
RELEASES_DIR="$RELEASES_DIR" TARGET_ADDR="$TADDR" TARGET_PORT="$TPORT" RPC_SOCK="$RPC_SOCK" \
|
||||
bash "$RELEASE_CTL" reconcile || echo "WARNING: reconcile reported errors" >&2
|
||||
|
||||
echo "==> nvmf_tgt up; releases served online. Add/remove versions with:"
|
||||
|
||||
Reference in New Issue
Block a user