From 28fafcdc5678168671ee719b93458888eb08bc61 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Fri, 27 Mar 2026 11:48:45 -0400 Subject: [PATCH] retrt e11000 in incrObjectField --- src/database/mongo/hash.js | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/src/database/mongo/hash.js b/src/database/mongo/hash.js index 59ea48e1c9..8dabf11831 100644 --- a/src/database/mongo/hash.js +++ b/src/database/mongo/hash.js @@ -240,7 +240,22 @@ module.exports = function (module) { key.forEach((key) => { bulk.find({ _key: key }).upsert().update({ $inc: increment }); }); - await bulk.execute(); + + try { + await bulk.execute(); + } catch (err) { + // retry failed e11000 operations + if (err.code === 11000 || (err.writeErrors && err.writeErrors.some(e => e.code === 11000))) { + const failedIndices = err.writeErrors.filter(e => e.code === 11000).map(e => e.index); + const retryData = failedIndices.map(idx => key[idx]); + await Promise.all(retryData.map( + key => module.incrObjectFieldBy(key, field, value) + )); + } else { + throw err; + } + } + cache.del(key); const result = await module.getObjectsFields(key, [field]); return result.map(data => data && data[field]); @@ -284,7 +299,18 @@ module.exports = function (module) { } bulk.find({ _key: item[0] }).upsert().update({ $inc: increment }); }); - await bulk.execute(); + try { + await bulk.execute(); + } catch (err) { + // retry failed e11000 operations + if (err.code === 11000 || (err.writeErrors && err.writeErrors.some(e => e.code === 11000))) { + const failedIndices = err.writeErrors.filter(e => e.code === 11000).map(e => e.index); + const retryData = failedIndices.map(idx => data[idx]); + await module.incrObjectFieldByBulk(retryData); + } else { + throw err; + } + } cache.del(data.map(item => item[0])); }; };