fix(backend): WebSocketからの更新時にロックダウン設定が一切適用されない問題を修正#16932
fix(backend): WebSocketからの更新時にロックダウン設定が一切適用されない問題を修正#16932kakkokari-gtyih wants to merge 18 commits intomisskey-dev:developfrom
Conversation
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## develop #16932 +/- ##
===========================================
+ Coverage 63.58% 63.63% +0.04%
===========================================
Files 1156 1157 +1
Lines 115374 115576 +202
Branches 8152 8171 +19
===========================================
+ Hits 73365 73546 +181
- Misses 39827 39848 +21
Partials 2182 2182 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
|
このPRによるapi.jsonの差分 |
|
に加えて、
においても内容が隠れないので、影響範囲はそこそこ大きい(割と遭遇しやすい)と考えられる |
ロックダウン対象のノートをリノートは普通できなさそうな気がする |
|
少なくとも本人ならできそう |
↑ のケース(ロックダウン対象になっているノートやその引用を本人がリノート/引用)は本人が意識せず行う可能性がありそうなのでしばしば発生しうる問題だと考えられる(このようなケースもAPI側ではハンドリングできているので、WSで来たのは隠れておらず、リロードしてAPIから取れれば隠れるという具合に挙動の不一致が露骨に出る) じゃあロックダウン対象のものは一律でリノートや引用ができないようにすればいいのではないか?と思われるかもしれないが、そうするとフロントエンド/バックエンド双方でさらに条件が複雑怪奇になりメンテナンスコストや条件漏れのリスクが増大する(=バグや意図しない挙動の温床になる)のでやるべきではない shouldHideNoteが呼び出されることが多くなるのはそうなので、それに関してはフォロー関係をいちいちDBに取りに行くのではなくRedis Cacheを使用するようにすることで負荷軽減をねらっている(実際これを先行適用したサーバーではDBを含め負荷に有意な差はみられていないという報告を得ている) |
Backend Memory Usage Comparison
|
|
コンフリクト解消 |
|
コンフリクト解消 |
What
WebSocketからの更新時にノートの内容を隠す設定が機能していない問題を修正
NoteEntityService.hideNoteをshouldHideNoteとhideNoteに分割NoteEntityService.shouldHideNoteが呼ばれることが増えるため、Redisキャッシュを読むように(TODOの解消)Why
ロックダウン設定が貫通する問題を修正するため
Additional info (optional)
基本的にロックダウンの時限設定を「n秒後」のような極端な数値にしたり未来の時刻にしたり( #15198 )といったケースはごくまれなので今までキャッチされてなかった説
Checklist