Keep binaries until inspected; seeding writes binaries only for inspection
Par2 naming needs the fingerprint inspection stores on a binary, and the GC deleted seeded binaries (6 h unfingerprinted, 48 h stale) long before the inspection queue reached them. binaries.awaiting_inspection protects them for up to 7 days; the GC deletes use partial indexes so they don't read past waiting rows. Seeding no longer creates binaries for files that aren't inspected (~85% of a.b.ath), which only churned the table. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
cc861ce8ae
commit
b2cc75fdd0
11 files changed
+149
-35
No files matched your search
@@ -6,6 +6,7 @@ import BinaryFileService from '#services/BinaryFileService'
|
||||
import QueueService from '#services/QueueService'
|
||||
import FileStore, { segmentsOf } from '#services/FileStore'
|
||||
import { fileKey } from '#lib/subject/index'
|
||||
import ContentService from '#services/ContentService'
|
||||
|
||||
function segment(name: string, number: number, total = 3): IngestSegment {
|
||||
const poster = 'batch-test@example.invalid'
|
||||
@@ -65,4 +66,21 @@ test.group('Binaries to files', (group) => {
|
||||
assert.include(again, { saved: 0, skipped: 2 })
|
||||
assert.deepEqual(again.incomplete, [ids[2]])
|
||||
})
|
||||
|
||||
test('a queued obfuscated file keeps its binary until inspection fingerprints it', async ({ assert }) => {
|
||||
const name = 'Zk3m9QpL2xW8rT5vN1bYq.bin'
|
||||
await IngestService.ingest([1, 2, 3].map((n) => segment(name, n)))
|
||||
const b = await binary(name)
|
||||
const result = await BinaryFileService.store([Number(b.id)])
|
||||
assert.include(result, { saved: 1, inspections: 1 })
|
||||
const waiting = await binary(name)
|
||||
assert.isTrue(waiting.awaiting_inspection)
|
||||
|
||||
// Inspection stores the fingerprint and clears the flag.
|
||||
const task = { kind: 'inspect' as const, fileId: Number(waiting.file_id), name, segments: [], sevenZip: null }
|
||||
await ContentService.apply(task, { size: 300, contentType: null, md5_16k: 'a'.repeat(32), yencName: name })
|
||||
const inspected = await binary(name)
|
||||
assert.isNull(inspected.awaiting_inspection)
|
||||
assert.equal(inspected.md5_16k, 'a'.repeat(32))
|
||||
})
|
||||
})
|
||||
Reference in new issue
Block a user