使用Node.js竞争条件(事务,锁定)

时间:2019-06-21 10:41:45

标签: node.js aws-lambda sequelize.js

每次在Shopify商店中更新产品时,Webhook都会在非常短的时间内触发两次。

触发此webhook时,它会调用一个lambda,该lambda在数据库中的一行上执行任务,但是我发现,只需用表示task_complete: true的列标记每一行,然后有条件地检查{ {1}}并发性不足。我正在接受双重任务运行和其他副作用。

我知道这是交易的来源。我正在执行以下操作:

db.result.task_complete === false

我在终端中看到确实正在查询数据库,如下所示:

return await db.connection.transaction({ isolationLevel: db.Sequelize.Transaction.ISOLATION_LEVELS.SERIALIZABLE }, async (t) => { return db.orders.findOrCreate({ where: { shopify_order_id: order.id.toString() }, limit: 1, transaction: t, lock: true, skipLocked: true }) .then(async...

那为什么每次运行lambda任务都会得到两个SELECT ... LIMIT 1 FOR UPDATE SKIP LOCKED;? Sequelize网站上的文档没有提供我所需的清晰度。

0 个答案:

没有答案