Seed batches take file ids from the insert; merge split uploads hourly
Test and deploy / test (push) Successful in 1m29s
Test and deploy / deploy (push) Successful in 1m58s

SeedService looked up every file of a batch across all files partitions
after inserting it (15% of Postgres' active time); the merge job read
every release on each GC sweep.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Daan MeijerandClaude Opus 5.5 committed 2026-10-06 23:09:04 +02:00
1 parent b2cc75fdd0
commit 23bbdcc5ee
4 files changed
+24 -7

No files matched your search

+9 -3
View File
@@ -34,6 +34,8 @@ export default class GcScheduler extends BaseCommand {
/** When release completeness was last recomputed (it runs less often than the sweep). */
private completenessAt = 0
/** When split uploads were last merged. */
private mergedAt = 0
public async run() {
this.logger.info(
@@ -115,9 +117,13 @@ export default class GcScheduler extends BaseCommand {
)
}
// Uploads split per poster (CONCEPT.md D35); the releases this empties go in a later sweep.
const merged = await ReleaseMergeService.mergeSplitPosts({ dryRun: this.dryRun })
if (merged.releases) this.logger.info(`Split uploads: ${this.verb('merge', 'merged')} ${merged.releases} releases into ${merged.names}.`)
// Uploads split per poster (CONCEPT.md D35); the releases this empties go in a later sweep. It reads
// every release and its files: hourly, not every sweep (LOG.md 2026-10-06 (12)).
if (this.once || Date.now() - this.mergedAt >= gcConfig.mergeIntervalMs) {
this.mergedAt = Date.now()
const merged = await ReleaseMergeService.mergeSplitPosts({ dryRun: this.dryRun })
if (merged.releases) this.logger.info(`Split uploads: ${this.verb('merge', 'merged')} ${merged.releases} releases into ${merged.names}.`)
}
await this.rebuildIndexes()
}