Skip to content

JasperFx 2.98.0

Choose a tag to compare

@jeremydmiller jeremydmiller released this 02 Nov 13:02
· 3 commits to main since this release

JasperFx 2.98.0 covers everything since 2.97.0. 2.97.1 was tagged in the source but never reached NuGet, so its fixes ship here.

Behaviour changes

Side effects keep their correlation id (#1101, #1105). With event metadata on, a message published with slice.PublishMessage(message) now carries the correlation id that all of the slice's appended events agree on, on the async path and both inline paths. It used to get the daemon page's id, which merged unrelated flows that landed in one page, or a fresh id inline. This changes the envelope's correlation id for existing side effects. Where the events don't agree, or event metadata is off, nothing changes. Causation is deliberately left out, so a side effect's handler still names that side effect as the cause of what it appends.

An HTTP endpoint and a message handler fold cleanly (#1099, #1103). Two derived sources claiming Http and MessageHandler on one slice no longer raise three SourceDisagreement hotspots. TriggerKind, HandlerType, HandlerMethod and Origin keep the HTTP side in either source order. Other real disagreements still raise their hotspots.

Cloned events keep their correlation and causation ids (#1107). Fan-out and ReplaceEvent used to drop them.

New

  • SubscriptionDescriptor.PublishedTypes says what a projection writes, including event projections and composites, where AggregateType is null. Empty doesn't mean "writes nothing": a flat table projection has rows with no type. IPublishesTypes is the new non-generic interface behind it (#1102, #1106).
  • MessageMetadata.From(IEvent) attributes a side effect to one event when a slice spans several flows (#1105).
  • EventModelSliceDescriptor.AdditionalEntryPoints and EventModelEntryPoint keep the message handler beside the endpoint on a folded slice. Every slice's JSON now carries additionalEntryPoints: [], and older payloads read as empty (#1103).

Fixes

  • Raised events are written only to the stream they were raised to (#1098).
  • IsValidNumber no longer accepts text that isn't a number, and ReadExpectedBufferAsync fails on a short read (#1098).
  • Stopping the high water agent cancels its poll wait, and a disposed agent's loop no longer spins (#1100, JasperFx/wolverine#5318).
  • A scoped projection describes itself as it was registered, including its lifecycle and name, and composites report their own storage types (#1108).
  • Types with nothing to store stay out of teardown (#1108).
  • The in-memory store's TryCreateUsage lists its projections (#1106).

For event store authors

  • The new EventProjectionRegistrationCompliance facts need no store changes. They pass on Marten, Polecat and Fisher.
  • The packages are now published through NuGet trusted publishing.