Sleit med nedetid, fant 16 år gammel SQLite-feil 

Seks måneders graving tok det selskapet Tailscale å finne feilen i SQLite. Slik gjorde de det. 

SQLite har vært med oss i mange år, og selv eldgamle feil kan skape trøbbel.
Publisert

Så sent som i vinter slet nettverksselskapet Tailscale med plutselige driftsavbrudd.

Etter seks måneders leting, har de endelig funnet feilen: En bug i SQLite, som viste seg å være 16 år gammel. 

Nå deler selskapet hvordan de fant ut av feilen, som er døpt WAL-reset. 

Problemet gikk så dypt at de som vedlikeholder databasen var nødt til å legge til kode for å reprodusere den, skriver The Register.

De måtte også lage et nytt verktøy for å logge aktiviteten i det virtuelle filsystemet for å spore feilen. 

– Feilen motsatte seg alle de innledende forsøkene på å finne den, skriver Alex Chan, programvareingeniør i Tailscale, på deres nettside.

Beklager nedetid

Tailscale er en alle til alle-«VPN» som lar alle enheter dine snakke sammen trygt og kryptert over internett. 

– Man trenger ikke tenke på ting som brannmurer og «port-forwarding», informasjonen som må veksles mellom enhetene orkestreres av en kontrollserver, fortalte Tailscale-ansatt Kristoffer Dalby til kode24 i 2023.

Men produktet har hatt en del utstabil oppetid over tid. Også i sommer har det vært en del utfordringer med å logge inn, for eksempel, viser selskapets egen historikk.

– Mange av disse driftsbruddene skjedde på grunn av en enkelt feil, dypt inne i SQLite. Det tok måneder med intens forskning å spore den opp, skriver Chan. 

Nå er de sikker på at de har funnet feilen, forstått den og fikset det. Chan beklager også at kunder, som forventer at de kan stole på tjenesten, har oppleved måneder med ustablilitet. 

– Vi er lei oss. 

For å finne feilen, erstattet eller la Tailscale flere lag rundt systemet sitt for å få mer informasjon.

Dette skjedde

Så hva gikk galt, og hvordan fant de den 16 år gamle feilen? 

  • Feilen ble oppdaget først da en backup-løsning i august i fjor gjentatte ganger avdekket feil, men fant ingen åpenbar felles årsak. 
  • Teamet kunne altså ikke reprodusere feilen fordi de ikke visste hva som trigget den. Sammen med SQLite testet de ulike hypoteser, som alle slo feil. 
  • Men de samlet stadig mer data og ville sjekke ut sjekkpunkt-aktiviteten. Løsningen ble til slutt å lage et nytt feilsøking-verktøy: et mellomlag for et virtuelt filsystem som logget aktiviteten. 
  • Da neste feil oppstod, fant de svaret. Det oppstod i praksis en krasj mellom sjekkpunkter og det skriving av data til WAL-filen. WAL står for Write-Ahead Log. 

Du kan dykke ned i detaljene her.

Ber folk oppdatere

SQLite-vedlikeholdsteamet tror at feilen har vært til stede siden version 3.7.0 som kom i juli 2010. 

Men nå er det fikset, og folk blir oppfordret til å gjøre oppdateringer, selv om det er veldig sjelden feilen oppstår. 

– Hendelsen er en nyttig påminner for utviklere: selv de mest kjedelige og pålitelige programvarene utgjør en risiko når de blir brukt på en uvanlig måte, skriver The Register. 

  

Foretrekk oss i Google Discover

Ved å legge oss til som foretrukket kilde i Google vil du blant annet få opp flere av sakene våre i Google Discover. Tusen takk for støtten!

Foretrekk oss 😻
Bygget med Labrador CMS