fix(processing): 收紧消息生命周期与投递约束
This commit is contained in:
@@ -112,10 +112,36 @@ class InboxPollerTest {
|
||||
|
||||
@Test
|
||||
fun `compat http path and poller do not double enqueue the same message`() {
|
||||
val receipt = InboxService(inbox, proc).accept("<MSG/>", t0)
|
||||
val receipt = InboxService(inbox, proc).accept("<MSG/>")
|
||||
|
||||
assertEquals(0, poller.pollOnce(t0))
|
||||
assertEquals(receipt.msgId, cursor.cursor.committedUpTo) // 已在 PG:读取进度照常推进
|
||||
assertNotNull(proc.find(receipt.msgId))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `a newly exposed hole does not inherit the age of the previous hole`() {
|
||||
val first = inbox.simulateExternalWrite("<MSG/>")
|
||||
val oldHole = inbox.simulateExternalWrite("<MSG/>")
|
||||
val third = inbox.simulateExternalWrite("<MSG/>")
|
||||
val newHole = inbox.simulateExternalWrite("<MSG/>")
|
||||
val fifth = inbox.simulateExternalWrite("<MSG/>")
|
||||
inbox.removeRow(oldHole)
|
||||
inbox.removeRow(newHole)
|
||||
|
||||
assertEquals(1, poller.pollOnce(t0))
|
||||
val almostAged = t0.plus(props.pipeline.maxCommitDelay).minusSeconds(1)
|
||||
inbox.restoreRow(oldHole, "<MSG/>", almostAged)
|
||||
|
||||
assertEquals(2, poller.pollOnce(almostAged))
|
||||
assertEquals(third, cursor.cursor.committedUpTo)
|
||||
assertEquals(almostAged, cursor.cursor.holeSince)
|
||||
assertNull(proc.find(fifth))
|
||||
|
||||
// 旧空洞的期限已到,但新空洞必须获得完整等待窗口。
|
||||
assertEquals(0, poller.pollOnce(t0.plus(props.pipeline.maxCommitDelay)))
|
||||
assertEquals(third, cursor.cursor.committedUpTo)
|
||||
assertNull(proc.find(fifth))
|
||||
assertEquals(first + 2, third)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user