FazBrowse GitHub Viewer | Trending |
URL:
| Home
Tools: [Download Repo ZIP]   [Original HTTPS Page]

fix: make projection lifecycle deterministic by windischb · Pull Request #176 · cocoar-dev/modgud · GitHub

fix: make projection lifecycle deterministic - #176

Merged
windischb merged 2 commits into
developfrom
codex/fix-deterministic-projection-tests
Aug 14, 2026
Merged

fix: make projection lifecycle deterministic#176
windischb merged 2 commits into
developfrom
codex/fix-deterministic-projection-tests

Conversation

windischb commented Aug 14, 2026
edited
Loading

Copy link
Copy Markdown
Contributor

Ursache

Der ursprüngliche Flake hatte zwei gekoppelte Ursachen:

  1. Der gemeinsame Test-Host ließ Martens langlebigen Background-Coordinator über vollständige Datenbank-Resets hinweg laufen. Dabei starten Event-Sequenzen wieder bei 1, während gecachte Daemons und High-Water-Zustand weiterleben konnten.
  2. Unser erster Fix stoppte und startete diesen Coordinator aus den Tests heraus. In der ersten harten CI-Matrix waren 5/6 Läufe grün; der sechste Lauf zeigte eine echte neue Race Condition zwischen einem test-initiierten Lifecycle-Aufruf und dem gleichzeitigen Host-Shutdown (ObjectDisposedException auf JasperFx' CancellationTokenSource).

Wichtig: Den PauseAsync-Pfad beim Projection-Rebuild hatten wir selbst heute eingeführt. Der konkrete Shutdown-Fehler wird daher als Regression unserer Änderung behandelt, nicht als alter Flake oder als akzeptabler Fremdfehler.

Lösung

  • Der normale Behavioural-Test-Host startet keinen Marten-Background-Daemon mehr.
  • Projection-Fortschritt gehört ausschließlich expliziten Barrieren mit einem jeweils frischen interaktiven Daemon.
  • Vollständige Resets, Catch-up und Rebuilds haben damit genau einen Lifecycle-Owner.
  • Es gibt weiterhin keine Retries und kein Ignorieren fehlgeschlagener Tests.
  • Produktion bleibt im Solo-Daemon-Modus.
  • Ein zentraler IProjectionCoordinatorControl serialisiert dort anwendungsinitiierte Pause/Stop-Wartung gegen Host-Shutdown und verhindert ein spätes ResumeAsync während Shutdown.
  • Hosted Services werden für diesen kritischen Pfad ausdrücklich sequenziell gestoppt.
  • Neue Tests pinnen sowohl die daemonfreie Testtopologie als auch einen echten produktionsähnlichen Solo-Daemon inklusive Wartung und sauberem Dispose.

Lokaler Nachweis für 7cd92c6

  • Solution-Build: grün
  • Unit-Tests: 1507/1507 grün
  • Integrationstests: 600/600 grün in 8:45
  • Vorheriger vollständiger Integrationslauf: 18:57
  • git diff --check: grün

CI-Abnahme

Der Commit wird in sechs unabhängigen vollständigen CI-Läufen geprüft: PR-Branch plus fünf temporäre Branches, alle auf exakt demselben SHA. Es gibt keine Retries oder Ersatzläufe; nur 6/6 beim ersten Versuch gelten als bestanden.

Follow-up zu #175 sowie den fehlgeschlagenen Läufen 31780848227 und 31785314312.

windischb changed the title fix: recreate projection daemon after test resets fix: make projection lifecycle deterministic Aug 14, 2026

Copy link
Copy Markdown
Contributor Author

Harte CI-Abnahme für 7cd92c66c88e8244f41092e0237ab9b7d3541953 bestanden: 6/6 vollständige CI-Läufe beim ersten Versuch grün, ohne Rerun oder Ersatzlauf.

CodeQL ebenfalls grün. Lokal: 1507/1507 Unit-Tests und 600/600 Integrationstests (8:45).

windischb merged commit a00e213 into develop Aug 14, 2026
33 checks passed
windischb deleted the codex/fix-deterministic-projection-tests branch August 14, 2026 10:09
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant


Back | FazBrowse Home | New Git URL