grix-connector 3.22.0 → 3.24.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -59,32 +59,49 @@ log "started: from=$FROM_VERSION target=$TARGET_VERSION crash_count=$CRASH_COUNT
59
59
  # Wait for old daemon to exit (SIGTERM + shutdown + restart)
60
60
  sleep 15
61
61
 
62
- # Monitor loop: wait for healthz to return 200
63
- ELAPSED=0
64
- while [ $ELAPSED -lt $HEALTH_TIMEOUT ]; do
62
+ # 前向激活:用已装好的目标版本 CLI start 刷新受管 runtime 副本、服务定义并触发重启。
63
+ # 放在 guardian(detached 独立进程)而非旧 daemon 进程内执行:旧 daemon 的激活子
64
+ # 进程在 systemd 默认 KillMode=control-group 下会随 restart 一起被杀,且旧 daemon
65
+ # 在 await 期间被杀后 pending 的失败处理(回滚/上报)执行不到,会与 guardian 脱同步。
66
+ # Linux 无受管 runtime 副本(服务直接跑全局包),start 只做服务定义刷新与重启,同样安全。
67
+ # 激活失败视同新版本启动失败,落入下方崩溃计数/回滚路径,不删 pending。
68
+ TARGET_CLI="$(npm root -g 2>> "$LOG_FILE")/$NPM_PACKAGE/dist/grix.js"
69
+ ACTIVATED=0
70
+ if [ -f "$TARGET_CLI" ] && node "$TARGET_CLI" start >> "$LOG_FILE" 2>&1; then
71
+ ACTIVATED=1
72
+ log "forward activation succeeded: managed runtime switched to $TARGET_VERSION"
73
+ else
74
+ log "forward activation failed for target $TARGET_VERSION; treating as startup failure"
75
+ fi
76
+
77
+ # Monitor loop: wait for healthz to return 200 (only after successful activation)
78
+ if [ $ACTIVATED -eq 1 ]; then
79
+ ELAPSED=0
80
+ while [ $ELAPSED -lt $HEALTH_TIMEOUT ]; do
81
+ if curl -sf "$HEALTH_URL" > /dev/null 2>&1; then
82
+ # healthz 通过=新版健康。这里不删 pending:删了会抢在新进程的
83
+ # handlePendingOnStartup 之前,使其读不到 pending、success 回执发不出去
84
+ # (后端只见 installed 不见 success)。交由新进程上报 success 后自行删 pending,
85
+ # guardian 只负责崩溃回滚。
86
+ log "healthz passed, upgrade healthy; leaving pending for in-process success report"
87
+ exit 0
88
+ fi
89
+ sleep 3
90
+ ELAPSED=$((ELAPSED + 3))
91
+ done
92
+
93
+ # Extra grace period for slow systems
94
+ sleep 15
65
95
  if curl -sf "$HEALTH_URL" > /dev/null 2>&1; then
66
- # healthz 通过=新版健康。这里不删 pending:删了会抢在新进程的
67
- # handlePendingOnStartup 之前,使其读不到 pending、success 回执发不出去
68
- # (后端只见 installed 不见 success)。交由新进程上报 success 后自行删 pending,
69
- # guardian 只负责崩溃回滚。
70
- log "healthz passed, upgrade healthy; leaving pending for in-process success report"
96
+ # 同上:不删 pending,交由进程内 handlePendingOnStartup 上报 success 并删除。
97
+ log "healthz passed (delayed), upgrade healthy; leaving pending for in-process success report"
71
98
  exit 0
72
99
  fi
73
- sleep 3
74
- ELAPSED=$((ELAPSED + 3))
75
- done
76
-
77
- # Extra grace period for slow systems
78
- sleep 15
79
- if curl -sf "$HEALTH_URL" > /dev/null 2>&1; then
80
- # 同上:不删 pending,交由进程内 handlePendingOnStartup 上报 success 并删除。
81
- log "healthz passed (delayed), upgrade healthy; leaving pending for in-process success report"
82
- exit 0
83
100
  fi
84
101
 
85
- # Health check failed
102
+ # Health check failed (or forward activation failed)
86
103
  CRASH_COUNT=$((CRASH_COUNT + 1))
