feat: persist failure journal and bounded retries (F11)
This commit is contained in:
parent
ec3e0c16e0
commit
871182d6d5
15 changed files with 2769 additions and 23 deletions
|
|
@ -1,7 +1,9 @@
|
|||
import { defineHook } from '@directus/extensions-sdk';
|
||||
import { runBackfill } from '../lib/backfill';
|
||||
import { recordOp } from '../lib/diagnostics';
|
||||
import { replayFailureMap } from '../lib/failures';
|
||||
import { buildRegistry, isImageType, loadCustomPresets } from '../lib/presets';
|
||||
import { journalFailure, markRecovered, runDueRetries } from '../lib/retry';
|
||||
import { readSettings } from '../lib/settings';
|
||||
import { readRun } from '../lib/state';
|
||||
import { warmFile } from '../lib/warmer';
|
||||
|
|
@ -60,6 +62,35 @@ export default defineHook(({ action, schedule }, { services, database, getSchema
|
|||
}),
|
||||
});
|
||||
|
||||
const failureRecords = await replayFailureMap(env);
|
||||
|
||||
for (const result of summary.results) {
|
||||
if (result.ok) {
|
||||
await markRecovered(
|
||||
env,
|
||||
{
|
||||
file_id: fileId,
|
||||
preset_key: result.key,
|
||||
format: result.format,
|
||||
ms: result.ms,
|
||||
},
|
||||
{ records: failureRecords, logger },
|
||||
);
|
||||
} else {
|
||||
await journalFailure(
|
||||
env,
|
||||
{
|
||||
file_id: fileId,
|
||||
preset_key: result.key,
|
||||
format: result.format,
|
||||
error: result.error,
|
||||
ms: result.ms,
|
||||
},
|
||||
{ records: failureRecords, logger },
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
if (settings.debug) logger.info({ fileId, summary }, 'image-previews: warmed upload');
|
||||
}
|
||||
|
||||
|
|
@ -73,6 +104,12 @@ export default defineHook(({ action, schedule }, { services, database, getSchema
|
|||
|
||||
if (run?.running) return;
|
||||
|
||||
const retryOutcome = await runDueRetries({ services, database, getSchema, env, logger }, {});
|
||||
|
||||
if (retryOutcome.status === 'completed' && retryOutcome.processed > 0) {
|
||||
logger.info(retryOutcome, 'image-previews: due retries processed');
|
||||
}
|
||||
|
||||
const finishedToday = run?.finishedAt
|
||||
? new Date(run.finishedAt).toDateString() === new Date().toDateString()
|
||||
: false;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue