Record DaemonMode.ExternallyManaged for Marten + Polecat under Wolverine-managed distribution (closes #3290)#3330
Merged
Conversation
…scription distribution (#3290) UseWolverineManagedEventSubscriptionDistribution replaces Marten's own AddAsyncDaemon() coordination outright, but Marten's only knowledge of the daemon state is Projections.AsyncMode. Left at Disabled, DocumentStore wrote a misleading "The async daemon is disabled ... projections will not be executed" console warning at startup even though Wolverine IS running the async projections. MartenOverrides (the IConfigureMarten hook covering the main store and, via MartenOverrides<T>, every ancillary store) now records the real state as DaemonMode.ExternallyManaged (#490): identical runtime posture to Disabled — Marten hosts no coordinator and starts no agents — but the warning gate stays quiet because the external host runs the projections. Only upgrades from Disabled, so an explicit user AddAsyncDaemon() choice is never overwritten in either call order. Replaces the closed #3329, whose AsyncMode = HotCold approach was rejected for implying Marten's own coordination runs in parallel. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ed distribution (#3290) Polecat parity with the Marten side: UseWolverineManagedEventSubscriptionDistribution replaces Polecat's own AddAsyncDaemon()/AddProjectionCoordinator() hosting outright, but the store's only knowledge of the daemon state is DaemonSettings.AsyncMode, which the integration never set. PolecatOverrides (main store) and PolecatOverrides<T> (ancillary stores, deferring to the main PolecatIntegration flag exactly like the IProjectionCoordinator<T> factory does) now record DaemonMode.ExternallyManaged (#490): identical runtime posture to Disabled — nothing Polecat-hosted starts — while any AsyncMode reader sees that async projections DO run under Wolverine's distribution. Only upgrades from Disabled, so an explicit user daemon choice is never overwritten in either call order. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This was referenced Jul 9, 2026
Merged
This was referenced Jul 14, 2026
Open
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
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #3290. The correct replacement for the closed #3329: instead of claiming
HotCold(which would activate the store's own daemon coordination in parallel with Wolverine's), the integrations now record the newDaemonMode.ExternallyManaged(JasperFx 2.21.0, #490) — the store hosts nothing and warns nothing; Wolverine runs the projections.Changes
MartenOverrides.Configure(main + ancillary stores viaMartenOverrides<T>) setsAsyncMode = ExternallyManagedwhen managed event-subscription distribution is enabled and the mode is stillDisabled— an explicit userAddAsyncDaemon(...)choice is never overridden, in either call order (both orders tested, which Suppress misleading 'async daemon is disabled' warning under Wolverine-managed event subscription distribution (#3290) #3329 didn't cover).PolecatOverrides+PolecatOverrides<T>— a parallel audit found the same gap in the Polecat integration (UseWolverineManagedEventSubscriptionDistributionexisted but nothing recorded the mode). The polecat repo itself needs no changes (it never had the misleading warning; all itsAsyncModereaders are safe).Tests (5 per store, net9.0 + net10.0, run one TFM at a time; Polecat against real SQL Server)
Mode recorded under managed distribution; nothing store-hosted starts (no store coordinator/daemon among hosted services — the exact hazard that sank #3329); warning preserved without managed distribution; explicit
AddAsyncDaemon(Solo)preserved in both call orders. Marten-side silence is guaranteed by marten#4865 (Marten's warning gate fires only onDisabled) — verified empirically here against published Marten.Note: the failing
CIMarten/CIAWSchecks on sibling PRs are pre-existing on main (same subscription tests fail on main's own CI runs) — unrelated to this change.🤖 Generated with Claude Code