Skip to content

Commit c08709b

Browse files
committed
final fix
1 parent 1233289 commit c08709b

1 file changed

Lines changed: 34 additions & 16 deletions

File tree

  • packages/xo-server/src/xo-mixins/jobs

‎packages/xo-server/src/xo-mixins/jobs/index.mjs‎

Lines changed: 34 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -218,23 +218,38 @@ export default class Jobs {
218218

219219
let previousBackupLog
220220
let startBackupLog
221-
const hasBackupLog = type === 'backup' || job.key === undefined
222-
if (hasBackupLog) {
223-
startBackupLog = {
224-
...(await app.getBackupNgLogs(runJobId)),
225-
status: 'pending', // overwrite the status, because `getBackupNgLogs` return a `interrupted` status here. see `handleLog`
221+
// ensure we don't stop a backup job due to an issue when trying to fetch backup logs
222+
async function safeGetBackupLog(runJobId, { bypassCache = false } = {}) {
223+
try {
224+
if (bypassCache) {
225+
app.getBackupNgLogs(REMOVE_CACHE_ENTRY, runJobId)
226+
}
227+
return await app.getBackupNgLogs(runJobId)
228+
} catch (error) {
229+
log.error('cannot get backup-log', { error, runJobId })
230+
return undefined
226231
}
227-
app.backupLogsEe.emit('add', startBackupLog)
228-
previousBackupLog = startBackupLog
229232
}
230233

231-
function emitBackupLogUpdate(backupLog) {
232-
if (hasBackupLog) {
233-
app.backupLogsEe.emit('update', backupLog, previousBackupLog)
234-
previousBackupLog = backupLog
234+
if (type === 'backup' || job.key === undefined) {
235+
const safeBackupLog = await safeGetBackupLog(runJobId)
236+
if (safeBackupLog === undefined) {
237+
log.warn('SSE ignored to not interrupt the backup-job')
238+
} else {
239+
startBackupLog = {
240+
...safeBackupLog,
241+
status: 'pending', // overwrite the status, because `getBackupNgLogs` return a `interrupted` status here. see `handleLog`
242+
}
243+
app.backupLogsEe.emit('add', startBackupLog)
244+
previousBackupLog = startBackupLog
235245
}
236246
}
237247

248+
function emitBackupLogUpdate(backupLog) {
249+
app.backupLogsEe.emit('update', backupLog, previousBackupLog)
250+
previousBackupLog = backupLog
251+
}
252+
238253
try {
239254
let executor = this._executors[type]
240255
if (executor === undefined) {
@@ -325,7 +340,7 @@ export default class Jobs {
325340

326341
// Links the job run to its backup log
327342
const jobUpdateFct = async backupTaskId => {
328-
if (hasBackupLog) {
343+
if (startBackupLog !== undefined) {
329344
function onBackupTaskUpdate(task) {
330345
const backupLog = { ...startBackupLog, tasks: [structuredClone(task)] }
331346
taskFormatAdapter(backupLog)
@@ -378,11 +393,14 @@ export default class Jobs {
378393
app.emit('job:terminated', runJobId, { type })
379394
throw error
380395
} finally {
381-
if (hasBackupLog) {
396+
if (startBackupLog !== undefined) {
382397
unwatchBackupTask()
383-
app.getBackupNgLogs(REMOVE_CACHE_ENTRY, runJobId)
384-
const backupLog = await app.getBackupNgLogs(runJobId)
385-
emitBackupLogUpdate(backupLog)
398+
const safeBackupLog = await safeGetBackupLog(runJobId, { bypassCache: true })
399+
if (safeBackupLog === undefined) {
400+
log.warn('skip SSE event due to a not found backup-log')
401+
} else {
402+
emitBackupLogUpdate(safeBackupLog)
403+
}
386404
}
387405
}
388406
}

0 commit comments

Comments
 (0)