import db from '@adonisjs/lucid/services/db' /** Releases unchanged for this long are settled (ranges are read in order; the merger adds within minutes). */ const QUIET_HOURS = 6 const BATCH = 50_000 /** * Settles releases (REBUILD.md, part 8): once nothing has been added for * QUIET_HOURS, its completeness is decided: complete when every file the * [i/N] counter announced was found, unknown without a counter (phase 2 * reads par2 sets for those). Phase 2 picks its work from settled releases. */ class Settler { async run(): Promise { let settled = 0 while (true) { const { rowCount } = await db.rawQuery( `UPDATE releases SET settled_at = now(), complete = CASE WHEN file_total IS NULL THEN NULL ELSE files >= file_total END WHERE id IN (SELECT id FROM releases WHERE settled_at IS NULL AND last_seen_at < now() - make_interval(hours => ?) LIMIT ?)`, [QUIET_HOURS, BATCH] ) settled += rowCount ?? 0 if ((rowCount ?? 0) < BATCH) return settled } } } export default new Settler()