如何无需重建查询重试AWS Neptune Gremlin的ConcurrentModificationException错误?
多线程下DynamoDB批量写入重试ConcurrentModificationException失败问题
我按照亚马逊的建议,将gBatchWrite中的批量操作数控制在200左右,在多线程环境运行代码时,线程间的少量重叠触发了ConcurrentModificationException异常。
原本我指望通过指数退避重试await gBatchWrite.iterate()来解决这个问题,但所有重试都失败了——哪怕其他线程全部结束、只剩当前线程单独运行时,重试依然无效。只有在单线程环境下运行相同数据才不会出现异常,但速度会慢很多。现在看来,每次遇到这个异常后只能重新构建gBatchWrite变量,这比单纯重试的成本高太多了。
我的代码实现如下:
let gBatchWrite = g for (const jtom of batch) { // some code here to build gBatchWrite } await exponentialDoTillTruthy( async () => { try { await gBatchWrite.iterate() return true } catch (err) { if (err.statusMessage && typeof err.statusMessage === "string") { const errStatus = JSON.parse(err.statusMessage) if (typeof errStatus === "object" && errStatus !== null && errStatus.code === 'ConcurrentModificationException') { return false } } throw err } }, 50 )
内容的提问来源于stack exchange,提问作者Louis Rebolloso
相关产品推荐
相关产品推荐

