Par2 size matching 100x faster; release bookkeeping once per statement
matchPar2Releases checked every same-size release_files row's set and date (18 s per batch of body-derived binaries); now an index on release_files (release_id, size) drops the repeated sizes first: 0.16 s. File inserts updated their release in four row triggers; one statement trigger now updates each release once per INSERT. Completeness is noted in release_dirty and recomputed by gc:scheduler every 30 minutes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
288a6bab8d
commit
be2112f4ad
9 files changed
+208
-11
No files matched your search
@@ -1,4 +1,5 @@
|
||||
import { test } from '@japa/runner'
|
||||
import ReleaseCompleteness from '#services/ReleaseCompleteness'
|
||||
import db from '@adonisjs/lucid/services/db'
|
||||
import FileStore from '#services/FileStore'
|
||||
import testUtils from '@adonisjs/core/services/test_utils'
|
||||
@@ -89,9 +90,12 @@ test.group('Web API', (group) => {
|
||||
response.assertBodyContains({ sources: [] })
|
||||
})
|
||||
|
||||
test('completeness follows files and par2 lists through triggers', async ({ assert }) => {
|
||||
test('completeness follows files and par2 lists (triggers note releases, the sweep recomputes)', async ({ assert }) => {
|
||||
const now = new Date()
|
||||
const complete = async (id: number) => (await db.from('releases').where('id', id).first()).complete
|
||||
const complete = async (id: number) => {
|
||||
await ReleaseCompleteness.sweep()
|
||||
return (await db.from('releases').where('id', id).first()).complete
|
||||
}
|
||||
const file = (releaseId: number, name: string) => ({
|
||||
filename: name, poster: 'p', date: now.getTime(), parts: 1, size: 100_000, release_id: releaseId,
|
||||
groups: '[]', segments: [], created_at: now, updated_at: now,
|
||||
|
||||
Reference in new issue
Block a user