Name | Modified | Size | Downloads / Week |
---|---|---|---|
Parent folder | |||
README.md | 2025-07-14 | 23.0 kB | |
v9.2.0 source code.tar.gz | 2025-07-14 | 2.7 MB | |
v9.2.0 source code.zip | 2025-07-14 | 4.4 MB | |
Totals: 3 Items | 7.1 MB | 0 |
Orleans v9.2.0 includes significant new features, performance improvements, and enhanced developer experience. This release introduces native .NET CancellationToken support, new storage providers, improved placement strategies, and numerous performance optimizations.
🚀 Major Features
CancellationToken Support (#9127)
Orleans now has full support for .NET's CancellationToken
in grain methods, aligning with standard .NET async patterns and making it easier to handle cancellation scenarios in your grain operations.
Log-structured Grain Storage (#9450)
A new high-performance storage provider that uses a log-structured approach for improved write performance and reduced storage overhead.
ADO.NET Grain Directory (#9263)
Introduces a database-backed grain directory implementation, providing an alternative to in-memory directory storage with support for various relational databases. This enables persistent grain location information across cluster restarts and supports larger clusters with reduced memory overhead.
Memory-based Activation Shedding (#9532, [#9577])
Automatic grain deactivation under memory pressure helps prevent out-of-memory conditions by intelligently shedding grain activations when memory usage is high.
Silo Metadata and Placement Filtering (#9271, [#9368], [#9380], [#9482])
Enhanced placement control allowing you to filter silo selection based on custom metadata, enabling more sophisticated deployment scenarios.
🎯 Placement and Load Balancing
- ResourceOptimizedPlacement as Default (#9533) - The default placement strategy is now
ResourceOptimizedPlacement
for better resource utilization - Fully Adaptive Stateless Worker (#9378) - Improved stateless grain scaling behavior
- Rebalancer-compatible Tolerance Rule (#9464, [#9467]) - Better compatibility with grain rebalancing
📍 Grain Directory Improvements
ADO.NET Grain Directory
The new ADO.NET Grain Directory (#9263) provides: - Persistent grain location storage - Grain locations survive cluster restarts - Reduced memory footprint - Offload directory data to database - Support for multiple database providers - Works with SQL Server, MySQL, PostgreSQL, and other ADO.NET compatible databases - Scalability - Better support for very large clusters
Directory Caching Changes
- Removed Adaptive Directory Caching (#9542) - The adaptive caching strategy has been obsoleted and removed. The standard caching mechanism provides better performance and consistency.
📊 Performance Improvements
- Replaced LRU with LRU based on BitFaster.Caching (#9530) - More efficient caching implementation
- Reduced log noise during debugging (#9397) - Cleaner debug experience
- Optimized Azure Storage operations (#9373, [#9420]) - Fewer exceptions and unnecessary IO
- Improved allocation patterns (#9570) - Better memory efficiency for cache invalidation
- IAsyncEnumerable improvements (#9366, [#9387], [#9359]) - Fixed cancellation propagation and bounded operation times
🔧 Storage and Persistence
Azure Storage
- DeleteStateOnClear option (#9393) - New option for Azure Table Storage provider
- IConfiguration support for Azure Cosmos DB (#9204) - Easier configuration
- IConfiguration support for Azure Redis Cache (#9395) - Simplified setup
- Cosmos DB optimizations (#9435) - Avoid unnecessary reads in ClearStateAsync
Other Storage Improvements
- Cassandra TTL behavior updates (#9371, [#9382]) - Better time-to-live handling
- DynamoDB TTL error handling (#9500, [#9588]) - Reduced unnecessary error logging
- Aligned grain storage provider behavior (#9417) - Consistent behavior across providers
🛡️ Reliability and Stability
- Fixed AsyncEnumerable cancellation semantics (#9359, [#9424]) - Aligns with .NET expectations
- Improved error handling in grain constructors (#9399) - Better diagnostics
- Fixed memory leaks (#9548) - Resolved RuntimeMessagingTrace leaking
- SystemTarget call cancellation (#9606) - Avoid attempting to cancel SystemTarget calls
- Activation collection overflow fix (#9504) - Prevents datetime overflow issues
🔍 Observability and Diagnostics
- Metric tags for storage instrumentation (#9595) - Better observability
- Detailed grain statistics filtering (#9527) - Filter GetDetailedGrainStatistics by type
- Extensive LoggerMessage adoption - Improved performance across all modules (#9352, [#9316], [#9423], [#9425], [#9431], [#9432], [#9434], [#9437], [#9440], [#9441], [#9451], [#9452], [#9455], [#9498], [#9540], [#9541], [#9544], [#9545], [#9563], [#9564], [#9565])
📝 Code Generation and Analyzers
- ExcludeFromCodeCoverageAttribute support (#9415) - Generated code excluded from coverage
- Extended ORLEANS0011 analyzer (#9447) - Check for reused type aliases
- Improved error reporting (#9520) - Better errors when generating serializers from reference assemblies
- ORLEANS0004 severity elevated to Error (#9576) - Stricter validation
- F# serialization improvements (#9582) - Better support for discriminated unions
🔄 Breaking Changes and Important Updates
- Default Placement Strategy Changed -
ResourceOptimizedPlacement
is now the default instead ofRandomPlacement
- Adaptive Directory Caching Obsoleted (#9542) - This strategy has been deprecated and removed
- Increased Default Warning Times (#9398) -
RequestProcessingWarningTime
andRequestQueueDelayWarningTime
have higher defaults - Orleans.Core.Abstractions Nullability (#9583) - Nullable reference types enabled
- Some Internal APIs Marked Internal (#9584) - AdoNetGrainDirectoryServiceCollectionExtensions and OrleansRelationalDownloadStream
🐛 Bug Fixes
- Fixed generic base codec resolution (#9358)
- Fixed NullReferenceException in PlacementWorker (#9386)
- Fixed activation disposal issues (#9390)
- Fixed flaky tests (#9396, [#9561])
- Fixed BufferSliceReaderInput with offset issues (#9593, [#9598])
- Fixed ObserverManager modification during enumeration (#8707)
- Fixed interleaving behavior symmetry (#9536)
📦 Dependencies and Infrastructure
- Removed unnecessary dependencies (#9476, [#9579]) - Microsoft.CSharp and System.Net.NameResolution
- Updated Azure SDK packages (#9453)
- Daily API reference file generation (#9422)
- NuGet package READMEs added (#9513)
- Updated xUnit version (#9466)
What's Changed
- Silo Metadata and Placement Filtering by @rkargMsft in https://github.com/dotnet/orleans/pull/9271
- Fix tests on GitHub Actions mac os agent by @ReubenBond in https://github.com/dotnet/orleans/pull/9362
- Fix generic base codec generic type parameter resolution by @willg1983 in https://github.com/dotnet/orleans/pull/9358
- Propagate IAsyncEnumerable exceptions correctly by @ReubenBond in https://github.com/dotnet/orleans/pull/9366
- [Placement Filtering] Adding missing generic constraint by @rkargMsft in https://github.com/dotnet/orleans/pull/9368
- Removing out-of-support Cassandra version from test matrix by @rkargMsft in https://github.com/dotnet/orleans/pull/9369
- Azure Table Storage: Use GetEntityIfExistsAsync to avoid exceptions for 404s by @ReubenBond in https://github.com/dotnet/orleans/pull/9373
- Update Cassandra TTL behavior by @dmorganMsft in https://github.com/dotnet/orleans/pull/9371
- [Cassandra] DefunctSiloCleanup - Specify datetime kind by @rkargMsft in https://github.com/dotnet/orleans/pull/9382
- Updating SiloMetadata caching by @rkargMsft in https://github.com/dotnet/orleans/pull/9380
- Fix a potential
NullReferenceException
inPlacementWorker
by @ledjon-behluli in https://github.com/dotnet/orleans/pull/9386 - PlacementService: Use GetAwaiter().GetResult() instead of .Result to avoid wrapping exception in AggregateException by @ReubenBond in https://github.com/dotnet/orleans/pull/9388
- ActivationData: Ensure all operations are disposed by @ReubenBond in https://github.com/dotnet/orleans/pull/9390
- IAsyncEnumerable: Fix cancellation propagation, bound operation times, use mark-and-sweep cleanup by @ReubenBond in https://github.com/dotnet/orleans/pull/9387
- Align AsyncEnumerable cancellation semantics to .NET expectations by @ReubenBond in https://github.com/dotnet/orleans/pull/9359
- Support for .NET CancellationTokens by @koenbeuk in https://github.com/dotnet/orleans/pull/9127
IConfiguration
support for Azure Cosmos DB Clustering Provider by @OmnipotentOwl in https://github.com/dotnet/orleans/pull/9204- Add IConfiguration support for Azure Redis Cache by @ReubenBond in https://github.com/dotnet/orleans/pull/9395
- Prefer const over readonly by @cybertyche in https://github.com/dotnet/orleans/pull/8533
- Fix flaky ActivationSched_SubTaskExecutionSequencing test by @ReubenBond in https://github.com/dotnet/orleans/pull/9396
- [Cassandra] Addressing contention on startup by @rkargMsft in https://github.com/dotnet/orleans/pull/9372
- Use LoggerMessageGenerator in Orleans.Core by @Meir017 in https://github.com/dotnet/orleans/pull/9352
- Fully Adaptive Stateless Worker by @ledjon-behluli in https://github.com/dotnet/orleans/pull/9378
- Bump dotnet-sdk from 8.0.405 to 8.0.406 by @dependabot[bot] in https://github.com/dotnet/orleans/pull/9346
- Increase default
RequestProcessingWarningTime
&RequestQueueDelayWarningTime
by @ReubenBond in https://github.com/dotnet/orleans/pull/9398 - [Membership] Addressing recovery from contention on membership writes by @rkargMsft in https://github.com/dotnet/orleans/pull/9376
- Reduce log noise during debugging by @ReubenBond in https://github.com/dotnet/orleans/pull/9397
- chore: add 3.x as a trigger for pipeline runs by @DeagleGross in https://github.com/dotnet/orleans/pull/9403
- [CodeGeneration] Pragma Restore CS1591 on the last namespace by @michaelmccord in https://github.com/dotnet/orleans/pull/9411
- feat(Clustering.Redis): Support customize Redis key generation by @RayMMond in https://github.com/dotnet/orleans/pull/9412
- Migrate to AwesomeAssertions by @danmoseley in https://github.com/dotnet/orleans/pull/9418
- CodeGenerator - Add the 'ExcludeFromCodeCoverageAttribute' to generat… by @yavari-alireza in https://github.com/dotnet/orleans/pull/9415
- Align behavior of grain storage providers when setting
IGrainState<T>
properties by @ReubenBond in https://github.com/dotnet/orleans/pull/9417 - Add additional context and logging when a grain constructor throws by @ReubenBond in https://github.com/dotnet/orleans/pull/9399
- Added DeleteStateOnClear option to AzureStorage persistence provider. by @dbinky in https://github.com/dotnet/orleans/pull/9393
- Avoid unnecessary IO & exception for trace log in AzureBlobStorage by @ReubenBond in https://github.com/dotnet/orleans/pull/9420
- Fix for CancelationToken cancel after finishing by @ColinBradley in https://github.com/dotnet/orleans/pull/9424
- chore(Orleans.Streaming): Use [LoggerMessage] by @Meir017 in https://github.com/dotnet/orleans/pull/9423
- chore(Orleans.Runtime): Use [LoggerMessage] by @Meir017 in https://github.com/dotnet/orleans/pull/9316
- chore(Orleans.Transactions): Use [LoggerMessage] by @Meir017 in https://github.com/dotnet/orleans/pull/9425
- Bump dotnet-sdk from 8.0.406 to 8.0.407 by @dependabot[bot] in https://github.com/dotnet/orleans/pull/9405
- Generate API reference files daily by @ReubenBond in https://github.com/dotnet/orleans/pull/9422
- Consolidate dependencies and registration of SystemTargets by @ReubenBond in https://github.com/dotnet/orleans/pull/9430
- chore(Orleans.Reminders): Use [LoggerMessage] by @Meir017 in https://github.com/dotnet/orleans/pull/9431
- chore(Orleans.Persistence.Memory): Use [LoggerMessage] by @Meir017 in https://github.com/dotnet/orleans/pull/9432
- chore(Orleans.Azure): Use [LoggerMessage] by @Meir017 in https://github.com/dotnet/orleans/pull/9434
- Azure Cosmos DB: Avoid ReadStateAsync in ClearStateAsync when etag is not set by @ReubenBond in https://github.com/dotnet/orleans/pull/9435
- chore(Orleans.Azure): Use [LoggerMessage] p2 by @Meir017 in https://github.com/dotnet/orleans/pull/9437
- Extend ORLEANS0011 to check for reused type aliases by @ledjon-behluli in https://github.com/dotnet/orleans/pull/9447
- chore(logging): Update LoggerMessage placeholders to use PascalCase everywhere by @Meir017 in https://github.com/dotnet/orleans/pull/9442
- chore(Orleans.Runtime): Use [LoggerMessage] p2 by @Meir017 in https://github.com/dotnet/orleans/pull/9441
- chore(Orleans.Redis): Use [LoggerMessage] by @Meir017 in https://github.com/dotnet/orleans/pull/9440
- chore(AdoNet): Use [LoggerMessage] by @Meir017 in https://github.com/dotnet/orleans/pull/9451
- chore(AWS): Use [LoggerMessage] by @Meir017 in https://github.com/dotnet/orleans/pull/9452
- [Feature] Log-structured grain storage by @ReubenBond in https://github.com/dotnet/orleans/pull/9450
- Bump dotnet-sdk from 8.0.407 to 8.0.408 by @dependabot[bot] in https://github.com/dotnet/orleans/pull/9439
- chore(misc): Use [LoggerMessage] by @Meir017 in https://github.com/dotnet/orleans/pull/9455
- Rebalancer-compatible Tolerance Rule by @ledjon-behluli in https://github.com/dotnet/orleans/pull/9464
- Add manual validation when NuGet publishing is enabled by @benjaminpetit in https://github.com/dotnet/orleans/pull/9461
- A basic test suite for orleans source generator by @Meir017 in https://github.com/dotnet/orleans/pull/9459
- [FIX] Rebalancer-compatible Tolerance Rule by @ledjon-behluli in https://github.com/dotnet/orleans/pull/9467
- tests(code-generator): add tests for more complex types by @Meir017 in https://github.com/dotnet/orleans/pull/9468
- Pass PlacementTarget into Filter method by @rkargMsft in https://github.com/dotnet/orleans/pull/9482
- fix: correct CI to run if no approval is required by @DeagleGross in https://github.com/dotnet/orleans/pull/9484
- fix(main): fix azure login error in ci by @DeagleGross in https://github.com/dotnet/orleans/pull/9487
- removed ReadOnly field in TransactionAttribute by @scalalang2 in https://github.com/dotnet/orleans/pull/9490
- Ensure
PerformUpdate
method should not be called within a read-only transaction by @scalalang2 in https://github.com/dotnet/orleans/pull/9492 - Remove unused Microsoft.CSharp dependency by @larsfjerm in https://github.com/dotnet/orleans/pull/9476
- feat: support serialization of
GrainId
asPropertyName
by @DeagleGross in https://github.com/dotnet/orleans/pull/9494 - Avoid potential
InvalidOperationException
inActivationData
when cancelling operations by @ledjon-behluli in https://github.com/dotnet/orleans/pull/9475 - Stop logging DynamoDB TTL error when its not necessary by @binginsin in https://github.com/dotnet/orleans/pull/9500
- fix(Orleans.Runtime): Avoid activation collection ticket datetime overflow by @richardkooiman in https://github.com/dotnet/orleans/pull/9504
- chore(Orleans.Runtime): Use [LoggerMessage] p3 by @Meir017 in https://github.com/dotnet/orleans/pull/9498
- Remove Microsoft.Orleans.Clustering.ServiceFabric from exception message by @ikkentim in https://github.com/dotnet/orleans/pull/9519
- Remove TypeNameHandling option in the serialization/deserialization of IConfiguration in TestingHost by @benjaminpetit in https://github.com/dotnet/orleans/pull/9516
- Add READMEs to NuGet packages by @Copilot in https://github.com/dotnet/orleans/pull/9513
- Report error when generating serializer for model from ref assembly by @DeagleGross in https://github.com/dotnet/orleans/pull/9520
- Create copilot-instructions by @DeagleGross in https://github.com/dotnet/orleans/pull/9523
- ADO.NET Grain Directory by @JorgeCandeias in https://github.com/dotnet/orleans/pull/9263
- Add type filtering to GetDetailedGrainStatistics by @belousovbb in https://github.com/dotnet/orleans/pull/9527
- Replace LRU with implementation based on BitFaster.Caching
ConcurrentLru
by @ReubenBond in https://github.com/dotnet/orleans/pull/9530 - IRehydrationContext.TryGetValue - Adding NotNullWhen attribute for out value by @ColinBradley in https://github.com/dotnet/orleans/pull/9495
- Added missing OrleansBuildTimeCodeGen project properties by @luukholleman in https://github.com/dotnet/orleans/pull/9496
- chore: update xUnit version by @Meir017 in https://github.com/dotnet/orleans/pull/9466
- Bump dotnet-sdk from 8.0.408 to 8.0.410 by @dependabot[bot] in https://github.com/dotnet/orleans/pull/9529
- Make interleaving behavior symmetric across call orders by @adityamandaleeka in https://github.com/dotnet/orleans/pull/9536
- Workaround dotnet/runtime#116180 by @ReubenBond in https://github.com/dotnet/orleans/pull/9538
- chore(Orleans.Core): Use [LoggerMessage] p2 by @Meir017 in https://github.com/dotnet/orleans/pull/9540
- chore(Orleans.Runtime): Use [LoggerMessage] p4 by @Meir017 in https://github.com/dotnet/orleans/pull/9541
- [Placement] Use
ResourceOptimizedPlacement
by default by @ReubenBond in https://github.com/dotnet/orleans/pull/9533 - Obsolete and remove adaptive directory caching strategy by @ReubenBond in https://github.com/dotnet/orleans/pull/9542
- Fix leaking
RuntimeMessagingTrace
by @ReubenBond in https://github.com/dotnet/orleans/pull/9548 - Bump nightly feed package version prefix to 9.2.0 by @ReubenBond in https://github.com/dotnet/orleans/pull/9549
- chore: Update to setup-dotnet v4 and use global.json for versioning by @Meir017 in https://github.com/dotnet/orleans/pull/9546
- tests(source-generator): additional tests for complex scenarios by @Meir017 in https://github.com/dotnet/orleans/pull/9470
- chore(Orleans.Core): Use [LoggerMessage] p3 by @Meir017 in https://github.com/dotnet/orleans/pull/9544
- chore(Orleans.Runtime): Use [LoggerMessage] p5 by @Meir017 in https://github.com/dotnet/orleans/pull/9545
- Yield in PrimaryLogViewAdaptor.PostOnDeactivate to allow pending work to complete by @ReubenBond in https://github.com/dotnet/orleans/pull/9562
- chore(Orleans.Streaming): Use [LoggerMessage] p2 by @Meir017 in https://github.com/dotnet/orleans/pull/9563
- chore(Orleans.Clustering): Use [LoggerMessage] by @Meir017 in https://github.com/dotnet/orleans/pull/9564
- Document all test classes and methods by @ReubenBond in https://github.com/dotnet/orleans/pull/9550
- chore(Orleans.Hosting.Kubernetes): Use [LoggerMessage] by @Meir017 in https://github.com/dotnet/orleans/pull/9565
- [Azure] Package version bumps by @jsquire in https://github.com/dotnet/orleans/pull/9453
- Memory pressure based activation shedding by @DeagleGross in https://github.com/dotnet/orleans/pull/9532
- Follow-up: memory-based activation shedding by @DeagleGross in https://github.com/dotnet/orleans/pull/9577
- Remove unnecessary reference to System.Net.NameResolution by @BMagerMT in https://github.com/dotnet/orleans/pull/9579
- Quarantine flaky tests identified in CI pipeline by @ReubenBond in https://github.com/dotnet/orleans/pull/9561
- ObserverManager: allow modification during enumeration by @ScarletKuro in https://github.com/dotnet/orleans/pull/8707
- Bump dotnet-sdk from 8.0.410 to 8.0.411 by @dependabot[bot] in https://github.com/dotnet/orleans/pull/9566
- Mark AdoNetGrainDirectoryServiceCollectionExtensions and OrleansRelationalDownloadStream internal by @ReubenBond in https://github.com/dotnet/orleans/pull/9584
- Remove faulty assert in AR worker by @ledjon-behluli in https://github.com/dotnet/orleans/pull/9585
- Enable nullability for Orleans.Core.Abstractions by @ReubenBond in https://github.com/dotnet/orleans/pull/9583
- Don't update DynamoDB Table TTL when AttributeName is the same by @binginsin in https://github.com/dotnet/orleans/pull/9588
- Fix BufferSliceReaderInput when Offset is over buffer.Length by @binginsin in https://github.com/dotnet/orleans/pull/9593
- F# serialization of DUs - more cases covered by @gfix in https://github.com/dotnet/orleans/pull/9582
- Fix NullReferenceException when Uninitialize by @jerviscui in https://github.com/dotnet/orleans/pull/9592
- Fix PooledBuffer MemoryEnumerator and SpanEnumerator when Offset is not in first segment by @ReubenBond in https://github.com/dotnet/orleans/pull/9598
- Improve the allocation pattern for CacheInvalidationHeaders by @Tragetaschen in https://github.com/dotnet/orleans/pull/9570
- Normalize
EnvironmentStatistics
and add assertions by @ReubenBond in https://github.com/dotnet/orleans/pull/9603 - chore(deps): bump dotnet-sdk from 8.0.411 to 8.0.412 by @dependabot[bot] in https://github.com/dotnet/orleans/pull/9602
- Adds metric tags to storage instrumentation by @cdemi in https://github.com/dotnet/orleans/pull/9595
- Fix
IGrainLocator
nullability by @ReubenBond in https://github.com/dotnet/orleans/pull/9604 - [Analyzers] Bump
ORLEANS0004
severity toError
by @ledjon-behluli in https://github.com/dotnet/orleans/pull/9576 - Improve support for serializing System.Text.Json types by @ReubenBond in https://github.com/dotnet/orleans/pull/9605
- Avoid attempting to cancel SystemTarget calls by @ReubenBond in https://github.com/dotnet/orleans/pull/9606
- Disable forced delays during silo shutdown by @ReubenBond in https://github.com/dotnet/orleans/pull/9607
New Contributors
- @OmnipotentOwl made their first contribution in https://github.com/dotnet/orleans/pull/9204
- @Meir017 made their first contribution in https://github.com/dotnet/orleans/pull/9352
- @RayMMond made their first contribution in https://github.com/dotnet/orleans/pull/9412
- @danmoseley made their first contribution in https://github.com/dotnet/orleans/pull/9418
- @yavari-alireza made their first contribution in https://github.com/dotnet/orleans/pull/9415
- @dbinky made their first contribution in https://github.com/dotnet/orleans/pull/9393
- @ColinBradley made their first contribution in https://github.com/dotnet/orleans/pull/9424
- @binginsin made their first contribution in https://github.com/dotnet/orleans/pull/9500
- @richardkooiman made their first contribution in https://github.com/dotnet/orleans/pull/9504
- @Copilot made their first contribution in https://github.com/dotnet/orleans/pull/9513
- @belousovbb made their first contribution in https://github.com/dotnet/orleans/pull/9527
- @luukholleman made their first contribution in https://github.com/dotnet/orleans/pull/9496
- @BMagerMT made their first contribution in https://github.com/dotnet/orleans/pull/9579
- @jerviscui made their first contribution in https://github.com/dotnet/orleans/pull/9592
- @Tragetaschen made their first contribution in https://github.com/dotnet/orleans/pull/9570
Full Changelog: https://github.com/dotnet/orleans/compare/v9.1.2...v9.2.0