feat(backup): 备份/恢复异步化,解决 504 超时
POST /backups 和 POST /backups/:id/restore 改为异步:立即返回 HTTP 202, 后台 goroutine 独立执行 pg_dump → gzip → S3 上传,前端每 2s 轮询状态。 后端: - 新增 StartBackup/StartRestore 方法,后台 goroutine 不依赖 HTTP 连接 - Graceful shutdown 等待活跃操作完成,启动时清理孤立 running 记录 - BackupRecord 新增 progress/restore_status 字段支持进度和恢复状态追踪 前端: - 创建备份/恢复后轮询 GET /backups/:id 直到完成或失败 - 标签页切换暂停/恢复轮询,组件卸载清理定时器 - 正确处理 409(备份进行中)和轮询超时 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1025,7 +1025,12 @@ export default {
|
||||
createBackup: 'Create Backup',
|
||||
backing: 'Backing up...',
|
||||
backupCreated: 'Backup created successfully',
|
||||
expireDays: 'Expire Days'
|
||||
expireDays: 'Expire Days',
|
||||
alreadyInProgress: 'A backup is already in progress',
|
||||
backupRunning: 'Backup in progress...',
|
||||
backupFailed: 'Backup failed',
|
||||
restoreRunning: 'Restore in progress...',
|
||||
restoreFailed: 'Restore failed',
|
||||
},
|
||||
columns: {
|
||||
status: 'Status',
|
||||
@@ -1042,6 +1047,11 @@ export default {
|
||||
completed: 'Completed',
|
||||
failed: 'Failed'
|
||||
},
|
||||
progress: {
|
||||
pending: 'Preparing',
|
||||
dumping: 'Dumping database',
|
||||
uploading: 'Uploading',
|
||||
},
|
||||
trigger: {
|
||||
manual: 'Manual',
|
||||
scheduled: 'Scheduled'
|
||||
|
||||
@@ -1047,7 +1047,12 @@ export default {
|
||||
createBackup: '创建备份',
|
||||
backing: '备份中...',
|
||||
backupCreated: '备份创建成功',
|
||||
expireDays: '过期天数'
|
||||
expireDays: '过期天数',
|
||||
alreadyInProgress: '已有备份正在进行中',
|
||||
backupRunning: '备份进行中...',
|
||||
backupFailed: '备份失败',
|
||||
restoreRunning: '恢复进行中...',
|
||||
restoreFailed: '恢复失败',
|
||||
},
|
||||
columns: {
|
||||
status: '状态',
|
||||
@@ -1064,6 +1069,11 @@ export default {
|
||||
completed: '已完成',
|
||||
failed: '失败'
|
||||
},
|
||||
progress: {
|
||||
pending: '准备中',
|
||||
dumping: '导出数据库',
|
||||
uploading: '上传中',
|
||||
},
|
||||
trigger: {
|
||||
manual: '手动',
|
||||
scheduled: '定时'
|
||||
|
||||
Reference in New Issue
Block a user