Sidekiq エラー: Jobs::DeleteReplies ジョブ

こんにちは、
Jobs::DeleteReplies ジョブで多くの失敗が発生しています。これはプラグインとは関係ないと思います。アップグレード間の互換性の問題かもしれません。

Jobs::HandledExceptionWrapper: Wrapped NoMethodError: undefined method 'minutes' for nil:NilClass

Sidekiq の「リトライ」タブに複数の同一ジョブが蓄積しています。

image

アドバイスをお願いします。

更新:関連する topic_id を特定し、そのトピックのタイマーを削除しました。これで解決することを願っています。
もしかしたらバグの結果かもしれないので、ここに残しておきます。

これはごく最近行った変更によるバグで、来週には修正される見込みです。

ご確認ありがとうございます。他の topic_timers でも同様の問題が起きるでしょうか?どのタイプのタイマーが影響を受けていますか?「x 時間後に投稿を削除」のみですか?キューに大量のタスクが蓄積してしまいました(数時間で数千件)。幸いにも Prometheus を使っているので大丈夫ですが(笑)。

修正はここにあります:

このマイグレーションは期待通りに動作しませんでした:

DB.exec("UPDATE topic_timers SET duration_minutes = (duration * 60 * 24) WHERE duration_minutes != duration AND status_type = 7 AND duration IS NOT NULL")
DB.exec("UPDATE topic_timers SET duration_minutes = (duration * 60) WHERE duration_minutes != duration AND status_type != 7 AND duration IS NOT NULL")

WHERE duration_minutes != duration は、duration_minutes が NULL の場合(実際はすべてそうでした)機能しません。

はい、Jobs::DeleteReplies ジョブのみが新しい duration_minutes を直接参照していたため、他のタイマーには影響がなかったはずです(私の確認範囲では)。