バグ #1449
完了mastodon: リストのストリーミングAPIに一秒に一回再接続している
Yuto Tokunaga さんが4年以上前に追加. ほぼ3年前に更新.
説明
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. ログを眺める
Yuto Tokunaga さんが4年以上前に更新
関係があるのかは分かりませんが, start
plugin/mastodon_sse_streaming/connection.rb:38 の例外処理の文法が間違っている気がします.do
とrescue
・ensure
が対応していますが,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年以上前に更新
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してくれて良いです