Releases: dotnet/orleans
v7.0.0-rc2
Note that we have aligned versions with .NET, down to the release candidate number. This means that Orleans 7.0.0 replaces the would-be Orleans 4.0.0 release
What's Changed since 4.0.0-preview2
- Fix: GrainDirectoryPartition should allow overwriting an invalid entry by @benjaminpetit in #7903
- Fix typo in MessageFactory by @MeladKamari in #7901
- Trim the correct queue on Chirper account state by @andreaskromann in #7890
- Rename
Microsoft.Orleans.OrleansRuntime
package toMicrosoft.Orleans.Runtime
by @ReubenBond in #7912 - Remove grain directory hand-off entirely by @ReubenBond in #7911
- Optimize hashing by @pentp in #7864
- Remove GrainReference from IGrainStorage contract by @pentp in #7870
- Remove PlatformAbstractions on .NET 6 by @seniorquico in #7889
- Migrate some samples to WebApplicationBuilder by @MeladKamari in #7906
- Remove ThreadSafeRandom by @pentp in #7871
- Optimize SiloAddress creation by @pentp in #7886
- Change QueueId to a struct by @pentp in #7887
- Remove GrainReference from IReminderTable contract by @pentp in #7885
- Added ObserverManager Implementation by @j0nimost in #7863
- Support serialization of record types in hierarchies with empty layers by @ReubenBond in #7925
- Add diagnostic for non-settable properties by @ReubenBond in #7926
- Add build-time analyzer for unsupported grain interface method return types by @ReubenBond in #7930
- Fix build warnings by @ReubenBond in #7860
- Remove unnecessary properties on
Message
object by @ReubenBond in #7857 - Reduce SystemTarget-specific logic by @ReubenBond in #7856
- [4.0] Implement cleanup defunct silo entries ado net clustering by @ElanHasson in #7928
- Fix AzureQueueAdapterFactory.Create constructor arguments by @ReubenBond in #7942
- Fix duplicate streaming event on resume by @benjaminpetit in #7699
- Enable codegen on Orleans.Streaming.SQS by @benjaminpetit in #7947
- Use explicit C# LangVersion by @pentp in #7946
- Avoid passing Spans by reference by @pentp in #7950
- Fix FieldOffset for PackedHeaders by @ReubenBond in #7948
- Use XxHash32/XxHash64 by @pentp in #7949
- Don't use MethodImplOptions.NoInlining on throw-helpers by @pentp in #7951
- Remove obsolete net48 & netcoreapp3.1 code by @pentp in #7954
- Target netstandard2.0 for Orleans.Serialization.Abstractions by @jsteinich in #7965
- Optimize serializer generated code by @pentp in #7960
- Make serializable types immutable by @pentp in #7955
- Fix net7.0 compilation by @EgorBo in #7934
- Rename InternalStreamId to QualifiedStreamId and make it public by @benjaminpetit in #7971
- Improved support for implicit field ids and immutable properties by @mnmr in #7958
- Change the activation strategy for StatelessWorkers from round-robin to on-demand by @COCPORN in #7969
- Move grain components into
ActivationDataExtra
to reduce overhead by @ReubenBond in #7976 - Fix
StatelessWorkerGrainContext.GetComponent
implementation. by @ReubenBond in #7975 - In PubSub: replace extension with GrainId by @benjaminpetit in #7983
- Remove TLS 1.1 from defaults, since it's deprecated by @ReubenBond in #7988
- Fix compilation on C# 11 (
scoped
refs) & migrate to .NET 7.0 by @ReubenBond in #7987 - Add large struct array serialization benchmark by @ReubenBond in #7984
- Migrate all builds to single yaml pipeline by @benjaminpetit in #7994
- Various fixes in build.yaml by @benjaminpetit in #7997
- Delete docs.yml by @IEvangelist in #8000
- Don't generate activators for simple invokables by @pentp in #8001
- Interlocked MultiTaskCompletionSource by @Scooletz in #8003
- Bump version to 7 by @benjaminpetit in #8007
- Switch DyanamoDB provider to use IGrainStorageSerializer by @benjaminpetit in #8009
- Cleanup code generation for [Immutable] types and members by @pentp in #7998
- Fix immutable collections copiers by @pentp in #8002
- Update package refs and fix build issues by @benjaminpetit in #8016
- Modify Voting sample to use Blazor and support misuse prevention by @ReubenBond in #8013
- Stop publishing Microsoft.Orleans.CodeGenerator.MSBuild package by @ReubenBond in #8017
- Optimize serializer generated code (p2) by @pentp in #7995
- Generate less code for abstract type codecs by @pentp in #8014
- Use compound type aliases for generated classes by @ReubenBond in #7943
- In PubSubRendezvousGrain, initialize storage before logging by @christiansparre in #8022
- Allow configuration of OrleansJsonSerializer settings by @benjaminpetit in #8018
- Increase default TurnWarningLengthThreshold from 200ms to 1s by @ReubenBond in #8024
- Add new SerializerTransparentAttribute for abstract classes by @pentp in #8015
- Make Json the default serializer for grain state by @benjaminpetit in #8019
- Change substrings to spans by @vboltsis in #8026
- Update packages to .NET 7 RC2 by @ReubenBond in #8027
- Require opt-in to call chain reentrancy on a per-call-chain basis by @ReubenBond in #8023
- Make StreamImpl and StreamSubscriptionHandleImpl Json.NET friendly by @benjaminpetit in #8028
- Update build SDK to .NET 7.0.0-rc2 by @ReubenBond in #8031
New Contributors
- @MeladKamari made their first contribution in #7901
- @andreaskromann made their first contribution in #7890
- @j0nimost made their first contribution in #7863
- @EgorBo made their first contribution in #7934
- @mnmr made their first contribution in #7958
- @Scooletz made their first contribution in #8003
- @christiansparre made their first contribution in #8022
- @vboltsis made their first contribution in #8026
Full Changelog: v4.0.0-preview2...v7.0.0-rc1
v3.6.5
What's Changed
- Add azure pipeline yaml file for 3.x to build and test PR by @benjaminpetit in #7914
- [3.x] Fix
NullReferenceException
when too many instances of a[StatelessWorker]
are created andDebug
logging is enabled by @ReubenBond in #7918 - Fix Source Link and packaging by @ReubenBond in #7919
Full Changelog: v3.6.4...v3.6.5
v3.6.4
What's Changed
- Fix: GrainDirectoryPartition should allow overwriting an invalid entry by @benjaminpetit in #7905
- Remove Directory handoff on silo shutdown by @benjaminpetit in #7909
Full Changelog: v3.6.3...v3.6.4
v4.0.0-preview2
What's Changed
- Don't set
CpuLimit
ifdeltaTotalTime
is zero inLinuxEnvironmentStatistics
by @ElanHasson in #7526 - Fix build.cmd and test.cmd by @ElanHasson in #7527
- Adding Road to Orleans and end to end F# Example to samples README by @AmedeoV in #7534
- Upgrade BankAccount sample to .NET 6 by @IEvangelist in #7543
- Upgrade the Chirper sample source code to .NET 6 by @IEvangelist in #7547
- Fix parameter misspelling from
servideId
->serviceId
by @khalidabuhakmeh in #7559 - Fix Spectre.Console format and color spelling. by @khalidabuhakmeh in #7557
- Upgrade the ChatRoom sample to .NET 6 by @IEvangelist in #7546
- Upgrade BlazorServer sample to .NET 6 by @IEvangelist in #7545
- Improve StringComparer serialization for well-known comparers by @ReubenBond in #7514
- Refuse connections with different ClusterId by @captainsafia in #7535
- Add description element to Orleans.Sdk.csproj by @ElanHasson in #7562
- Streaming: make PubSubStore configurable per provider by @benjaminpetit in #7551
- In CachedGrainLocator.Unregister, remove from cache using the address by @benjaminpetit in #7568
- Make
IGrainFactory.CreateObjectReference
andIGrainFactory.DeleteObjectReference
synchronous by @benjaminpetit in #7552 - Fix vote counting bug where clock skew can incorrectly cause crashes in unstable clusters by @ReubenBond in #7519
- Improve API documentation by @ReubenBond in #7532
- Fix some folder names by @ReubenBond in #7581
- Enable skipped exception serializer test & apply DebuggerHidden to methods by @ReubenBond in #7585
- Enable lifeguard improvements by default by @ReubenBond in #7580
- Remove
PerformanceTuningOptions
by @ReubenBond in #7586 - Support unmanaged and notnull constraints for grain interfaces by @ReubenBond in #7587
- Merge Orleans.Streaming.Abstractions into Orleans.Streaming by @ReubenBond in #7583
- Merge Orleans.Runtime.Abstractions into Orleans.Runtime by @ReubenBond in #7582
- Analyze grain interfaces to find types which are missing serializers by @ReubenBond in #7601
- Plumb HostBuilderContext into IHostBuilder extension methods by @ReubenBond in #7576
- Throw exception when Binding StreamExtensions to Stateless Workers by @brunolins16 in #7574
- Initial yaml pipeline for PR build/tests by @benjaminpetit in #7611
- Add in-memory transport and use it by default in tests by @ReubenBond in #7609
- Add task to explicitly use the correct SDK version by @benjaminpetit in #7615
- Fix grain level call filter not invoked without global filters by @jbockle in #7619
- Upgrade BlazorWasm sample to .NET 6 by @IEvangelist in #7544
- Expand LRU acronym in LRU.cs by @pdekkers in #7622
- Upgrade remaining samples by @IEvangelist in #7624
- Do not forward messages while an activation is deactivating by @ReubenBond in #7637
- Avoid rejecting pending messages when an InconsistentStateException occurs by @ReubenBond in #7640
- [Tests] Increase leeway in ReminderTests from 100ms to 500ms by @ReubenBond in #7639
- Protect grain against failures in MayInterleave predicate by @ReubenBond in #7638
- Upgrade SDK to 6.0.200 and latestFeature by @ElanHasson in #7590
- Fix cluster configuration in PingBenchmark by @ReubenBond in #7650
- DhtGrainLocator: limit deregistration batch size by @ReubenBond in #7659
- Issue #7626 Option to inject ConsulClient by @DerHulk in #7632
- Distributed tests: Add rolling and reliability scenarios by @benjaminpetit in #7663
- Simplify SiloConnection by @ReubenBond in #7669
- Enhance
IGrainCallContext
for distributed tracing by @ReubenBond in #7646 - Fix Source Link build for CI by @ReubenBond in #7674
- Allow
LocalGrainDirectory
calls while shutting down by @ReubenBond in #7670 - Simplify Gateway by @ReubenBond in #7668
- Changing IReminderRegistry to accept GrainId by @brunolins16 in #7677
- Update README.md and add CONTRIBUTING.md by @IEvangelist in #7680
- Enhance distributed tracing support by @ReubenBond in #7647
- Add an Orleans shopping cart sample app by @IEvangelist in #7694
- Remove exception from IsPrimaryKeyBasedOnLong when key is not integer by @Dred95 in #7704
- Remove ValidateInitialConnectivity by @benjaminpetit in #7701
- Fix Redis directory by implementing JSON serializers by @ReubenBond in #7712
- DynamoDB Reminders load using GSI (#7437) by @ReubenBond in #7717
- Orleans.Reminders.DynamoDB use the Query operation for ReadRows (#7658) by @ReubenBond in #7718
- Fix ADO.NET providers and tests by @ReubenBond in #7714
- DynamoDB optional table create / update and update corner cases (#7681) by @ReubenBond in #7719
- Fix ZooKeeper tests by @ReubenBond in #7715
- Unify configuration for Consul tests by @ReubenBond in #7716
- Minor fixes and reorganization of Azure Storage tests by @ReubenBond in #7720
- Skip Consul tests when a connection string has not been specified by @ReubenBond in #7722
- Allow configuring exception types for basic (no custom properties) serialization by @ReubenBond in #7299
- Fix DynamoDB provider and tests by @ReubenBond in #7721
- Reduce logging noise on VirtualBucketsRingProvider by @MarkNickeson in #7728
- Skip some
AzureGrainDirectory
andAzureTableDataManager
tests in emulator by @ReubenBond in #7729 - Regarding issue #7099: fixes "Logging noise: Gateway refresh notifications on client" by @MarkNickeson in #7725
- Allow multiple GenerateCodeForDeclaringAssemblyAttributes per assembly by @dave-b-code in #7731
- Fix build.ps1 not suffixing local package builds with date by @ReubenBond in #7732
- Enable test suites for most dependencies in GitHub Actions by @ReubenBond in #7736
- Add Unix socket support to TestingHost by @benjaminpetit in #7748
- Remove unreferenced Service Fabric Hosting package by @ReubenBond in #7737
- Fix papercuts issue #7099 - silo spew on shutdown by @MarkNickeson in #7733
- add exception to
ServiceCollectionExtensions.AddFromExisting
when ... by @ElanHasson in #7724 - Account for non-determinism in ClusterHealthMonitor_NoIndirectProbes by @ReubenBond in #7754
- Copy request arguments efficiently, in-place. by @ReubenBond in #7741
- Code Generator: sanitize assembly name when generating target namespace by @ReubenBond in #7753
- Update hello word sample to .Net6 by @behroozbc in #7761
- Fix Null Reference exception in call filters by @wired010 in #7763
- Suppress CredScan warnings for ci.yml file by @ReubenBond in #7771
- Fix typo by @ElanHasson in #7775
- Migrate to new pool by @benjaminpetit in #7783
- Force installation of 3.1 and 5.0 sdk by @benjaminpetit in #7786
- Replace bootstrap in Blazor app with MudBlazor by @IEvangelist in #7698
- First pass at Structured Logging updates by @wired010 in #7767...
v3.6.3
What's Changed
- Fix generic method by @phynalle in #7697
- Updating ConsulVersion for 3.x to match main by @Tapanila in #7709
- Fix support for grains with no namespace (in global namespace) by @ReubenBond in #7758
- [3.x] Make IKeyedSerializer public for more advanced serialization cases by @ReubenBond in #7766
- Improve : throw `TypeLoadException on failing to load a type by @wangjia184 in #7851
- Validate constraints that are themselves generic correctly in GenericMethodInvoker. by @niblak in #7876
New Contributors
- @phynalle made their first contribution in #7697
- @Tapanila made their first contribution in #7709
- @niblak made their first contribution in #7876
Full Changelog: v3.6.2...v3.6.3
v3.6.2
What's Changed
- DynamoDB optional table create / update and update corner cases by @smiron in #7681
- 3.x - Ensure timestamp is updated on codegen output for incremental builds by @archonandrewhunt in #7687
New Contributors
- @archonandrewhunt made their first contribution in #7687
Full Changelog: v3.6.1...v3.6.2
v3.6.1
What's Changed
- Ignore value loaded in EventHubCheckpointer if it's obviously corrupted by @benjaminpetit in #7529
- Fix custom grain directory registration by @benjaminpetit in #7613
- In CachedGrainLocator.Unregister, remove from cache using the address by @benjaminpetit in #7604
- Add IGrainLocator.InvalidateCache to remove cache entry when using a custom directory by @benjaminpetit in #7636
- Check [KnownBaseType] by Type.FullName rather than reference by @wangjia184 in #7656
- Ignore KnownAssembly attribute which points to the containing assembly by @ReubenBond in #7664
- Orleans.Reminders.DynamoDB use the Query operation for ReadRows by @smiron in #7658
- Fix Source Link build for CI by @ReubenBond in #7673
New Contributors
- @wangjia184 made their first contribution in #7656
- @smiron made their first contribution in #7658
Full Changelog: v3.6.0...v3.6.1
v4.0.0-preview1
Major changes from the 3.x release series
The full change log lists around 500 changes, and many involve small quality of life improvements, internal refactorings for performance, reliability, versatility, and maintainability. What follows are the larger changes which we would like to highlight in these release notes since they are more likely to impact application developers.
Grain and Stream identity enhancements
Grain identities now take the form type/key
where both type
and key
are strings. This greatly simplifies how grain identity works and improves support for generic grain types.
Previous versions of Orleans used a compound type for GrainId
s in order to support grain keys of either: Guid
, long
, string
, Guid
+ string
, or long
+ string
. This involves some complexity when it comes to dealing with grain keys. Grain identities consist of two components: a type and a key. The type component previously consisted of a numeric type code, a category, and 3 bytes of generic type information.
Streams are also now identified using a string
instead of a Guid
, which grants more flexibility, especially when working with declarative subscriptions (most commonly accessed via the [ImplicitStreamSubscription(...)]
attribute)
This move to stringly-typed ids is expected to be easier for developers to work with, particularly since the GrainId
and StreamId
types are now public
(they were internal
) and GrainId
is able to identify any grain.
Version-tolerant, high-performance serialization & RPC
4.x changes how serialization works. The default serializer in previous releases of Orleans is not tolerant to changes in a type's schema. Adding, removing, or renaming a field or type could cause serialization to break without obvious recourse. In 4.x, we introduce a new version-tolerant serializer which allows adding/removing/renaming fields and some type change operations (widening or narrowing a numeric type, for example). We still recommended that developers use JSON serialization for persistence. The new serializer is also designed for high performance and as a result, it is substantially faster than the serializer which it replaces.
Aside from serialization, the remote procedure call internals have been overhauled for performance and flexibility. Previous versions of Orleans use a type called InvokeMethodRequest
which identifies the interface and method being invoked using generated integer values and contain an array of objects representing the arguments. The InvokeMethodRequest
object is passed to a generated IGrainMethodInvoker
implementation which essentially contains some nested switch statements to find the correct method to invoke, then casts the arguments in the object array to the correct types in the invocation. This design has several drawbacks:
- Handling of overloads and complex generic types is complicated and sometimes intractable
- It requires boxing primitive argument types, such as
int
,DateTimeOffset
, and user-definedstruct
s - Type information must be serialized for all method arguments
Instead, the replacement (which lives in Microsoft.Orleans.Serialization) involves generating an implementation of IInvokable
for every method. This interface gives infrastructure components like grain filters enough information to see interface and method information as well as to inspect and manipulate arguments and return values. It is also more efficient to serialize and invoke and relies on the C# compiler to perform method overloading. Generic parameters from generic grain interfaces and generic methods become generic parameters of the implementation, avoiding or offloading most of the complexities involved with generics.
Notice about Breaking Changes
- Clusters cannot be smoothly upgraded from a previous version of Orleans to Orleans 4.0 via a rolling upgrade.
- Serializable types must be marked with the
[GenerateSerializer]
attribute, with any serializable property or field marked with the corresponding[Id(x)]
attribute. This is intentionally less magical than in previous versions of Orleans, which did its best to infer what types needed to have serializers generated for them. What this extra ceremony buys you is valuable, though: version tolerance. - Since
GrainId
andStreamId
are so different, persistence, streams, and reminders are not forward-compatible yet. - We will have more to say regarding our plans to facilitate migration of Orleans 3.x applications to Orleans 4.x.
Here is an example of a type which Orleans would generate a serializer for previously, versus how that same type should be written for Orleans 4.0:
Orleans 3.x and below:
[Serializable]
public class UserProfile
{
public string DisplayName { get; set; }
public string PreferredLanguage { get; set; }
public DateTimeOffset AccountCreated { get; set; }
}
Orleans 4.x and above:
[GenerateSerializer]
public class UserProfile
{
[Id(0)]
public string DisplayName { get; set; }
[Id(1)]
public string PreferredLanguage { get; set; }
[Id(2)]
public DateTimeOffset AccountCreated { get; set; }
}
We have included some analyzers to make this process easier for developers. The first code fix prompts you to add the [GenerateSerializer]
attribute for any type which has the [Serializable]
attribute:
The second analyzer will add [Id(x)]
attributes for you:
Full Changelog from 3.0.0 to 4.0.0-preview1: v3.0.0...v4.0.0-preview1
- Update changelog for final 3.0.0 by @sergeybykov in #6068
- Azure table grain storage inconsistent state on not found by @jason-bragg in #6071
- Removed silo status check before cleaing up system targets from… by @jason-bragg in #6072
- Fix spelling error. by @fatkenny in #6081
- README spelling fix. by @fatkenny in #6082
- Update Program.cs by @dustout in #6083
- fix typo by @JTOne123 in #6086
- Update OneBoxDeployment to .NET Core 3 by @veikkoeeva in #6092
- Fixed typo in exception by @shawnallen85 in #6091
- Consul: support extended membership protocol by @ReubenBond in #6095
- Fix small typo in readme by @fdbeirao in #6100
- Add note about Visual Studio Community Edition by @fdbeirao in #6101
- Migrate HelloWorld sample to 3.0 by @sergeybykov in #6106
- Add a change missed in #6106 by @sergeybykov in #6119
- Do not include grain identifier in the ILogger category name by @sehra in #6122
- Fix routing of gateway count changed events to registered servi… by @mindlink in #6102
- Allow negative values in TypeCodeAttribute. Fixes #6114 by @yevhen in #6127
- DynamoDB: support extended membership protocol by @jsteinich in #6126
- Redact logged connection string in ADO storage provider during init by @benjaminpetit in #6139
- Fixed CodeGenerator.MSBuild cannot ResolveAssembly in .NetCore 3.0 by @bluexo in #6143
- Update changelog for 2.4.4. by @sergeybykov in #6147
- Update changelog for 3.0.1 by @sergeybykov in #6148
- Specify endpoint AddressFamily in Socket constructor by @ReubenBond in #6168
- Make IFatalErrorHandler public so that it can be replaced by users by @ReubenBond in #6170
- CodeGen: fix ambiguous reference to Orleans namespace by @ReubenBond in #6171
- Update changelog for 3.0.2 by @sergeybykov in #6175
- Switch to .NET Core SDK 3.1.100 by @sergeybykov in #6159
- Initial cross-platform build unification by @ReubenBond in #6183
- Avoid potential NullReferenceException when re-initializing statistics by @ReubenBond in #6179
- Fix 'dotnet pack --no-build' by @ReubenBond in #6184
- Migrate 'src' subdirectory to new code generator by @ReubenBond in #6188
- Allow MayInterleaveAttribute on base grains. Fix for issue #6189 by @cjenp in #6192
- Multi-target Orleans sln and tests by @ReubenBond in #6190
- Update changelog for 2.4.5 by @sergeybykov in #6201
- Updated Presence Sample added to Samples/3.0 folder by @thelaughingman in #6205
- Serialization optimizations for .NET Core 3.1 by @ReubenBond in #6207
- Updated Blazor Sample (both Server and Client working) added to Sampl… by @thelaughingman in #6204
- Shorten ConcurrentPing_SiloToSilo by @ReubenBond in #6211
- refactor(blazor s...
v3.6.0
Breaking changes for Azure providers
Authentication to Azure services has evolved and connection strings are typically deemphasized in favor of managed identities. In this release, we've migrated Azure providers to newer libraries which support managed identities and other authentication methods and we've updated options to expose this functionality. Since there are a large number of potential authentication methods requiring various combinations of options, we moved away from exposing each property and instead added configuration methods to the provider options.
For example, AzureStorageOperationOptions
has a ConfigureTableServiceClient
method with the following overloads:
void ConfigureTableServiceClient(string connectionString)
void ConfigureTableServiceClient(Uri serviceUri)
void ConfigureTableServiceClient(Func<Task<TableServiceClient>> createClientCallback)
void ConfigureTableServiceClient(Uri serviceUri, TokenCredential tokenCredential)
void ConfigureTableServiceClient(Uri serviceUri, AzureSasCredential azureSasCredential)
void ConfigureTableServiceClient(Uri serviceUri, TableSharedKeyCredential sharedKeyCredential)
Configuration methods help to ensure that the right combination of parameters are provided.
Breaking issue with ASP.NET Core 2.1
Note, if you are using ASP.NET Core 2.1, please note that we have had reports of users running into an incompatibility issue in Microsoft.Extensions, preventing the upgrade. Please see dotnet/extensions#3800, dotnet/aspnetcore#40255, and #7608
Build system changes
- Builds are now reproducible
- SourceLink has been enabled and sources are no longer shipped in the NuGet packages
- Debug symbols are now embedded in the shipped dlls instead of alongside them
Improvements and bug fixes since 3.5.1
-
Breaking and potentially breaking changes
-
Non-breaking improvements
- Rewrite batch build script in powershell (#7379) (#7382)
- Support Npgsql 6.0 for clustering and reminders (#7402)
- Initial commit for distributed tests using crank (#7323) (#7440)
- Support configuring ILBasedSerializer and BinaryFormatterISerializableSerializer as pre-fallback serializers (#7384)
- Support opting in to IKeyedSerializer implementations on a per-type basis using an attribute (#7438)
- Create PostgreSQL migrations for version 3.6.0 (#7490) (#7492)
-
Non-breaking bug fixes
Thank you to the following community members for your PR contributions and to everyone else who contributed: @mjameson-se @dave-b-code @michaeltdaniels @EdeMeijer @shmurchi
Full Changelog: v3.5.1...v3.6.0
v3.5.1
Improvements and bug fixes since 3.5.0
-
Potentially-breaking changes
- Support ILBasedSerializer as a fallback only after trying the configured fallback (#7355)
- This change may expose cases where types in an application are no longer able to be serialized because they were being serialized by ILBasedSerializer. In 3.6.0, we are introducing an option to revert to the previous behavior (attempting to use ILBasedSerializer before the configured fallback serializer), so if this affects you, please wait for that release. If you encounter any issues, please open an issue.
- Support ILBasedSerializer as a fallback only after trying the configured fallback (#7355)
-
Non-breaking improvements
- Support Minimal API host builder (#7316)
- CodeGenerator: support implicit using directives (#7310)
- Improve graceful connection shutdown (#7345)
- Upgrade Kubernetes version used by
Microsoft.Orleans.Kubernetes.Hosting
package (Fix: Orleans.Hosting.KubernetesHosting: System.MissingMethodException (#7364)) - Implement GetGrainId() for SystemTargets & GrainService (#7259)
- Make Silo.WaitForMessageToBeQueuedForOutbound configurable. (#7354) (#7355)
- Clarify comment on disabling workload analysis and log unknown status updates at the debug level (#7358)
-
Non-breaking bug fixes
- Fix: wrong parameter used when throwing QueueCacheMissException (#7295) (#7306)
- Add support for generic constraint during resolution of generic grain methods (#7325)
- Adjust ETag options on Clear/Write (#6908) (#7187) (#7326)
- Record result of deserialization for keyed serializers (#7336)
- Record deserialized array before deserializing array contents arrays of non-primitive types (#7335)
- Fix in Redis GrainDirectory: when deleting, check only the ActivationId (#7362)
- [Streaming] Fix token comparison in SetCursor (#7308)