Skip to content

Releases: dotnet/orleans

v9.2.1

16 Jul 22:07
32b75e3

Choose a tag to compare

What's Changed

  • Fix load score calculation in ResourceOptimizedPlacementDirector by @ReubenBond in #9611

Full Changelog: v9.2.0...v9.2.1

v9.2.0

14 Jul 17:29
65199ad

Choose a tag to compare

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

Read more

v9.2.0-preview3

11 Jun 14:41
4bc3b60

Choose a tag to compare

v9.2.0-preview3 Pre-release
Pre-release

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

04 Jun 18:34
3a50ce5

Choose a tag to compare

v9.2.0-preview2 Pre-release
Pre-release

What's Changed

New Contributors

Full Changelog: v9.2.0-preview1...v9.2.0-preview2

v9.2.0-preview1

04 Apr 22:39
3f74d5a

Choose a tag to compare

v9.2.0-preview1 Pre-release
Pre-release

What's Changed

New Contributors

Full Changelog: v9.1.2...v9.2.0-preview1

v9.1.2

13 Feb 17:55
6905fa9

Choose a tag to compare

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

11 Feb 16:27
7d14734

Choose a tag to compare

What's Changed

Full Changelog: v9.1.0...v9.1.1

v9.1.0

11 Feb 01:38
d2af146

Choose a tag to compare

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 in MessageFactory 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 for IAsyncObserver and IAsyncBatchObserver 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 to MaxJoinAttemptTime 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 in Catalog and MembershipGossiper 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

Full Changelog: v9.0.1...v9.1.0

v9.0.1

23 Nov 17:30
b21af24

Choose a tag to compare

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

14 Nov 19:07
cea079a

Choose a tag to compare

What's Changed since v8.2.0

New Contributors

Full Changelog: v8.2.0...v9.0.0