Skip to content

Wolverine 6.63.0

Choose a tag to compare

@jeremydmiller jeremydmiller released this 08 Nov 18:43
0e32299

This is a durability release. Most of its fixes were found by the new out-of-process durability chaos rig (src/Testing/DurabilityChaosRig), which kills, stops, pauses and starves producers and workers, then checks a ledger for lost, duplicated and stuck messages. Dependencies are unchanged from 6.62.0 (JasperFx 2.100.1, Weasel 9.49.0, Marten 9.58.0, Polecat 5.49.0, Fisher 1.28.0). Upgrading is a package bump with no breaking API change. The one schema change is a new index on the MySQL inbox table (GH-5428), applied by the usual message storage migration.

Fixes

  • Envelope ids: default envelope ids no longer collide between processes on one machine. Collisions showed up as inbox duplicate-key errors and silently dropped "duplicate" deliveries (#5399).
  • Stale nodes: a node that resumes after being ejected as stale does not commit work another node already handled (GH-5423), and Oracle's in-transaction mark-as-handled refuses that work too (GH-5429).
  • Ambiguous commits: a commit that applied but reported an error is no longer dead-lettered, and its cascading messages run (GH-5410).
  • Database queues:
    • scheduled retries are atomic on SQL Server, MySQL, Oracle and SQLite (#5408), and fenced on the inbox row's owner on every store (GH-5426);
    • the outbox-to-queue move is one transaction on MySQL, SQL Server and SQLite (GH-5438);
    • a durable pop skips envelopes the inbox already holds instead of rolling the whole batch back (GH-5411);
    • a backlog drains without waiting a polling interval per batch (GH-5413).
  • SQL Server: the scheduled-message poll never waits on a lock (GH-5412).
  • MySQL: the expired-handled cleanup no longer locks live inbox rows (GH-5428).
  • SQLite: Balanced mode assigns node numbers and reads health checks as UTC (GH-5430).
  • Multi-tenancy: tenant databases with the same name on one host are told apart by port, so each gets its own durability agent (GH-5435).
  • Dead letters: a dead letter marked replayable mid-move is no longer deleted before it reaches the inbox (GH-5395).
  • Interop: CloudEvents and MassTransit interop keep the inbox id of a durable envelope when they read the message id (#5396, thanks to @lahma; #5398).
  • HTTP: span tags are written before anything can short-circuit the request (GH-5406).
  • Testing: a tracked session no longer completes while a handler's cascading messages are still running (#5400, thanks to new contributor @haefele-octoja).

Docs

  • Schema management options for message storage, linked to Weasel and the stateful resource model (#5437).
  • Waiting on a message the broker fans out to several queues (GH-5416).
  • The durability chaos rig has a README covering its roles, CHAOS_* knobs and containers (GH-5409, GH-5414).

What's Changed

New Contributors

Full Changelog: V6.62.0...V6.63.0