Project

General

Profile

バグ #1449

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

Added by Yuto Tokunaga about 1 month ago. Updated 27 days ago.

Status:
終了
Priority:
通常
Assignee:
Target version:
プラグイン名:
mastodon_sse_streaming
ブランチ:
topic/1449-sse-authorized-type-perma-link
クラッシュする:
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. ログを眺める

#1

Updated by toshi_a 初音 about 1 month ago

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

#2

Updated by cob odo 28 days ago

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

#3

Updated by Yuto Tokunaga 28 days ago

  • Description updated (diff)
#4

Updated by Yuto Tokunaga 27 days ago

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

#5

Updated by Yuto Tokunaga 27 days ago

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

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

#6

Updated by toshi_a 初音 27 days 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がリクエストしているエンドポイントが対象サーバに実装されていないという可能性が高いので、再現するサーバの情報もう少し集めたいです

#7

Updated by toshi_a 初音 27 days 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です

#8

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

#9

Updated by Yuto Tokunaga 27 days ago

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

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

#10

Updated by Yuto Tokunaga 27 days ago

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

あっ(窒息)

#11

Updated by toshi_a 初音 27 days ago

#note-8

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

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

#12

Updated by cob odo 27 days ago

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

#13

Updated by Shibafu Midorino 27 days ago

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

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

#14

Updated by toshi_a 初音 27 days ago

  • Assignee set to Yuto Tokunaga

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

#15

Updated by Yuto Tokunaga 27 days ago

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

#16

Updated by Yuto Tokunaga 27 days ago

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

merged

Also available in: Atom PDF