Commit 6c67e95
Add per-row monotonic tie-breaker to enqueueMany()
MySQL evaluates NOW(6) once per statement, so all rows in a bulk INSERT
share the same deliver_after timestamp. When messages share an
orderingKey, dequeueing (which ORDER BY deliver_after) then selects among
them non-deterministically.
Fix by using delayMs * 1000 + index microseconds for each row's interval,
so row i gets a deliver_after exactly i µs later than row 0. This
ensures the insertion order is preserved under any orderingKey without
requiring a new column or schema change.
Add a regression test that enqueues five messages under the same ordering
key via enqueueMany() and asserts they are delivered in order.
#599 (comment)
Co-Authored-By: claude-sonnet-4-6 <claude-sonnet-4-6@anthropic.com>1 parent d005d1e commit 6c67e95
2 files changed
Lines changed: 49 additions & 2 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
575 | 575 | | |
576 | 576 | | |
577 | 577 | | |
| 578 | + | |
| 579 | + | |
| 580 | + | |
| 581 | + | |
| 582 | + | |
| 583 | + | |
| 584 | + | |
| 585 | + | |
| 586 | + | |
| 587 | + | |
| 588 | + | |
| 589 | + | |
| 590 | + | |
| 591 | + | |
| 592 | + | |
| 593 | + | |
| 594 | + | |
| 595 | + | |
| 596 | + | |
| 597 | + | |
| 598 | + | |
| 599 | + | |
| 600 | + | |
| 601 | + | |
| 602 | + | |
| 603 | + | |
| 604 | + | |
| 605 | + | |
| 606 | + | |
| 607 | + | |
| 608 | + | |
| 609 | + | |
| 610 | + | |
| 611 | + | |
| 612 | + | |
| 613 | + | |
| 614 | + | |
| 615 | + | |
| 616 | + | |
| 617 | + | |
| 618 | + | |
| 619 | + | |
578 | 620 | | |
579 | 621 | | |
580 | 622 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
245 | 245 | | |
246 | 246 | | |
247 | 247 | | |
248 | | - | |
| 248 | + | |
| 249 | + | |
| 250 | + | |
| 251 | + | |
| 252 | + | |
| 253 | + | |
249 | 254 | | |
250 | | - | |
| 255 | + | |
251 | 256 | | |
252 | 257 | | |
253 | 258 | | |
| |||
0 commit comments