Ga naar hoofdinhoud

Projectiefout gecorrigeerd 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
BestandCorrectieMetReplayVoorbeeldTest-als-een-projectieview-verandert-naar-aanleiding-van-een-replay-wordt-de-oude-overschreven.jsonCommit9fbbe67Opgehaald18 september 2026

Dit voorbeeld lijkt een beetje op het correctievoorbeeld dat we eerder gezien hebben — maar heeft een wezenlijk andere oorzaak. Daar lag de fout in de brondata zelf: Het gevolg klopte niet. Hier zijn de gevolgen correct opgeslagen, maar bevat de projectiecode een bug. Die oorzaak bepaalt de correctiestrategie: niet een correctie-gevolg, 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 toestand die de projectie na de overdracht toont, is onvolledig — 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 gevolgen zelf zijn correct. Het gevolg BelangOvergegaanNavOverdracht bevat de juiste lijst met partijen. De fout zit uitsluitend in de manier waarop de projectie het gevolg verwerkt tot toestand.

Ontdekking en onderzoek

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

Tijdens het onderzoek worden de opgeslagen gevolgen 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.

Gekeken naar de gevolgen voor deze entiteit zijn er dus geen verschillen tussen de gevolgentijdlijn en hoe deze had moeten zijn.

volledig verloop
Onderschreven verloop
WozObjectGeregistreerd#1
Gebeurd op19 maart 2020 om 9:25:56
WozObjectGeregistreerd#1
Gebeurd op19 maart 2020 om 9:25:56
BelangOvergegaanNavOverdracht#2
Gebeurd op26 juni 2020 om 10:22:59
BelangOvergegaanNavOverdracht#2
Gebeurd op26 juni 2020 om 10:22:59

Correctie via replay

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

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

Het resultaat: de projectie bevat precies één nieuwe toestand. Het gevolgenjournaal was al correct; de projectie is opgevolgd door een correcte versie.

De toestanden

De ProjectionViewer hieronder toont drie toestanden. De eerste stamt uit de registratie en is ongewijzigd gebleven. De tweede is de foutieve overdrachtstoestand — alleen Piet Pietersen, het resultaat van de bug. De derde is de correcte toestand die door de replay is opgebouwd — met de juiste partijen Piet Pietersen en Hendrica Pietersen.

De twee overdrachtstoestanden hebben hetzelfde gevolgId, hetzelfde geldigheidstijdstip en hetzelfde gevolgtijdstip: ze beschrijven dezelfde toestand op hetzelfde geldigheidsmoment, voortkomend uit hetzelfde gevolg. De laatste heeft een later projectietijdstip — hij is pas beschikbaar gekomen na de replay, in september 2020. Daardoor is de eerdere toestand opgevolgd en is de nieuwe Actueel.

Cruciaal: de foutieve toestand is niet verwijderd. Bevraag je het systeem met een projectietijdstip van vóór de replay, dan zie je nog steeds de foutieve toestand. 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 een projectie uit opeenvolgende, nooit gewijzigde toestanden bestaat, blijft de volledige historie van het systeem — inclusief vergissingen en correcties — onveranderd opvraagbaar. De replay corrigeert de actuele toestand zonder de geschiedenis te wissen.

Het laatst op te merken punt is dat de replay enkel voor de Woz object projectie gedaan is: de bug zat enkel in deze projectie. Er is geen replay geweest in de belangenprojectie: deze bevatte de fout niet. In de Woz bestemming worden overdrachten überhaupt niet getoond en komt de fout dus ook niet voor.

Projectie:
vroegste
WozObjectGeregistreerd#1
Gebeurd op tijdstip19 maart 2020 om 9:25:56
Woz object#4
Geldig vanaf19 maart 2020 om 9:25:56Gevolg19 maart 2020 om 9:25:56Projectie19 maart 2020 om 9:25:56
BelangOvergegaanNavOverdracht#2
Gebeurd op tijdstip26 juni 2020 om 10:22:59
Woz object#5
Geldig vanaf26 juni 2020 om 10:22:59Gevolg26 juni 2020 om 10:22:59Projectie26 juni 2020 om 10:22:59
Woz object#6
Geldig vanaf26 juni 2020 om 10:22:59Gevolg26 juni 2020 om 10:22:59Projectie26 juni 2020 om 10:22:59
nieuwste
metadata ▸
Woz object
Bijgebouwen
Woz object typetuinbouwbedrijf
Nog te beoordelenfalse
Woz objectnummer1
Eigenaren
– Piet Pietersen
– Hendrica Pietersen
Woz objecttijdstippen
Tijdstip ontstaan19 maart 2020 om 9:25:56
Gerelateerde kadastrale objecten
0
Kadastraal object idGDA01-A-1234
Perceeloppervlak in m213.2
#4 | Jan Janssen,Janneke Janssen#5 | Piet Pietersen#6 | Piet Pietersen,Hendrica PietersenGevolgtijdstipofProjectietijdstipTijdstip geldigheid