feat: 将批量升级改为逐个主机顺序升级并添加超时控制
- 修改升级流程,从同时触发所有主机改为逐个主机顺序触发和轮询 - 添加 session_id 字段到 upgrade_log 表以区分不同主机的升级会话 - 引入 upgradePollTimeoutSeconds 配置项控制单个主机轮询超时时间 - 添加数据库迁移脚本以更新表结构和主键约束 - 实现运行组状态跟踪,防止同一组并发执行 - 改进错误处理和日志记录,为每个主机独立记录升级结果
This commit is contained in:
@@ -5,6 +5,7 @@
|
||||
|
||||
CREATE TABLE IF NOT EXISTS upgrade_log (
|
||||
uuid UUID NOT NULL,
|
||||
session_id UUID,
|
||||
start_time TIMESTAMP NOT NULL,
|
||||
roomtype_id INTEGER NOT NULL,
|
||||
host_str TEXT NOT NULL,
|
||||
|
||||
34
scripts/update_db_schema.js
Normal file
34
scripts/update_db_schema.js
Normal file
@@ -0,0 +1,34 @@
|
||||
const db = require('../src/db');
|
||||
|
||||
const updateSchema = async () => {
|
||||
try {
|
||||
console.log('Updating database schema...');
|
||||
await db.query(`
|
||||
DO $$
|
||||
BEGIN
|
||||
IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'upgrade_log' AND column_name = 'session_id') THEN
|
||||
ALTER TABLE upgrade_log ADD COLUMN session_id UUID;
|
||||
END IF;
|
||||
END $$;
|
||||
`);
|
||||
console.log('Added session_id column.');
|
||||
|
||||
try {
|
||||
await db.query(`ALTER TABLE upgrade_log DROP CONSTRAINT IF EXISTS upgrade_log_pkey`);
|
||||
console.log('Dropped old primary key constraint.');
|
||||
} catch (e) {
|
||||
console.log('Primary key might not exist or different name:', e.message);
|
||||
}
|
||||
|
||||
await db.query(`ALTER TABLE upgrade_log ADD PRIMARY KEY (uuid)`);
|
||||
console.log('Set uuid as Primary Key.');
|
||||
|
||||
console.log('Schema update completed successfully.');
|
||||
process.exit(0);
|
||||
} catch (error) {
|
||||
console.error('Schema update failed:', error);
|
||||
process.exit(1);
|
||||
}
|
||||
};
|
||||
|
||||
updateSchema();
|
||||
Reference in New Issue
Block a user