Prober: claim only candidates of settled releases, without the join
The settler marks a settled release's candidates ready (and unreadable when it had no readable name). Claims took the candidates by joining releases from random points of the queue; in its newer half nothing had settled, so a slice scanned to the end (0.3 s each, 20 slices and 5 tiers a claim) and the prober stood still: 2.4M waiting, 0 probed a minute. Now an index over the claimable rows only, the slices drawn within them. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
1866e38c25
commit
cdc1cdc0cc
5 files changed
+63
-11
No files matched your search
@@ -24,7 +24,15 @@ test.group('Settler', (group) => {
|
||||
})
|
||||
const minutesAgo = (m: number) => new Date(Date.now() - m * 60_000)
|
||||
await db.table('releases').multiInsert([row('old', minutesAgo(31), posted), row('fresh', minutesAgo(5), posted), row('tail', minutesAgo(31), minutesAgo(40))])
|
||||
const ids = Object.fromEntries((await db.from('releases').select('id', 'name')).map((r) => [r.name, r.id]))
|
||||
await db.table('probe_candidates').multiInsert([
|
||||
{ release_id: ids.old, kind: 'lone', message_id: '<a@x>', file: 'a' },
|
||||
{ release_id: ids.fresh, kind: 'lone', message_id: '<b@x>', file: 'b' },
|
||||
])
|
||||
assert.equal(await Settler.run(), 1)
|
||||
// The settled release's candidates are claimable now, as unreadable (readable defaults to false).
|
||||
const ready = await db.from('probe_candidates').orderBy('message_id').select('ready', 'unreadable')
|
||||
assert.deepEqual(ready.map((r) => [r.ready, r.unreadable]), [[true, true], [false, false]])
|
||||
const settled = (await db.from('releases').whereNotNull('settled_at').select('name')).map((r) => r.name)
|
||||
assert.deepEqual(settled, ['old'])
|
||||
})
|
||||
|
||||
Reference in new issue
Block a user