ML-190: add same-record reconnect optimization task
From audit doc-25 (Phase 2), Recommendation #2.
This commit is contained in:
+41
@@ -0,0 +1,41 @@
|
||||
---
|
||||
id: ML-190
|
||||
title: Skip redundant unsubscribe+resubscribe on same-record reconnect
|
||||
status: To Do
|
||||
assignee: []
|
||||
created_date: "2026-05-19 08:42"
|
||||
labels:
|
||||
- audit
|
||||
- pubsub
|
||||
- optimization
|
||||
dependencies: []
|
||||
documentation:
|
||||
- >-
|
||||
audits/phase2-pubsub-lifecycle/doc-25 -
|
||||
Audit-Report-PubSub-Subscription-Lifecycle-Phase-2.md
|
||||
modified_files:
|
||||
- lib/music_library_web/live_helpers/record_actions.ex
|
||||
priority: low
|
||||
ordinal: 25000
|
||||
---
|
||||
|
||||
## Description
|
||||
|
||||
<!-- SECTION:DESCRIPTION:BEGIN -->
|
||||
|
||||
`RecordActions.manage_subscription/2` unsubscribes the old record and subscribes the new record on every `handle_params` call. When LiveView reconnects to the same record (e.g., after a WebSocket drop within the reconnect grace period), it unsubscribes and resubscribes to the same topic. While harmless (Phoenix.PubSub deduplicates by PID), a same-record check would be a micro-optimization.
|
||||
|
||||
**Fix:** Add a guard: `if socket.assigns[:record] && socket.assigns.record.id != new_id, do: Records.unsubscribe(...)` — only unsubscribe when the record actually changes.
|
||||
|
||||
**Source:** Audit doc-25 (Phase 2), Recommendation #2.
|
||||
|
||||
<!-- SECTION:DESCRIPTION:END -->
|
||||
|
||||
## Acceptance Criteria
|
||||
|
||||
<!-- AC:BEGIN -->
|
||||
|
||||
- [ ] #1 manage_subscription/2 only calls unsubscribe when old record ID differs from new ID
|
||||
- [ ] #2 Same-record reconnect skips unsubscribe+resubscribe entirely
|
||||
- [ ] #3 All existing tests pass
|
||||
<!-- AC:END -->
|
||||
Reference in New Issue
Block a user