Varning, det här inlägget kan innehålla spår av utvecklarjargong och teknisk terminologi.
I onsdags förra veckan blev det plötsligt svårt att logga in på booli.se. Våra alerta användare (tack!) rapporterade inloggningar som blev utloggningar blandat med lösenord som slutat fungera och ibland: ”tack, nu fungerar det igen!”. Genast började våra ninjor till utvecklare klia sig i huvudet.
Första steget när något sådant här händer är att försöka återskapa felet, något som framgångsrikt gick att göra – ibland. Andra steget är att kolla felloggarna på servrarna, som faktiskt spottade ut sig en massa fel om cookies som – återigen ibland – inte accepterades när man försökte logga in. Okej, skumt.
Felmeddelandet i loggarna skrevs ut på flera av våra frontend-servrar, varav en var helt nyinstallerad, men inte på våra testservrar eller våra utvecklingsburkar. På de sistnämnda gick det dessutom att logga in varenda gång. Ehh, okej.
Vi tittade på historiken i vår SVN för att se om något ändrats på sistone. En del kod var såklart omskriven sen sist, vi försöker sätta koden i produktion ganska ofta, men ingenting som hade med inloggningen att göra. Öh, w000t?
Nu gick diskussionerna livligt till och teorierna innehöll mer och mer osannolika händelseförlopp: I vilken ordning man var tvungen att klicka på ’kom ihåg mig’-knappen? Vilken webbläsare fungerade det oftast inte i? Omg, wtf?!
Men felloggen då? Jo, ibland verkade cookies levereras fel från servern till klienten. Ibland är ett ord som utvecklare inte tycker är speciellt roligt, det gör nämligen felsökning otroligt mycket svårare än vid konsekventa fel. Noooo!
Till historien hör att tåget till vår sedan länge bokade weekend i Åre gick på kvällen, något som ökade stressnivån väsentligt. Stress är ytterligare ett ord som utvecklare inte tycker speciellt mycket om. Iiiiik, vad kan det vara?
Förvirringen och frustrationen växte, timmarna gick alldeles för snabbt och till slut var siste man tvungen att slita sig från tangentbordet för att slänga ihop lite pjäxor och långkalsonger i en bag innan tåget gick. Dangit!
Diskussionerna fortsatte på tåget, och frustrationen över att vi varit tvungna att sticka var stor. Det är jobbigt att veta att ens användare tvingas använda en sida som inte fungerar.
Väl tillbaka på kontoret på måndag morgon, efter att ha spekulerat och diskuterat felet hela helgen, uppblandat med lite prat om toppturer och lössnö såklart, satte sig ett strike-team (jepp, ett strike-team ;)) bestående av två utvecklare direkt med problemet och ett gäng idéer på hur man kunde angripa detta.
Efter ett par timmar visade det sig att vår enda ledtråd, felmeddelandena i loggarna, inte hade något med vårt inloggningsproblem att göra. Det var en automatisk inloggningsrobot som gått bananas, men det felet fick vänta.
Osannolika mängder kaffe tvångskonsumerades i ren förvirring, vilket i kombination med stor envishet och en nedmontering av vårt inloggningssystem bit för bit gjorde att vi upptäckte att det var memcache som ibland returnerade felaktig data till apache-processerna. Ytterligare några tester senare uppdagades det att det hände då någon av servrarna efterfrågade memcache på den nyinstallerade servern. Några minuter senare var problemet löst, det visade sig att den felande servern hade en nyare version av memcache än den som funnits innan ominstallationen. Den körde 3.x.x och övriga 2.x.x och i övergången från 2 till 3 så hade vissa defaultinställningar ändrats. Det som ställde till det för oss var att hash_strategy var ändrad från ”standard” till ”consistent”.
Några minuter efter den upptäckten gick det återigen att logga in utan problem på booli.se. Vi är jätteledsna över det här och ber om ursäkt, sådant här får inte hända.
Vi vill i alla fall dela med oss av, förutom historien, våra lessons learned, så att andra inte behöver råka ut för samma sak:
– Ha inte ”ofarliga” fel som skrivs ut i felloggen
– Kolla alla versionsnummer på alla moduler som installeras på dina servrar
– Åk inte till Åre :)