Behebung eines JDK-Deadlocks in 30 Minuten mit Fray: Ein Concurrency-Thriller

2025-06-07

Beim Hinzufügen von Integrationstests für Fray stieß der Autor auf einen Deadlock im ScheduledThreadPoolExecutor des JDK, ausgelöst durch scheinbar harmlosen Code. Mit Fray's deterministischer Wiedergabe und Scheduling-Visualisierung wurde die Ursache schnell identifiziert: Im SHUTDOWN-Zustand kann FutureTask.get unbegrenzt blockieren. Dies liegt an der verflochtenen Ausführung der Methoden schedule und shutdown, wodurch Tasks im Limbo verbleiben. Fray bot eine klare Sicht auf das Thread-Interleaving, ermöglichte die Reproduktion und Meldung dieses JDK-Concurrency-Bugs.

Mehr lesen
Entwicklung

Ein seltsamer Bug verursacht durch den Chrome-Cache-Mechanismus: Eine verschlungene Debugging-Reise

2025-03-03

Beim Debuggen eines Parquet-Viewers entdeckte der Autor einen Fehler beim Zugriff auf den S3-Speicher. Nach der Untersuchung stellte sich heraus, dass das Problem nicht im Anwendungscode, sondern im Chrome-Cache-Mechanismus lag. Beim Verarbeiten von Range-Requests optimiert Chrome den Cache, aber wenn der Server einen 403-Fehler zurückgibt, liefert Chrome immer noch teilweise Daten, was zum Absturz der Anwendung führt. Der Autor meldete das Problem an das Chromium-Team, aber das Team betrachtete es als Feature und nicht als Bug. Schließlich entschied sich der Autor, das Problem in OpenDAL zu beheben. Diese Geschichte erinnert uns daran, dass das Finden der richtigen Vertrauensgrenze das Debugging erheblich beschleunigen kann.

Mehr lesen