等待生成事务被提交的生成函数?
Spawned function to wait for the spawning transaction to be committed?
我有一个查询对数据库进行了一些更改(更改了几个文档的一些集合),然后生成了一个函数。
生成的函数看不到生成查询中所做的更改。
如果生成的函数生成自己,那么它会在第二次运行时看到更改(然后不再生成自己)。
我敢打赌,任务服务器会在 MVCC 机制为事务结束选择自己的时间戳之前立即选择生成的函数。
所以我得到了两个相关的问题:
1) 如何确保生成函数等待生成事务结束?
2) 是否可以生成一个函数,但只有在事务成功时才真正放入任务服务器队列(如果失败,则不将其放入任务服务器,导致一种回滚)?
我现在能想到的一个解决方案是使用 post-commit 触发器,但这听起来有点复杂,我希望在生成函数时有一个简单的选项可以做到这一点.
1) how to make sure the spawned function waits for the end of the spawning transaction?
你不能。正如您正确指出的那样,生成事务直到生成事务开始后才完成。我能想到的唯一方法是在生成下一个任务之前在单独的隔离事务中评估集合更新代码。
2) is it possible to spawn a function, but to be actually put on the task server queue only if the transaction succeeds (and if it fails, does not put it on the task server, resulting in a kind of rollback)?
据我所知没有。最佳做法是将生成任务作为最后一件事,如果出现故障,您会在生成后续任务之前及早发现它。
此处的第三个选项是查看对 运行 这些查询的某种外部编排。例如,您可以针对第 1 步发出查询,return 其 URI,然后针对第 2 步发出查询。我更喜欢这种方法,这样您可以更轻松地在生成太多代码的情况下停止代码任务并减慢集群速度。繁重的任务产卵让我很紧张。这还可以更轻松地跟踪流程中的哪个步骤失败了。
我有一个查询对数据库进行了一些更改(更改了几个文档的一些集合),然后生成了一个函数。
生成的函数看不到生成查询中所做的更改。
如果生成的函数生成自己,那么它会在第二次运行时看到更改(然后不再生成自己)。
我敢打赌,任务服务器会在 MVCC 机制为事务结束选择自己的时间戳之前立即选择生成的函数。
所以我得到了两个相关的问题:
1) 如何确保生成函数等待生成事务结束?
2) 是否可以生成一个函数,但只有在事务成功时才真正放入任务服务器队列(如果失败,则不将其放入任务服务器,导致一种回滚)?
我现在能想到的一个解决方案是使用 post-commit 触发器,但这听起来有点复杂,我希望在生成函数时有一个简单的选项可以做到这一点.
1) how to make sure the spawned function waits for the end of the spawning transaction?
你不能。正如您正确指出的那样,生成事务直到生成事务开始后才完成。我能想到的唯一方法是在生成下一个任务之前在单独的隔离事务中评估集合更新代码。
2) is it possible to spawn a function, but to be actually put on the task server queue only if the transaction succeeds (and if it fails, does not put it on the task server, resulting in a kind of rollback)?
据我所知没有。最佳做法是将生成任务作为最后一件事,如果出现故障,您会在生成后续任务之前及早发现它。
此处的第三个选项是查看对 运行 这些查询的某种外部编排。例如,您可以针对第 1 步发出查询,return 其 URI,然后针对第 2 步发出查询。我更喜欢这种方法,这样您可以更轻松地在生成太多代码的情况下停止代码任务并减慢集群速度。繁重的任务产卵让我很紧张。这还可以更轻松地跟踪流程中的哪个步骤失败了。