Bug:插入重复oid时报错
Bug:插入重复oid时报错
现象
OSS-Mongo 版本进行了改动:当因为有重复 oid 而导致插入失败时,返回的 ec 报错改为kInsertMongo_DuplicateId,与普通插入失败的报错 ec(kInsertMongoDocError)进行区分。
目的是为了保证该种类型的插入失败不需要消息恢复机制(否则会因为消息恢复机制一直尝试重复插入)。
该 ec 也会从 OSS 返回给外部,而其它可以消息恢复的 ec 会在返回之前赋值为 kOK。
这会导致 Store 的异步队列收到一个ec!=kOK,然后直接 reture FALSE;,这会导致 Store 的异步框架在收到 FALSE 后不停地重复尝试发送。形成死循环。
结局方案
- OSS 新建一个函数专门用来区分需要对外屏蔽的 ec,其中包含了上文中提到的两个 ec;
- 考虑过但是没有执行的方案:(Store 中负责双跑 MongoDB 的异步函数中不返回 FALSE?但这样下游 OSS-Mongo 热更新的时候,Store 双跑侧会有大量消息丢失。)
本文由作者按照
CC BY 4.0
进行授权