mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-11-03 05:44:44 +08:00
fix(docker): keep current payload during dependency recovery
This commit is contained in:
@@ -595,6 +595,15 @@ usermod -o -u "${PUID}" moviepilot
|
||||
# 启动前优先确认主运行环境仍然健康,避免插件依赖污染导致服务直接起不来。
|
||||
ensure_backend_runtime_dependencies
|
||||
|
||||
# 依赖阶段恢复会保留当前程序,待自愈成功后再清理旧代际备份和事务标记。
|
||||
if [ "${UPDATE_RECOVERY_BLOCKED:-false}" = "true" ]; then
|
||||
if finalize_update_transaction; then
|
||||
INFO "→ 当前程序依赖已恢复,已清理保留当前程序的更新事务"
|
||||
else
|
||||
WARN "→ 当前程序依赖已恢复,但旧代际备份清理失败,将保留事务标记重试"
|
||||
fi
|
||||
fi
|
||||
|
||||
# 缓存路径解析必须晚于依赖自愈,确保有效性探针使用当前运行版本。
|
||||
if ! resolve_browser_cache_dir; then
|
||||
exit 1
|
||||
|
||||
@@ -107,7 +107,7 @@ function pending_recovery_control_dir() {
|
||||
|
||||
state="$(pending_update_state 2>/dev/null || true)"
|
||||
case "${state}" in
|
||||
prepared|dependencies)
|
||||
prepared)
|
||||
[ -e "${UPDATE_PREVIOUS_APP}" ] || return 1
|
||||
if source_bundle_is_trusted "${previous_control_dir}"; then
|
||||
printf '%s\n' "${previous_control_dir}"
|
||||
@@ -118,6 +118,11 @@ function pending_recovery_control_dir() {
|
||||
fi
|
||||
return 0
|
||||
;;
|
||||
dependencies|blocked)
|
||||
# 依赖阶段可能已切换到包含新迁移的当前 /app;必须使用当前或镜像控制脚本,
|
||||
# 让 update.sh 保留新代际,而不是先执行旧代控制脚本触发数据库不兼容回退。
|
||||
return 1
|
||||
;;
|
||||
esac
|
||||
return 1
|
||||
}
|
||||
|
||||
@@ -66,6 +66,7 @@ UV_OPTIONS=()
|
||||
MOVIEPILOT_UPDATE_RESULT="noop"
|
||||
UPDATE_RECOVERY_REQUIRED="false"
|
||||
UPDATE_RECOVERY_COMPLETED="false"
|
||||
UPDATE_RECOVERY_BLOCKED="false"
|
||||
DEPENDENCY_SYNC_ATTEMPTED="false"
|
||||
PACKAGE_ROUTE_READY="false"
|
||||
|
||||
@@ -268,10 +269,30 @@ function recover_pending_update() {
|
||||
return 0
|
||||
fi
|
||||
|
||||
WARN "→ 检测到未完成的容器更新事务,正在恢复旧版本"
|
||||
if [ "${state}" = "dependencies" ]; then
|
||||
DEPENDENCY_SYNC_ATTEMPTED="true"
|
||||
if [ "${state}" = "dependencies" ] || [ "${state}" = "blocked" ]; then
|
||||
if [ ! -e "${APP_DIR}" ] || [ ! -e "${PUBLIC_DIR}" ]; then
|
||||
# 目录切换中断可能留下不完整的当前载荷;这种情况仍需恢复完整旧代际。
|
||||
if [ ! -e "${UPDATE_PREVIOUS_APP}" ] || [ ! -e "${UPDATE_PREVIOUS_PUBLIC}" ]; then
|
||||
ERROR "→ 当前与更新前载荷均不完整,无法安全恢复"
|
||||
UPDATE_RECOVERY_REQUIRED="true"
|
||||
return 1
|
||||
fi
|
||||
WARN "→ 当前更新载荷不完整,恢复更新前版本"
|
||||
else
|
||||
# 依赖阶段可能已经切换到包含新迁移的 /app;此时不能恢复旧代际,
|
||||
# 否则数据库已经前进时会把旧程序交给未知的 Alembic revision。
|
||||
WARN "→ 更新事务停留在依赖阶段,保留当前程序并等待启动前依赖自愈,不回退旧版本"
|
||||
if [ "${state}" = "dependencies" ] && ! set_update_pending blocked; then
|
||||
ERROR "→ 无法记录保留当前程序的更新恢复状态"
|
||||
return 1
|
||||
fi
|
||||
UPDATE_RECOVERY_BLOCKED="true"
|
||||
UPDATE_RECOVERY_COMPLETED="true"
|
||||
return 0
|
||||
fi
|
||||
fi
|
||||
|
||||
WARN "→ 检测到未完成的容器更新事务,正在恢复旧版本"
|
||||
rollback_update_transaction || return 1
|
||||
UPDATE_RECOVERY_COMPLETED="true"
|
||||
INFO "→ 未完成的容器更新事务已恢复"
|
||||
|
||||
Reference in New Issue
Block a user