Sidekiq尝试在执行方法

时间:2017-01-25 23:19:32

标签: ruby-on-rails ruby sidekiq

在侧面执行方法中调用AC destroy是否安全?我有这种方法,它将循环通过设备并发送通知,如果失败,它将在救援中销毁该设备。

是否可能在此行“devices = Device.where(id:device_ids)”之后暂停一个线程A并且线程B销毁线程A暂停的相同设备对象,当线程A恢复时,“设备”将已经摧毁?如何处理这个问题>

def perform(device_ids, message)
  devices = Device.where(id: device_ids)
  devices.each do |device|
    begin
      device.send_notification(message)
    rescue Aws::SNS::Errors::EndpointDisabled
      device.destroy
    end
  end
end

1 个答案:

答案 0 :(得分:2)

如果他们都试图破坏相同的数据库记录,是的,可能存在竞争条件。通常你会拯救并忽略错误。