RSS Der tägliche WTF
Folgen
CodeSOD: Die ersten 10.000
Alicia erbte eine Suite von hausgemachten Unternehmensanwendungen, die Batch-Verarbeitung erforderten, aber auf ein mysteriöses IllegalStateException stieß, das durch eine Abfrage verursacht wurde. Die fragliche Abfrage war "select * from data_import where id > 10000", was problematisch war, weil sie die Existenz von Zeilen überprüfte und eine Ausnahme warf, wenn welche gefunden wurden. Die Abfrage sollte stattdessen eine COUNT(*)-Abfrage sein, anstatt Zeilen zurückzugeben. Das Problem trat auf, weil der Code den ID zum Darstellen von Zustandsinformationen über den Status des Datensatzes verwendete.Das Programm aktualisierte den ID, indem es 10000 hinzufügte, fügte neue Daten ab ID 1 hinzu und löschte Datensätze mit IDs größer als 10000. Dieser Prozess wurde innerhalb einer einzigen Methode durchgeführt, ohne Transaktionen oder Fehlerbehandlung, und verließ sich auf sequentielle IDs, um Verarbeitungsfehler zu verfolgen. Der Prozess begann zu fehlschlagen, wenn die eingehenden Daten 10.000 Zeilen überschritten, was die INSERTs zum Scheitern brachte. Alicia wollte den Prozess beheben, aber ihr Chef entschied sich für eine schnelle Lösung, indem sie die ID-Schwellenwerte von 10000 auf 100000 änderten. Diese Änderung ermöglichte es dem Prozess, weiterhin in seinem fehlerhaften Zustand zu funktionieren. Das zugrunde liegende Problem blieb ungelöst, und der Prozess verließ sich immer noch auf ein fehlerhaftes Design. Die Entscheidung, den ID-Schwellenwert zu ändern, wurde wahrscheinlich getroffen, weil sie von dem bestehenden Prozess abhängig war.