mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-10-26 08:36:12 +01:00
fix: retry setAdd on e11000 error
This commit is contained in:
@@ -13,17 +13,25 @@ module.exports = function (module) {
|
|||||||
}
|
}
|
||||||
value = value.map(v => helpers.valueToString(v));
|
value = value.map(v => helpers.valueToString(v));
|
||||||
|
|
||||||
await module.client.collection('objects').updateOne({
|
try {
|
||||||
_key: key,
|
await module.client.collection('objects').updateOne({
|
||||||
}, {
|
_key: key,
|
||||||
$addToSet: {
|
}, {
|
||||||
members: {
|
$addToSet: {
|
||||||
$each: value,
|
members: {
|
||||||
|
$each: value,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
}, {
|
||||||
}, {
|
upsert: true,
|
||||||
upsert: true,
|
});
|
||||||
});
|
} catch (err) {
|
||||||
|
if (err && err.message.includes('E11000 duplicate key error')) {
|
||||||
|
console.log(new Error('e11000').stack, key, value);
|
||||||
|
return await module.setAdd(key, value);
|
||||||
|
}
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
module.setsAdd = async function (keys, value) {
|
module.setsAdd = async function (keys, value) {
|
||||||
|
|||||||
@@ -30,6 +30,14 @@ describe('Set methods', () => {
|
|||||||
assert.deepStrictEqual(members, []);
|
assert.deepStrictEqual(members, []);
|
||||||
assert(!exists);
|
assert(!exists);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should not error with parallel adds', async () => {
|
||||||
|
await Promise.all([
|
||||||
|
db.setAdd('parallelset', 1),
|
||||||
|
db.setAdd('parallelset', 2),
|
||||||
|
db.setAdd('parallelset', 3),
|
||||||
|
]);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('getSetMembers()', () => {
|
describe('getSetMembers()', () => {
|
||||||
|
|||||||
Reference in New Issue
Block a user