- Major improvements
- Replaced networking stack with the Bedrock layer of ASP.NET Core
- Support for future wire protocol versioning
- A series of improvements in cluster recovery from node failures
- Pluggable data adapters for EventHub stream provider
- Compatibility with .NET Core 3.0
This release is backward compatible, over the wire messaging wise, with 2.* releases, which allows for in-place upgrade of a running cluster. However, there are several breaking changes in the APIs that might require minor adjustments for application code to compile.
We measured significant performance gains with this release over 2.* versions, ranging from 8% to 93% depending on the test, mostly due to the network stack rewrite.
Tested on .NET Framework 4.7.2, .NET Core 2.2 and .NET Core 3.0.
This release is ready for production use.
Known issue.
If you get the following run time error on .NET Core 3.0
An exception of type 'System.IO.FileNotFoundException' occurred in Orleans.Runtime.dll but was not handled in user code: 'Could not load file or assembly 'Microsoft.Bcl.AsyncInterfaces, Version=1.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'.
add an explicit reference to Microsoft.Bcl.AsyncInterfaces NuGet package to your project. See #6028 for details.
Changes since 3.0.0-beta1:
-
Non-breaking improvements
- Remove unused "SetupSqlScriptFileNames" , It will cause the test to fail (#5872)
- Improve codegen's .NET Core 3 compatibility 2 (#5883)
- Improve graceful deactivation of grains performing transaction work (#5887)
- Add "UseSiloUnobservedExceptionsHandler" extensions to the ISiloBuilder (#5912)
- Add hard limits for message header and body size (#5911)
- Memory usage for activation data improved. (#5907)
- Stream configuration namespace cleanup. (#5923)
- Lease based queue balancer refactor. (#5914)
- Add detail to SiloHealthMonitor logs for superseded result (#5892)
- ClusterHealthMonitor: ignore superseded probes (#5930)
- Deny connections to known-dead silos (#5889)
- Set Socket.NoDelay = true by default (#5934)
- Adds a large sample that runs and tests locally in reliable configuration (#5909, #5953, #5951, #5955, #5984)
- Migrate to ASP.NET "Bedrock" abstractions (#5935)
- Remove AWS, Service Fabric, & ADO.NET metapackages (#5946)
- Improves queries by adding lock hinting to membership protocol (#5954)
- Bound connection attempt concurrency in ConnectionManager (#5894)
- Cleanup Response class & improve ToString (#5975)
- Fix connection log scoping (#5976)
- Make CollectionAgeLimitAttribute easy to use! (#5961)
- Remove unused IMembershipOracle interface (#5987)
- Move FileLoggerProvider from Core to TestingHost (#5992)
- Add additional internal health checks for membership (#5988)
- Add serializer for RegexStreamNamespacePredicate (#5989)
- Remove most instances of MarshalByRefObject (#5994)
- Make TestClusterBuilder.AddSiloBuilderConfigurator and TestClusterBuilder.AddClientBuilderConfigurator fluent style APIs. (#5995)
- Add IBinaryTokenStreamReader.Length property (#5997)
- Remove InternalsVisibleTo set for extensions by making necessary internal types public (#6000)
- Propagate message [de]serialization exceptions to callers (#5998)
- Improve MethodInfo resolution for grain call filters (#6004)
- Improve List/ReadOnlyCollection deep copy performance (#6010)
- Cancel pending silo monitoring probe after ProbeTimeout elapses (#6006)
- Simplify ConnectionListener.RunAsync (#6014)
- Support adding [DebuggerStepThrough] to generated classes via project option (#6017)
- Move from WindowsAzure.Storage library to Microsoft.AzureCosmos.Table and Microsoft.Azure.Storage.* packages. (#6013)
- Update dependecies to their latest versions (#6025, #5983, #5943, #5973, #5945, #5944)
-
Non-breaking bug fixes
- Protect ClientState.PendingToSend with lock (#5881)
- Fix NullReferenceException in AQStreamsBatchingTests.Dispose (#5888)
- Stateless worker local compatibility check (#5917)
- Remove activation from message target list if constructor threw an exception (#5958)
- Clear RequestContext when spawning connections (#5974)
- Fix potential deadlock with Connection.closeRegistration (#5986)
- Fixed wrong condition for getting logContext (#5999)
- Use MemFree when MemAvailable is not present (#6005)
- Avoid generating duplicate method id switch labels (#6007)
- CodeGen: disambiguate parameters with duplicate names (#6016)
- Specify DateTimeKind.Utc when constructing DateTime instances (#6020)
- Use half-duplex connections when accepting a connection from a pre-v3 silo (#6023)