Project

General

Profile

Actions

バグ #1449

closed

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

Added by Yuto Tokunaga almost 5 years ago. Updated over 3 years ago.

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

Description

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. ログを眺める

Actions #1

Updated by toshi_a 初音 almost 5 years ago

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

Actions #2

Updated by cob odo almost 5 years ago

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

Actions #3

Updated by Yuto Tokunaga almost 5 years ago

  • Description updated (diff)
Actions #4

Updated by Yuto Tokunaga almost 5 years ago

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

Actions #5

Updated by Yuto Tokunaga almost 5 years ago

  • Description updated (diff)
  • Target version changed from 4.1 to 5.1

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

Actions #6

Updated by toshi_a 初音 almost 5 years ago

関係があるのかは分かりませんが, 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がリクエストしているエンドポイントが対象サーバに実装されていないという可能性が高いので、再現するサーバの情報もう少し集めたいです

Actions #7

Updated by toshi_a 初音 almost 5 years ago

  • Status changed from 分類待ち to 実装待ち
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です

Actions #8

Updated by Shibafu Midorino almost 5 years ago

こちら 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クライアントによって合成されてしまっているものと考えられます。

Actions #9

Updated by Yuto Tokunaga almost 5 years ago

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

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

Actions #10

Updated by Yuto Tokunaga almost 5 years ago

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

あっ(窒息)

Actions #11

Updated by toshi_a 初音 almost 5 years ago

#note-8

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

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

Actions #12

Updated by cob odo almost 5 years ago

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

Actions #13

Updated by Shibafu Midorino almost 5 years ago

  • Status changed from 実装待ち to レビュー待ち
  • ブランチ set to topic/1449-sse-authorized-type-perma-link

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

Actions #14

Updated by toshi_a 初音 almost 5 years ago

  • Assignee set to Yuto Tokunaga

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

Actions #15

Updated by Yuto Tokunaga almost 5 years ago

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

Actions #16

Updated by Yuto Tokunaga almost 5 years ago

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

merged

Actions #17

Updated by toshi_a 初音 over 3 years ago

  • Target version changed from 5.1 to 5.0
Actions

Also available in: Atom PDF