Releases: dotnet/orleans
v10.1.0
What's Changed
- Source link on dashboard to main orleans repo by @hendrikdevloed in #9911
- Fix flakiness in CallChainReentrancy_WithSuppression by @ReubenBond in #9913
- Fix IdSpan equality violation: Create("") and default now correctly unequal by @Copilot in #9902
- Additional tracing spans for activation, persistence, and migration by @rkargMsft in #9870
- Fix activation-count placement fallback for partial statistics by @ReubenBond in #9914
- Apply grains preferences on the server instead of the UI client by @miguelhasse in #9887
- Harden analyzer symbol handling by @Youssef1313 in #9666
- Fix flake in StuckGrainTest_StuckDetectionOnDeactivation by @ReubenBond in #9915
- chore(deps): bump dotnet-sdk from 10.0.102 to 10.0.103 by @dependabot[bot] in #9906
- Fix flaky Sched_Task_ClosureWorkItem_Wait scheduler test by @ReubenBond in #9916
- Fix flaky StuckGrain forwarding test by @ReubenBond in #9917
- Add ClearLogAsync method to JournaledGrain by @m3nax in #9849
- Add ADO.NET Persistence support for SQLite by @jeromeksi in #9846
- chore(deps-dev): bump js-yaml from 4.1.0 to 4.1.1 in /src/Dashboard/Orleans.Dashboard.App by @dependabot[bot] in #9778
- Fix Orleans.Serialization.Protobuf README to document Google.Protobuf instead of protobuf-net by @Copilot in #9779
- Removed unnecessary Task.Run in OnConnectionAsync methods by @desdesdes in #9650
- Fix flaky ResumeAfterSlowSubscriber on slow machines by @ReubenBond in #9918
- DeleteStateOnClear support for AdoNet storage provider by @modabas in #8535
- CodeGenerator: clean up attribute handling and remove obsolete custom-attribute build properties by @Youssef1313 in #9665
- Remove JSON format option from ADO.NET configuration docs by @alesma in #9836
- Add
ConfigureAwaitanalyzer for grain code (ORLEANS0014) by @ReubenBond in #9845 - Fix SQLite CI package resolution for net8/net10 by @ReubenBond in #9920
- Stabilize SingleWorkerInvocationUnderLoad test by @ReubenBond in #9919
- Add MemoryPack Serializer by @Drecik in #9838
- Migrates Consul tests to use Testcontainers by @Meir017 in #9707
- Start ActivationRebalancerMonitor without eagerly fetching a report by @ReubenBond in #9228
- Rename IDurableJobContext to IJobRunContext by @benjaminpetit in #9798
- chore: Using IMeterFactory for metrics - ApplicationRequestInstruments by @Meir017 in #9656
- Add
IServiceLifecycleinterface with lifecycle hooks for client and silo by @ledjon-behluli in #9792 - Fix flaky NonReentrantGrainTimer_NoKeepAlive_Test by @ReubenBond in #9925
- Enable polling for durable jobs by @benjaminpetit in #9802
- Implement poisoned shard detection and handling in AzureStorageJobShardManager by @benjaminpetit in #9907
- Flow CancellationToken through durable jobs tests by @Copilot in #9909
- Add loopback fallback when local IP discovery finds no candidates by @ReubenBond in #9926
- Fix flaky GrainTimer_Change timer assertion timing by @ReubenBond in #9928
- Make orphan-call transaction abort deterministic by @ReubenBond in #9930
- Fix flaky stuck-grain deactivation test on slow runners by @ReubenBond in #9931
- Upgrade centrally managed packages by @ReubenBond in #9929
- Fix dashboard log stream loading feedback when disabled by @miguelhasse in #9922
- Refactor ScheduleJobAsync to use ScheduleJobRequest struct by @Copilot in #9908
- Add concurrent job slow start for durable jobs by @benjaminpetit in #9910
- Enable crash dump collection for CI test runs by @ReubenBond in #9932
- feat: Dashboard support showing generic class names by @hendrikdevloed in #9924
- Use public ECR for Consul Testcontainers image by @ReubenBond in #9933
- Include known providers in error message when provider is not found by @Copilot in #9733
- Use System.Threading.Lock for .NET 9+ by @Copilot in #9892
- Fix flaky ObservableGrain_AsyncEnumerable_SlowConsumer test by @ReubenBond in #9935
- Stabilize flaky TimerOrleansTest_Basic by @ReubenBond in #9934
- Fix flaky stuck grain forwarding test by @ReubenBond in #9936
- Skip Consul tests when Docker daemon is unsupported by @ReubenBond in #9937
- Remove Azure Cloud Services hosting project by @ReubenBond in #9938
- Fix flakiness in Generic_ScheduleDelayedPingAndDeactivate by @ReubenBond in #9939
- Reorganize test projects for clarity and consistency by @ReubenBond in #9912
- Activation cancel logging cleanup by @rkargMsft in #9897
- Fix off-by-one and empty-buffer handling in PrefixingBufferWriter.GetSpan by @Copilot in #9941
- Fix persistent stream subscriber registration race by @ReubenBond in #9927
- Fix flaky NoReconnectionToGatewayNotReturnedByManager test by @ReubenBond in #9942
- StateMachineManager.WorkLoop: run on grain scheduler by @ReubenBond in #9947
- Downgrade "No callback for response message" from Warning to Debug in OutsideRuntimeClient by @Copilot in #9950
- Generational decay of anchored grains in LAR by @ledjon-behluli in #9944
- [Streaming] Provide a global stream sequence from NATS to StreamSequenceToken by @arogggh in #9969
- chore(deps): bump dotnet-sdk from 10.0.103 to 10.0.201 by @dependabot[bot] in #9966
- Enable nullable by @rkargMsft in #9841
- Filter allowed stream & broadcast channel predicates by @ReubenBond in #9968
- Deterministic Deactivation testing support by @rkargMsft in #9962
- Add IMembershipManager abstraction for external membership systems by @ReubenBond in #9960
- Implement slow-start budget for orphaned shard claims and enhance related logging by @benjaminpetit in #9943
- [Rebalancer] Avoid crashing silo startup by @ledjon-behluli in #9977
- Fix grains not recycling after cancelling DelayDeactivation by @Copilot in #9945
- [Membership] Ensure predecessors are killed early during startup by @ReubenBond in #9955
- Align all membership providers' CleanupDefunctSiloEntries to remove non-Active stale entries by @Copilot in #9972
- Fix CodeQL workflow failing on merge_group events due to ephemeral ref upload error by @Copilot in #9980
- Fix Consul tests failing with unhandled DockerApiException on registry rate limit by @Copilot in #9981
- Azure Blob storage: pooled reads, streaming serializer, buffered writes by @egil in #9879
- Fix flaky MergeGrainResolverWithClientRefreshTests on macOS CI by @Copilot in #9982
- [Automated] Update API Surface Area by @github-actions[bot] in #9631
- Add DiagnosticSource event definitions for Orleans runtime observability by @ReubenBond in #9983
- Use TimeProvider in Reminders, AsyncTimer, Streams by @ReubenBond in #9984
- Add an option to exclusively lock Transactional State by @scalalang2 in #9970
- Reduce nondeterminism in reminder tests by @ReubenBond in #9989
- Reduce nondeterminism in broadcast channel tests by @ReubenBond in #9991
- Reduce nondeterminism in streaming tests by @ReubenBond in #9990
- Fix reminder churn test determinism by @ReubenB...
v10.0.1
What's Changed
- Fix DynamoDB ExclusiveStartKey handling for AWS SDK v4 by @ReubenBond in #9884
PooledBuffercleanup by @pentp in #9871- Fix stale link in README.md by @ofek in #9889
- Fix incorrect API name in dashboard documentation: AddOrleansDashboard → AddDashboard by @Copilot in #9894
New Contributors
Full Changelog: v10.0.0...v10.0.1
v10.0.0
Orleans version 10 multi-targets .NET 8.0 and .NET 10.0
What's Changed
- Fixed
provider_type_namestorage instrumentation metric tag by @cdemi in #9615 - chore: Updates .NET SDK to version 9.0.303 by @Meir017 in #9620
- [Automated] Update API Surface Area by @github-actions[bot] in #9436
- [Journaling] Avoid increase version after recovery for
DurableStateby @ledjon-behluli in #9628 - [Journaling] Align status serialization for both read and write in
DurableTaskCompletionSourceby @ledjon-behluli in #9626 - chore: migrate to SLNX by @Meir017 in #9622
- [Journaling] Thread-safety issue during recovery by @ledjon-behluli in #9624
- Introducing NATS stream provider by @galvesribeiro in #9379
- Fix test runs by @benjaminpetit in #9648
- Use PME service connection for signing by @benjaminpetit in #9654
- [FIX] Dispose
StatelessWorkerGrainContextwhen it contains no more workers by @ledjon-behluli in #9636 - Fix Azure journaling package name by @benjaminpetit in #9660
- Move nuget publishing to the 'nightly' build pipeline by @benjaminpetit in #9661
- Fix table creation logging to reflect existing tables correctly by @egil in #9696
- Fix ZooKeeper CI tests: correct service name and use official Docker image by @Copilot in #9699
- Fix Consul CI tests by using compatible Consul version by @Copilot in #9701
- Remove explicit ActivityStatusCode.Ok setting to comply with OpenTelemetry specification by @Copilot in #9703
- chore(deps): bump dotnet-sdk from 9.0.303 to 9.0.305 by @dependabot[bot] in #9677
- Fix race condition in TransactionInfo.Fork PendingCalls increment by @bknote71 in #9702
- [FIX] Potential NRE in the activation repartitioner by @ledjon-behluli in #9713
- Remove infinite timespan reminder checks by @Da-Teach in #9715
- ResponseCompletionSource: RunContinuationsAsynchronously by @ReubenBond in #9724
- chore(deps): bump dotnet-sdk from 9.0.305 to 9.0.306 by @dependabot[bot] in #9720
- Add BigInteger codec by @galvesribeiro in #9669
- StateMachineManager: start work loop during activation by @ReubenBond in #9725
- Flag Postgresql as asynchronous by @hiyelbaz in #9705
- Enable GitHub merge queue by @ReubenBond in #9727
- Add missing validation for the NATS stream provider by @galvesribeiro in #9668
ActivationDataActivatorProvider: run grain constructor on grain scheduler by @ReubenBond in #9726- Modifying Endpoint to use Pascale Casing as EndPoint for consistency by @ramzimort in #9671
- [Journaling] Auto-retire & purge state machines by @ledjon-behluli in #9684
- fix concurrency issues in
ActivationCollectorby @DeagleGross in #9740 - Enhance Copilot instructions with build, test, and repository guidance by @Copilot in #9747
- Durable Jobs (aka Reminders v2) by @benjaminpetit in #9717
- Fix PooledBufferStream.Reset() to reset Position property by @Copilot in #9744
- Add package README for Orleans.Streaming.NATS by @Copilot in #9745
- replace dead link with app service / container apps / fabric docs by @scott-the-programmer in #9760
LocalScheduledJobManager: avoid overlapping calls toPeriodicTimer.WaitForNextTickAsync, handle exceptions during shutdown. by @ReubenBond in #9761- Initiate migration before
IGrainManagementExtension.MigrateOnIdlecompletes by @ReubenBond in #9758 - Attempt to fix flaky test, StatelessWorkerActivationsPerSiloDoNotExceedMaxLocalWorkersCount by @ReubenBond in #9759
- Update devcontainer by @ReubenBond in #9741
- Deprecate IStartupTask and AddStartupTask with warnings by @Copilot in #9763
- Rename ScheduledJobs to DurableJobs by @benjaminpetit in #9753
- Disable AzDO dependabot by @mmitche in #9774
- Disallow creating a grain activation before a silo is active by @ReubenBond in #9612
- Do not allocate new buffer if the current buffer is sufficient by @willseward in #9775
- docs(comment): fix typo in XML documentation comment by @sean-krail in #9783
- LocalhostClusterTest: order lifecycle for smoother runs by @ReubenBond in #9785
- mTLS: Flow SNI
HostName, addNegotiatedCipherSuiteby @ReubenBond in #9788 ActivityPropagationGrainCallFilter: minor cleanup by @ReubenBond in #9789- Revert "Deprecate IStartupTask and AddStartupTask with warnings" by @ReubenBond in #9784
- [Breaking Change] ADO.NET providers: replace obsolete System.Data.SqlClient with Microsoft.Data.SqlClient by @ReubenBond in #9787
- Mark
OrleansConstructorAttributeas obsolete by @ReubenBond in #9790 - Activation migration: Improve resilience to faulty
IGrainMigrationParticipantimplementations by @ReubenBond in #9786 - Execute silo lifecycle on default scheduler by @Copilot in #9770
- Upgrade to .NET 10.0.100 SDK and upgrade packages by @ReubenBond in #9764
- Improve cancellation for
IAsyncEnumerable<T>requests by @ReubenBond in #9630 - Use IOverloadDetector in ShardExecutor by @benjaminpetit in #9799
- Add ILocalActivationStatusChecker by @ReubenBond in #9800
- Add comment in AcceptMigratingGrains by @ReubenBond in #9801
- Add Microsoft.Extensions.Configuration and .NET Aspire documentation to Redis packages by @Meir017 in #9649
- Match the benchmark file names with the class names by @jerviscui in #9633
- Add Node.js to Azure DevOps build pipeline by @ReubenBond in #9811
- Configure NPM authentication for Azure DevOps feed by @ReubenBond in #9812
- [Dashboard] Use public Azure DevOps NPM feed by @ReubenBond in #9813
- Protect CacheInvalidationHeader from concurrent access by @ReubenBond in #9809
- [Tests] Improve reliability of
ActivationTaskSchedulertests by @ReubenBond in #9810 - [Tests] Add cancellation to CallChainReentrancy_WithSuppression by @ReubenBond in #9814
- Remove redundant options logging in Azure storage providers by @Copilot in #9807
- [Tests] Fix racy condition in MembershipAgentTests by @ReubenBond in #9816
- Mark [Unordered] as [Obsolete] by @Copilot in #9815
- Raise analysis level and bump major version by @ReubenBond in #9818
- Add
CancelUnknownRequestOnStatusUpdateoption, defaultCancelRequestOnTimeouttofalseby @ReubenBond in #9831 - Add
CancellationToken&[AlwaysInterleave]support for grain observers by @ReubenBond in #9834 - Add
CancellationTokensupport for system targets by @ReubenBond in #9837 - Run Azure Event Hubs tests via GitHub Actions by @ReubenBond in #9843
- Include additional Azure Event Hubs Tests in GitHub Actions run by @ReubenBond in #9844
- [AzureBlobGrainStorage] Avoid throwing InconsistentStateException when container is missing by @ayoub-aalilija in #9842
- Add regression test for Azure Blob storage with custom IBlobContainerFactory by @ayoub-aalilija in #9847
- [CI] Add version suffix parameter to nightly-main.yml by @ReubenBond in #9858
- Derive filtered available mem from the filtered mem usage by @ledjon-behluli in #9857
- Fix packaging of dashboard in CI and add additional tests by @ReubenBond in ...
v10.0.0-rc.2
What's Changed
- Fixed
provider_type_namestorage instrumentation metric tag by @cdemi in #9615 - chore: Updates .NET SDK to version 9.0.303 by @Meir017 in #9620
- [Automated] Update API Surface Area by @github-actions[bot] in #9436
- [Journaling] Avoid increase version after recovery for
DurableStateby @ledjon-behluli in #9628 - [Journaling] Align status serialization for both read and write in
DurableTaskCompletionSourceby @ledjon-behluli in #9626 - chore: migrate to SLNX by @Meir017 in #9622
- [Journaling] Thread-safety issue during recovery by @ledjon-behluli in #9624
- Introducing NATS stream provider by @galvesribeiro in #9379
- Fix test runs by @benjaminpetit in #9648
- Use PME service connection for signing by @benjaminpetit in #9654
- [FIX] Dispose
StatelessWorkerGrainContextwhen it contains no more workers by @ledjon-behluli in #9636 - Fix Azure journaling package name by @benjaminpetit in #9660
- Move nuget publishing to the 'nightly' build pipeline by @benjaminpetit in #9661
- Fix table creation logging to reflect existing tables correctly by @egil in #9696
- Fix ZooKeeper CI tests: correct service name and use official Docker image by @Copilot in #9699
- Fix Consul CI tests by using compatible Consul version by @Copilot in #9701
- Remove explicit ActivityStatusCode.Ok setting to comply with OpenTelemetry specification by @Copilot in #9703
- chore(deps): bump dotnet-sdk from 9.0.303 to 9.0.305 by @dependabot[bot] in #9677
- Fix race condition in TransactionInfo.Fork PendingCalls increment by @bknote71 in #9702
- [FIX] Potential NRE in the activation repartitioner by @ledjon-behluli in #9713
- Remove infinite timespan reminder checks by @Da-Teach in #9715
- ResponseCompletionSource: RunContinuationsAsynchronously by @ReubenBond in #9724
- chore(deps): bump dotnet-sdk from 9.0.305 to 9.0.306 by @dependabot[bot] in #9720
- Add BigInteger codec by @galvesribeiro in #9669
- StateMachineManager: start work loop during activation by @ReubenBond in #9725
- Flag Postgresql as asynchronous by @hiyelbaz in #9705
- Enable GitHub merge queue by @ReubenBond in #9727
- Add missing validation for the NATS stream provider by @galvesribeiro in #9668
ActivationDataActivatorProvider: run grain constructor on grain scheduler by @ReubenBond in #9726- Modifying Endpoint to use Pascale Casing as EndPoint for consistency by @ramzimort in #9671
- [Journaling] Auto-retire & purge state machines by @ledjon-behluli in #9684
- fix concurrency issues in
ActivationCollectorby @DeagleGross in #9740 - Enhance Copilot instructions with build, test, and repository guidance by @Copilot in #9747
- Durable Jobs (aka Reminders v2) by @benjaminpetit in #9717
- Fix PooledBufferStream.Reset() to reset Position property by @Copilot in #9744
- Add package README for Orleans.Streaming.NATS by @Copilot in #9745
- replace dead link with app service / container apps / fabric docs by @scott-the-programmer in #9760
LocalScheduledJobManager: avoid overlapping calls toPeriodicTimer.WaitForNextTickAsync, handle exceptions during shutdown. by @ReubenBond in #9761- Initiate migration before
IGrainManagementExtension.MigrateOnIdlecompletes by @ReubenBond in #9758 - Attempt to fix flaky test, StatelessWorkerActivationsPerSiloDoNotExceedMaxLocalWorkersCount by @ReubenBond in #9759
- Update devcontainer by @ReubenBond in #9741
- Deprecate IStartupTask and AddStartupTask with warnings by @Copilot in #9763
- Rename ScheduledJobs to DurableJobs by @benjaminpetit in #9753
- Disable AzDO dependabot by @mmitche in #9774
- Disallow creating a grain activation before a silo is active by @ReubenBond in #9612
- Do not allocate new buffer if the current buffer is sufficient by @willseward in #9775
- docs(comment): fix typo in XML documentation comment by @sean-krail in #9783
- LocalhostClusterTest: order lifecycle for smoother runs by @ReubenBond in #9785
- mTLS: Flow SNI
HostName, addNegotiatedCipherSuiteby @ReubenBond in #9788 ActivityPropagationGrainCallFilter: minor cleanup by @ReubenBond in #9789- Revert "Deprecate IStartupTask and AddStartupTask with warnings" by @ReubenBond in #9784
- [Breaking Change] ADO.NET providers: replace obsolete System.Data.SqlClient with Microsoft.Data.SqlClient by @ReubenBond in #9787
- Mark
OrleansConstructorAttributeas obsolete by @ReubenBond in #9790 - Activation migration: Improve resilience to faulty
IGrainMigrationParticipantimplementations by @ReubenBond in #9786 - Execute silo lifecycle on default scheduler by @Copilot in #9770
- Upgrade to .NET 10.0.100 SDK and upgrade packages by @ReubenBond in #9764
- Improve cancellation for
IAsyncEnumerable<T>requests by @ReubenBond in #9630 - Use IOverloadDetector in ShardExecutor by @benjaminpetit in #9799
- Add ILocalActivationStatusChecker by @ReubenBond in #9800
- Add comment in AcceptMigratingGrains by @ReubenBond in #9801
- Add Microsoft.Extensions.Configuration and .NET Aspire documentation to Redis packages by @Meir017 in #9649
- Match the benchmark file names with the class names by @jerviscui in #9633
- Add Node.js to Azure DevOps build pipeline by @ReubenBond in #9811
- Configure NPM authentication for Azure DevOps feed by @ReubenBond in #9812
- [Dashboard] Use public Azure DevOps NPM feed by @ReubenBond in #9813
- Protect CacheInvalidationHeader from concurrent access by @ReubenBond in #9809
- [Tests] Improve reliability of
ActivationTaskSchedulertests by @ReubenBond in #9810 - [Tests] Add cancellation to CallChainReentrancy_WithSuppression by @ReubenBond in #9814
- Remove redundant options logging in Azure storage providers by @Copilot in #9807
- [Tests] Fix racy condition in MembershipAgentTests by @ReubenBond in #9816
- Mark [Unordered] as [Obsolete] by @Copilot in #9815
- Raise analysis level and bump major version by @ReubenBond in #9818
- Add
CancelUnknownRequestOnStatusUpdateoption, defaultCancelRequestOnTimeouttofalseby @ReubenBond in #9831 - Add
CancellationToken&[AlwaysInterleave]support for grain observers by @ReubenBond in #9834 - Add
CancellationTokensupport for system targets by @ReubenBond in #9837 - Run Azure Event Hubs tests via GitHub Actions by @ReubenBond in #9843
- Include additional Azure Event Hubs Tests in GitHub Actions run by @ReubenBond in #9844
- [AzureBlobGrainStorage] Avoid throwing InconsistentStateException when container is missing by @ayoub-aalilija in #9842
- Add regression test for Azure Blob storage with custom IBlobContainerFactory by @ayoub-aalilija in #9847
- [CI] Add version suffix parameter to nightly-main.yml by @ReubenBond in #9858
- Derive filtered available mem from the filtered mem usage by @ledjon-behluli in #9857
- Fix packaging of dashboard in CI and add additional tests by @ReubenBond in #9859
- Assign `MinId...
v9.2.1
What's Changed
- Fix load score calculation in
ResourceOptimizedPlacementDirectorby @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
ResourceOptimizedPlacementfor 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 -
ResourceOptimizedPlacementis now the default instead ofRandomPlacement - Adaptive Directory Caching Obsoleted (#9542) - This strategy has been deprecated and removed
- Increased Default Warning Times (#9398) -
RequestProcessingWarningTimeandRequestQueueDelayWarningTimehave 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
NullReferenceExceptioninPlacementWorkerby @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
IConfigurationsupport 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&RequestQueueDelayWarningTimeby @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
ResourceOptimizedPlacementby default by @ReubenBond in #9533 - Obsolete and remove adaptive directory caching strategy by @ReubenBond in #9542
- Fix leaking
RuntimeMessagingTraceby @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
PerformUpdatemethod 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
GrainIdasPropertyNameby @DeagleGross in #9494 - Avoid potential
InvalidOperationExceptioninActivationDatawhen 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
ConcurrentLruby @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
v3.8.0
What's Changed
- [3.x] Implement
CleanupDefunctSiloEntriesfor ZooKeeper clustring by @EugeneKrapivin in #9236 - chore: refactor and fix 3.x CI pipeline by @DeagleGross in #9401
- feat: Orleans 3.x Migration Tooling by @DeagleGross in #9351
- fix(3.x): source link translation visualstudio.com to dev.azure.com by @DeagleGross in #9413
- fix(3.x): provide a strict version for SourceLink packages by @DeagleGross in #9414
- [3.x] Port Azure Storage persistence provider improvements from #9417 & #9165 by @ReubenBond in #9419
- [3.x] turn on packaging for Orleans.Persistence.Cosmos by @DeagleGross in #9427
- fix(3x): fix reminders usage by @DeagleGross in #9428
- feat(3.x): support multiple underlying storage registrations by @DeagleGross in #9454
- chore(3.x): add dataMigrator operation rate limiter & test fixes by @DeagleGross in #9458
- [3.x] [Membership] Limit
ValidateInitialConnectivitytoMaxJoinAttemptTime(#9312) by @ReubenBond in #9473 - [3.x] Enable lifeguard improvements by default (#7580) by @ReubenBond in #9474
- chore: prepare 3.x for release with migration tooling by @DeagleGross in #9478
Full Changelog: v3.7.2...v3.8.0
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
NullReferenceExceptioninPlacementWorkerby @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
IConfigurationsupport 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&RequestQueueDelayWarningTimeby @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