延迟作业会忘记已经在队列中停留几分钟并且没有尝试的作业

时间:2012-11-05 02:26:45

标签: ruby-on-rails heroku mongoid delayed-job

我正在使用delayed_job创建大量作业,几乎全部在以后完成,如果作业数量过高,在一定时间后,每个作业都会被清除队列无论其状态如何。

以下rails项目说明了此问题: https://github.com/hayksaakian/taskbreaker

重新创建问题,创建几个任务(比如5到15个),每个任务有大约100个目标 (来自Web界面或控制台)

然后在控制台尝试执行以下任务: Task.attempt_tasks

将会发生以下情况: 将创建许多工作,工人做几分钟的工作,然后每个工作从队列中消失。

要验证是这种情况,检查任何任务,您会注意到每个成就可能没有任意数字等于'10'(它应该是10,因为我们为每个延迟的attempt_string调用递增1 )。每个成就的arbitrary_array也不是10的长度(它应该是,因为我们将10个调用延迟到attempt_array);

我不确定为什么会这样,因为我没有看到任何错误,但我确信它正在发生。

在taskbreaker.herokuapp.com上查看不良工作的示例

注意我在heroku上主持,如果有任何帮助的话。此外,您需要至少5名工作人员在任何合理的时间内重新创建问题。

1 个答案:

答案 0 :(得分:0)

这是由于竞争条件造成的。由于这些方法同时发生,它们的读写都是重叠的,导致意外的输出。