プロジェクト

全般

プロフィール

バグ #1449

完了

mastodon: リストのストリーミングAPIに一秒に一回再接続している

Yuto Tokunaga さんが4年以上前に追加. ほぼ3年前に更新.

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

説明

developブランチで,一秒に一回

notice: {MIKUTTER_DIR}/plugin/mastodon_sse_streaming/connection.rb:57:in `connect': connect https://mstdn.maud.io/api/v1/streaming/list?list=XX

のnoticeが流れます.

サーバーはmstdn.maud.ioです.


再現手順

1. --debugで起動
2. 抽出タブにmastodonのリストを追加する
3. ログを眺める

toshi_a 初音 さんが4年以上前に更新

私の環境では問題なくstreaming接続できており、毎秒再接続はしません。

cob odo さんが4年以上前に更新

これ、うちの環境(Ubuntu20.04 on WSL2)でも起きてますね。
詳しく追えてないですが報告まで。

Yuto Tokunaga さんが4年以上前に更新

Yuto Tokunaga さんが4年以上前に更新

関係があるのかは分かりませんが, start plugin/mastodon_sse_streaming/connection.rb:38 の例外処理の文法が間違っている気がします.dorescueensureが対応していますが,doブロックにこのような文法はないはずです.

Yuto Tokunaga さんが4年以上前に更新

  • 説明 を更新 (差分)
  • 対象バージョン4.1 から 5.1 に変更

デバッグログを入れて見てみると,plugin/mastodon_sse_streaming/connection.rb:62 でリクエストの度にすぐに404が返ってきているみたいです.

toshi_a 初音 さんが4年以上前に更新

関係があるのかは分かりませんが, start plugin/mastodon_sse_streaming/connection.rb:38 の例外処理の文法が間違っている気がします.doとrescue・ensureが対応していますが,doブロックにこのような文法はないはずです.

https://bugs.ruby-lang.org/issues/12906 で、Ruby 2.5から利用できるようになったので、mikutterでは利用しています。

デバッグログを入れて見てみると,plugin/mastodon_sse_streaming/connection.rb:62 でリクエストの度にすぐに404が返ってきているみたいです.

この部分だと、responseが帰ってくる=接続が切れた ということになりますね。単純にmikutterがリクエストしているエンドポイントが対象サーバに実装されていないという可能性が高いので、再現するサーバの情報もう少し集めたいです

toshi_a 初音 さんが4年以上前に更新

  • ステータス分類待ち から 実装待ち に変更
notice: {MIKUTTER_DIR}/plugin/mastodon_sse_streaming/connection.rb:57:in `connect': connect https://social.mikutter.hachune.net/api/v1/streaming/list?list=12

何故か俺の環境でも再現するようになった、この間見たときは大丈夫だったのに。

サーバはsocial.mikutter.hachune.netです

Shibafu Midorino さんが4年以上前に更新

こちら ertona.net , social.mikutter.hachune.net , mstdn.maud.io への接続にて再現を確認しました。

notice: {MIKUTTER_DIR}/plugin/mastodon_sse_streaming/connection.rb:57:in `connect': connect https://ertona.net/api/v1/streaming/list?list=1
notice: {MIKUTTER_DIR}/plugin/mastodon_sse_streaming/connection.rb:57:in `connect': connect https://social.mikutter.hachune.net/api/v1/streaming/list?list=6
notice: {MIKUTTER_DIR}/plugin/mastodon_sse_streaming/connection.rb:57:in `connect': connect https://mstdn.maud.io/api/v1/streaming/list?list=248

この時のサーバー側アクセスログを確認したところ、パラメータ list が二重に送信されていることが分かりました。

240b:10:**** - - [12/Jun/2020:12:48:07 +0000] "GET /api/v1/streaming/list?list=1&list=1 HTTP/1.1" 404 32 "-" "HTTPClient/1.0 (2.8.3, ruby 2.7.0 (2019-12-25))" "-" 
240b:10:**** - - [12/Jun/2020:12:48:08 +0000] "GET /api/v1/streaming/list?list=1&list=1 HTTP/1.1" 404 32 "-" "HTTPClient/1.0 (2.8.3, ruby 2.7.0 (2019-12-25))" "-" 
240b:10:**** - - [12/Jun/2020:12:48:09 +0000] "GET /api/v1/streaming/list?list=1&list=1 HTTP/1.1" 404 32 "-" "HTTPClient/1.0 (2.8.3, ruby 2.7.0 (2019-12-25))" "-" 

#1442 の修正にてオーバーライドしたModelの #uri と、元々使っていたパラメータのHashがリクエスト時にHTTPクライアントによって合成されてしまっているものと考えられます。

Yuto Tokunaga さんが4年以上前に更新

https://bugs.ruby-lang.org/issues/12906 で、Ruby 2.5から利用できるようになったので、mikutterでは利用しています。

便利!(なぜかウチのvimで正しくハイライトされてない)

Yuto Tokunaga さんが4年以上前に更新

#1442 の修正にてオーバーライドしたModelの #uri と、元々使っていたパラメータのHashがリクエスト時にHTTPクライアントによって合成されてしまっているものと考えられます。

あっ(窒息)

toshi_a 初音 さんが4年以上前に更新

#note-8

uriは、等価なmodelであれば同じ値であるべきです。ユーザに表示するものではありません。
perma_linkは、同一性の判定には使われず、それに対応するWeb上のURLを返すことを期待します。ない場合は nil を返して構いません。

以上のことから、uriは必ずしもAPIエンドポイントのURLを返す必要はないです。(俺の実装が間違っているのですが)この場合、perma_linkがクエリパラメータ込みのストリーミングAPIのURLを返し、接続するほうは単にperma_linkを使う(あとからクエリパラメータをつけるといったURLの加工をしない)のが良いと思います。

cob odo さんが4年以上前に更新

うちで再現してる接続先は https://mstdn.kanagu.info すなわち弊サーバーです。
mastodon側の挙動変更によるもの、という可能性もなくはないかなと思いますね……

Shibafu Midorino さんが4年以上前に更新

  • ステータス実装待ち から レビュー待ち に変更
  • ブランチtopic/1449-sse-authorized-type-perma-link にセット

#note-11 の方針で修正をコミットしました。レビューをお願いします。

toshi_a 初音 さんが4年以上前に更新

  • 担当者Yuto Tokunaga にセット

俺が見た感じ大丈夫そうな気がしました。yuntanも見てもらって大丈夫そうだったらdevelopにmergeしてくれて良いです

Yuto Tokunaga さんが4年以上前に更新

checkoutして一秒に一回再接続する問題が解決していることを確認しました.

Yuto Tokunaga さんが4年以上前に更新

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

merged

toshi_a 初音 さんがほぼ3年前に更新

  • 対象バージョン5.1 から 5.0 に変更

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