@@ -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