Ikke alt havnet i testloggen
BWW Agent Framework er bygget med stor alvorlighetsgrad i arkitektur, sikkerhet og kontroll. Det betyr ikke at utviklingsarbeidet har vært uten humor. Tvert imot. Når tester feilet, nye problemer dukket opp og løsningene måtte prøves en gang til, kom det også noen kommentarer vi syntes fortjente å bli tatt vare på.
Noen problemer blir så kompliserte at det nesten er umulig å forklare dem uten en analogi.
Vakten som passer på vakten som passer på døra
Under herdingen av BWW Agent Framework fikk vi en serie feil knyttet til samtidighet og vaktskifte. Etter hvert utviklet den tekniske diskusjonen seg til en liten føljetong om portvakter, adgangskort og et vaktskur som helst burde stå der det stod.
Area 4 var det interne hardeningområdet der disse vaktskift- og samtidighetsproblemene ble undersøkt.
Historien er hentet fra e-poster mellom en systemdesigner og utviklingssjefen.
Systemdesigner:
Vi har nå kommet til et nesten komisk nivå av «vakten som passer på vakten som passer på døra». Her har det vist seg at portvakten selv fortsatt kunne bli kastet ut på feil grunnlag. Nå skal R4 gjøre portvakten like streng mot egen avløser som mot alle andre. 😄
Utviklingssjef:
Ja det er komisk. Slagsmål mellom portvaktene 😄
Systemdesigner:
Ja 😄 Det har nesten blitt en ren vaktskiftekomedie
Slagsmål mellom portvaktene
Vi kan tenke oss at inne i datamaskinen så hendelsesforløpet omtrent ut som dette.
Portvaktene må ha en ordning som også fungerer når portvakten som vokter portvaktene dør.
Systemdesigner:
Portvakt A dør.
Portvakt B kommer for å ta over.
Portvakt C kommer samtidig og sier: «Jeg har også sjekket at A er død.»
Så ender B og C med å kaste hverandre ut av vaktskuret mens selve døra står åpen.
Det komiske er at dette samtidig er et helt reelt samtidighetsproblem. Og vi har faktisk beveget oss fra brede sikkerhetshull til stadig smalere tilfeller i selve eierskapsmekanismen.
R4 blir derfor i praksis: portvaktene må ha en ordning som også fungerer når portvakten som vokter portvaktene dør. 😄
Slagsmålet mellom portvaktene har nå utviklet seg til fagforeningsreglement
Systemdesigner:
Og ja — «slagsmålet mellom portvaktene» har nå utviklet seg til fagforeningsreglement: Portvakt C får ikke lenger kaste ut Portvakt B bare fordi C hadde et gammelt papir som sa at Portvakt A var død. 😄
Hvis Kontrolløren nå ikke klarer å få to hver for seg lovlydige portvakter gjennom den samme autorisasjonsdøren samtidig, har vi et betydelig bedre grunnlag for å lukke Area 4 internt.
Portvakt C så at A var død
Systemdesigner:
Portvakt C så at A var død og fikk et papir som sa «du kan rydde opp etter A». Så sovnet C med papiret i hånden. I mellomtiden ryddet B opp etter A. Når C våkner, kan han fortsatt skaffe seg et nytt «A-papir» og begynne å rydde — selv om A for lengst er borte og B nå står i luka.
Da tar C midlertidig B ut av vaktskuret. Ny portvakt D ser et tomt vaktskur og flytter inn. Når C oppdager at han tok feil portvakt, er det for sent å sette B tilbake fordi D allerede sitter der.
Kontrolløren reproduserte hendelsesforløpet uavhengig, uten at noen av portvaktene brøt reglene. Derfor måtte problemet fortsatt løses før området kunne lukkes.
Nå må selve adgangskortet dø sammen med vaktskiftet det tilhørte.
C får ikke lenger bare lov til å vifte med et gammelt adgangskort fra A sin tid og midlertidig bære B ut av vaktskuret mens D flytter inn. Nå må selve adgangskortet dø sammen med vaktskiftet det tilhørte. 😄
Utviklingssjef:
Dette blir jo bare bedre og bedre 😄
Systemdesigner:
Ja 😄 Og på en litt absurd måte er det faktisk et veldig godt tegn.
Hver runde gjør problemet smalere og mer presist:
Det er nesten som å demontere en mekanisk klokke og stadig finne én tann til som kan glippe under akkurat riktig belastning.
Så ja: portvaktene slåss fortsatt, men nå krangler de om gyldigheten til adgangskortet fra forrige vaktskift. 😄
Bytte ut vaktskuret?
Systemdesigner:
Og portvaktanalogien har nå nådd juridisk avdeling: 😄
Det holder ikke lenger at C kan fremvise et gammelt adgangskort for A. C må få adgangskortet validert mens vaktskuret fortsatt faktisk inneholder A — og ingen andre får lov til å bytte portvakt mellom kontrollen og handlingen.
Utviklingssjef:
Snart har de vel tenkt å bytte ut vaktskuret også?
Systemdesigner:
Ja 😄 Det er nesten neste logiske steg:
«Vi har nå sikret portvakt A, B og C, adgangskortene, vaktskiftet, vaktskiftets adgangskort og hvem som får lov til å kontrollere adgangskortet.»
Så kommer Kontrolløren rundt hjørnet og sier:
«Men hva hvis hele vaktskuret blir flyttet mens vaktskiftet pågår?»
Men det fine er at vi faktisk ikke har latt dem bytte ut vaktskuret.
Endelig: Portvaktene har sluttet å slåss
Systemdesigner:
Der fant vi den neste lille vaktskift-feilen. 😄 Kontrolløren bekreftet uavhengig at en gammel portvakt fortsatt kunne rekke å gjøre noe med vaktskuret etter at den nye portvakten allerede hadde overtatt.
Med andre ord: Papirene kunne være riktige da kontrollen ble gjort, men situasjonen kunne ha endret seg før handlingen var fullført.
Det var akkurat den typen glippe mellom kontroll og handling vi ønsket å fjerne.
Etter så etter mange runder kan vi endelig si det:
- Portvaktene har sluttet å slåss.
- Sikkerheten er etablert
- Vaktskuret står fortsatt.
- Area 4 er lukket. 😄