TheSchwartzの失敗したjobとかerrorがいつどのように消えていくのか

この記事ははてなエンジニアAdvent Calendar 2018の16日目の記事です。
昨日はid:akiymによるOpenSSLはどこにいるでした。

地味にOpenSSL系のモジュールはリポジトリのセットアップ時にハマりがちで、かつたまにバージョンアップでビルド引数の渡し方が変わったりする曲者です。が、Crypt::OpenSSL::Guessはナイスモジュールですね。
あとbut sometimes consistency is not a bad thing eitherという下の句(?)があるのは知りませんでした。id:akiymはキャリア的には一応後輩(?)ですがPerlについては学ぶことばかりです。


16日目はid:aerealがお届けします。
普段はアプリケーションエンジニアですが、最近は社内カメラマンを拝命する機会をいただくことがあり、エンジニアインターン2018麻婆豆腐なしにどっしり構えられるエンジニア生きることとコードを書くことが同じエンジニアのインタビューの撮影に携わりました。
特にインタビュー二作は既にご一読いただけたでしょうか? 手前味噌ですがありのまま度の高い率直な内容で楽しんでいただけるかと思いますので、もしまだご覧いただけてない方がいらっしゃればぜひ。

さて、はてなブログをはじめとするいくつかのはてなのサービスではジョブキューにTheSchwartzというPerlMySQLを使ったミドルウェアを利用しています。

TheSchwartzの失敗したjobやerrorがいつ消えるのか、そのうち消えるといった認識だったけど、どれくらい経つと消えるのか、どういうタイミングなのか、詳しく知らないなーと思い調べました。

exitstatus

消しているところ: https://metacpan.org/source/JFEARN/TheSchwartz-1.12/lib/TheSchwartz/Job.pm#L162

  • set_exit_statusが呼ばれたとき:
    • ランダムに
    • exitstatus.delete_after < 現在時刻のレコードが
    • ……deleteされる
  • set_exit_statusが呼ばれるのは?
    • TheSchwartz::Jobを継承した子クラスで keep_exit_status_for を再実装してtruthyな値を返して、かつ completed/_failedメソッドが呼ばれたとき
    • = ジョブの実行が終了したとき

error

消しているところ: https://metacpan.org/source/JFEARN/TheSchwartz-1.12/lib/TheSchwartz/Job.pm#L126

  • add_failureが呼ばれたとき:
    • 発生時刻 (error_time) が一定時間より古いとき
      • 一定時間: 現在時刻 - maxage
      • maxageのデフォルトは7時間
    • ……deleteされる
  • add_failureが呼ばれるのは?
    • _failedが呼ばれたとき
    • = ジョブが失敗したとき

おわり

アドベントカレンダーは毎日1つ穴を開けるとお菓子が出てきたりするもので、そこから転じたブログ記事のアドベントカレンダーはもともとささやかなtipsを連続で紹介するといった風情の取り組みだったといいます。
本日の記事はアドベントカレンダーの起源に迫るような小粒でもぴりりと辛い、そんな記事を目指しましたがいかがでしたか?

明日はid:Windymeltです。