2.3 KiB
2.3 KiB
id, title, status, assignee, created_date, labels, dependencies, references, modified_files, parent_task_id, priority, ordinal
| id | title | status | assignee | created_date | labels | dependencies | references | modified_files | parent_task_id | priority | ordinal | |||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ML-169.7 | Fix: Stream reset on every scrobble PubSub update | To Do | 2026-05-19 11:48 |
|
|
|
ML-169 | high | 28000 |
Description
Fix performance issue where every scrobble batch (cron: every 5 minutes) triggers a PubSub message that causes StatsLive.Index and ScrobbledTracksLive.Index to reload their entire stream with reset: true.
Problem
Every scrobble batch triggers a "listening_stats:update" PubSub message which causes:
- StatsLive.Index: Re-executes
recent_activity(expensive 4-correlated-subquery query) +scrobble_count, then resets the:recent_tracksand:recent_albumsstreams - ScrobbledTracksLive.Index: Re-executes the full paginated list query and resets the
:tracksstream
This fires every 5 minutes on ALL connected clients, even idle ones.
Files
lib/music_library_web/live/stats_live/index.ex:576-583—assign_scrobble_activitywithreset: truelib/music_library_web/live/scrobbled_tracks_live/index.ex:279—handle_info(%{track_count: _count})lib/music_library_web/live/scrobbled_tracks_live/index.ex:334—load_and_assign_trackswithreset: true
Fix
- StatsLive: Use
stream_insertfor new tracks instead ofreset: true. Keep a cursor (e.g., maxscrobbled_at_uts) to only insert genuinely new tracks. - ScrobbledTracksLive: Use
stream_insertfor new tracks only if they match the current search/filter. Otherwise, show a "new scrobbles" badge that refreshes on user click. - Consider debouncing or batching the updates to avoid per-track insert thrash.
Acceptance Criteria
- #1 StatsLive no longer performs full stream reset on scrobble updates
- #2 Only new tracks are inserted into streams
- #3 ScrobbledTracksLive no longer performs full stream reset on scrobble updates
- #4 Existing stream ordering is preserved after insert
- #5 No duplicate tracks appear in streams