Skip to content

fix(backend): WebSocketからの更新時にロックダウン設定が一切適用されない問題を修正#16932

Closed
kakkokari-gtyih wants to merge 18 commits intomisskey-dev:developfrom
kakkokari-gtyih:fix-stream-hidenote
Closed

fix(backend): WebSocketからの更新時にロックダウン設定が一切適用されない問題を修正#16932
kakkokari-gtyih wants to merge 18 commits intomisskey-dev:developfrom
kakkokari-gtyih:fix-stream-hidenote

Conversation

@kakkokari-gtyih
Copy link
Copy Markdown
Contributor

@kakkokari-gtyih kakkokari-gtyih commented Dec 3, 2025

What

WebSocketからの更新時にノートの内容を隠す設定が機能していない問題を修正

  • NoteEntityService.hideNoteshouldHideNotehideNote に分割
  • NoteEntityService.shouldHideNote が呼ばれることが増えるため、Redisキャッシュを読むように(TODOの解消)
  • ストリーミング時のロックダウンノート処理が共通で大きいため、別のServiceに分離して共通化

Why

ロックダウン設定が貫通する問題を修正するため

Additional info (optional)

基本的にロックダウンの時限設定を「n秒後」のような極端な数値にしたり未来の時刻にしたり( #15198 )といったケースはごくまれなので今までキャッチされてなかった説

Checklist

  • Read the contribution guide
  • Test working in a local environment
  • (If needed) Add story of storybook
  • (If needed) Update CHANGELOG.md
  • (If possible) Add tests

@codecov
Copy link
Copy Markdown

codecov Bot commented Dec 3, 2025

Codecov Report

❌ Patch coverage is 58.65724% with 117 lines in your changes missing coverage. Please review.
✅ Project coverage is 63.63%. Comparing base (4bc0026) to head (7dd6fe8).
⚠️ Report is 125 commits behind head on develop.

Files with missing lines Patch % Lines
.../server/api/stream/NoteStreamingLockdownService.ts 40.31% 77 Missing ⚠️
...ges/backend/src/core/entities/NoteEntityService.ts 11.11% 40 Missing ⚠️
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.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@kakkokari-gtyih kakkokari-gtyih marked this pull request as ready for review December 3, 2025 15:17
@dosubot dosubot Bot added the size:L This PR changes 100-499 lines, ignoring generated files. label Dec 3, 2025
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Dec 3, 2025

このPRによるapi.jsonの差分
差分はありません。
Get diff files from Workflow Page

@syuilo
Copy link
Copy Markdown
Member

syuilo commented Dec 4, 2025

  • どのようなシチュエーションで再現できるものかしら
  • どれくらいそういったシチュエーションが発生するかにもよるけど、追加で発生するコストと得られるメリットが見合ってないかも?
    • ロックダウンは簡易的なもので完全に隠せる訳ではない点は機能説明にもあるし、コストよりも厳密性を追求するといった機能ではない認識

@kakkokari-gtyih
Copy link
Copy Markdown
Contributor Author

kakkokari-gtyih commented Dec 5, 2025

  • 投稿時点でロックダウン対象の場合(これは本人の設定によるけどごくまれ)

に加えて、

  • ロックダウン対象のノートをリノートした場合
  • ロックダウン対象のノートを引用した場合
  • ロックダウン対象のノートを引用したノートをリノートした場合

においても内容が隠れないので、影響範囲はそこそこ大きい(割と遭遇しやすい)と考えられる

@syuilo
Copy link
Copy Markdown
Member

syuilo commented Dec 6, 2025

ロックダウン対象のノートをリノートした場合
ロックダウン対象のノートを引用した場合
ロックダウン対象のノートを引用したノートをリノートした場合

ロックダウン対象のノートをリノートは普通できなさそうな気がする

@kakkokari-gtyih
Copy link
Copy Markdown
Contributor Author

少なくとも本人ならできそう

@kakkokari-gtyih
Copy link
Copy Markdown
Contributor Author

kakkokari-gtyih commented Dec 8, 2025

少なくとも本人ならできそう

↑ のケース(ロックダウン対象になっているノートやその引用を本人がリノート/引用)は本人が意識せず行う可能性がありそうなのでしばしば発生しうる問題だと考えられる(このようなケースもAPI側ではハンドリングできているので、WSで来たのは隠れておらず、リロードしてAPIから取れれば隠れるという具合に挙動の不一致が露骨に出る)

じゃあロックダウン対象のものは一律でリノートや引用ができないようにすればいいのではないか?と思われるかもしれないが、そうするとフロントエンド/バックエンド双方でさらに条件が複雑怪奇になりメンテナンスコストや条件漏れのリスクが増大する(=バグや意図しない挙動の温床になる)のでやるべきではない

shouldHideNoteが呼び出されることが多くなるのはそうなので、それに関してはフォロー関係をいちいちDBに取りに行くのではなくRedis Cacheを使用するようにすることで負荷軽減をねらっている(実際これを先行適用したサーバーではDBを含め負荷に有意な差はみられていないという報告を得ている)

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Dec 12, 2025

Backend Memory Usage Comparison

Metric base head Diff
RSS 310.65 MB 317.08 MB 6.42 MB (2.06%)

See workflow logs for details

@kakkokari-gtyih
Copy link
Copy Markdown
Contributor Author

コンフリクト解消

@kakkokari-gtyih kakkokari-gtyih changed the title fix(backend): WebSocketからの更新時にロックダウン設定が貫通する問題を修正 fix(backend): WebSocketからの更新時にロックダウン設定が一切適用されない問題を修正 Dec 12, 2025
@kakkokari-gtyih
Copy link
Copy Markdown
Contributor Author

コンフリクト解消

@github-project-automation github-project-automation Bot moved this from Todo to Done in [実験中] 管理用 Apr 15, 2026
@kakkokari-gtyih kakkokari-gtyih deleted the fix-stream-hidenote branch April 15, 2026 00:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

packages/backend Server side specific issue/PR size:L This PR changes 100-499 lines, ignoring generated files.

Projects

Development

Successfully merging this pull request may close these issues.

3 participants