読者です 読者をやめる 読者になる 読者になる

Mastodon でリモートインスタンスから自分のトゥートがみえなくなることがある

こんな現象がおきている

  • トゥートする
  • 特定のインスタンスにトゥートが出ない (プッシュされてない)
  • なので、フォロワーにもトゥートが届かない
  • ReplyやBoost/Favはちゃんと届く

これが mstdn.jp 相手に起きているからこまった。

PubSubHubbub

PubSubを司っているPubSubHubbubの配信先リストを眺めてみると、そのインスタンスが居なくなっている。

この状態で相手のインスタンスから自分のアカウントをフォローしなおしたりしても変わらない。

データベース上の subscriptions テーブルからも消え失せており、callback_url/secret が分からないのでもはやお手上げである。

どうしてこうなった?

Mastodonは、トゥートをpushするときに、相手のサーバが3xx/4xxのステータスコードを返却すると、即座に配信を解除するようになっている。 (おそらく相手インスタンスの購読期限が切れたときなどのための処理だろう)

相手インスタンスが、サーバメンテナンスなどで一時的に404などが出ていて、そのときにトゥートを行うとこの現象が発生する。

改めてフォローしなおしても状況が変化しないのは、相手インスタンスはこちらの購読情報をまだ持っているからである。 (購読情報を持っている限り、新たに購読情報を送ることはしないようだ)

解決策

  • 相手のインスタンスcron でデイリータスクを回している限り、購読期限が7日なのでそのうち新しい配信先情報が送られてくる (ので、家宝を食べて待つ)
  • 相手のインスタンスの管理者に SubscribeService.new.call(<自分のAccount>) を実行してくださいと言う
  • 定期的に subscriptions テーブルの dump をとって、問題が起きたら自分で復元してみる