Samenwerken: snapshot-herbaselijning op een niet-nul versie (Fase 0.5, §5.2) #1005
Labels
No labels
accepted
bug
declined
docs
duplicate
enhancement
good first issue
in-progress
needs-info
privacy
security
triage
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
LibreKAT/Ocideck#1005
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Vervolg binnen Fase 0.5, bewust uitgesteld bij #996. COLLABORATION.md §5.2.
Waarom. Een deelnemer die bijkomt start nu vanaf de snapshot bij versie 0 (sessie-start) en moet dan de héle op-log sinds het begin opnieuw afspelen. Bij een lange sessie groeit die log onbeperkt: bijkomen wordt traag en duur, en de sidecar dijt uit. §5.2 vraagt daarom om periodieke herbaselijning, 'so a late joiner never replays the whole op log' — de autoriteit schrijft af en toe een verse snapshot bij de huidige versie, en een nieuwe deelnemer start vanaf snapshot + alleen de recente ops.
Wat er nu is.
CollabSnapshot.capture(deck, version)accepteert al een versie-argument, maarhostCollabSessionlegt de baseline altijd bij versie 0 vast.joinCollabSessionleest de snapshot, rebaset het lokale deck (applyTo) en start eenCollabSessionmetinitialDeck: baseDeck— maar geeftsnapshot.versionniet door. EnCollabSessionbegint_versionaltijd op 0. Een snapshot bij versie N kan dus nu niet correct als startpunt dienen: de deelnemer zou ops N+1.. moeten toepassen, terwijl de sessie denkt op 0 te zitten (en dus op v1 wacht). De bestandskop vancollab_session_launch.dartbenoemt dit al expliciet als vervolg.Wat er moet.
CollabSessioneen startversie laten aanvaarden (bv.initialVersion), zodat een follower vanaf de snapshot-versie verder telt en alleen hogere versies toepast; de autoriteit hervat het toekennen vanaf daar.CollabSnapshot.capture(deck, huidigeVersie)naar de sidecar schrijven.writeSnapshotoverschrijft al onvoorwaardelijk.joinCollabSessiongeeftsnapshot.versionmee als startversie en negeert ops ≤ die versie (nu al deels: de follower dropt lagere versies, maar de sessie moet er wél op starten).Beslispunten. Wanneer herbaselijnen (drempel in ops of tijd)? Wel/niet log-compactie, en hoe race-veilig? Deze twee bepalen de kosten/robuustheid-afweging.
Reikwijdte.
collab_session.dart(startversie + versie-hervatting),collab_snapshot.dart/collab_session_launch.dart(herbaselijning + inhaalslag vanaf versie), en de store (optionele compactie). Deelt de notie 'hoogst geobserveerde versie' met de eigenaarsoverdracht (#1004). Raakt het .md niet (P2).Opgepakt. Tak: collab/snapshot-rebaseline. Bouwt voort op #1004 (deelt de notie 'hoogst geobserveerde versie'). Verwachte reikwijdte: collab_snapshot.dart (snapshot krijgt een seq-positie), collab_session.dart (startversie), webdav_async_transport.dart (start-seq zodat een joiner de oude records overslaat), collab_session_launch.dart (joiner start vanaf de laatste snapshot; host-resume threadt de versie/seq door), de herbaselijning + eventuele compactie in de coördinatorlaag, en de store (optionele deletie). Beslispunten herbaselijn-drempel en compactie worden in het ontwerp gewogen. Raakt .md niet (P2).
Gebouwd en gemergd in #1008 (main
3b2db0d2). De kern van §5.2 zit erin: de snapshot draagt nu zijn log-positie (seq), een nieuwe deelnemer én een terugkerende eigenaar starten sessie + transport vanaf de laatste snapshot (dus alleen de recente records), en de autoriteit schrijft elke N ops een verse basislijn — getriggerd op een ops-teller, geen wandklok. Bijkomen is daarmee snel; de op-log zelf blijft groeien.Na een implementatie-correctheid-review en een bewaker-review; elke bevinding verwerkt (o.a. de eigenaar-hervatting vanaf een niet-nul snapshot getoetst met version≠seq, en de herbaselijn-test onderscheidt lastSeq van version via een lock).
Bewust uitgesteld (gedocumenteerd in COLLABORATION.md §5.2):