プロジェクト

全般

プロフィール

バグ #1591

完了

mastodonのストリーミング接続リトライ処理の遅延が効いていない

あひる 家鴨 さんが10ヶ月前に追加. 10ヶ月前に更新.

ステータス:
終了
優先度:
通常
担当者:
-
対象バージョン:
プラグイン名:
mastodon_sse_streaming
クラッシュする:
いいえ

説明

概要

mastodonのストリーミング接続に失敗した場合のリトライ処理として 失敗し続けるとリトライ期間が伸びるようにする処理が書かれていますが、リトライ期間が伸びずに最小である1秒でリトライし続けています。

原因

理由としては、ストリーミング接続処理( `to_enum` )の際に `HTTPClient#request` のブロックでレスポンスのチャンクを取得して `yielder` に渡していますが、リクエストエラー時にもチャンクにエラー文が渡ってきているからのようです。
https://dev.mikutter.hachune.net/projects/mikutter/repository/main/revisions/master/entry/plugin/mastodon_sse_streaming/raw_server_sent_events_stream.rb#L33

`to_enum` の呼び出し元の `connection_keeping_stream.rb` では `to_enum.each` のブロック内で正常に受信されたとしてリトライ期間をリセットしています。
これによって、接続失敗時に毎回リトライ期間がリセットされ結果として最小の1秒でリトライし続けるといった挙動になっています。
https://dev.mikutter.hachune.net/projects/mikutter/repository/main/revisions/master/entry/plugin/mastodon_sse_streaming/middleware/connection_keeping_stream.rb#L22

方針

対応方針としては、そもそも raw_server_sent_events_stream の `Http#request` についてエラーハンドリングができていないことが原因と思われるため、レスポンスの処理を当該メソッドのブロック内で行うことでリクエストエラー発生時に yielder に値を渡さずにエラーをraiseするようにしようと考えています。
なお、手元では上記対応方針で修正済みのため、後ほどコミットします。

備考

mastodonがstreaming APIについて匿名アクセスを認めない変更を入れたことで、smhnへのLTLのstreamingへのアクセスが401となっており今回の問題を発見しました。
streaming APIへの匿名アクセスをどうにかする変更は別途対応として必要かもしれません。
https://github.com/mastodon/mastodon/pull/23989


再現手順

1. mastodonプラグインの `設定 > 公開タイムライン` に `social.mikutter.hachune.net` を追加
2. mikutterをdebugオプション付きで起動すると `public/local` へのリトライログが1秒おきに流れてくる

あひる 家鴨 さんが10ヶ月前に更新

  • ステータス実装待ち から レビュー待ち に変更
  • 担当者 を削除 (あひる 家鴨)
  • ブランチtopic/1591-fix-don-retry-cooldown にセット

toshi_a 初音 さんが10ヶ月前に更新

  • ステータスレビュー待ち から 終了 に変更

他の形式にエクスポート: Atom PDF