Releases: dotnet/orleans
v8.2.0-preview1
What's Changed
- Fix potential grain timer deadlock during disposal by @ReubenBond in #8950
- Add missing description node to XML docs by @scottaddie in #8959
- Clean up
SafeTimer
usage, replace withPeriodicTimer
where possible by @ReubenBond in #8953 - Fix capitalization of 'MachineName' structured logging parameter by @ReubenBond in #8980
- Ensure PeriodicTimer period >= 1ms by @ReubenBond in #8981
- Ensure reminder table is initialized before access by @ReubenBond in #8982
- Update Npgsql by @ReubenBond in #8994
- Fix serialization of types inheriting from
Dictionary<K,V>
which add values in their constructor by @ReubenBond in #8993 - Prevent generated types from appearing in IDE by @ReubenBond in #8987
- Use dotnet-public instead of nuget.org by @benjaminpetit in #8931
- Add Orleans.Runtime to implicit usings by @ReubenBond in #8996
- Stop watchdog when container is disposed by @ReubenBond in #8998
- Stop silo on Dispose by @ReubenBond in #9000
- Dispose all activations when host is disposed by @ReubenBond in #9001
- Dispose cluster & silo health monitors are disposed when host is disposed, and clean up code by @ReubenBond in #8999
- Unsubscribe
ConsistentRingProvider
&VirtualBucketsRingProvider
fromISiloStatusOracle
on shutdown by @ReubenBond in #8997 - Avoid unnecessary
Interlocked.Or
inSingleWaiterAutoResetEvent
by @ReubenBond in #9003 - test(codegen): add derived from list by @claylaut in #8858
- Add serialization support for types derived from
List<T>
andHashSet<T>
by @ReubenBond in #9005 - Use
PeriodicTimer
instead ofGrainTimer
inLeaseBasedQueueBalancer
by @ReubenBond in #9002 - Updatable grain timers by @ReubenBond in #8954
- Fix streaming config validator registration by @benjaminpetit in #8876
- Update samples README.md to point to samples repo & explorer by @ReubenBond in #9010
- [CodeGen] Always specify grain extension interface for grain extension calls by @ReubenBond in #9009
- Fix silo shutdown logging when silo is already shutting down. by @ReubenBond in #9013
- Fix perf of PooledBufferTests by @ReubenBond in #9015
- Fix termination condition in ActivationMigrationManager.AcceptMigratingGrains by @ReubenBond in #9017
- Improve
ActivationData
shutdown process by @ReubenBond in #9018 - Exclude explicitly implemented interface methods from proxy by @alrz in #8992
- Consider interface method accessibility when generating the invoker by @alrz in #9019
New Contributors
- @scottaddie made their first contribution in #8959
- @alrz made their first contribution in #8992
Full Changelog: v8.1.0...v8.2.0-preview1
v3.7.2
What's Changed
- [3.x] Fix directory/cache validation for defunct silos by @ReubenBond in #8498
- [3.x] Fix potential grain timer deadlock during disposal by @ReubenBond in #8949
- [3.x] Ensure reminder service is initialized before access by @ReubenBond in #8983
Full Changelog: v3.7.1...v3.7.2
v8.1.0
New features
Integration with Aspire
This release includes initial integration with .NET Aspire, allowing you to configure an Orleans cluster in your Aspire app host, specifying the resources the cluster uses. For example, you can specify that an Azure Table will be used for cluster membership, an Azure Redis resource will be used for the grain directory, and an Azure Blob Storage resource will be used to store grain state. The integration currently supports Redis and Azure Table & Blob storage resources. Support for other resources will be added later.
In the app host project, an Orleans cluster can be declared using the AddOrleans
method, and then configured with clustering, grain storage, grain directory, and other providers using methods on the returned builder:
var storage = builder.AddAzureStorage("storage");
var clusteringTable = storage.AddTables("clustering");
var defaultStorage = storage.AddBlobs("grainstate");
var cartStorage = builder.AddRedis("redis-cart");
var orleans = builder.AddOrleans("my-app")
.WithClustering(clusteringTable)
.WithGrainStorage("Default", grainStorage)
.WithGrainStorage("cart", cartStorage);
// Add a server project (also called "silo")
builder.AddProject<Projects.OrleansServer>("silo")
.WithReference(orleans);
// Add a project with a reference to the Orleans client
builder.AddProject<Projects.FrontEnd>("frontend")
.WithReference(orleans);
In the client and server projects, add Orleans to the host builder as usual.
// For an Orleans server:
builder.UseOrleans();
// Or, for an Orleans client:
builder.UseOrleansClient();
Orleans will read configuration created by your Aspire app host project and configure the providers specified therein. To allow Orleans to access the configured resources, add them as keyed services using the corresponding Aspire component:
builder.AddKeyedAzureTableService("clustering");
builder.AddKeyedAzureBlobService("grainstate");
builder.AddKeyedRedis("redis-cart");
Resource-optimized placement
Resource-optimized placement, enabled via the [ResourceOptimizedPlacement]
attribute on a grain class, balances grains across hosts based on available memory and CPU usage. For more details, see the PR: #8815.
What's Changed
Since 8.1.0-preview3
- Migrate to build template by @benjaminpetit in #8905
- Remove mention of build.sh from README.md by @ardrabczyk in #8901
- Fix build template for nightly by @benjaminpetit in #8909
- Add mirror pipeline by @benjaminpetit in #8918
- Fix nightly nuget publishing by @benjaminpetit in #8919
- Fix mirror pipeline by @benjaminpetit in #8923
- Do not trigger mirror for PR by @benjaminpetit in #8924
- Enable TCP keep-alive on all sockets by default by @ReubenBond in #8927
- Fix typos in SQSStorage.cs by @Malpp in #8933
- Add more tests for [Alias("x")] attribute by @ReubenBond in #8926
- Update Azure.Identity by @ReubenBond in #8942
- Serialization doc fixes, add missing tests, fix PooledBufferCodec by @ReubenBond in #8943
- Fix some reference documentation warnings by @ReubenBond in #8941
- Always read grain state during activation if it has not been rehydrated by @ReubenBond in #8944
Additional changes since 8.0.0
- Clean up WorkItemGroup and ActivationTaskScheduler logic by @ReubenBond in #8865
- Orleans is now officially supported by Microsoft by @ReubenBond in #8882
- Avoid over-counting stateless worker activations by @ReubenBond in #8886
- Move
ResourceOptimizedPlacementOptions
toOrleans.Configuration
by @ledjon-behluli in #8892 - Guard against null grain context in test code by @ReubenBond in #8897
- Use GrainDirectoryCacheFactory to construct a IGrainDirectoryCache by @Mostafa-Goher in #8844
- Ensure
StatelessWorkerAttribute.MaxLocal
property is accounted for by @ReubenBond in #8885 - Make EventHub tests more reliable by @benjaminpetit in #8889
- Fix
PooledBuffer
serialization by @ReubenBond in #8852 - Prepare the FabricBot config for migration to Policy Service by @jeffhandley in #8855
- Address IDE0038. Use pattern matching. by @IEvangelist in #8619
- Always reset
RuntimeContext
to previous value after use by @ReubenBond in #8864 - Distributed Tracing: Use recommended conventions by @ReubenBond in #8856
- FabricBot: Onboarding to GitOps.ResourceManagement because of FabricBot decommissioning by @dotnet-policy-service in #8869
- Clarify [AlwaysInterleave] interleaves with anything, including itself by @ReubenBond in #8804
- Adds
LinearBackoffClientConnectionRetryFilter
in the default client services by @ledjon-behluli in #8793 - Microsoft.Extensions.Configuration support by @ReubenBond in #8764
- Avoid constant try/catch on a non-existing gateway for external cluster client by @ledjon-behluli in #8792
- Add Analyzer and CodeFix for duplicate method aliases (ORLEANS0011) by @ledjon-behluli in #8662
- Adds code fixer for: Report error on duplicate [Id(x)] (ORLEANS0012) by @ledjon-behluli in #8808
- Make repeatable the execution of SQLServer Ado scripts without errors by @m3nax in #8799
GenerateAliasAttribtuesAnalyzer
needs to account for file-scoped namespaces by @ledjon-behluli in #8809- Add nightly feed publishing by @ReubenBond in #8810
- Update README.md to include new nightly build feed details by @ReubenBond in #8814
- Resource optimized placement strategy by @ledjon-behluli in #8815
- Upgrade
System.Data.SqlClient
by @ledjon-behluli in #8821 - Provide cross-platform environment statistics collection + Modify
OverloadDetector
to account for memory too by @ledjon-behluli in #8820 - Centralize environment statistics filtering by @ledjon-behluli in #8827
- Add support for enabling distributed tracing via configuration switch by @ReubenBond in #8829
- Add default Redis options when Redis is configured via keyed service by @ReubenBond in #8847
- Fix insert condition check in
RedisMembershipTable
by @ReubenBond in #8848 - Downgrade Microsoft.CodeAnalyis to v4.5.0 by @ReubenBond in #8849
New Contributors
- @ardrabczyk made their first contribution in #8901
- @Malpp made their first contribution in #8933
- @Mostafa-Goher made their first contribution in #8844
- @dotnet-policy-service made their first contribution in #8869
- @m3nax made their first contribution in #8799
Full Changelog: v8.0.0...v8.1.0
v7.2.6
What's Changed
- Fix StatelessWorker MaxLocal for Orleans 7.x by @isaachili in #8887
- [7.x] Avoid over-counting stateless worker activations (#8886) by @ReubenBond in #8890
- [7.x] Use GrainDirectoryCacheFactory to construct a IGrainDirectoryCache (#8844) by @ReubenBond in #8898
New Contributors
- @isaachili made their first contribution in #8887
Full Changelog: v7.2.5...v7.2.6
v8.1.0-preview3
What's Changed
- Clean up WorkItemGroup and ActivationTaskScheduler logic by @ReubenBond in #8865
- Orleans is now officially supported by Microsoft by @ReubenBond in #8882
- Avoid over-counting stateless worker activations by @ReubenBond in #8886
- Move
ResourceOptimizedPlacementOptions
toOrleans.Configuration
by @ledjon-behluli in #8892 - Guard against null grain context in test code by @ReubenBond in #8897
- Use GrainDirectoryCacheFactory to construct a IGrainDirectoryCache by @Mostafa-Goher in #8844
- Ensure
StatelessWorkerAttribute.MaxLocal
property is accounted for by @ReubenBond in #8885 - Make EventHub tests more reliable by @benjaminpetit in #8889
New Contributors
- @Mostafa-Goher made their first contribution in #8844
Full Changelog: v8.1.0-preview2...v8.1.0-preview3
v8.1.0-preview2
What's Changed
- Fix
PooledBuffer
serialization by @ReubenBond in #8852 - Prepare the FabricBot config for migration to Policy Service by @jeffhandley in #8855
- Address IDE0038. Use pattern matching. by @IEvangelist in #8619
- Always reset
RuntimeContext
to previous value after use by @ReubenBond in #8864 - Distributed Tracing: Use recommended conventions by @ReubenBond in #8856
- FabricBot: Onboarding to GitOps.ResourceManagement because of FabricBot decommissioning by @dotnet-policy-service in #8869
New Contributors
- @dotnet-policy-service made their first contribution in #8869
Full Changelog: v8.1.0-preview1...v8.1.0-preview2
v7.2.5
What's Changed
- Avoid resending unchanged ClusterManifest to clients by @ReubenBond in #8772
- Fix
PooledBuffer
serialization & initialize ActivationMigrationManager on startup by @ReubenBond in #8861 - Always reset RuntimeContext to previous value after use (#8864) by @ReubenBond in #8870
Full Changelog: v7.2.4...v7.2.5
v8.1.0-preview1
New features
Integration with Aspire
This release includes initial integration with Aspire Preview 3 and later, allowing you to configure an Orleans cluster in your Aspire app host, specifying the resources the cluster uses. For example, you can specify that an Azure Table will be used for cluster membership, an Azure Redis resource will be used for the grain directory, and an Azure Blob Storage resource will be used to store grain state. The integration currently support Redis and Azure Table & Blob storage resources. Support for other resources will be added later.
In the app host project, an Orleans cluster can be declared using the AddOrleans
method, and then configured with clustering, grain storage, grain directory, and other providers using methods on the returned builder:
var storage = builder.AddAzureStorage("storage");
var clusteringTable = storage.AddTables("clustering");
var defaultStorage = storage.AddBlobs("grainstate");
var cartStorage = builder.AddRedis("redis-cart");
var orleans = builder.AddOrleans("my-app")
.WithClustering(clusteringTable)
.WithGrainStorage("Default", grainStorage)
.WithGrainStorage("cart", cartStorage);
// Add a server project (also called "silo")
builder.AddProject<Projects.OrleansServer>("silo")
.WithReference(orleans);
// Add a project with a reference to the Orleans client
builder.AddProject<Projects.FrontEnd>("frontend")
.WithReference(orleans);
In the client and server projects, add Orleans to the host builder as usual.
// For an Orleans server:
builder.UseOrleans();
// Or, for an Orleans client:
builder.UseOrleansClient();
Orleans will read configuration created by your Aspire app host project and configure the providers specified therein. To allow Orleans to access the configured resources, add them as keyed services using the corresponding Aspire component:
builder.AddKeyedAzureTableService("clustering");
builder.AddKeyedAzureBlobService("grainstate");
builder.AddKeyedRedis("redis-cart");
Resource-optimized placement
Resource-optimized placement, enabled via the [ResourceOptimizedPlacement]
attribute on a grain class, balances grains across hosts based on available memory and CPU usage. For more details, see the PR: #8815.
What's Changed
- Clarify [AlwaysInterleave] interleaves with anything, including itself by @ReubenBond in #8804
- Adds
LinearBackoffClientConnectionRetryFilter
in the default client services by @ledjon-behluli in #8793 - Microsoft.Extensions.Configuration support by @ReubenBond in #8764
- Avoid constant try/catch on a non-existing gateway for external cluster client by @ledjon-behluli in #8792
- Add Analyzer and CodeFix for duplicate method aliases (ORLEANS0011) by @ledjon-behluli in #8662
- Adds code fixer for: Report error on duplicate [Id(x)] (ORLEANS0012) by @ledjon-behluli in #8808
- Make repeatable the execution of SQLServer Ado scripts without errors by @m3nax in #8799
GenerateAliasAttribtuesAnalyzer
needs to account for file-scoped namespaces by @ledjon-behluli in #8809- Add nightly feed publishing by @ReubenBond in #8810
- Update README.md to include new nightly build feed details by @ReubenBond in #8814
- Resource optimized placement strategy by @ledjon-behluli in #8815
- Upgrade
System.Data.SqlClient
by @ledjon-behluli in #8821 - Provide cross-platform environment statistics collection + Modify
OverloadDetector
to account for memory too by @ledjon-behluli in #8820 - Centralize environment statistics filtering by @ledjon-behluli in #8827
- Add support for enabling distributed tracing via configuration switch by @ReubenBond in #8829
- Add default Redis options when Redis is configured via keyed service by @ReubenBond in #8847
- Fix insert condition check in
RedisMembershipTable
by @ReubenBond in #8848 - Downgrade Microsoft.CodeAnalyis to v4.5.0 by @ReubenBond in #8849
New Contributors
Full Changelog: v8.0.0...v8.1.0-preview1
v8.0.0
What's Changed Since v7.0.0
- Fix version suffix in build.yaml by @benjaminpetit in #8113
- Exclude samples folder from PR trigger by @benjaminpetit in #8118
- Upgrading 'Hello World' sample by @IEvangelist in #8116
- Upgrade 'Bank Account' sample by @IEvangelist in #8119
- Enable 3.x scheduled builds by @benjaminpetit in #8005
- Upgraded 'Adventure' samples by @IEvangelist in #8120
- Upgrade 'Blazor Server' sample by @IEvangelist in #8121
- Upgrade 'Blazor Wasm' sample by @IEvangelist in #8122
- Upgrade 'F# Hello World' sample by @IEvangelist in #8129
- Upgrade 'VB Hello World' sample by @IEvangelist in #8137
- Upgrade 'Tic Tac Toe' sample by @IEvangelist in #8135
- Upgrade 'TLS' sample by @IEvangelist in #8136
- Fix a typo by @m-sadegh-sh in #8143
- Add MembershipVersion to GrainDirectoryEntity by @benjaminpetit in #8151
- Fix configuration of BroadcastChannel by @benjaminpetit in #8150
- Fix a typo by @m-sadegh-sh in #8144
- Guard and check for GenerateCodeForDeclaringAssembly when type has no declaring assembly by @ReubenBond in #8156
- Fix packaging of CodeGenerator to accept project properties by @ReubenBond in #8155
- Upgrade 'Streaming' samples by @IEvangelist in #8134
- Upgrade 'Chat Room' sample by @IEvangelist in #8126
- Upgrade 'Stocks' sample by @IEvangelist in #8133
- Upgrade 'Shopping Cart' sample by @IEvangelist in #8132
- Upgrade 'GPS Tracker' sample by @IEvangelist in #8130
- Use code generated or compiled regular expressions where possible by @SukharevAndrey in #8141
- Upgrade 'Chirper' sample by @IEvangelist in #8128
- Upgrade 'Presence' sample by @IEvangelist in #8131
- [main] Add CodeQL3000 tasks by @dougbu in #8160
- Fix the bug in the Chirper sample code by @IEvangelist in #8194
- Delete empty statements as they are treated as errors by some analyzers by @SukharevAndrey in #8192
- Upgrade 'Voting' sample by @IEvangelist in #8138
- Delete samples and update README.md by @IEvangelist in #8154
- Use NuGet Central Package Management to handle dependencies' versions by @SukharevAndrey in #8191
- Optimize message serialization by @pentp in #8185
- Add TransactionFaultInjectionTests to Functional runs by @ReubenBond in #8168
- Fix images, use raw URLs from dependent repo by @IEvangelist in #8202
- Fix mariadb tests by @benjaminpetit in #8198
- Bumped KubernetesClient to v9.0.38 by @EPinci in #8199
- Optimize static codec serialization by @pentp in #8206
- Update
EndpointOptions
by @IEvangelist in #8209 - Update BroadcastChannelProvider.cs by @IEvangelist in #8225
- Remove default parameter values for
AddJsonSerializer
by @ReubenBond in #8228 - Incorporate Orleans.Redis providers by @EPinci in #8212
- Fix diagnostic for invalid grain method return types by @ReubenBond in #8234
- Add
Collection<T>
serialization codec by @ReubenBond in #8238 - Fixed bug where RedisGrainStorage would ignore GrainStorageSerializer option by @willg1983 in #8260
- correct code documentation which incorrectly refers to azure blob storage by @willg1983 in #8258
- Support
IGrainStorageSerializer
for memory grain storage by @shoneefd in #8250 - netstandard 2.1 support for Orleans.Serialization by @jsteinich in #8222
- Various improvements to Redis providers by @ReubenBond in #8261
- Add Redis storage tests based on CommonStorageTests by @willg1983 in #8265
- [Maintenance] Bumping version of some external dependencies by @EPinci in #8272
- Always run scheduled build by @benjaminpetit in #8294
- Fix serialization for records which have no properties of their own by @ReubenBond in #8289
- Expose activation working set as a metric by @ahydrax in #8291
- Implement
DeleteStateOnClear
for Redis grain storage. by @ReubenBond in #8296 - Fix
PooledArrayBufferWriter.AsMemory
by @ReubenBond in #8300 - Fix
IGrainFactory.GetGrain<T>
for unimplemented generic interfaces by @ReubenBond in #8301 - Report GC pause duration when heartbeat is stalled by @adityamandaleeka in #8281
- Set VersionPrefix in nuget pack step by @benjaminpetit in #8304
- Fix Issue #8325 redis options-validators unable to resolve options by @zeinali0 in #8326
- Fix Benchmark map Reduce by @byzworld in #8332
- Improve doc comments for ITypeFilter and ITypeNameFilter by @ReubenBond in #8328
- Improve accuracy and stability of
ActivationWorkingSet
by @ReubenBond in #8321 - Update Orleans.Reminders.csproj by @IEvangelist in #8342
- Fix type parsing of type names with generic array parameter by @ReubenBond in #8337
- Fix assembly name sanitization in code generator by @ReubenBond in #8336
- Update Protobuf Serializer by @larsfjerm in #8334
- Fix for Issue #8322 Questionable test/cast pair in OrleansJsonSerializer.cs by @Jens-G in #8329
- Adds support to Orleans.Analyzers for generic attributes by @michaelmccord in #8352
- Remove inaccurate note on observer method return types by @ReubenBond in #8344
- Prevent analyzer exception on aliased attribute names by @tboby in #8355
- ObserverManager: Guard against
null
in constructor by @bradygaster in #8358 - Allows System Target's to receive one way messages by @jsteinich in #8364
- Migrate from
FormatterServices
toRuntimeHelpers
in preparation for .NET 8 by @ReubenBond in #8362 - Don't overstep on IMessage serialization by @jsteinich in #8363
- Fix type constraints on
DefaultOptionsFormatter
andDefaultOptionsFormatterResolver
by @ReubenBond in #8384 - Code generator respects scoped usage by language version by @jsteinich in #8370
- Fix long key parsing in
DefaultStreamIdMapper
by @nichvolodov in #8378 - Protobuf copiers/codecs for data types by @jsteinich in #8359
- Add a blob container client factory for customisation by @Romanx in #7849
- Use .NextInt64() when computing random TimeSpan. by @henricj in #8382
- Fix: ORLEANS0009 - Skip Static Interface Methods by @cmeyertons in #8389
- Make ManagementGrain a reentrant, stateless worker by @ReubenBond in #8394
- Fix construction of AzureBlobGrainStorage by @ReubenBond in #8395
- Update samples README by @WesleySkeen in #8398
- Adding missing display character by @rwkarg in #8407
- Support custom grain call return types by @ReubenBond in #8415
- Fix parameter null check in RegexStreamNamespacePredicate by @scalablecory in #8429
- Documentation fix by @bill-poole in #8435
- Moving RuntimeContext check inside ReminderRegistry by @cmeyertons in #8436
- Automate more of the Kubernetes hosting experience by @ReubenBond in #8426
- MySQL migration script: Remove modi...
v8.0.0-rc2
Changes from v8.0.0-rc1
- Prevent PlacementWorker.ProcessLoop from running on foreign schedulers by @ReubenBond in #8760
- Fix stack deserialization order by @ReubenBond in #8768
- Ensure that all in-built codecs and copiers have corresponding tests, fix issues found by @ReubenBond in #8769
- Prevent external codecs from serializing types which are abstract, generated, or from the framework itself by @ReubenBond in #8765
- Avoid generating IActivator for abstract types by @ledjon-behluli in #8777
- Avoid sending cluster manifest to client if client already has the latest version by @453873 in #8728
- ClientClusterManifestProvider: fix case where gateway returns no update by @HermesNew in #8782
- Use UpDownCounter for grain and system target counts by @Costo in #8781
- Reduce logging noise from MemoryStorage, InsideRuntimeClient, and LocalGrainDirectory by @ReubenBond in #8780
- Fix proxy class type name violation on code-gen by @ledjon-behluli in #8785
- Fixes duplicate code-gen for
CompoundTypeAliasTree
with isolated base interface(s) by @ledjon-behluli in #8788
New Contributors
- @453873 made their first contribution in #8728
- @HermesNew made their first contribution in #8782
- @Costo made their first contribution in #8781
Full Changelog: v8.0.0-rc1...v8.0.0-rc2