github dotnet/orleans v9.2.0

latest release: v9.2.1
one month ago

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

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

  1. Default Placement Strategy Changed - ResourceOptimizedPlacement is now the default instead of RandomPlacement
  2. Adaptive Directory Caching Obsoleted (#9542) - This strategy has been deprecated and removed
  3. Increased Default Warning Times (#9398) - RequestProcessingWarningTime and RequestQueueDelayWarningTime have higher defaults
  4. Orleans.Core.Abstractions Nullability (#9583) - Nullable reference types enabled
  5. 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

New Contributors

Full Changelog: v9.1.2...v9.2.0

Don't miss a new orleans release

NewReleases is sending notifications on new releases.