From 2c9e8657630bbbf896496b3b33c7b54bf6269c37 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Sat, 30 May 2020 15:49:34 -0400 Subject: [PATCH] fix: retry failed setObject calls --- src/database/mongo/hash.js | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/src/database/mongo/hash.js b/src/database/mongo/hash.js index f9416d8206..84cd1ef411 100644 --- a/src/database/mongo/hash.js +++ b/src/database/mongo/hash.js @@ -15,12 +15,19 @@ module.exports = function (module) { } const writeData = helpers.serializeData(data); - if (isArray) { - var bulk = module.client.collection('objects').initializeUnorderedBulkOp(); - key.forEach(key => bulk.find({ _key: key }).upsert().updateOne({ $set: writeData })); - await bulk.execute(); - } else { - await module.client.collection('objects').updateOne({ _key: key }, { $set: writeData }, { upsert: true, w: 1 }); + try { + if (isArray) { + var bulk = module.client.collection('objects').initializeUnorderedBulkOp(); + key.forEach(key => bulk.find({ _key: key }).upsert().updateOne({ $set: writeData })); + await bulk.execute(); + } else { + await module.client.collection('objects').updateOne({ _key: key }, { $set: writeData }, { upsert: true, w: 1 }); + } + } catch (err) { + if (err && err.message.startsWith('E11000 duplicate key error')) { + return await module.setObject(key, data); + } + throw err; } cache.delObjectCache(key);