Мой сервер отслеживает игровые экземпляры. Если нет текущих игр, когда пользователь достигает определенной конечной точки, сервер создает новую. Если конечная точка будет нажата дважды, я хочу убедиться, что создана только одна новая игра. Я пытаюсь сделать это с помощью транзакций Sequelize:
const t = await sequelize.transaction({
isolationLevel: Sequelize
.Transaction
.ISOLATION_LEVELS
.SERIALIZABLE,
});
let game = await Game.findOne({
status: {[Op.ne]: "COMPLETED"},
transaction: t,
});
if(game) {
// ...
} else {
game = await Game.create({}, {
transaction: t,
});
// ...
}
await t.commit();
К сожалению, когда эта конечная точка ударяется дважды, я получаю следующую ошибку: SequelizeDatabaseError: Deadlock found when trying to get lock; try restarting transaction
.
I посмотрел на возможные решения здесь и здесь , и я понимаю, почему мой код выдает ошибку, но я не понимаю, как выполнить sh то, что я пытаюсь сделать ( или являются ли транзакции правильным инструментом для выполнения sh этого). Любое направление будет оценено!