fix(deploy): 历史条数守卫改为与切换前对比,而不是写死条数
写死 4 条会把「用户自己在后台删了几条记录」误判成部署失败(本轮实际发生), 同时又发现不了真正的丢数据。改成切换前读一次旧容器的条数,切换后要求 新容器 >= 旧值:同步接口只累加不删除,所以变小即为异常。
This commit is contained in:
@ -91,6 +91,10 @@ CONF_BAK="${PORTAL_CONF}.bak-${STAMP}"
|
||||
cp -a "$PORTAL_CONF" "$CONF_BAK"
|
||||
|
||||
gzip -dc "$REMOTE_TAR" | docker load >/dev/null
|
||||
# 记录切换前的历史条数,切换后用于对比(同步接口只累加不删除,
|
||||
# 所以"变少"就是异常;写死条数则会把用户自己删记录误判成失败)
|
||||
OLD_HIST=$(curl -s "http://127.0.0.1:${CUR_PORT}/admin/api/history" 2>/dev/null | grep -o '"url"' | wc -l)
|
||||
OLD_HIST=${OLD_HIST:-0}
|
||||
docker inspect navi --format '{{range .Config.Env}}{{println .}}{{end}}' \
|
||||
| grep -E '^(NAVI_ADMIN_TOKEN|NAVI_SYNC_TOKEN|SEARXNG_BASE_URL|DEBIAN_FRONTEND)=' > "/tmp/navi-${STAMP}.env"
|
||||
|
||||
@ -119,7 +123,9 @@ w200 "http://127.0.0.1:${NEW_PORT}/navi.js"
|
||||
# /search 会真正跑一次搜索:既确认 SearXNG 可用,也顺带把它预热,
|
||||
# 这样切过去之后用户不会撞上"nginx 就绪但 SearXNG 还在启动"的 502。
|
||||
w200 "http://127.0.0.1:${NEW_PORT}/search?q=linux"
|
||||
echo " 新容器全绿,开始切换上游"
|
||||
HIST=$(curl -s "http://127.0.0.1:${NEW_PORT}/admin/api/history" | grep -o '"url"' | wc -l)
|
||||
[ "$HIST" -ge "$OLD_HIST" ] || { echo "!! 历史条数从 $OLD_HIST 掉到 $HIST(疑似丢数据)" >&2; false; }
|
||||
echo " 新容器全绿(历史 ${OLD_HIST} → ${HIST} 条),开始切换上游"
|
||||
|
||||
sed "s#\\(${UPSTREAM_HOST//./\\.}\\s*http://127\\.0\\.0\\.1:\\)${CUR_PORT};#\\1${NEW_PORT};#" "$PORTAL_CONF" > /tmp/portal.conf.new
|
||||
# 关键:必须同 inode 覆写(cat > 而不是 sed -i / mv)。
|
||||
|
||||
Reference in New Issue
Block a user