バグ #781
完了Userのインスタンスが生成されていないユーザのプロフィールを開けない
説明
内容¶
Userインスタンスがキャッシュされていないユーザのプロフィールが開けない。そのユーザのツイートを一つでも受信する、フォローしている・されているなどすると確実に存在してしまうので、再現は困難。
手順¶
- 検索、リスト、プロフィールなどを使って、in_reply_to_status_idがついていないMentionを探す
- screen_nameをクリックする。期待される動作としてはプラグインタブが開くが、開かない
報告されている再現方法
https://twitter.com/EbiflyBB/status/648100898623762432
関連するチケット
Osamu Koga さんがほぼ9年前に更新
mikutter_shell_post https://github.com/penguin2716/mikutter_shell_post の@whois機能を使うと簡単に再現できそうですね(というかたまに@whoisで開けないことがある)。
Osamu Koga さんが8年以上前に更新
- ステータス を 新規 から レビュー待ち に変更
- 対象バージョン を 3.2 から 3.3 に変更
- プラグイン名 を profile から user_detail_view に変更
なんか盛大にバグっていたので直しました。
ところで、本来は UserServiceRetriever#selectby
をidnameでも動くようにオーバーライドしていやるのが正しい気がしますが、それをやると Service#user_initialize
のとこで post.scan
が no_mainthread
に引っかかってこけました。というか、User
がnew_ifnecessary
のたびにfindbyid
を呼んでるのがなんかおかしい気がします。
toshi_a 初音 さんが8年以上前に更新
- ステータス を レビュー待ち から 終了 に変更
こちらでも確認したので、developに放り込んでおきました。
Retriever#new_ifnecessary は、全てのRetriever::Modelに問い合わせて見つからなかった場合は、新しいインスタンスを作るメソッドで、Retriever上のメモリキャッシュから読み出していますが、Userがオーバライドしている方ではそうなっていませんね。この変更が行われた 5b2463b30a26ae7050001b058e8a1cb1021a1311 を見てもこの振る舞いは正しいと思えませんでしたが、MessageではオーバライドしていないのにUserでだけオーバライドしているのには何らかの意図がある可能性もあるので、調査してみます。
toshi_a 初音 さんが8年以上前に更新
- 関連している バグ #830: User.new_ifnecessary がメインスレッド以外から呼ばれた時にクラッシュすることがある を追加