Es fing damit an, dass Twitter mich ausgeloggt hat. Und ich mich nicht wieder einloggen konnte. Die native App faselte was von ‚retry later‘ oder falschem Passwort, die Webseite erzählte etwas von einem bekannten technischen Problem. Jedoch war auf status.twitter.com nichts zu sehen. Da ich davor einige Experimente mit Spring Integration und Twitter gemacht hatte und dabei auch mehrfach rate-limit Fehlermeldungen erzeugt hatte (versehentlich, wirklich!), machte ich mir Sorgen dass ich jetzt Twitter kaputt gemacht haben könnte.

Oder zumindest Twitter ernsthaft auf mich sauer sein könnte. Hilft alles nichts, muss man mal tiefer einsteigen.

Schaut man sich die Fehlermeldung an, sieht es aus, als wenn die OAuth Tokens, die Twitter zur Authentifizierung einsetzt und auch selbst ausstellt, von Twitter nicht verifiziert werden können. Die Signatur sei falsch. NSA Gedanken! Da ist bestimmt ein Schlapphut Schuld!

…. oder etwas ganz banales? Die Uhrzeit des Servers sieht komisch aus. Exakt ein Jahr in der Zukunft.

twitter-doy

So ganz habe ich zwar keine Idee wie so was mit der Hardware Uhr passieren könnte – aber ich habe eine Hypothese, was ein Programmierer tun könnte um den Fehler auszulösen.

Der Fehler trat ab ca. 0 Uhr UTC am 29.12. auf – zumindest hab ich ihn da bemerkt.

Es ist Montag der 29. 12. im Jahr 2014. Morgen ist Dienstag, 30., auch 2014. Mittwoch ist Silver, 31. – noch 2014. Das sind drei Tage. Die nächsten Tage sind alle schon in 2015.

Wenn sich jemand bei einem Date-Format einen super schwer zu findenden Bug einbauen möchte, dann verwendet er „YYYY“ statt „yyyy“ für die Jahreszahl. Das ist nämlich dann das „Week-Year“ und nicht das kalendarische Datum. Das ist dann das Jahr zu dem die Kalenderwoche gehört. Und es ist bereits KW 1 von 2015….

Das klingt abwegig? Habe ich schon zig mal in Code-Reviews gesehen. Die Wahrscheinlichkeit dass man dafür Sensibilität entwickelt hat, ohne dass man davon mal gebissen wurde halte ich für recht gering.

Inzwischen hat Twitter dazu ein Statement veröffentlicht

Between 4:00 and 9:25 PST today some users were unable to sign in to twitter.
This issue was due to a bug in our front end code, which has been patched.
We apologize for any inconvenience caused by this.

Da scheine ich gar nicht schlecht gelegen zu haben mit dem Bug – es war zumindest nicht die Hardware-Uhr und 04:00 PST ist 00:00 UTC 🙂

Zu solchen Verwirrungen traegt es u.U. bei, dass in Ruby „Y“ genau das richtige ist und in Java „y“ – aber „Y“ auch erstmal funktioniert und keine augenscheinlichen Probleme verursacht.

Referenzen: