Bump the nuget-minor-patch group with 29 updates - #214
Open
dependabot[bot] wants to merge 1 commit into
Open
dependabot[bot] wants to merge 1 commit into
dependabot[bot] wants to merge 1 commit into
Conversation
Bumps AndreGoepel.Core from 1.0.2 to 1.0.3 Bumps AndreGoepel.Design.Blazor from 1.6.5 to 1.6.7 Bumps AndreGoepel.Marten.Configuration from 1.2.2 to 1.2.4 Bumps AndreGoepel.Marten.Identity.Blazor from 2.0.2 to 2.1.0 Bumps AndreGoepel.Marten.Testing from 1.2.1 to 1.2.3 Bumps AndreGoepel.Testing.Bunit from 1.3.1 to 1.3.2 Bumps AndreGoepel.Testing.E2E from 1.3.1 to 1.3.2 Bumps Aspire.Hosting from 13.5.3 to 13.5.4 Bumps Aspire.Hosting.AppHost from 13.5.3 to 13.5.4 Bumps Aspire.Hosting.PostgreSQL from 13.5.3 to 13.5.4 Bumps Aspire.Hosting.Testing from 13.5.3 to 13.5.4 Bumps bunit to 2.10.3, 2.11.3 Bumps MailKit from 4.17.0 to 4.18.0 Bumps Marten to 9.33.0, 9.37.0 Bumps Microsoft.AspNetCore.HeaderPropagation from 10.0.11 to 10.0.12 Bumps Microsoft.Extensions.Http.Resilience from 10.9.0 to 10.10.0 Bumps Microsoft.Extensions.ServiceDiscovery from 10.9.0 to 10.10.0 Bumps Microsoft.NET.Test.Sdk from 18.9.0 to 18.10.1 Bumps OpenTelemetry.Exporter.OpenTelemetryProtocol from 1.18.0 to 1.19.0 Bumps OpenTelemetry.Extensions.Hosting from 1.18.0 to 1.19.0 Bumps OpenTelemetry.Instrumentation.AspNetCore from 1.18.0 to 1.19.0 Bumps OpenTelemetry.Instrumentation.Http from 1.18.0 to 1.19.0 Bumps OpenTelemetry.Instrumentation.Runtime from 1.18.0 to 1.19.0 Bumps Quartz.Extensions.Hosting from 3.20.0 to 3.22.0 Bumps Quartz.Serialization.SystemTextJson from 3.20.0 to 3.22.0 Bumps Radzen.Blazor to 11.3.2, 11.4.1 Bumps WolverineFx.Marten from 6.32.0 to 6.39.1 Bumps WolverineFx.RuntimeCompilation from 6.32.0 to 6.39.1 Bumps xunit.v3 from 4.0.0 to 4.0.1 --- updated-dependencies: - dependency-name: AndreGoepel.Core dependency-version: 1.0.3 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: nuget-minor-patch - dependency-name: AndreGoepel.Design.Blazor dependency-version: 1.6.7 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: nuget-minor-patch - dependency-name: Radzen.Blazor dependency-version: 11.3.2 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget-minor-patch - dependency-name: AndreGoepel.Marten.Configuration dependency-version: 1.2.4 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: nuget-minor-patch - dependency-name: Marten dependency-version: 9.33.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget-minor-patch - dependency-name: AndreGoepel.Marten.Identity.Blazor dependency-version: 2.1.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget-minor-patch - dependency-name: AndreGoepel.Marten.Testing dependency-version: 1.2.3 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: nuget-minor-patch - dependency-name: AndreGoepel.Testing.Bunit dependency-version: 1.3.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: nuget-minor-patch - dependency-name: bunit dependency-version: 2.10.3 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget-minor-patch - dependency-name: AndreGoepel.Testing.E2E dependency-version: 1.3.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: nuget-minor-patch - dependency-name: Aspire.Hosting dependency-version: 13.5.4 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: nuget-minor-patch - dependency-name: Aspire.Hosting.AppHost dependency-version: 13.5.4 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: nuget-minor-patch - dependency-name: Aspire.Hosting.PostgreSQL dependency-version: 13.5.4 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: nuget-minor-patch - dependency-name: Aspire.Hosting.Testing dependency-version: 13.5.4 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: nuget-minor-patch - dependency-name: bunit dependency-version: 2.11.3 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget-minor-patch - dependency-name: MailKit dependency-version: 4.18.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget-minor-patch - dependency-name: Marten dependency-version: 9.37.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget-minor-patch - dependency-name: Microsoft.AspNetCore.HeaderPropagation dependency-version: 10.0.12 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: nuget-minor-patch - dependency-name: Microsoft.Extensions.Http.Resilience dependency-version: 10.10.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget-minor-patch - dependency-name: Microsoft.Extensions.ServiceDiscovery dependency-version: 10.10.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget-minor-patch - dependency-name: Microsoft.NET.Test.Sdk dependency-version: 18.10.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget-minor-patch - dependency-name: OpenTelemetry.Exporter.OpenTelemetryProtocol dependency-version: 1.19.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget-minor-patch - dependency-name: OpenTelemetry.Extensions.Hosting dependency-version: 1.19.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget-minor-patch - dependency-name: OpenTelemetry.Instrumentation.AspNetCore dependency-version: 1.19.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget-minor-patch - dependency-name: OpenTelemetry.Instrumentation.Http dependency-version: 1.19.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget-minor-patch - dependency-name: OpenTelemetry.Instrumentation.Runtime dependency-version: 1.19.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget-minor-patch - dependency-name: Quartz.Extensions.Hosting dependency-version: 3.22.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget-minor-patch - dependency-name: Quartz.Serialization.SystemTextJson dependency-version: 3.22.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget-minor-patch - dependency-name: Radzen.Blazor dependency-version: 11.4.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget-minor-patch - dependency-name: WolverineFx.Marten dependency-version: 6.39.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget-minor-patch - dependency-name: WolverineFx.RuntimeCompilation dependency-version: 6.39.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: nuget-minor-patch - dependency-name: xunit.v3 dependency-version: 4.0.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: nuget-minor-patch ... Signed-off-by: dependabot[bot] <support@github.com>
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.
Updated AndreGoepel.Core from 1.0.2 to 1.0.3.
Release notes
Sourced from AndreGoepel.Core's releases.
1.0.3
What's Changed
Full Changelog: andregoepel/core@v1.0.2...v1.0.3
Commits viewable in compare view.
Updated AndreGoepel.Design.Blazor from 1.6.5 to 1.6.7.
Release notes
Sourced from AndreGoepel.Design.Blazor's releases.
1.6.7
What's Changed
Full Changelog: andregoepel/design-blazor@v1.6.6...v1.6.7
1.6.6
What's Changed
Full Changelog: andregoepel/design-blazor@v1.6.5...v1.6.6
Commits viewable in compare view.
Updated AndreGoepel.Marten.Configuration from 1.2.2 to 1.2.4.
Release notes
Sourced from AndreGoepel.Marten.Configuration's releases.
1.2.4
What's Changed
Full Changelog: andregoepel/marten-configuration@v1.2.3...v1.2.4
1.2.3
What's Changed
Full Changelog: andregoepel/marten-configuration@v1.2.2...v1.2.3
Commits viewable in compare view.
Updated AndreGoepel.Marten.Identity.Blazor from 2.0.2 to 2.1.0.
Release notes
Sourced from AndreGoepel.Marten.Identity.Blazor's releases.
2.1.0
What's Changed
Full Changelog: andregoepel/marten-identity@v2.0.2...v2.1.0
Commits viewable in compare view.
Updated AndreGoepel.Marten.Testing from 1.2.1 to 1.2.3.
Release notes
Sourced from AndreGoepel.Marten.Testing's releases.
1.2.3
What's Changed
Full Changelog: andregoepel/marten-testing@v1.2.2...v1.2.3
1.2.2
What's Changed
Full Changelog: andregoepel/marten-testing@v1.2.1...v1.2.2
Commits viewable in compare view.
Updated AndreGoepel.Testing.Bunit from 1.3.1 to 1.3.2.
Release notes
Sourced from AndreGoepel.Testing.Bunit's releases.
1.3.2
What's Changed
Full Changelog: andregoepel/testing@v1.3.1...v1.3.2
Commits viewable in compare view.
Updated AndreGoepel.Testing.E2E from 1.3.1 to 1.3.2.
Release notes
Sourced from AndreGoepel.Testing.E2E's releases.
1.3.2
What's Changed
Full Changelog: andregoepel/testing@v1.3.1...v1.3.2
Commits viewable in compare view.
Updated Aspire.Hosting from 13.5.3 to 13.5.4.
Release notes
Sourced from Aspire.Hosting's releases.
13.5.4
What's New in Aspire 13.5.4
Patch release for Aspire 13.5 that fixes Kafka health-check resource leaks, DevTunnel errors with automatically selected regions, misleading Azure emulator dashboard entries, and unintended changes to generated starter apps, plus Homebrew compatibility and Radius API diagnostic updates.
🐛 Fixes
📨 Kafka health checks leaked producers and polling threads — Each AppHost health-check execution created a new Kafka producer without disposing it, accumulating background threads over time. Health checks now reuse a producer per Kafka resource and dispose it with the AppHost, while keeping multiple Kafka resources independently configured. Fixes #20091. (#20094, backport of #20092, @davidfowl)
🌐 DevTunnels could fail when the region was selected automatically — Tunnel setup and health checks now use the cluster-qualified tunnel ID returned by the DevTunnel CLI for port operations and access queries. This fixes failures when a bare tunnel ID cannot be resolved for those operations. Regression introduced in 13.3. Fixes #18790. (#19853, backport of #19230, @Vladipz)
☁️ Emulator-only AppHosts showed an unused Azure environment — The dashboard now hides the
azure-environmentresource when no Azure resources require cloud provisioning, instead of leaving it visible in Not started. It remains visible for apps that combine local emulators with resources requiring Azure provisioning. No AppHost changes are needed. Fixes #19617. (#19998, backport of #19843, @eerhardt)🧩 Starter app generation could alter unrelated JavaScript values — Dynamic port replacement could also replace matching numeric literals in bundled JavaScript, including Bootstrap timing values. Port substitutions are now restricted to
localhost:URLs, preserving the original library files while still configuring the requested ports. Fixes #20030. (#20110, backport of #20031, @bart-vmware, @JamesNK)🍎 Updated the Aspire Homebrew cask for Homebrew 6.x — Replaced deprecated cask URL and post-install syntax with the supported equivalents, resolving compatibility issues with current Homebrew while preserving install-channel metadata. (#20119, backport of #19965, @askpt, @joperezr)
🧪 Radius cloud-provider callback interfaces now carry the experimental diagnostic —
IAwsRadiusProviderBuilderandIAzureRadiusProviderBuilderare now marked withASPIRERADIUS003, matching the existingWithAwsProviderandWithAzureProvidermethods. Code referencing these interfaces directly must now acknowledge the same experimental API diagnostic. (#19874, @sebastienros)Full Changelog: v13.5.3...v13.5.4
Full commit: 9c1b401dd67746739044f68959cbf4d3d7af93a6
Commits viewable in compare view.
Updated Aspire.Hosting.AppHost from 13.5.3 to 13.5.4.
Release notes
Sourced from Aspire.Hosting.AppHost's releases.
13.5.4
What's New in Aspire 13.5.4
Patch release for Aspire 13.5 that fixes Kafka health-check resource leaks, DevTunnel errors with automatically selected regions, misleading Azure emulator dashboard entries, and unintended changes to generated starter apps, plus Homebrew compatibility and Radius API diagnostic updates.
🐛 Fixes
📨 Kafka health checks leaked producers and polling threads — Each AppHost health-check execution created a new Kafka producer without disposing it, accumulating background threads over time. Health checks now reuse a producer per Kafka resource and dispose it with the AppHost, while keeping multiple Kafka resources independently configured. Fixes #20091. (#20094, backport of #20092, @davidfowl)
🌐 DevTunnels could fail when the region was selected automatically — Tunnel setup and health checks now use the cluster-qualified tunnel ID returned by the DevTunnel CLI for port operations and access queries. This fixes failures when a bare tunnel ID cannot be resolved for those operations. Regression introduced in 13.3. Fixes #18790. (#19853, backport of #19230, @Vladipz)
☁️ Emulator-only AppHosts showed an unused Azure environment — The dashboard now hides the
azure-environmentresource when no Azure resources require cloud provisioning, instead of leaving it visible in Not started. It remains visible for apps that combine local emulators with resources requiring Azure provisioning. No AppHost changes are needed. Fixes #19617. (#19998, backport of #19843, @eerhardt)🧩 Starter app generation could alter unrelated JavaScript values — Dynamic port replacement could also replace matching numeric literals in bundled JavaScript, including Bootstrap timing values. Port substitutions are now restricted to
localhost:URLs, preserving the original library files while still configuring the requested ports. Fixes #20030. (#20110, backport of #20031, @bart-vmware, @JamesNK)🍎 Updated the Aspire Homebrew cask for Homebrew 6.x — Replaced deprecated cask URL and post-install syntax with the supported equivalents, resolving compatibility issues with current Homebrew while preserving install-channel metadata. (#20119, backport of #19965, @askpt, @joperezr)
🧪 Radius cloud-provider callback interfaces now carry the experimental diagnostic —
IAwsRadiusProviderBuilderandIAzureRadiusProviderBuilderare now marked withASPIRERADIUS003, matching the existingWithAwsProviderandWithAzureProvidermethods. Code referencing these interfaces directly must now acknowledge the same experimental API diagnostic. (#19874, @sebastienros)Full Changelog: v13.5.3...v13.5.4
Full commit: 9c1b401dd67746739044f68959cbf4d3d7af93a6
Commits viewable in compare view.
Updated Aspire.Hosting.PostgreSQL from 13.5.3 to 13.5.4.
Release notes
Sourced from Aspire.Hosting.PostgreSQL's releases.
13.5.4
What's New in Aspire 13.5.4
Patch release for Aspire 13.5 that fixes Kafka health-check resource leaks, DevTunnel errors with automatically selected regions, misleading Azure emulator dashboard entries, and unintended changes to generated starter apps, plus Homebrew compatibility and Radius API diagnostic updates.
🐛 Fixes
📨 Kafka health checks leaked producers and polling threads — Each AppHost health-check execution created a new Kafka producer without disposing it, accumulating background threads over time. Health checks now reuse a producer per Kafka resource and dispose it with the AppHost, while keeping multiple Kafka resources independently configured. Fixes #20091. (#20094, backport of #20092, @davidfowl)
🌐 DevTunnels could fail when the region was selected automatically — Tunnel setup and health checks now use the cluster-qualified tunnel ID returned by the DevTunnel CLI for port operations and access queries. This fixes failures when a bare tunnel ID cannot be resolved for those operations. Regression introduced in 13.3. Fixes #18790. (#19853, backport of #19230, @Vladipz)
☁️ Emulator-only AppHosts showed an unused Azure environment — The dashboard now hides the
azure-environmentresource when no Azure resources require cloud provisioning, instead of leaving it visible in Not started. It remains visible for apps that combine local emulators with resources requiring Azure provisioning. No AppHost changes are needed. Fixes #19617. (#19998, backport of #19843, @eerhardt)🧩 Starter app generation could alter unrelated JavaScript values — Dynamic port replacement could also replace matching numeric literals in bundled JavaScript, including Bootstrap timing values. Port substitutions are now restricted to
localhost:URLs, preserving the original library files while still configuring the requested ports. Fixes #20030. (#20110, backport of #20031, @bart-vmware, @JamesNK)🍎 Updated the Aspire Homebrew cask for Homebrew 6.x — Replaced deprecated cask URL and post-install syntax with the supported equivalents, resolving compatibility issues with current Homebrew while preserving install-channel metadata. (#20119, backport of #19965, @askpt, @joperezr)
🧪 Radius cloud-provider callback interfaces now carry the experimental diagnostic —
IAwsRadiusProviderBuilderandIAzureRadiusProviderBuilderare now marked withASPIRERADIUS003, matching the existingWithAwsProviderandWithAzureProvidermethods. Code referencing these interfaces directly must now acknowledge the same experimental API diagnostic. (#19874, @sebastienros)Full Changelog: v13.5.3...v13.5.4
Full commit: 9c1b401dd67746739044f68959cbf4d3d7af93a6
Commits viewable in compare view.
Updated Aspire.Hosting.Testing from 13.5.3 to 13.5.4.
Release notes
Sourced from Aspire.Hosting.Testing's releases.
13.5.4
What's New in Aspire 13.5.4
Patch release for Aspire 13.5 that fixes Kafka health-check resource leaks, DevTunnel errors with automatically selected regions, misleading Azure emulator dashboard entries, and unintended changes to generated starter apps, plus Homebrew compatibility and Radius API diagnostic updates.
🐛 Fixes
📨 Kafka health checks leaked producers and polling threads — Each AppHost health-check execution created a new Kafka producer without disposing it, accumulating background threads over time. Health checks now reuse a producer per Kafka resource and dispose it with the AppHost, while keeping multiple Kafka resources independently configured. Fixes #20091. (#20094, backport of #20092, @davidfowl)
🌐 DevTunnels could fail when the region was selected automatically — Tunnel setup and health checks now use the cluster-qualified tunnel ID returned by the DevTunnel CLI for port operations and access queries. This fixes failures when a bare tunnel ID cannot be resolved for those operations. Regression introduced in 13.3. Fixes #18790. (#19853, backport of #19230, @Vladipz)
☁️ Emulator-only AppHosts showed an unused Azure environment — The dashboard now hides the
azure-environmentresource when no Azure resources require cloud provisioning, instead of leaving it visible in Not started. It remains visible for apps that combine local emulators with resources requiring Azure provisioning. No AppHost changes are needed. Fixes #19617. (#19998, backport of #19843, @eerhardt)🧩 Starter app generation could alter unrelated JavaScript values — Dynamic port replacement could also replace matching numeric literals in bundled JavaScript, including Bootstrap timing values. Port substitutions are now restricted to
localhost:URLs, preserving the original library files while still configuring the requested ports. Fixes #20030. (#20110, backport of #20031, @bart-vmware, @JamesNK)🍎 Updated the Aspire Homebrew cask for Homebrew 6.x — Replaced deprecated cask URL and post-install syntax with the supported equivalents, resolving compatibility issues with current Homebrew while preserving install-channel metadata. (#20119, backport of #19965, @askpt, @joperezr)
🧪 Radius cloud-provider callback interfaces now carry the experimental diagnostic —
IAwsRadiusProviderBuilderandIAzureRadiusProviderBuilderare now marked withASPIRERADIUS003, matching the existingWithAwsProviderandWithAzureProvidermethods. Code referencing these interfaces directly must now acknowledge the same experimental API diagnostic. (#19874, @sebastienros)Full Changelog: v13.5.3...v13.5.4
Full commit: 9c1b401dd67746739044f68959cbf4d3d7af93a6
Commits viewable in compare view.
Updated bunit from 2.9.0 to 2.10.3.
Release notes
Sourced from bunit's releases.
2.10.3
Fixed
BunitHtmlParser.Dispose()no longer throwsInvalidOperationException: Collection was modifiedwhen a parse is in flight on another thread during test teardown. Reported by @thimobuchheister in #1892. Fixed by @linkdotnet.Commits viewable in compare view.
Updated bunit from 2.9.0 to 2.11.3.
Release notes
Sourced from bunit's releases.
2.11.3
Fixed
InvokeOnSpacerBeforeVisiblenow uses 4 parameters on .NET 11.0. Reported by @vnbaaij in #1915. Fixed by @vnbaaij in #1919.InvalidOperationException: Nullable object must have a value. Reported by @calebcwells in #1920. Fixed by @linkdotnet.2.10.3
Fixed
BunitHtmlParser.Dispose()no longer throwsInvalidOperationException: Collection was modifiedwhen a parse is in flight on another thread during test teardown. Reported by @thimobuchheister in #1892. Fixed by @linkdotnet.Commits viewable in compare view.
Updated MailKit from 4.17.0 to 4.18.0.
Release notes
Sourced from MailKit's releases.
No release notes found for this version range.
Commits viewable in compare view.
Updated Marten from 9.30.0 to 9.33.0.
Release notes
Sourced from Marten's releases.
9.33.0
The concurrency and portability release: a shared-state race that broke parallel
db-apply, a Native AOT query failure, and two cross-store divergences settled in Marten's favour and against it respectively.Dependencies move to JasperFx 2.67.0 and Weasel 9.31.1.
db-apply --parallelcould die with "Collection was modified" (#5364)Applying schema changes to many databases concurrently intermittently failed on one of them with:
Reported from a production deployment at 29 databases and
--parallel 16, where it hit exactly one database per run.One
ManagedListPartitionsinstance is shared by every database in a store. It mutated its partition dictionary in place and published it through aReadOnlyDictionary— which wraps rather than copies — soInitializeAsync'sClear()-and-refill ran while another database's worker was mid-enumeration. Fixed upstream in Weasel 9.31.1 (JasperFx/weasel#583) by publishing the registry as a snapshot swapped copy-on-write. Marten needs only the bump; there is no Marten code change.Two things worth knowing if you hit this before upgrading:
The same Weasel fix covers
Weasel.SqlServer'sManagedTenantPartitions, which had the identical shape.An enum compared to a captured variable failed under Native AOT (#5361)
where x.Status == capturedthrewBadLinqExpressionExceptionwrappingPlatformNotSupportedException: Dynamic code generation is not supported on this platform, while the same comparison against a literal worked. C# lowers enum equality to a comparison of the underlying integers, so the value side always arrives asConvert(closure.captured, Int32)— a shape 9.32.1's reflective walk did not cover, which sent it to FastExpressionCompiler and therefore toReflection.Emit.Two changes, because the enum shape was the symptom rather than the cause. The reflective walk now handles conversions between an enum and anything sharing its integral representation, including the
Nullable<T>forms — widening and narrowing are still left alone, so no value is ever reinterpreted. AndReduceToConstantno longer requires the ability to emit at all: where the platform cannot, shapes the walk declines fall back to the BCL expression interpreter instead of throwing. Without that second half, every expression shape Marten has not explicitly been taught was a latent AOT failure.EventQuery.TagValuesis now honored (#5365)The lossy name/value tag filter, on the composable query object. Previously you filtered by tags or by everything else: the dictionary form existed only on the non-composable
QueryByTagsAsync, which is unpaged and has noTotalCount. Now a caller holding a tag name can AND it with the event type, window, stream, metadata and tenant filters and keep paging and a truthful total.Note the semantics, which differ from the rich
TagConditionsform deliberately: entries AND (an event must carry every named tag at the given value), whereTagConditionsconditions OR. Supplying both spellings on one query is refused rather than resolved by a silent precedence rule.Behaviour change: dictionary tag queries accept either spelling, case-insensitively
Fixing the above exposed a divergence in the existing
IEventStore.QueryByTagsAsync(IReadOnlyDictionary<string,string>, …)overload. It matched a tag name against the CLR type name only and compared the value case-sensitively, while Polecat accepted either spelling and compared case-insensitively — so the same dictionary answered differently depending on which store you asked, and guessing wrong was anArgumentExceptionat runtime.Both that overload and the new
TagValuespath now resolve names through the shared matcher (CLR simple name or registered table suffix, case-insensitively) and compare values against the string form of the stored tag value, ordinal case-insensitively. Postgres renders a Guid lowercase through::textwhile SQL Server renders it uppercase, so an operator's copy-pasted id no longer depends on which store answered.If you relied on a tag name or value being matched case-sensitively, this query now matches more rows than it used to. An unregistered tag name is still an
ArgumentExceptionlisting what is registered, never an empty answer.CompactStreamAsync<T>infers the fold for an unregistered aggregate (#5366)Compaction refused any type without a registered aggregation projection, while Fisher and Polecat both inferred one. That made a compaction policy able to target only an aggregate the application already snapshots — a real constraint on the feature, invisible until runtime, and one nobody would infer from the API.
CompactStreamAsync<T>now builds the aggregator fromT's ownCreate/Applyconventions when no projection is registered, which is what every other aggregation path in Marten already did. The typed overload namesToutright, and that is the same declaration of intent a registration would be.... (truncated)
9.32.1
A bug-fix release, on JasperFx 2.66.0 and Weasel 9.31.0. The headline is that Native AOT document reads worked for nobody before this; the rest is correctness work on natural keys, the outbox, EF Core projections, and flat tables.
Several of these change observable behaviour. Each one is called out below.
Native AOT: reading a document from a native binary (#5328)
An app published with
PublishAot=truebuilt and published analyzer-clean, then threw on the first document read. Writes — including schema creation — were fine. Three separate sites, all on the read path:QuerySession.StorageFor(Type)andCompiledQueryPlan.sortMembers()both went from a runtimeTypeback to a closed generic throughMakeGenericType+Activator.CreateInstance, and ILC has no native code for an instantiation nothing constructs statically. The third — expression compilation for every non-literal value in awhereclause, i.e. everywhere x.Member == captured— is Reflection.Emit, which native AOT does not have at all.All three now capture the closed generic where the compiler has already emitted it.
LoadAsync, LINQ, raw SQL,Include, patching and source-generated compiled queries all run from a native binary.Two shapes still need a JIT, and both have a one-line workaround (documented in the AOT publishing guide): a compiled query with an
enum-typed parameter, and awhereclause whose value comes from a method call — hoist the call into a local first.Marten also ships a new runtime gate,
src/Marten.AotRuntimeSmoke, which publishes natively and runs every read path against a real PostgreSQL in CI. The existingMarten.AotSmokeis a build-time analyzer gate and was structurally blind to this class of defect: the offending code analyzes clean and throws one line later. If you publish AOT, do the same in your own pipeline — a clean publish is necessary, not sufficient.Natural keys: three fixes, two of them behavioural (#5344)
The first run of the shared
NaturalKeyCompliancesuite against Marten found three genuine bugs in the[NaturalKey]lookup table.A
[NaturalKey]of primitive typestringon a Guid-identity store now works.FindFetchPlanasserted string stream storage for anystringTId and refused with "This Marten event store is configured to identify streams with Guids" before any planner saw it. Both that guard and its mirror image inNaturalKeyFetchPlannernow narrow to the store's own stream identity type. The ambiguous case is unchanged by design: on a string-identity store,FetchLatest<T, string>(value)still addresses the stream.A failed unit of work no longer commits its outbox batch (#5353)
IMessageBatch.BeforeCommitAsyncwas called before theUpdateBatchwas built and before a transaction was even open — so it fired for units of work that had not been attempted, let alone succeeded. ASaveChangesAsyncthat then failed (a stream-id collision, say) left the message batch enlisted and committed, with no rollback hook able to un-enlist it.The batch is now enlisted as an
ITransactionParticipant, invoked inside the transaction after every page has executed and immediately before theCOMMIT. A unit of work that fails never reaches it. Hook ordering and the inside/outside-the-transaction visibility contract are unchanged; the before hook simply runs later in the transaction. This is the placement Polecat already used.EF Core projections stop generating a Marten document table (#5351, #5329)
Registering an
EfCoreSingleStreamProjection/EfCoreMultiStreamProjectionmade Marten build aDocumentMappingfor the aggregate type and emit schema for it, even though EF Core owns that data in aDbContext-mapped table Marten never reads or writes. Two consequences, both fixed:ApplyAllConfiguredChangesToDatabaseAsync()created an emptymt_doc_<tdoc>table nothing used — and in the normalAutoCreate.Noneshape, where schema is built by a migration pass that does not register the projection,AssertDatabaseMatchesConfigurationAsync()then reported that table as MISSING and a correctly-migrated database failed its own startup assertion.... (truncated)
9.32.0
Two coordinated feature waves against JasperFx.Events 2.63.0, plus the compliance enrollments that keep Marten, Polecat, and Fisher synchronized.
Broadened event querying (jasperfx#737 → #5330 / #5331)
QueryEventsAsync/EventQuerynow supports inclusive timestamp windows (TimestampFrom/TimestampTo), inclusive sequence windows (SequenceFloor/SequenceCeiling), multiple event type aliases (EventTypeNames, union with the singleEventTypeName), and DCB tag conditions folded into the query (TagConditions— the TagTables and HStore modes both translate through the same SQL asQueryByTagsAsync). Results are contractually ordered sequence-ascending;TotalCountcounts matches across all pages.Stream state querying + the compaction watermark (jasperfx#740 → #5333 / #5334)
QueryStreamStates(tenantId?)exposes a realIQueryable<StreamState>overmt_streams— every public member translates inWhere(), includingAggregateType == typeof(X)(resolved through the stored type alias) and the newCompactedVersionwatermark, so a compaction policy predicate likes.AggregateType == typeof(Order) && s.Version - s.CompactedVersion > 1000 && !s.IsArchivedruns server-side.mt_streamsgains an additivecompacted_version bigint NOT NULL DEFAULT 0column (Weasel migration; expect a one-time schema-touch burst on a first local test run against pre-existing schemas), andCompactStreamAsyncrecords the watermark in the same unit of work — monotonically (greatest()), so a replayed lower-cutoff compaction can never move it backwards. Untranslatable members and a tenant scope on a non-conjoined store refuse by name, never silently match-all.CLI + compliance
The JasperFx.Events
event-queryandstream-querycommands are covered end-to-end against Marten (first CLI-execution tests in the repo). Compliance:EventQueryCompliance(41 facts) andStreamStateQueryCompliance(15) enrolled; the full compliance namespace runs 388/388 on net9.0 and net10.0.Note for code importing both
MartenandJasperFx.Events.Documents: extension-styleToListAsyncover the stream queryable is ambiguous (CS0121) — call the JasperFx extensions explicitly.🤖 Generated with Claude Code
9.31.2
A diagnostics-only patch release. No behavioural change to the write path.
A failed batched write now reports the SQL that failed
When a batched write failed, Marten threw a
MartenCommandExceptionwhose message rendered an empty command text. Reported from the field on an async projection:The
$ $ $is the message template interpolating a command that was always null.ReadNpgsqlCommand()looks for anNpgsqlCommandinexception.Data, and on theExecuteBatchPagesAsyncpath there is no single command to put there —AutoClosingLifetimetransformed the exception with nothing recorded at all, andWrapAndThrow(NpgsqlBatch, ...)recorded the batch under a key that nothing ever read.The practical consequence: the offending SQL was unrecoverable from the exception and from the logs, for every async projection write. That is precisely the situation where hand-written SQL — a
QueueSqlCommand, a customIStorageOperation, a projection side effect — turns out to be malformed, and the one thing you need to see is the statement.MartenCommandExceptionnow recovers the SQL from three sources, in order:NpgsqlCommandit was handed;NpgsqlException.BatchCommand— Npgsql identifies the exact statement the server rejected when the failure came out of a batch execution;NpgsqlBatchrecorded on the exception.The recovered statement is also exposed on a new
MartenCommandException.CommandTextproperty, so it can be read programmatically rather than scraped out of the message.AutoClosingLifetimeexecutes its batches inline rather than throughhandleCommandException, so it now records its batch. The other three connection lifetimes already routed throughWrapAndThrow(NpgsqlBatch, ...)and only needed a reader for the key they were already writing.Two guardrails worth knowing about: a batch renders at most five statements, so a 500-operation projection page cannot turn one failure into an unreadable log entry, and the whole resolution is wrapped in a
catch— building a diagnostic must never replace the real failure.Also released as 8.38.1 on the 8.x line.
9.31.1
A single-fix patch release that moves Marten to JasperFx 2.61.0, picking up the source generator fix for JasperFx/jasperfx#733. Weasel stays on 9.29.0.
Self-aggregating snapshots silently skipped a constructor-based
CreateA self-aggregating snapshot may declare its Create handler as an event-shaped constructor,
public Foo(FooCreated e), instead of a namedstatic Create. That works on its own. Adding aShouldDeletemethod to the same aggregate switched the source generator to a different emitter — one that built its dispatch switch from named conventional methods only — so the constructor's event type got no case arm at all.Nothing failed loudly. The generated code compiled, the constructor never ran, and the next Apply-only event built the aggregate through
RuntimeHelpers.GetUninitializedObject, skipping every field initializer. The visible symptom was anApplyEventExceptionwrapping aNullReferenceExceptionout of anApplythat appended to a collection property:The quieter outcome, where no
Applyhappens to dereference anything, is a silently blank aggregate.Both documented workarounds — converting the constructor to a
static Create, or registering the delete throughDeleteEvent<T>()instead ofShouldDelete— become unnecessary on this release.The same omission was also in the generated
EventTypesproperty on every self-aggregating path, including the ones whose dispatch was already correct, so an aggregate with a constructorCreateand noShouldDeletegains its creating event in that list here too.Covered by
Bug_jasperfx_733_event_constructor_create_with_should_deleteacross inline, async and live aggregation, plus the delete arm itself. See #5322.9.31.0
Every fix in this release removes a silent wrong answer — not a crash, not an exception, but a plausible-looking result that was wrong with nothing to tell you so. A stream folded into partial aggregates. Paging that returned arbitrary pages. Monitoring that went dark rather than broken. A search reading a key that did not exist. An index that was never created.
Plus one genuinely new feature: weighted full text search with relevance ranking.
New: weighted full text indexes and
ts_rankorderingA full text index used to concatenate its members into one flat vector, so a match in a title was exactly as relevant as a match in a long description. Now it can be weighted, and ranked:
The rank resolves the same tsvector the
Whereclause matched on, read from the index definition. That is the load-bearing design constraint rather than an implementation detail: a rank computed over a different vector than the filter matched on returns rows in an order that looks plausible and means nothing — a far quieter failure than returning the wrong rows.Requires Weasel 9.29.0 (weasel#541), which made it possible to index an expression that is already a
tsvector. See the full text documentation for the costs worth knowing first — GIN cannot order, so this is a post-filter sort; and adding weights to an existing index drops and recreates it.Silent wrong answers, fixed
Async projections folded one stream into several partial aggregates (#5305, originally #4085). When a stream's events disagreed about
tenant_id, the daemon sliced it per tenant and applied the pieces over each other, so anApplysaw a document with every property at its default. Marten had setForceSingleTenancysince the original fix, butTenantedEventSlicerhonoured that flag on only one of its two overloads — and the async daemon reaches the other one. The flag was being set on precisely the path that could not read it. Fixed upstream in JasperFx 2.58.0.OrderByafter aGroupJoin/SelectManywas dropped from the SQL (#5311). Silently, and withSkip/Takeit was worse:OFFSETandLIMITwere emitted while the ordering was not, and unordered paging in PostgreSQL has no stable row order — so rows repeat across pages while others never appear.Whereon a bare-side selector andCountover a join were wrong in the same surface and are fixed too.A store with monitoring off dropped the monitoring columns another store had added (#5309). Two
DocumentStores over oneDatabaseSchemaNamethat disagreed aboutEnableExtendedProgressionTrackingkept stripping each other'smt_event_progressioncolumns — last writer wins, silent on both sides. A service beside a seeder or a reporting job is an ordinary arrangement, and neither was doing anything wrong. The shape of that table no longer depends on configuration at all.Full text search rewrote JSON keys, not just the column (#5314, thanks @mlh758). A member whose serialized name contained
dataproducedd.data ->> 'd.data'— a key that does not exist. Two quiet consequences: that member contributed nothing to the search, and the expression no longer matched the index, so the GIN index could not serve the query either.A second full text index over different members was silently discarded (#5315). Index names derive from the table rather than from the members, so two
FullTextIndex()calls collided by construction and the second was thrown away — never registered, never created, never searched. Ambiguity is now refused with an explanatory exception instead of resolved by declaration order.A DCB boundary aggregate failed far from its cause (JasperFx 2.60.0). An identity-less
[BoundaryAggregate]folded byEvolve(IEvent)got no evolver and no diagnostic, surfacing much later asFetchForWritingByTags<T>throwing "No source-generated dispatcher found" — naming neither the type nor the reason. Now it generates, and a[BoundaryAggregate]with nothing to fold events with is reported asJFXEVT007.A DCB tag version was captured after the events were read (#5300). Two batched statements do not share a
READ COMMITTEDsnapshot, so the version could reflect a concurrent append. Captured before the read now.Also in this release
projection-runCLI command arrives with JasperFx 2.60.0 and needs no Marten change — every host referencingJasperFx.Eventspicks it up. It replays one projection over a stream slice or DCB tag match and prints per-event before/after state, writing nothing.Bug_5268's concurrent index test no longer depends on how much unrelated transaction load happens to be in flight (#5308), so validating a dependency bump by running the whole suite at once is trustworthy again.BuildSlicernow agrees withFetchAsyncPlanabout global aggregates (#5307). Alignment rather than a fix — no reachable corruption depended on it, and the reasoning is written down at the call site so the question does not have to be reconstructed next time.Upgrade notes
OrderByFragment.Expressionschanged fromList<string>toList<ISqlFragment>. A public API break, deliberately taken: an ordering could not carry a parameter while the clause was a list of strings, which is why the older ngram ranking inlines its search term rather than binding it. Nothing outside Marten's own LINQ internals is likely to touch this type, but it is a compile break if you did.... (truncated)
Commits viewable in compare view.
Updated Marten from 9.30.0 to 9.37.0.
Release notes
Sourced from Marten's releases.
9.37.0
Eighteen commits, and almost all of them are
Marten.PgVectorcorrectness — found by auditing the search surface 9.36.0 had just shipped. Every one of these was silent: a plausible answer, in a plausible order, that was wrong.Vector and hybrid search returned the wrong rows
Cosinerather than the metric the index declared, so anL2index was searched by cosine and silently fell back to a sequential scanhnsw.ef_search(default 40) — so it under-returned however large thelimitT, never the concrete subtypeto_tsvectorwhen no index matched theregConfigVectorProjectionwrote the wrong rowsid, so the later tenant's write replaced the earlier one'sForTenant(...)appends landed in the wrong tenantGuid.Emptyon string-identified streamsSearches now run through the session (#5421, #5423)
The session's connection, transaction, command timeout, resilience pipeline and
IMartenSessionLogger. A search on a session inside a caller-managed transaction now sees that session's uncommitted writes, the wayQuery<T>()does.SET LOCALstill cannot leak onto a pooled connection.VectorSearchAsync,VectorSearchWithScoresAsyncandVectorProjectionSearchAsyncgainCancellationTokenoverloads. Overloads rather than defaulted parameters: an optional argument is compiled into the caller, so widening a shipped signature breaks every assembly that has not been rebuilt.ColumnWeightsis refused, not ignored (#5446)HybridSearchOptionsgained per-column weights for the text leg (jasperfx#854, JasperFx 2.72.0). Marten weights at index time throughWeightedFullTextIndex, so there is nothing a per-call weight could apply to — and it is refused by name rather than ignored, because a caller who weights a title column and silently gets an unweighted ranking has no way to find out.Timestamps and the explorer
#5379 —⚠️ Only patching was affected — an ordinary
mt_last_modifiedno longer jumps by the server's UTC offset when a document is patched.now() at time zone 'utc'strips the offset, and the naive result is re-read in the session'sTimeZone: on a UTC+2 database the stored instant was two hours in the past.Store/SaveChangestakes the column default, which was always correct.#5430 (thanks @erikshafer) covers the event half of the same defect, reached through stream compaction, which #5445 fixed and left untested — and its assertions run over two time zones in both directions, where a one-sided bound passes against a negative offset.
#5383 — database-scoped explorer reads, honest store-global reads, and two tenant-scoping defects.
On JasperFx 2.72.0.
9.36.0
Takes
Marten.PgVectorfrom a vector search that could not be indexed and could not be called portably, to one that shares theJasperFx.Events.Vectorscontracts with Fisher and Polecat, can be served by an HNSW index, returns scores, and fuses with full text.VectorIndex— declare an HNSW index for a vector searchts_rankleg and the vector leg#5413 deleted that package's own
IEmbeddingProviderandDistanceFunctionin favour of the shared ones, and removed the deadVectorOn/PgVectorOptionsregistry, which had no references anywhere including the tests. ThePgvector.Vectoroverload ofVectorSearchAsyncwas kept and forwards, so the common call site is source-compatible.Minor rather than major because the whole package family shares one version and Marten itself has no break in this range — a major bump would move every other package for an extension package's API.
The search surface shipped here was audited immediately afterwards, and ten silent defects came out of it — searches that skipped Marten's default filters and returned soft-deleted rows, a distance metric that defaulted to
Cosinerather than the one the index declared, an indexed search capped at 40 rows byhnsw.ef_search, aVectorProjectionthat ignored conjoined tenancy, and more. Every one of them returned a plausible answer in a plausible order.All of them are fixed in 9.37.0. If you are picking up
Marten.PgVectorfor the first time, start there rather than here.On the tag. This points at
daeb27b5, not at the "Release 9.36.0" commitbaf1fc3f. The publish dispatch from the release commit was cancelled, and the run that actually pushed the packages went fromdaeb27b5— one commit later, carrying #5417. The tag names what shipped.9.35.0
Marten 9.35.0 — Event Model naming, store identity, and idempotent archiving.
Three, all deliberate. None require a code change to adopt, but each changes what an existing application observes.
1. A store's derived Event Model is now named after your service, not
"EventModel"(#5408).The store-derived Event Model source fell back to the literal
"EventModel"— the one default guaranteed to be wrong for every host. Wolverine names its derived model afterJasperFxOptions.ServiceName, and so does Bobcat's spec assembly, so the common case (Wolverine + one Marten store) assembled two models out of the box and had to restate a name it had already declared.The fallback is now the service name. An explicit name still wins:
If you were relying on the model being called
EventModel, setopts.EventModelName = "EventModel"explicitly.2. The primary store's
Subjectnow followsStoreName(#5409).Subjectwas a literalmarten://mainthat ignoredStoreOptions.StoreName, whileIdentityhad always been built from it — so naming a primary store moved one and left the other behind, andSubjectis the one consumers key on. Both are now built fromStoreName. Tooling that keys onstore.Subject(CritterWatch's explorer reads and shard progression ids among them) will seemarten://{storename}for a named store where it previously sawmarten://main.A store name is user-supplied text and a uri host is not, so names are sanitized:
My Storewould otherwise throwUriFormatExceptionanda/bwould silently parse its tail as a path. Ordinary names are unchanged.3. Archiving an already-archived stream is a no-op instead of an error (#5403).
Under
UseArchivedStreamPartitioning, a second archive of the same stream raised23505onmt_streams_archived_pkey. This also stalled async single-stream projections withIncludeArchivedEvents = truewhen they processed anArchivedmarker after an inline snapshot had already archived the stream. Repeated archiving now succeeds and does nothing.A genuine collision is still reported: a different active stream reusing an archived stream id still fails, rather than being silently swallowed and losing its metadata.
Fixes and improvements
StoreOptions.EventModelName. A host that calledAddEventModel("Something", …)assembled two models: its own, and one the store contributed under the default name. The name is configured onStoreOptionsand read lazily when the model is assembled, soAddEventModelmay be called before or afterAddMarten.BuildStoreOptionsassignedStoreNameboth before and after theIConfigureMarten<T>chain, so a contribution that named the store was silently reverted to the marker type's name.is_archivedis the list partition key on bothmt_streamsandmt_events, the archive function's new predicates also let PostgreSQL prune to the active partition, where the previous statements had to consider both.ImHashMapkeyed byFrame, which does not overrideGetHashCode, meant statement order followed identity hash codes and varied per process. Every Event Model slice also now carries the store it came from, so two stores projecting a document of the same simple name leave a recorded disagreement rather than one silently winning (jasperfx#836).Compatibility
Binary compatible with 9.34.0. The public
AddMarten/AddMartenStore<T>surface is unchanged — verified by diffing the extracted signature list against the 9.34.0 tag. New configuration is additive onStoreOptions.9.34.0
Native AOT support for event-sourced applications, and a round of integrity fixes to the diagnostics and monitoring surface — including one deliberate behaviour change worth reading before upgrading.
Native AOT
Event-sourced applications now run under Native AOT.
Utf8JsonWriterinstead of round-tripping through the consumer's serializer, removing a reflection-dependent path from AOT reads.Diagnostics and monitoring
Three fixes to the event store explorer and projection-status APIs. All three are cases where a monitoring read returned something misleading, or changed the system it was observing.
#5400 — Behaviour change. The four explorer read APIs no longer provision anything. They resolved their database through
ITenancy.FindOrCreateDatabase, and two tenancy models take the "or create" half literally:ShardedTenancyassigned an unknown tenant to a shard and ran partition + per-tenant sequence DDL for it, andSingleServerMultiTenancyissuedCREATE DATABASEfor a database named after the id. A console polling a retired or mistyped tenant id therefore brought that tenant — or a whole database — into existence.An unrecognized tenant id now throws
UnknownTenantIdException, which is whatStaticMultiTenancyandMasterTableTenancyalready did, so the explorer answers the same way across every tenancy model. Adds the publicITenancy.TryFindDatabase, a read-only counterpart toFindOrCreateDatabase; it is a default interface member, so customITenancyimplementations keep working unchanged.FindOrCreateDatabaseitself is untouched — create-on-demand remains its documented job for real tenant traffic.If you call
GetRecentStreamsAsync,ReadStreamAsync,QueryByTagsAsyncorGetProjectionStatusesAsyncwith a tenant id that may not exist, it now throws where it previously succeeded.#5382 —
GetProjectionStatusesAsync(ct)threwNotSupportedExceptionon a database-per-tenant store, because a tenant-less call has no default tenant to open a session against. It now answers from the projection registry, so "is this projection still registered?" — the only store-agnostic way to ask, and what orphan detection is built on — works on the store shape that most needs it.Note the original issue reported that both overloads threw. Only the tenant-less one did; passing a tenant id or a database identifier from
AllDatabases()has always worked and reads real per-database progression.#5396 —
ShardStatus.Statereports the state of a reachable daemon instead of always answeringUnknown.Unknownnow means what it is documented to mean: there is no daemon here to ask.Correctness
IVersionedmarker interface. Thanks to @JurJean for the report and the original fix.[JsonStringEnumMemberName]/[EnumMember]names are honored in LINQ translation rather than the CLR member name being assumed.byte[], and its limits are documented. Thanks to @erdtsieck.Event modeling
ProjectionEventModelSourceis registered fromAddMartenandAddMartenStore<T>, so Event Model views resolve from a Marten store without manual wiring.pgvector
Docs and internals
PrefixSearchand the session-level full-text search shortcuts.GuidOptimisticConcurrencyCompliancein the shared compliance suite.Dependencies
... (truncated)
9.33.0
The concurrency and portability release: a shared-state race that broke parallel
db-apply, a Native AOT query failure, and two cross-store divergences settled in Marten's favour and against it respectively.Dependencies move to JasperFx 2.67.0 and Weasel 9.31.1.
db-apply --parallelcould die with "Collection was modified" (#5364)Applying schema changes to many databases concurrently intermittently failed on one of them with:
Reported from a production deployment at 29 databases and
--parallel 16, where it hit exactly one database per run.One
ManagedListPartitionsinstance is shared by every database in a store. It mutated its partition dictionary in place and published it through aReadOnlyDictionary— which wraps rather than copies — soInitializeAsync'sClear()-and-refill ran while another database's worker was mid-enumeration. Fixed upstream in Weasel 9.31.1 (JasperFx/weasel#583) by publishing the ..._Description has bee...
Description has been truncated