noellabo's tech blog

@noellaboの技術ブログ

DeliveryFailureTrackerがホスト単位になりました

以前に書いたMastodonが配送に失敗したジョブに対処する仕組みDeliveryFailureTrackerで閉鎖したサーバに対処するの続きです。

死んでいるサーバに配送してしまう問題が解決

これまでinboxのURLで配送失敗を記録していたため、主に投稿の配送に使うshared_inboxだけが登録され、個々のユーザーのinboxが未登録のまま残る傾向がありました。

そのため、配送不能なサーバに属する投稿やユーザーに対してお気に入りやブースト、フォローやブロックを行うと、失敗するとわかっているのに接続しにいってしまう問題が発生していました。

ホスト単位の判定になったことで、今後はこのような問題は起きなくなります。

なお、今回の変更はmasterに投入されたばかりなので、v3.1.3の次にリリースされるバージョンからの適用になります。

配送不能なホスト名の保存先

これまで配送不能なサーバ一覧はRedisに保存されていましたが、Redisが吹っ飛ぶと消えてしまうため、PostgreSQLに記録し、それをキャッシュするように変更されました。

unavailable_domainsというテーブルで、意味のあるフィールドはdomainのみです。

配送不能なホストを強制登録する方法について

もう死んでいるとわかっているサーバへの配送を止めるために強制的登録する場合は、rails consoleで次のように指定します。

bin/rails console

で起動して、

UnavailableDomain.create(domain: 'mastodon.example.com')

削除する場合は、DeliveryFailureTracker経由で『配送できたよ』と伝える方が良いでしょう。

DeliveryFailureTracker.new('mastodon.example.com').track_success!

サーバのホスト名(ここではmastodon.example.com)部分を読み替えてください。