Oh add in a note from Sam's issue
This commit is contained in:
@@ -203,9 +203,24 @@ Tab A stale write: based on (8, B) -> preserve version 9 tombstone
|
|||||||
Tab B fresh login: version 9 tombstone -> (10, C, active)
|
Tab B fresh login: version 9 tombstone -> (10, C, active)
|
||||||
```
|
```
|
||||||
|
|
||||||
## 6. Use broadcasts only as invalidations
|
## 6. Use broadcasts only for committed invalidations
|
||||||
|
|
||||||
After synchronously writing localStorage, notify other tabs:
|
A localStorage write must report success or throw. Never update the persisted in-memory cache or broadcast an invalidation when the durable write failed.
|
||||||
|
|
||||||
|
```text
|
||||||
|
Tab A memory: (8, B)
|
||||||
|
Tab A write: fails
|
||||||
|
Shared localStorage: (7, A)
|
||||||
|
Tab A action: report or retry; do not broadcast
|
||||||
|
|
||||||
|
Tab A retry: succeeds
|
||||||
|
Shared localStorage: (8, B)
|
||||||
|
Tab A action: broadcast invalidation
|
||||||
|
```
|
||||||
|
|
||||||
|
Broadcasting after a failed write would tell Tab B to reread localStorage while it still contains `(7, A)`, spreading the stale generation instead of the new one.
|
||||||
|
|
||||||
|
After successfully writing and verifying localStorage, notify other tabs:
|
||||||
|
|
||||||
```ts
|
```ts
|
||||||
broadcast.postMessage({
|
broadcast.postMessage({
|
||||||
@@ -276,7 +291,9 @@ Operate against captured (version, jti)
|
|||||||
Reread and conditionally commit
|
Reread and conditionally commit
|
||||||
|
|
|
|
||||||
v
|
v
|
||||||
Write localStorage synchronously
|
Write and verify localStorage
|
||||||
|
|
|
||||||
|
+-- failure -> report or retry; do not broadcast
|
||||||
|
|
|
|
||||||
v
|
v
|
||||||
Broadcast invalidation
|
Broadcast invalidation
|
||||||
|
|||||||
Reference in New Issue
Block a user