Major new features
- Non-static grain client via ClientBuilder enables connecting to multiple Orleans cluster from the same app domain and connecting to other clusters from within a silo.
- Support for versioning of grain interfaces for non-downtime upgrades.
- Support for custom grain placement strategies and directors.
- Support for hash-based grain placement.
Changelog (1.5.0, 1.5.0-beta, and 1.5.0-rc)
-
Breaking changes
- Bug fix: Azure storage providers now throw
InconsistenStateException
instead ofStorageException
when eTags do not match #2971 - Automatically deactivate a grain if it bubbles up
InconsistentStateException
(thrown when there is an optimistic concurrency conflict when writing to storage) #2959 - Upgraded minimum framework dependency to .NET 4.6.1 #2945
- Support for non-static client via ClientBuilder (although static GrainClient still works but will be removed in a future version). You can now start many clients in the same process, even if you are inside a Silo #2822.
There are a few differences though:- Several changes to SerializationManager, mainly to make it non-static #2592
- When deserializing a GrainReference from storage, you might need to re-bind it to the runtime by calling
grain.BindGrainReference(grainFactory)
on it or you would getGrainReferenceNotBoundException
when attempting to use it #2738 - Removed
RegisterSerializerAttribute
(and corresponding static Register method for registering a custom serializer). If you were using that, please read https://dotnet.github.io/orleans/Documentation/Advanced-Concepts/Serialization.html#writing-custom-serializers for alternative ways to register your custom serializer #2941
- When deserializing a GrainReference from storage, you might need to re-bind it to the runtime by calling
- Several changes to SerializationManager, mainly to make it non-static #2592
- Better serialization of
Type
values (but can cause compatibility issues if these were persisted by using the Serialziation Manager) #2952 - Providers are now constructed using Dependency Injection. The result is that custom providers must have a single public constructor with either no arguments or arguments which can all be injected, or they need to be explicitly registered in the ServiceCollection. #2721 #2980
- Replaced
CacheSizeInMb
setting withDataMaxAgeInCache
andDataMinTimeInCache
in stream providers #3126 - Renamed the
Catalog.Activation.DuplicateActivations
counter toCatalog.Activation.ConcurrentRegistrationAttempts
to more accurately reflect what it tracks and its benign nature #3130 - Change default stream subscription faulting to false in EventHub and Memory stream providers, as is in other providers #2974
- Allow
IGrainWithGuidCompoundKey
as implicit subscription grain, and sets the stream namespace as the grain key extension (subtle breaking change: previous to 1.5IGrainWithGuidCompoundKey
wasn't technically supported, but if you did use it, the grain key extension would have had anull
string) #3011 - The static
GrainReference.FromKeyString
method is no longer accessible, it has been replaced withIGrainReferenceConverter.GetGrainFromKeyString
, which is accessible from theIServiceProvider
.
- Bug fix: Azure storage providers now throw
-
Non-breaking improvements
- Support for custom placement strategies and directors #2932
- Grain interface versioning to enable no-downtime upgrades #2837 2837 #3055
- Expose available versions information in placement context #3136
- Add support for hash-based grain placement #2944
- Support fire and forget one-way grain calls using
[OneWay]
method attribute #2993 - Replace
CallContext.LogicalSetData
with AsyncLocal #2200 #2961 - Support multiple silo request interceptors #3083
- Ability to configure
FabricClient
when deploying to Service Fabric #2954 - Added extension points to EventHubAdapterFactory #2930
- Added SlowConsumingPressureMonitor for EventHub streams #2873
- Dispose all registered services in the container when shutting down #2876
- Try to prevent port collisions when starting in-memory
TestCluster
#2779 - Deprecated
TestingSiloHost
in favor ofTestCluster
(although the former is still available for this version) #2919 - Support exceptions with reference cycles in ILBasedExceptionSerializer #2999
- Add extensibility point to replace the grain activator and finalizer #3002
- Add statistics to EventHub stream provider ecosystem
- Add flag to disable FastKill on CTRL-C #3109
- Avoid benign
DuplicateActivationException
from showing up in the logs #3130 - Programmable stream subscribe API #2741 #2796 #2909
- Allow complex streaming filters in
ImplicitStreamSubscriptionAttribute
#2988 - Make
StreamQueueBalancer
pluggable #3152 - ServiceFabric: Register
ISiloStatusOracle
implementation inServiceCollection
#3160
-
Non-breaking bug fixes
- Improve resiliency in stream PubSub when facing ungraceful shutdown of producers and silos #3003 #3128
- Fixes to local IP address resolution #3069
- Fixed a few issues with the Service Fabric membership provider #3059 #3061 #3128
- Use PostgreSQL synchronous API to avoid locking in DB thread with newer versions of Npgsql #3164
- Fix race condition on cancelling of
GrainCancellationTokenSource
#3168 - Fixes and improvements for the Event Hub stream provider #3014 #3096 #3041 #3052 #2989
- Fix
NullReferenceException
when noLogConsistencyProvider
attribute is provided #3158 - Several minor bug fixes and perf improvements, as well as reliability in our test code