Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
What
notesRepository.findOneOrFail
をバッファリングし、同じ id へのクエリを1つにまとめます(debounce)Why
PubSub から notesStream のイベントを受信すると、そのプロセスが担当しているクライアントのコネクション数の分だけ
NoteEntityService.pack
が呼び出されます。(正確には、その note に replyId や renoteId が付いている場合)
つまり、同一 noteId に対するクエリがクライアント数と同じ量発射されます。
当然これはあまりに無駄で、実際に WebSocket を担当するプロセスの CPU 使用率が断続的に数秒間100%に貼り付くといったパフォーマンスの問題も起きているため、これを解消したいと考えました。
Additional info (optional)
NoteEntityService のテストが困難なので、ちょっと検証が足りてないかも。
DebounceLoader のユニットテストは書いたし通ったので、たぶん動く……