87
- log "healthz timeout, crash_count=$CRASH_COUNT"
104
+ log "healthz timeout or forward activation failed, crash_count=$CRASH_COUNT"
88
105
 
89
106
  if [ $CRASH_COUNT -ge $MAX_CRASHES ]; then
90
107
  # 新版升级器会把完整旧包保留在同文件系统的固定备份目录。优先原子恢复,
@@ -98,13 +115,23 @@ if [ $CRASH_COUNT -ge $MAX_CRASHES ]; then
98
115
  if { [ ! -e "$PACKAGE_DIR" ] || mv "$PACKAGE_DIR" "$FAILED_DIR"; } \
99
116
  && mv "$BACKUP_DIR" "$PACKAGE_DIR"; then
100
117
  rm -rf "$FAILED_DIR"
101
- rm -f "$PENDING_FILE"
102
- log "atomic rollback succeeded"
103
- exit 0
104
- fi
105
- log "atomic rollback failed; restoring current package before npm fallback"
106
- if [ ! -e "$PACKAGE_DIR" ] && [ -e "$FAILED_DIR" ]; then
107
- mv "$FAILED_DIR" "$PACKAGE_DIR" 2>/dev/null || true
118
+ # 原子恢复只换回全局包;macOS 服务跑的是受管 runtime 副本,必须用
119
+ # 旧包 CLI start 刷新副本并触发重启,激活成功才删 pending。
120
+ NPM_ROOT="$(npm root -g 2>> "$LOG_FILE")"
121
+ ROLLBACK_CLI="$NPM_ROOT/$NPM_PACKAGE/dist/grix.js"
122
+ if [ -n "$NPM_ROOT" ] && [ -f "$ROLLBACK_CLI" ] \
123
+ && node "$ROLLBACK_CLI" start >> "$LOG_FILE" 2>&1; then
124
+ rm -f "$PENDING_FILE"
125
+ log "atomic rollback succeeded and managed runtime activated"
126
+ exit 0
127
+ fi
128
+ # 激活失败不退出:落到下面的 npm 回滚路径再试一次(npm install 旧版幂等)。
129
+ log "atomic rollback package restored but managed runtime activation failed; falling through to npm rollback"
130
+ else
131
+ log "atomic rollback failed; restoring current package before npm fallback"
132
+ if [ ! -e "$PACKAGE_DIR" ] && [ -e "$FAILED_DIR" ]; then
133
+ mv "$FAILED_DIR" "$PACKAGE_DIR" 2>/dev/null || true
134
+ fi
108
135
  fi
109
136
  fi
110
137
  ;;
@@ -115,8 +142,16 @@ if [ $CRASH_COUNT -ge $MAX_CRASHES ]; then
115
142
  if npm install -g "${NPM_PACKAGE}@${FROM_VERSION}" --prefer-online --no-audit --no-fund >> "$LOG_FILE" 2>&1 \
116
143
  || { log "rollback via default registry failed, retrying official npm"; \
117
144
  npm install -g "${NPM_PACKAGE}@${FROM_VERSION}" --registry https://registry.npmjs.org --prefer-online --no-audit --no-fund >> "$LOG_FILE" 2>&1; }; then
118
- log "rollback succeeded"
119
- rm -f "$PENDING_FILE"
145
+ log "rollback package installed; activating managed runtime"
146
+ NPM_ROOT="$(npm root -g 2>> "$LOG_FILE")"
147
+ ROLLBACK_CLI="$NPM_ROOT/$NPM_PACKAGE/dist/grix.js"
148
+ if [ -n "$NPM_ROOT" ] && [ -f "$ROLLBACK_CLI" ] \
149
+ && node "$ROLLBACK_CLI" start >> "$LOG_FILE" 2>&1; then
150
+ log "rollback succeeded and managed runtime activated"
151
+ rm -f "$PENDING_FILE"
152
+ else
153
+ log "ROLLBACK ACTIVATION FAILED — package restored but managed runtime was not switched"
154
+ fi
120
155
  else
121
156
  log "ROLLBACK FAILED — manual intervention required"
122
157
  fi