Caluga - Java blog

Morphium 6.3.15 — und die ganze 6.3er-Reihe

Morphium 6.3.15 — und die ganze 6.3er-Reihe

6.3.15 ist raus! Das Release, das auf unserem Message-Bus läuft. Aber ich will heute gar nicht nur 6.3.15 feiern. Ich will die ganze Reihe feiern. Sechzehn Releases in zweieinhalb Monaten. Von 6.3.0 am 9. August bis 6.3.15 am 21. Oktober.

Die Reihe

Manches davon hat schon einen eigenen Post. Hier die ganze Liste, mit dem Wichtigsten in einem Satz:

  • 6.3.0 (9. Aug) — der große Wurf. Eigener Wire-Protokoll-Treiber, InMemoryDriver, und PoppyDB als Thema.
  • 6.3.1 (11. Aug) — der durchsichtige Message-Bus. Anwendungscode kann die Zustellung jetzt sehen.
  • 6.3.2 + 6.3.3 (18. Aug) — die ersten Befunde aus der Abnahme.
  • 6.3.4 bis 6.3.6 (21. Aug) — drei Releases an einem Tag. Das war die Woche, in der wir die Befunde abarbeiteten.
  • 6.3.7/6.3.8 (26./31. Aug) — "Fehler, die wir alle hatten". Das Double pro Event. Die 937.000 TCP-Verbindungen für einen Client, der nichts zu tun hatte. Der Watchdog mit 2.229 Fehlalarmen.
  • 6.3.9 (16. Sep) — PoppyDB lässt sich per shutdown über den Draht stoppen. Memory-Watermark-Retries. Restore aus dem Dump ohne Speicher-Obergrenze. Und der doppelte Write nach verlorener Antwort ist gefixt.
  • 6.3.10 (19. Sep) — Default-Read-Preference ist jetzt primaryPreferred. Lazy-Loading funktioniert auf Java 25. Und eine ganze Wagenladung InMemoryDriver-Aggregation.
  • 6.3.11 (21. Sep) — Zahlenvergleiche sind jetzt exakt bis über 2^53. Change-Stream-Aufräumen auf re-syncing Knoten.
  • 6.3.12 (22. Sep) — SCRAM-Sicherheitsfix (CVE-2025-59432). Und noch mehr InMemoryDriver-Härtung.
  • 6.3.13 — gibt es nicht. Es war Halloween. Da haben wir keine Risiken genommen. 😉
  • 6.3.14 (12. Okt) — MongoDB-9.0-constraint-Validierung. PoppyDB-Replication-Flow-Control. Globales Cursor-Budget. Und WAIT_FOR_ALL_SLAVES folgt wieder der erreichbaren Knotenzahl.
  • 6.3.15 (21. Okt) — der Go-Live auf dem Bus. Replay-Backlog-Gate, CommandStatus statt ein Dutzend verstreuter ok-Vergleiche, "keine Antwort ist ein retrybarer Netzwerkfehler".

Nicht alle Releases haben einen eigenen Blog-Post bekommen. Die dazwischen, etwa 6.3.2 und 6.3.3, und die neueren, also 6.3.9 bis 6.3.14, waren genauso wichtig. Vor allem 6.3.12 mit dem SCRAM-Fix und 6.3.14 mit der Replication-Flow-Control. Die Details stehen alle im Changelog.

Warum so viele Releases?

Diese Frage habe ich mir auch gestellt. Sechzehn Releases, das wirkt nach viel. Aber es war genau richtig. Weil jede Messung, jeder Befund aus der Abnahme sofort zurückgebaut wurde. Kleine Releases. Drin war nur, was aus einer konkreten Beobachtung kam. Kein Sammelrelease mit zwanzig Sachen.

"small release - small problems / big release - big problems" - das hat sich hier mal wieder bewahrheitet. Kleine, inkrementelle Änderungen sind weit weniger gefährlich, als große Big-Bang-Releases!

Test-Suite

Das macht man nur mit einer Testsuite, der man vertraut. Unsere ist groß. Die meisten Tests laufen in mehreren Phasen: 3.565 Testmethoden im InMemory-Lauf, je 2.615 gegen MongoDB (Replica-Set und Single Node), je 2.589 gegen PoppyDB (Replica-Set und Single Node). Dazu kommen dedizierte Tests für einzelne Phasen (Failover ergibt in-memory wenig Sinn) und die eigenen Phasen der Module. Zusammen über alle Phasen steht der Testrunner aktuell bei 13.973 Testmethoden pro komplettem Durchlauf, keine einzige broken. Jeder komplette Testrun dauert damit ca. 1,5h. Kann man also auch mehrmals am Tag laufen lassen.

Die Ergebnisse liegen als JSON im Git, auf dem eigenen test-results-Branch: eine Datei pro Lauf, mit Klassen, Methoden, Pass/Broken/Skipped/Flaky und Dauer. Append-only, jede Zahl nachvollziehbar. Wenn die grün bleibt, kann man so ein Tempo halten. Ohne die Tests würde man ja "blind" fliegen.

Wir haben echt viel Arbeit in die Tests gesteckt und dabei unheimlich viel gefunden. Auch Werkzeuge für das Testing geschrieben (Wire-Proxy!). Das hat vieles erst möglich gemacht.

Und es hat sich ausgezahlt: 6.3.15 ist das Release, das seit dem 21. Oktober produktiv auf unserem Bus läuft. Was da gemessen haben, steht im Go-Live-Post — kurz gesagt: mehr Durchsatz, weniger Latenz, praktisch keine Fehler mehr.

Woher bekomme ich morphium? PoppyDB?

PoppyDB und Morphium 6.3.15 gibt es auf Maven Central. Die Changelogs der ganzen Reihe auf GitHub.

Danke an alle, die getestet, gemeldet und mitgewirkt haben. Die nächsten Releases kommen bestimmt. 😉