feat: persist failure journal and bounded retries (F11)

This commit is contained in:
Rawman Grey 2026-10-30 10:22:29 +03:00
parent ec3e0c16e0
commit 871182d6d5
15 changed files with 2769 additions and 23 deletions

View file

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