Port the Orleans code to run on coreclr.
Some APIs from the full .NET got deprecated in coreclr (aka .NET Core), mainly around files and reflection, but at large the porting effort shouldn't be too big. This will allow to run Orleans efficiently across different platforms.
Tools:
Coreclr api search
.NET API Usage
.NET Portability Analyzer - download and Install
.NET Portability Analyzer Usage
Progress so far:
CoreCLR milestones
ApiPortabilityAnalysis result file for all projects (let's find an appropriate place to place updates of this file, please don't pollute the master branch with these big reports)
There are 2 types of issues:
(a) easy, just change an API - we have done all those.
(b) deeper profound issues where API was deprecated or changed significantly and we will need to investigate other ways to achieve the same functionality:
Need to investigate and consider profound rewrite - feel to open a GH issue with ideas on how to handle each one of those issues (separate issue for each) :
High priority
2nd priority
3rd priority
Already done issues (for progress tracking):
Port the Orleans code to run on coreclr.
Some APIs from the full .NET got deprecated in coreclr (aka .NET Core), mainly around files and reflection, but at large the porting effort shouldn't be too big. This will allow to run Orleans efficiently across different platforms.
Tools:
Coreclr api search
.NET API Usage
.NET Portability Analyzer - download and Install
.NET Portability Analyzer Usage
Progress so far:
CoreCLR milestones
ApiPortabilityAnalysis result file for all projects(let's find an appropriate place to place updates of this file, please don't pollute the master branch with these big reports)There are 2 types of issues:
(a) easy, just change an API - we have done all those.
(b) deeper profound issues where API was deprecated or changed significantly and we will need to investigate other ways to achieve the same functionality:
Need to investigate and consider profound rewrite - feel to open a GH issue with ideas on how to handle each one of those issues (separate issue for each) :
High priority
LoadFrom->AsemblyLoadContext, Location,...) Assembly Catalog #2025PerformanceCounter- not supported in .NET Core.Environment.UserNameCallContext.LogicalSetData- potentially replace withAsyncLocal<T>SerializationInfo- not supported in .NET Core.2nd priority
project.jsononce it RTMs, and we are not sure if the build tools will work once they start using csproj once again)TestClusterto work without creating new AppDomains for each silo (for example, by leveraging containers, or spawning and managing new processes)3rd priority
System.Runtime.Serialization.FormatterServices.GetUninitializedObjectSystem.Diagnostics.Process.Handle->System.Diagnostics.Process.SafeHandleAlready done issues (for progress tracking):
Type.IsInterface->Type.GetTypeInfo.IsInterface(IsClass,IsGenericType,IsAbstract,IsPrimitive,IsEnum).Type->TypeInfofor most members (in Orleans code, and code generated by OrleansCodeGenerator) CoreCLR Support: fix #1782 - use TypeInfo instead of Type in codegen #1783 Fix several incorrect usages of Type and TypeInfo #1894 Avoid using Type.IsEquivalentTo on code changed by #1963 #1997TextReader.Close->TextReader.DisposeCoreclr compatibility: changed close to dispose & changed of scoping with using #609 Change TextWriter.Close to Dispose #2034Socket.Close->Socket.DisposeDelegate.CreateDelegate->MethodInfo.CreateDelegateApplicationException(string)System.DataandSystem.Transactions- used in SQL utils. Create a separate OrleansSQLUtils project and move all Relational Storage code there.XmlTextWriterandXMLNode.SelectNodes.Dns.GetHostAddresses.System.String.ToLower(CultureInfo.InvariantCulture)-> UseCultureInfo.TextInfo.ToLower(String)insteadSystem.UriTypeConverter.System.CodeDom.CodeTypeParameter.BinaryFormatter.Serialize- solved via Coreclr compatibility: Implemented Json.Net fallback serializer #1047.System.Management.ManagementObjectCollection- not supported in .NET Core. Investigate and propose alternative options (ifManagementObjectitself is supported). We use it now in one place, to find TotalPhysicalMemory. Solved via Coreclr compatibility: Ifdeffing non-coreclr RAM perf counter #1048