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.
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.
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!