Releases: dotnet/orleans
v9.2.1
What's Changed
- Fix load score calculation in
ResourceOptimizedPlacementDirector
by @ReubenBond in #9611
Full Changelog: v9.2.0...v9.2.1
v9.2.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.
The following is an AI-authored summary of the changes, with a full list of PRs at the bottom.
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 #9271
- Fix tests on GitHub Actions mac os agent by @ReubenBond in #9362
- Fix generic base codec generic type parameter resolution by @willg1983 in #9358
- Propagate IAsyncEnumerable exceptions correctly by @ReubenBond in #9366
- [Placement Filtering] Adding missing generic constraint by @rkargMsft in #9368
- Removing out-of-support Cassandra version from test matrix by @rkargMsft in #9369
- Azure Table Storage: Use GetEntityIfExistsAsync to avoid exceptions for 404s by @ReubenBond in #9373
- Update Cassandra TTL behavior by @dmorganMsft in #9371
- [Cassandra] DefunctSiloCleanup - Specify datetime kind by @rkargMsft in #9382
- Updating SiloMetadata caching by @rkargMsft in #9380
- Fix a potential
NullReferenceException
inPlacementWorker
by @ledjon-behluli in #9386 - PlacementService: Use GetAwaiter().GetResult() instead of .Result to avoid wrapping exception in AggregateException by @ReubenBond in #9388
- ActivationData: Ensure all operations are disposed by @ReubenBond in #9390
- IAsyncEnumerable: Fix cancellation propagation, bound operation times, use mark-and-sweep cleanup by @ReubenBond in #9387
- Align AsyncEnumerable cancellation semantics to .NET expectations by @ReubenBond in #9359
- Support for .NET CancellationTokens by @koenbeuk in #9127
IConfiguration
support for Azure Cosmos DB Clustering Provider by @OmnipotentOwl in #9204- Add IConfiguration support for Azure Redis Cache by @ReubenBond in #9395
- Prefer const over readonly by @cybertyche in #8533
- Fix flaky ActivationSched_SubTaskExecutionSequencing test by @ReubenBond in #9396
- [Cassandra] Addressing contention on startup by @rkargMsft in #9372
- Use LoggerMessageGenerator in Orleans.Core by @Meir017 in #9352
- Fully Adaptive Stateless Worker by @ledjon-behluli in #9378
- Bump dotnet-sdk from 8.0.405 to 8.0.406 by @dependabot[bot] in #9346
- Increase default
RequestProcessingWarningTime
&RequestQueueDelayWarningTime
by @ReubenBond in #9398 - [Membership] Addressing recovery from contention on membership writes by @rkargMsft in #9376
- Reduce log noise during debugging by @ReubenBond in #9397
- chore: add 3.x as a trigger for pipeline runs by @DeagleGross in #9403
- [CodeGeneration] Pragma Restore CS1591 on the last namespace by @michaelmc...
v9.2.0-preview3
What's Changed
- chore(Orleans.Core): Use [LoggerMessage] p2 by @Meir017 in #9540
- chore(Orleans.Runtime): Use [LoggerMessage] p4 by @Meir017 in #9541
- [Placement] Use
ResourceOptimizedPlacement
by default by @ReubenBond in #9533 - Obsolete and remove adaptive directory caching strategy by @ReubenBond in #9542
- Fix leaking
RuntimeMessagingTrace
by @ReubenBond in #9548 - Bump nightly feed package version prefix to 9.2.0 by @ReubenBond in #9549
- chore: Update to setup-dotnet v4 and use global.json for versioning by @Meir017 in #9546
- tests(source-generator): additional tests for complex scenarios by @Meir017 in #9470
Full Changelog: v9.2.0-preview2...v9.2.0-preview3
v9.2.0-preview2
What's Changed
- Fix for CancelationToken cancel after finishing by @ColinBradley in #9424
- chore(Orleans.Streaming): Use [LoggerMessage] by @Meir017 in #9423
- chore(Orleans.Runtime): Use [LoggerMessage] by @Meir017 in #9316
- chore(Orleans.Transactions): Use [LoggerMessage] by @Meir017 in #9425
- Bump dotnet-sdk from 8.0.406 to 8.0.407 by @dependabot in #9405
- Generate API reference files daily by @ReubenBond in #9422
- Consolidate dependencies and registration of SystemTargets by @ReubenBond in #9430
- chore(Orleans.Reminders): Use [LoggerMessage] by @Meir017 in #9431
- chore(Orleans.Persistence.Memory): Use [LoggerMessage] by @Meir017 in #9432
- chore(Orleans.Azure): Use [LoggerMessage] by @Meir017 in #9434
- Azure Cosmos DB: Avoid ReadStateAsync in ClearStateAsync when etag is not set by @ReubenBond in #9435
- chore(Orleans.Azure): Use [LoggerMessage] p2 by @Meir017 in #9437
- Extend ORLEANS0011 to check for reused type aliases by @ledjon-behluli in #9447
- chore(logging): Update LoggerMessage placeholders to use PascalCase everywhere by @Meir017 in #9442
- chore(Orleans.Runtime): Use [LoggerMessage] p2 by @Meir017 in #9441
- chore(Orleans.Redis): Use [LoggerMessage] by @Meir017 in #9440
- chore(AdoNet): Use [LoggerMessage] by @Meir017 in #9451
- chore(AWS): Use [LoggerMessage] by @Meir017 in #9452
- [Feature] Log-structured grain storage by @ReubenBond in #9450
- Bump dotnet-sdk from 8.0.407 to 8.0.408 by @dependabot in #9439
- chore(misc): Use [LoggerMessage] by @Meir017 in #9455
- Rebalancer-compatible Tolerance Rule by @ledjon-behluli in #9464
- Add manual validation when NuGet publishing is enabled by @benjaminpetit in #9461
- A basic test suite for orleans source generator by @Meir017 in #9459
- [FIX] Rebalancer-compatible Tolerance Rule by @ledjon-behluli in #9467
- tests(code-generator): add tests for more complex types by @Meir017 in #9468
- Pass PlacementTarget into Filter method by @rkargMsft in #9482
- fix: correct CI to run if no approval is required by @DeagleGross in #9484
- fix(main): fix azure login error in ci by @DeagleGross in #9487
- removed ReadOnly field in TransactionAttribute by @scalalang2 in #9490
- Ensure
PerformUpdate
method should not be called within a read-only transaction by @scalalang2 in #9492 - Remove unused Microsoft.CSharp dependency by @larsfjerm in #9476
- feat: support serialization of
GrainId
asPropertyName
by @DeagleGross in #9494 - Avoid potential
InvalidOperationException
inActivationData
when cancelling operations by @ledjon-behluli in #9475 - Stop logging DynamoDB TTL error when its not necessary by @binginsin in #9500
- fix(Orleans.Runtime): Avoid activation collection ticket datetime overflow by @richardkooiman in #9504
- chore(Orleans.Runtime): Use [LoggerMessage] p3 by @Meir017 in #9498
- Remove Microsoft.Orleans.Clustering.ServiceFabric from exception message by @ikkentim in #9519
- Remove TypeNameHandling option in the serialization/deserialization of IConfiguration in TestingHost by @benjaminpetit in #9516
- Add READMEs to NuGet packages by @copilot-swe-agent in #9513
- Report error when generating serializer for model from ref assembly by @DeagleGross in #9520
- Create copilot-instructions by @DeagleGross in #9523
- ADO.NET Grain Directory by @JorgeCandeias in #9263
- Add type filtering to GetDetailedGrainStatistics by @belousovbb in #9527
- Replace LRU with implementation based on BitFaster.Caching
ConcurrentLru
by @ReubenBond in #9530 - IRehydrationContext.TryGetValue - Adding NotNullWhen attribute for out value by @ColinBradley in #9495
- Added missing OrleansBuildTimeCodeGen project properties by @luukholleman in #9496
- chore: update xUnit version by @Meir017 in #9466
- Bump dotnet-sdk from 8.0.408 to 8.0.410 by @dependabot in #9529
- Make interleaving behavior symmetric across call orders by @adityamandaleeka in #9536
- Workaround dotnet/runtime#116180 by @ReubenBond in #9538
New Contributors
- @ColinBradley made their first contribution in #9424
- @binginsin made their first contribution in #9500
- @richardkooiman made their first contribution in #9504
- @copilot-swe-agent made their first contribution in #9513
- @belousovbb made their first contribution in #9527
- @luukholleman made their first contribution in #9496
Full Changelog: v9.2.0-preview1...v9.2.0-preview2
v9.2.0-preview1
What's Changed
- Silo Metadata and Placement Filtering by @rkargMsft in #9271
- Fix tests on GitHub Actions mac os agent by @ReubenBond in #9362
- Fix generic base codec generic type parameter resolution by @willg1983 in #9358
- Propagate IAsyncEnumerable exceptions correctly by @ReubenBond in #9366
- [Placement Filtering] Adding missing generic constraint by @rkargMsft in #9368
- Removing out-of-support Cassandra version from test matrix by @rkargMsft in #9369
- Azure Table Storage: Use GetEntityIfExistsAsync to avoid exceptions for 404s by @ReubenBond in #9373
- Update Cassandra TTL behavior by @dmorganMsft in #9371
- [Cassandra] DefunctSiloCleanup - Specify datetime kind by @rkargMsft in #9382
- Updating SiloMetadata caching by @rkargMsft in #9380
- Fix a potential
NullReferenceException
inPlacementWorker
by @ledjon-behluli in #9386 - PlacementService: Use GetAwaiter().GetResult() instead of .Result to avoid wrapping exception in AggregateException by @ReubenBond in #9388
- ActivationData: Ensure all operations are disposed by @ReubenBond in #9390
- IAsyncEnumerable: Fix cancellation propagation, bound operation times, use mark-and-sweep cleanup by @ReubenBond in #9387
- Align AsyncEnumerable cancellation semantics to .NET expectations by @ReubenBond in #9359
- Support for .NET CancellationTokens by @koenbeuk in #9127
IConfiguration
support for Azure Cosmos DB Clustering Provider by @OmnipotentOwl in #9204- Add IConfiguration support for Azure Redis Cache by @ReubenBond in #9395
- Prefer const over readonly by @cybertyche in #8533
- Fix flaky ActivationSched_SubTaskExecutionSequencing test by @ReubenBond in #9396
- [Cassandra] Addressing contention on startup by @rkargMsft in #9372
- Use LoggerMessageGenerator in Orleans.Core by @Meir017 in #9352
- Fully Adaptive Stateless Worker by @ledjon-behluli in #9378
- Bump dotnet-sdk from 8.0.405 to 8.0.406 by @dependabot in #9346
- Increase default
RequestProcessingWarningTime
&RequestQueueDelayWarningTime
by @ReubenBond in #9398 - [Membership] Addressing recovery from contention on membership writes by @rkargMsft in #9376
- Reduce log noise during debugging by @ReubenBond in #9397
- chore: add 3.x as a trigger for pipeline runs by @DeagleGross in #9403
- [CodeGeneration] Pragma Restore CS1591 on the last namespace by @michaelmccord in #9411
- feat(Clustering.Redis): Support customize Redis key generation by @RayMMond in #9412
- Migrate to AwesomeAssertions by @danmoseley in #9418
- CodeGenerator - Add the 'ExcludeFromCodeCoverageAttribute' to generat… by @yavari-alireza in #9415
- Align behavior of grain storage providers when setting
IGrainState<T>
properties by @ReubenBond in #9417 - Add additional context and logging when a grain constructor throws by @ReubenBond in #9399
- Added DeleteStateOnClear option to AzureStorage persistence provider. by @dbinky in #9393
- Avoid unnecessary IO & exception for trace log in AzureBlobStorage by @ReubenBond in #9420
New Contributors
- @OmnipotentOwl made their first contribution in #9204
- @Meir017 made their first contribution in #9352
- @RayMMond made their first contribution in #9412
- @danmoseley made their first contribution in #9418
- @yavari-alireza made their first contribution in #9415
- @dbinky made their first contribution in #9393
Full Changelog: v9.1.2...v9.2.0-preview1
v9.1.2
What's Changed
- [Test] Skip flaky Rem_Azure_Basic test by @ReubenBond in #9345
- Use UTC DateTime instead of DateTimeOffset in IAmAliveTime comparison by @ReubenBond in #9341
- ADO.NET: Treat DateTime values as UTC by @ReubenBond in #9342
- Provide more descriptive error messages in
RuntimeTypeNameParser
by @ReubenBond in #9343 - Remove restriction limiting reminders to a maximum of 49 days by @willg1983 in #9319
- Do not set cached hash code from GetConsistentHashCode(int) by @ReubenBond in #9349
Full Changelog: v9.1.1...v9.1.2
v9.1.1
What's Changed
- Fix packaging of Microsoft.Orleans.Sdk (#9338) by @ReubenBond in #9339
Full Changelog: v9.1.0...v9.1.1
v9.1.0
What's Changed
- Add dependabot configuration for .NET SDK updates by @JamieMagee in #9249
- Ignore semver major dotnet sdk updates by @JamieMagee in #9252
- Add optional default TTL to Cassandra clustering by @dmorganMsft in #9221
- Correcting exception message by @rkargMsft in #9262
- Use Activator.CreateInstance in CosmosGrainStorage when record does not exist by @egil in #9277
- Explicitly target net8.0 for tests by @rkargMsft in #9278
- Disable warning in TestClusterHostFactory by @benjaminpetit in #9284
- Reference analyzers & code generator from all packages by @ReubenBond in #9294
- Bump dotnet-sdk from 8.0.101 to 8.0.405 by @dependabot in #9283
- Fix
CorrelationId
generation inMessageFactory
by @ReubenBond in #9300 - Ensure that exceptions propagated to Connection's Initialized task is observed by @d-jagoda in #9280
- Add optional Methods w/ CancellationToken to IStorage by @Chris-Eckhardt in #9279
- Route client observer messages through the local gateway when possible by @fanxiao92 in #9310
- [Membership] Preserve latest IAmAliveTime across updates by @ReubenBond in #9303
- [Membership] Monitor all stale silos by @ReubenBond in #9304
- [Membership] When indirect probe fails, include intermediary's vote in suspecter list by @ReubenBond in #9302
- [Membership] Use an expander graph to improve eviction speed when multiple hosts fail simultaneously by @ReubenBond in #9301
- [Membership] Reduce default 'stale' silo detection time from 10min to 90s by @ReubenBond in #9305
- Improve
CancellationTokenSource
hygiene and use preferred LINQ & StringBuilder methods by @ivanvyd in #9080 - [Membership] Monitor 10 silos by default instead of 3 by @ReubenBond in #9306
- [Membership] Ignore stale silos when calculating vote count requirements by @ReubenBond in #9307
- Add Microsoft.Extensions.Configuration provider for azure queue streaming by @tskimmett in #8929
- Use AssemblyLoadContext consistently when loading referenced assemblies by @ReubenBond in #8492
- Add default
OnCompletedAsync
implementations forIAsyncObserver
andIAsyncBatchObserver
by @bluexo in #8783 - Add static modifier to members when possible, private and internal only (no public API change) by @cybertyche in #8534
- [Membership] Limit
ValidateInitialConnectivity
toMaxJoinAttemptTime
by @ReubenBond in #9312 - Enable MerlinBot autobaselining for GitHub by @ReubenBond in #9313
- Additional logic for Silo Cleanup test by @rkargMsft in #9314
- [Samples] Link to F# Grain Service sample by @HamzaFarooq95 in #9315
- [Test] Fix URI passed to Azure Queue Streaming tests by @ReubenBond in #9317
- Suppress status updates for local-only messages by @ReubenBond in #9321
- Fix Azure Queue Streaming IConfiguration provider by @ReubenBond in #9320
- PersistentStreamPullingAgent: suppress execution context in message pump by @ReubenBond in #9322
- Fix skipping in AQStreamingTests by @ReubenBond in #9325
- [Test] Fix AQStreamingTests cleanup by @ReubenBond in #9327
- Terminate ClusterManifestProvider quickly during shutdown by @ReubenBond in #9329
- Flow CancellationToken more appropriately in lifecycle by @ReubenBond in #9330
- Improve graceful shutdown of ClientDirectory by @ReubenBond in #9333
- Avoid accessing
IServiceProvider
after disposal inCatalog
andMembershipGossiper
by @ReubenBond in #9334 - [Membership] Ignore stale silos when picking a probing intermediary by @ReubenBond in #9335
- Enable GitHub Actions test logger by @ReubenBond in #9331
- Fix skipping events on resume handshake by @benjaminpetit in #9336
New Contributors
- @JamieMagee made their first contribution in #9249
- @dmorganMsft made their first contribution in #9221
- @egil made their first contribution in #9277
- @dependabot made their first contribution in #9283
- @d-jagoda made their first contribution in #9280
- @fanxiao92 made their first contribution in #9310
- @ivanvyd made their first contribution in #9080
- @tskimmett made their first contribution in #8929
- @HamzaFarooq95 made their first contribution in #9315
Full Changelog: v9.0.1...v9.1.0
v9.0.1
What's Changed
- Change EventCounterIntervalSec to 1 sec to fix issue caused in dotnet-counters by @ntovas in #9235
- Downgrade dependencies to .NET 8.0 group by @ReubenBond in #9246
Full Changelog: v9.0.0...v9.0.1
v9.0.0
What's Changed since v8.2.0
- Switch to pre-built Cassandra Docker image by @rkargMsft in #9076
- Update build for dnceng by @benjaminpetit in #9086
- Enable nightly on dnceng by @benjaminpetit in #9091
- Set GDN_SUPPRESS_FORKED_BUILD_WARNING to true by @benjaminpetit in #9088
- F#: Fixing code generation for enum style discriminated unions and for discriminated unions with 4 of more cases by @gfix in #9095
- Update nightly feed to point to dnceng by @ReubenBond in #9098
- Bump Aspire and Azure.Core versions by @adityamandaleeka in #9099
- Update Azure nuget packages by @benjaminpetit in #9089
- Throw exception on null/empty/whitespace key for
IGrainWithStringKey
by @ledjon-behluli in #9111 - Fix potential
ArgumentOutOfRangeException
inLeaseBasedQueueBalancer
by @ledjon-behluli in #9112 - Clustering: ensure snapshots are globally uniform by @ReubenBond in #9115
- Fix race condition in PersistentStreamPullingAgent by @benjaminpetit in #9109
- Allow deactivation to be triggered during activation, clean up deactivation flow by @ReubenBond in #9116
- Support triggering migration during deactivation by @ReubenBond in #9117
- Replace custom task extensions with built-in counterparts by @ReubenBond in #9118
- Simplify Silo lifecycle logic by @ReubenBond in #9120
- InMemoryTransportConnection: graceful tear down by @ReubenBond in #9122
- Add BitArray serialization codec by @ReubenBond in #9121
- Fix NRE in SiloControl introduced by #9120 by @ReubenBond in #9123
- Avoid mutating
IPEndPoint
inRedisGatewayListProvider
by @ReubenBond in #9146 - Update documentation in IReminderTable by @rubenwe in #9132
- When not being to find a gateway, changed error to warning closes 9133 by @rbuergi in #9134
- Add IClusterConnectionStatusObserver support by @galvesribeiro in #9145
- Revert "Add IClusterConnectionStatusObserver support" until InProcessTestCluster is merged by @ReubenBond in #9157
- Add in-process test cluster by @ReubenBond in #9148
- Client connection status observer by @galvesribeiro in #9158
- Avoid exceptions accessing nonexistent etags in RedisGrainStorage by @hendrikdevloed in #9147
- Fix support for externally declared records by @kzu in #9104
- Support MessagePack union types by @wassim-k in #9151
- Allow empty IdSpan by @ReubenBond in #9175
- Log argument types instead of values by @ReubenBond in #9176
- Upgrade MicroBuild task by @ReubenBond in #9173
- Fix JSON serialization of
GrainReference
s with null or emptyGrainInterfaceType
by @ReubenBond in #9178 - [Cassandra] Safer consistency settings by @rkargMsft in #9171
- Azure DevOps: upload logs, blame/crash dumps, and publish to nuget by @ReubenBond in #9181
- Auto-generated baselines by 1ES Pipeline Templates by @dotnet-policy-service in #9183
- Strong consistency, distributed, in-memory grain directory by @ReubenBond in #9103
- Remove chatty trace logging from transaction tests by @ReubenBond in #9187
- Gracefully dispose IAsyncEnumerable requests by @ReubenBond in #9186
- Activation Rebalancing by @ledjon-behluli in #9140
- Fix stateless worker race condition causing activation directory leak by @EdeMeijer in #9190
- Ignore 404 when deleting defunct K8S pod by @tomachristian in #9194
- Do not override
SendingSilo
when sending messages to clients by @ReubenBond in #9189 - Improve timely shutdown of directory partitions when snapshot transfer has been abandoned by @ReubenBond in #9197
- Enable TSA upload by @wtgodbe in #9210
- Correctly route undeserializable response messages from external clients by @ReubenBond in #9212
- Dispose
ClientClusterManifestProvider
whenOutsideRuntimeClient
is stopping by @ledjon-behluli in #9211 - Update distributed tests to use AAD auth by @benjaminpetit in #9207
- Implement IBaseCodec on CollectionCodec by @Chris-Eckhardt in #9209
- Randomize CorrelationId generation per host by @ReubenBond in #9213
- Evict silos from cluster if they remain in the Joining or Created state for longer than MaxJoinAttemptTime by @Chris-Eckhardt in #9201
- Describe the design of the grain directory by @ReubenBond in #9223
- Enable to activate Grain after clearing its state by @scalalang2 in #9165
- Makes
ImmovableAttribute
configurable by @ledjon-behluli in #9205 - ADO.NET
IHashPicker
customization API + Orleans v3-compatibleIHashPicker
implementation by @vladislav-prishchepa in #9217 - Reduce log noise and improve formatting by @ReubenBond in #9227
- Improve ActivationMigrationManager shutdown resilience and responsiveness by @ReubenBond in #9229
- CI: Use correct variable syntax for Azure DevOps by @ReubenBond in #9230
- Update for .NET 9.0 by @ReubenBond in #9232
New Contributors
- @rubenwe made their first contribution in #9132
- @rbuergi made their first contribution in #9134
- @hendrikdevloed made their first contribution in #9147
- @kzu made their first contribution in #9104
- @wassim-k made their first contribution in #9151
- @tomachristian made their first contribution in #9194
- @wtgodbe made their first contribution in #9210
- @Chris-Eckhardt made their first contribution in #9209
- @scalalang2 made their first contribution in #9165
- @vladislav-prishchepa made their first contribution in #9217
Full Changelog: v8.2.0...v9.0.0