Samenwerken: log-compactie van de op-log (Fase 0.5, §5.2 vervolg) #1007
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#1007
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 op #1005 (snapshot-herbaselijning). Dat issue maakte bijkomen snel — een deelnemer start vanaf de laatste snapshot en leest alleen de recente records — maar liet de oude op-records staan, zodat de sidecar-op-log onbegrensd blijft groeien bij een lange sessie. Deze issue ruimt die op.
Waarom apart. Compactie was in #1005 bewust als optioneel aangemerkt en heeft twee dingen nodig die #1005 niet toevoegde:
WebdavServicekent nu alleen list/download/upload/probe en de store kent geen delete. Records verwijderen is een nieuwe, data-muterende uitgaande operatie op de opslag van de gebruiker — die hoort langs de security-architect (kan het per ongeluk het verkeerde wissen? faalt het dicht?).Wat er moet.
CollabLogStoreeendelete(seq)geven;WebdavCollabLogStoreimplementeert het met een WebDAV DELETE;WebdavServicekrijgt de DELETE-methode (met NetGuard/retry zoals de rest).Beslispunten. Direct wissen tot de snapshot-seq, of een marge aanhouden? Hoe onderscheidt de transport een blijvend gat (compactie) van een nog-niet-geüpload record (transient)? Voorstel: een gat is blijvend als er een nieuwere snapshot bestaat met een versie boven de huidige.
Raakt
webdav_service.dart(nieuwe uitgaande operatie → security-architect), de store, de transport en de coördinator. Raakt het .md niet (P2).Opgepakt. Tak: collab/log-compaction. Bouwt voort op #1005 (de snapshot-seq). Ontwerpkeuzes op de twee beslispunten: (1) compactie houdt een marge aan — na een herbaselijning worden records ≤ de vórige snapshot-seq gewist (dus altijd minstens één herbaselijn-interval bewaard), met strand-recovery als vangnet; (2) een gat geldt als blijvend zodra de laatste snapshot een versie boven de eigen sessie-versie draagt — daarop herbaselijnt de deelnemer zichzelf (leest de snapshot opnieuw, springt sessie+transport vooruit). Reikwijdte: webdav_service.dart (nieuwe DELETE, langs NetGuard/retry → security-architect), collab_log_store.dart (delete(seq)), webdav_async_transport.dart + collab_session.dart (vooruitspringen), handover_coordinator.dart (compactie + strand-detectie). Fail-safe: een mislukte DELETE laat het record staan (onschadelijk). Raakt .md niet (P2).
Gebouwd en gemergd in #1009 (main
a484b53d). De op-log wordt nu opgeruimd: de autoriteit wist de records die de vorige duurzame basislijn al omvat (één interval marge), het verwijdervenster schuift pas op ná een bevestigd-duurzame snapshot (zodat niemand strandt), en de deletes lopen losgekoppeld van de poll-lus (een trage server kan de heartbeat niet vertragen). Wie tóch te ver achterloopt herbaselijnt zichzelf vanaf de laatste snapshot — alleen vooruit, fail-closed. De WebDAV-client kreeg hiervoor zijn eerste verwijderende operatie; die raakt uitsluitend genummerde recordbestanden, langs dezelfde gepinde, redirect-vrije weg als upload.Ontworpen na een security-architect-ontwerpreview (zeven eisen, alle hard ingebouwd), daarna een security- en een bewaker-diffreview. De diffreview ving één echte tekortkoming — compactie op het kritieke pad kon een heartbeat vertragen en spontane overdracht uitlokken — die is weggewerkt (losgekoppelde compactie + test).
Daarmee is de Fase-0.5-samenwerkketen rond: #1004 (eigenaarsoverdracht), #1005 (herbaselijning) en #1007 (compactie). De op-log groeit niet langer onbegrensd.