Project

General

Profile

Actions

バグ #1591

closed

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

Added by あひる 家鴨 9 months ago. Updated 9 months ago.

Status:
終了
Priority:
通常
Assignee:
-
Target version:
プラグイン名:
mastodon_sse_streaming
クラッシュする:
No

Description

概要

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秒おきに流れてくる

Actions #1

Updated by あひる 家鴨 9 months ago

  • Status changed from 実装待ち to レビュー待ち
  • Assignee deleted (あひる 家鴨)
  • ブランチ set to topic/1591-fix-don-retry-cooldown
Actions #2

Updated by toshi_a 初音 9 months ago

  • Status changed from レビュー待ち to 終了
Actions

Also available in: Atom PDF