You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The most significant change in this release over 10.3.0 is the format used by the version contract compatibility analyzers. The other changes are test and docs fixes.
Orleans 10.3.0 expands the platform across clustering, streaming, persistence, integrations, serialization, and developer tooling while delivering a broad reliability and performance pass. Major outcomes include stronger distributed-directory and membership behavior, new streaming and storage providers, hardened transactions and durable jobs, incremental source generation, safer JSON storage deserialization, and new application templates. Alongside these features and fixes, the release optimizes key runtime paths, comprehensively refreshes the docs, strengthens testing and CI, and updates dependencies and repository maintenance.
Compatibility notes
[!IMPORTANT]
Review these changes before upgrading. This release contains three intentionally behavior-changing updates.
Default JSON storage serializer type allow-list (#10268). The default Newtonsoft.Json-based Orleans storage serializer now resolves $type metadata only for types permitted by Orleans' configured type filters and manifest. Existing wire data remains readable when its types are allowed; [GenerateSerializer] types and standard permitted BCL types continue to work without changes. If persisted, streamed, or transactional JSON contains other types, reads now fail with an actionable JsonSerializationException. Prefer registering those types through TypeManifestOptions.AllowedTypes, [GenerateSerializer], ITypeNameFilter, or ITypeFilter; OrleansJsonSerializerOptions.AllowAllTypes = true restores the former permissive JSON behavior when a narrowly scoped allow-list is not practical.
Updated RPC semantic convention keys (#10354). Orleans activities now emit the current OpenTelemetry RPC key rpc.system.name; Orleans-specific service, target, and source metadata move to orleans.rpc.service, orleans.rpc.target_id, and orleans.rpc.source_id. The runtime-side rpc.method value is now qualified as <interface>/<method>, and affected ActivitySource versions are incremented. Update dashboards, alerts, collectors, and queries which depend on the legacy rpc.system, rpc.service, rpc.orleans.target_id, or rpc.orleans.source_id keys or the previous method value.
Grain context configured before construction (#10565). Orleans now deterministically applies IConfigureGrainContext actions before grain construction, so constructors can observe fully configured context state. Custom IGrainContextActivator implementations must migrate from CreateContext(GrainAddress) to CreateContext(GrainAddress, IConfigureGrainContext[]) and apply the supplied configurators before constructing the grain. Stateless-worker configurators continue to apply to the outer stateless-worker context.
Highlights
Runtime, clustering & resilience
Distributed-directory rolling upgrades now have durable handoffs, cancellation-aware operations, stronger single-activation guarantees, and improved recovery and startup behavior (#10309, #10323, #10339, #9958, #10500, #10533, #10613, #10625).
Membership fault detection gains connection liveness checks, adaptive probe timeouts, retained local health history, and local-stall detection (#9978, #10510, #10502, #9979).
Persistent state is now concurrency-safe and cancellation-aware, while journaling snapshot operations and durable-job retry/rescheduling semantics are more robust (#10255, #10641, #10800, #10681, #10349, #10547, #10716, #10679).
Providers & integrations
Google Cloud Firestore providers, Cosmos DB custom document IDs and partition keys, ADO.NET DbDataSource support, and improved Azure, ZooKeeper, Redis, NATS, and relational-provider behavior extend and stabilize integrations (#8462, #8699, #10326, #10429, #10381, #10437, #10835, #10422, #10505, #10276).
SQL Server, PostgreSQL, and MySQL clustering add the missing defunct-silo cleanup query (#8811, #9125, #8896).
Serialization, code generation & analyzers
The source generator is now incremental, generates provider metadata at build time, avoids runtime provider scanning, and supports record-parameter field IDs and custom grain-call return types (#10035, #10493, #10566, #10495, #10682).
Serialization reduces codec and buffer allocations, adds type/assembly allow-list helpers, and clarifies type-trust configuration (#10301, #10340, #10668, #10228, #10424).
Analyzers detect RPC contract changes and provide improved diagnostic guidance (#10337, #10832).
Developer experience, templates, samples & docs
New Orleans application templates and a basic clustering sample make it easier to start and validate applications (#10646, #10690, #10622).
Connection middleware abstractions and framing helpers provide new transport extension points (#10136, #10433).
Test infrastructure moved to xUnit v3 and Microsoft.Testing.Platform, with provider conformance kits, published test results, coverage reporting, and extensive reliability improvements (#10722, #10726, #10490, #10785, #10730, #10733, #10842, #10438, #10738).
... (truncated)
The reason will be displayed to describe this comment to others. Learn more.
Copilot review overview
🟡 Changes recommended
Cancellation can advance Kafka positions and skip uncommitted records; the unrelated Testcontainers.Kafka upgrade also needs justification or separation.
Get a fresh assessment by requesting another Copilot review.
Cancellation is checked before acquiring _consumerSync, but not again in this uninitialized branch. If the caller cancels while waiting for the lock, this returns an empty batch successfully instead of honoring cancellation; check the token immediately before returning the empty list.
This issue also appears in the following locations of the same file:
line 176
line 191
line 196
Make cancellation timing deterministic in restoration test
The 10 ms cancellation window is nondeterministic and may fire before Consume advances the receiver, allowing this test to pass without exercising read-side offset restoration or replay. Use a deterministic consumer seam/fake, or otherwise arrange cancellation after a poll and verify that the next read replays the batch.
This test does not deterministically exercise cancellation after Kafka advances the consumer: the 10 ms timer can expire before the first Consume, so it still passes even if no offset is restored. Add a deterministic consumer seam or fake which cancels after a poll and verifies Seek/replay instead of relying on this timing window.
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
dependenciesPull requests that update a dependency file.NETPull requests that update .NET code
2 participants
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.
Pinned Microsoft.Orleans.Streaming at 10.3.1.
Release notes
Sourced from Microsoft.Orleans.Streaming's releases.
10.3.1
The most significant change in this release over 10.3.0 is the format used by the version contract compatibility analyzers. The other changes are test and docs fixes.
What's Changed
Full Changelog: dotnet/orleans@v10.3.0...v10.3.1
10.3.0
Orleans 10.3.0
Orleans 10.3.0 expands the platform across clustering, streaming, persistence, integrations, serialization, and developer tooling while delivering a broad reliability and performance pass. Major outcomes include stronger distributed-directory and membership behavior, new streaming and storage providers, hardened transactions and durable jobs, incremental source generation, safer JSON storage deserialization, and new application templates. Alongside these features and fixes, the release optimizes key runtime paths, comprehensively refreshes the docs, strengthens testing and CI, and updates dependencies and repository maintenance.
Compatibility notes
$typemetadata only for types permitted by Orleans' configured type filters and manifest. Existing wire data remains readable when its types are allowed;[GenerateSerializer]types and standard permitted BCL types continue to work without changes. If persisted, streamed, or transactional JSON contains other types, reads now fail with an actionableJsonSerializationException. Prefer registering those types throughTypeManifestOptions.AllowedTypes,[GenerateSerializer],ITypeNameFilter, orITypeFilter;OrleansJsonSerializerOptions.AllowAllTypes = truerestores the former permissive JSON behavior when a narrowly scoped allow-list is not practical.rpc.system.name; Orleans-specific service, target, and source metadata move toorleans.rpc.service,orleans.rpc.target_id, andorleans.rpc.source_id. The runtime-siderpc.methodvalue is now qualified as<interface>/<method>, and affectedActivitySourceversions are incremented. Update dashboards, alerts, collectors, and queries which depend on the legacyrpc.system,rpc.service,rpc.orleans.target_id, orrpc.orleans.source_idkeys or the previous method value.IConfigureGrainContextactions before grain construction, so constructors can observe fully configured context state. CustomIGrainContextActivatorimplementations must migrate fromCreateContext(GrainAddress)toCreateContext(GrainAddress, IConfigureGrainContext[])and apply the supplied configurators before constructing the grain. Stateless-worker configurators continue to apply to the outer stateless-worker context.Highlights
Runtime, clustering & resilience
Streaming
Storage, persistence, journaling, durable jobs & transactions
Providers & integrations
DbDataSourcesupport, and improved Azure, ZooKeeper, Redis, NATS, and relational-provider behavior extend and stabilize integrations (#8462, #8699, #10326, #10429, #10381, #10437, #10835, #10422, #10505, #10276).Serialization, code generation & analyzers
Developer experience, templates, samples & docs
... (truncated)
10.3.0-rc.1
What's Changed
... (truncated)
10.2.2
What's Changed
New Contributors
... (truncated)
10.2.2-rc.2
What's Changed
Full Changelog: dotnet/orleans@v10.2.2-rc.1...v10.2.2-rc.2
10.2.2-rc.1
What's Changed
New Contributors
Full Changelog: dotnet/orleans@v10.2.0...v10.2.2-rc.1
10.2.1
Reverts the message destination receiver cache changes from dotnet/orleans#10064 (commit: dotnet/orleans@d3c2af3)
Full Changelog: dotnet/orleans@v10.2.0...v10.2.1
Commits viewable in compare view.