Major new features
- Revamped JournaledGrain for event sourcing with support for geo-distributed log-based consistency providers.
- Abstraction of Grain Services with fixed-placed per-silo application components with their workload partitioned via cluster consistency ring.
- Support for heterogeneous silos with non-uniform distribution of available grain classes.
- Cluster membership provider for Service Fabric.
Changelog (1.4.0 and 1.4.0-beta)
New in v1.4.0 since beta
- Known issues
- When the silo starts up, it will register IServiceProvider in the container, which can be a circular reference registration when using 3rd party containers such as AutoFac. This is bein addressed for 1.4.1, but there is a simple workaround for it at #2747
- The build-time code generator required (and automatically added) a file named
Properties\orleans.codegen.cs
to the project where codegen was being ran. The new MSBuild targets no longer do that, so when upgrading a solution with a previous version of Orleans, you should delete this orleans.codegen.cs file from your grain projects.
- Improvements
- Support for grains with generic methods #2670
- Do native PE files check before assembly loading to avoid misleading warnings on startup #2714
- Throw explicit exception when using streams not in Orleans Context #2683
- Several improvements to
JournaledGrain
API #2651 #2720 - Allow overriding MethodId using [MethodId(id)] on interface methods #2660
- Bug fixes
- EventHubSequenceToken not used consistently #2724
- Support grains with generic state where the state param do not match the grain type params #2715
- Fix ServiceFabric IFabricServiceSiloResolver registration in DI container #2712
- Fix ConditionalCheckFailedException when updating silo 'IAmAlive' field in DynamoDB #2678
- Ensure DynamoDB Gateway Provider only returns silos with a proxy port configured #2679
- Fix e-Tag issue in AzureBlobStorage when calling ClearStateAsync (#2669)
- Other minor fixes: #2729 #2691
Changes in v1.4.0-beta
- Noteworthy breaking changes:
- Azure table storage throws InconsistentStateException #2630
- All grain instances and providers are constructed using the configured Dependency Injection container. The result is that all grains must have a single parameterless public constructor or single constructor with arguments which can all be injected. If no container is configured, the default container will be used. #2485
- Improvements
- Optional IL-based fallback serializer #2162
- IncomingMessageAcceptor sockets change from APM to EAP #2275
- Show clearer error when ADO.NET provider fails to init #2303, #2306
- In client, when a gateway connection close reroute not yet sent message to another gateway #2298
- MySQL Script: Minor syntax tweak to support previous server versions #2342
- Azure Queue provider message visibility config #2401
- Propagate exceptions during message body deserialization #2364
- Check IAddressable before DeepCopy #2383
- Modified stream types to not use fallback serializer and allow external #2330
- Add "Custom/" prefix for NewRelic metrics #2453
- Ignore named EventWaitHandle when not available in platform #2462
- Heterogenous silos support #2443
- Update to Consul 0.7.0.3 nuget package, because of breaking change in Consul API. #2498
- Grain Services by @jamescarter-le #2531
- Expose IMembershipOracle & related interfaces #2557
- Trigger registration of clients connected to the gateways in the directory when a silo is dead #2587
- Log Consistency Providers #1854
- In XML config, if SystemStoreType set to Custom but no ReminderTableAssembly are specified, assume that ReminderServiceProviderType is set to Disabled #2589
- In config XML, when SystemStoreType is set to MembershipTableGrain, set ReminderServiceType to ReminderTableGrain #2590
- Service Fabric cluster membership providers #2542
- Adds optional native JSON support to MySQL #2288
- Allow serializers to have multiple [Serializer(...)] attributes #2611
- Removed GrainStateStorageBridge from GrainCreator to allow better control of the IStorage used when using non-silo unit tests. #2243
- Failsafe Exception serialization #2633
- Added a data adapter to azure queue stream provider #2658
- Client cluster disconnection #2628
- Tooling improvements in build-time codegen #2523
- Performance
- Bug fixes
- Empty deployment Id in Azure #2230
- Remove zero length check in Protobuf serializer #2251
- Make PreferLocalPlacement activate in other silos when shutting down #2276
- Reset GrainClient.ClientInvokeCallback when uninitializing GrainClient #2299
- Fix ObjectDisposedException in networking layer #2302
- Reset client gateway reciever buffer on socket reset. #2316
- Removed calling Trace.Close() from TelemetryConsumer.Close() #2396
- Removes deadlocking and corrupted hashing in SQL storage provider #2395
- Fix #2358: Invoke interceptor broken for generic grains #2502
- Only a hard coded set of statistics were going to telemetry consumers. Now all non-string statistics are tracked. #2513
- Fix invocation interception for grain extensions #2514
- Fix type assertion in AdaptiveDirectoryCacheMaintainer #2525
- MembershipTableFactory should call InitializeMembershipTable on membership table. #2537
- CodeGen: fix check on parameters to generic types with serializers #2575
- EventHubQueueCache failing to write checkpoints on purge #2613
- Fix code copy-paste errors discovered by Coverity #2639
- GrainServices are now Started by the Silo on Startup #2642
For the full changelog and up-to-date known issues, see Changelog