Ga naar hoofdinhoud

Projectiefout hersteld via replay

Scenario

Na terugmelding blijkt dat er een bug in 1 van de projecties zit: de gevolgen zijn goed vastgelegd; deze zijn echter niet goed zichtbaar in de projectie. Bij een overdracht wordt alleen de 1e eigenaar vastgelegd.

  1. WOZ Object wordt geregistreerd.
  2. Er vindt een overdracht plaats.
  3. Iemand (een afnemer?) merkt op dat er een specifieke projectie op een specifiek snapshot onjuist is en meldt dat terug (met bij voorkeur een UUID van de projectie). Er wordt een onderzoek gestart, en uit dat onderzoek blijkt dat er een bug in de projectie zit: verwerking is goed gegaan en gevolgen zijn correct.
  4. Het ontwikkel/beheerteam fixt de bug en doet een replay op de snapshots: voor de foutsituatie worden nieuwe snapshots geproduceerd.
  5. Onderzoek wordt afgerond.
Brondata
BestandReplayVoorbeeldTest-als-een-projectieview-verandert-naar-aanleiding-van-een-replay-wordt-de-oude-overschreven.jsonCommitd6c2994Opgehaald20 mei 2026

Dit voorbeeld lijkt op het vorige — onderzoek en herstel — maar heeft een wezenlijk andere oorzaak. Daar lag de fout in de brondata zelf: het BRK-bericht bevatte een onjuiste naam. Hier zijn de events correct opgeslagen, maar bevat de projectiecode een bug. Die oorzaak bepaalt de herstelstrategie: niet een correctie-event, maar een replay.

De bug

De projectiecode bevat een fout in de verwerking van het gevolg BelangOvergegaanNavOverdracht. Bij een overdracht naar meerdere partijen legt de projectie alleen de eerste partij vast. De overige partijen worden overgeslagen. Gevolg: de snapshot die wordt aangemaakt na de overdracht toont een onvolledig beeld — de gerelateerdePartijen bevat maar één eigenaar (Piet Pietersen), terwijl de overdracht naar twee partijen plaatsvond.

Het is belangrijk om te begrijpen wat er niet mis is: de events zelf zijn correct opgeslagen. Het gevolg BelangOvergegaanNavOverdracht bevat de juiste lijst met partijen. De fout zit uitsluitend in de manier waarop de projectie het gevolg verwerkt en vastlegt als snapshot. De brondata is betrouwbaar; de weergave is dat niet.

Ontdekking en onderzoek

Een afnemer bevraagt het systeem en constateert dat een snapshot onjuiste belangen toont: er ontbreekt een eigenaar na een eigendomsoverdracht. De afnemer meldt dit terug, bij voorkeur met het UUID van de betreffende snapshot. Er wordt een onderzoek gestart.

Tijdens het onderzoek worden de opgeslagen events nagelopen. Daaruit blijkt dat de verwerking correct is verlopen: het gevolg BelangOvergegaanNavOverdracht bevat beide partijen — Piet Pietersen en Hendrica Pietersen. Het probleem zit niet in de verwerking maar in de projectiecode — die legt bij een overdracht alleen de eerste eigenaar vast. Er is sprake van een bug in de projectielogica, niet van een fout in de registratie zelf. Het onderzoek wordt hierop bijgewerkt.

Herstel via replay

Het beheerteam fixt de bug in de projectiecode. Daarna voert het team een replay uit op de opgeslagen events: deze worden opnieuw verwerkt door de gecorrigeerde projectie.

De replay gaat event voor event door de history. Het eerste event — WozObjectMetKadastraalObjectIdGeregistreerd — levert hetzelfde resultaat op als voorheen; die snapshot was al correct. Het tweede event — BelangOvergegaanNavOverdracht — produceert nu een nieuwe, correcte snapshot: gerelateerdePartijen bevat nu beide partijen (Piet Pietersen en Hendrica Pietersen).

Het resultaat: er is precies één nieuwe snapshot toegevoegd. De registratietoestand stond al correct; de overdrachtstoestand is opgevolgd door een correcte versie. Tot slot wordt het onderzoek afgerond.

De snapshots

De ProjectieViewer hieronder toont drie snapshots. Snapshot 1 stamt uit de registratie en is ongewijzigd gebleven. Snapshot 2 is de foutieve overdrachtstoestand — het toont alleen Piet Pietersen, het resultaat van de bug. Snapshot 3 is de correcte snapshot die door de replay is geproduceerd — het toont de juiste partijen Piet Pietersen en Hendrica Pietersen.

Snapshot 2 en 3 hebben hetzelfde eventId, hetzelfde geldigheidstijdstip en hetzelfde gevolgtijdstip: ze beschrijven dezelfde snapshot op hetzelfde geldigheidsmoment, voortkomend uit hetzelfde event. Maar snapshot 3 heeft een later projectietijdstip — het is pas beschikbaar gekomen na de replay, in september 2020. Daardoor is snapshot 2 Opgevolgd en is snapshot 3 Actueel.

Cruciaal: de foutieve snapshot is niet verwijderd. Bevraag je het systeem met een projectietijdstip van vóór de replay, dan zie je nog steeds de foutieve snapshot. Dit is geen ongewenst bijproduct — het is precies de bedoeling. Het bitemporeel model maakt de foutgeschiedenis auditeerbaar: je kunt altijd reconstrueren wat het systeem op enig moment dacht te weten, ook als dat fout was. Zie ook Actueel en opgevolgd voor meer toelichting.

Dit is de architectuurles: doordat snapshots nooit worden overschreven maar opgevolgd, blijft de volledige historie van het systeem — inclusief vergissingen en correcties — onveranderd opvraagbaar. De replay herstelt de actuele snapshot zonder de geschiedenis te wissen.

vroegste
WozObjectMetKadastraalObjectIdGeregistreerd
Gevolgtijdstip19 maart 2020 om 08:49:37
MijnWozObjectQuery3Response#3
Geldig vanaf19 maart 2020 om 08:25:56Gevolg19 maart 2020 om 08:49:37Projectie19 maart 2020 om 08:49:39
BelangOvergegaanNavOverdracht
Gevolgtijdstip26 juni 2020 om 17:36:40
MijnWozObjectQuery3Response#5
Geldig vanaf26 juni 2020 om 16:56:19Gevolg26 juni 2020 om 17:36:40Projectie26 juni 2020 om 17:36:42
MijnWozObjectQuery3Response#7
Geldig vanaf26 juni 2020 om 16:56:19Gevolg26 juni 2020 om 17:36:40Projectie20 mei 2026 om 11:14:33
nieuwste
MijnWozObjectQuery3Response
Metadata
Gevolg typeBelangOvergegaanNavOverdracht
Woz object
AdresStraatje 123 a, [object Object] Groningen
Gebruikers
Woz object typeTUINBOUWBEDRIJF
Nog te beoordelenfalse
Woz objectnummer1
Gerelateerde kadastrale objectenGDA01-A-1234
Gerelateerde verblijfsobject identificaties
Eigenaren
-Piet Pietersen
-Hendrica Pietersen
Woz objecttijdstippen
Tijdstip ontstaan19 maart 2020 om 08:25:56
Projectie:
#3 | Jan Janssen,Janneke Janssen#5 | Piet Pietersen#7 | Piet Pietersen,Hendrica PietersenGevolgtijdstipofProjectietijdstipTijdstip geldigheid