Я пытаюсь реализовать стратегию повтора в тупике в mysql и nodej, но мне не хватает информации о фиксации транзакции.
Что я пытаюсь сделать, так это то, что если я получаю ошибочный тупик, я совершаю agian после короткой попытки.
мне нужно запускать все предыдущие запросы agian или повторять достаточно?
connection.commitTransaction = function () {
return new Promise((resolve, reject) => {
const commit = () => {
connection.commit(function (err) {
if (err) {
console.error("err.code", err.code);
if (err.code === 'ER_LOCK_DEADLOCK') {
setTimeout(() => {
commit();
}, 50);
return
}
return connection.rollback(function () {
connection.end();
reject(err);
});
}
connection.end();
resolve();
});
};
commit();
});
};






Ваши транзакции откатываются, поэтому вам нужно снова выполнить запросы.
На самом деле вам, вероятно, придется снова запустить запросы разные (или, по крайней мере, проверить, действительны ли они), например снова применив логику, которая позволяет к этим конкретным запросам.
Тупиковая ситуация обычно означает, что вы основывали (или могли основывать) решение выполнить конкретный запрос (с этими конкретными значениями) на данных, которые были (или могли быть) изменены другой транзакцией, поэтому только что выполненные вами запросы могут не быть действителен больше. В противном случае в MySQL, вероятно, была бы функция, позволяющая просто повторять запросы за вас.