[REEF-1849] Fix CoreCLR incompatibilities in REEF Network
This addressed the issue by
* Switching `System.Runtime.Caching.MemoryCache` to
`Microsoft.Extensions.Caching.Memory.MemoryCache` in `NameCache`
* Creating a new API to use the new caching mechanism
* Marking the old API as Obsolete
* Changing the old API to use the old parameters to make the new
cache, giving warnings about parameters
* Adding the necessary parameter to the `NameCacheConfiguration`
* Marking the old parameters as obsolete
* Removing unused internal methods from `NameCache`
JIRA:
[REEF-1849](https://issues.apache.org/jira/browse/REEF-1849)
Pull request:
This closes #1349
diff --git a/lang/cs/Org.Apache.REEF.Network/Naming/NameCache.cs b/lang/cs/Org.Apache.REEF.Network/Naming/NameCache.cs
index 12cb0c6..b2d5b04 100644
--- a/lang/cs/Org.Apache.REEF.Network/Naming/NameCache.cs
+++ b/lang/cs/Org.Apache.REEF.Network/Naming/NameCache.cs
@@ -16,11 +16,11 @@
// under the License.
using System;
-using System.Collections.Specialized;
using System.Net;
-using System.Runtime.Caching;
+using Microsoft.Extensions.Caching.Memory;
using Org.Apache.REEF.Network.Naming.Parameters;
using Org.Apache.REEF.Tang.Annotations;
+using Org.Apache.REEF.Utilities.Logging;
namespace Org.Apache.REEF.Network.Naming
{
@@ -29,7 +29,8 @@
/// </summary>
internal sealed class NameCache
{
- private readonly MemoryCache _cache;
+ private static readonly Logger Logger = Logger.GetLogger(typeof(NameCache));
+ private readonly IMemoryCache _cache;
/// <summary>
/// Duration in milli seconds after which cache entry expires
@@ -38,19 +39,35 @@
private readonly double _expirationDuration;
[Inject]
+ [Obsolete("TODO[JIRA REEF-1856] This constructor will be removed")]
private NameCache(
[Parameter(typeof(NameCacheConfiguration.CacheEntryExpiryTime))] double expirationDuration,
[Parameter(typeof(NameCacheConfiguration.CacheMemoryLimit))] string memoryLimit,
[Parameter(typeof(NameCacheConfiguration.PollingInterval))] string pollingInterval)
{
- var config = new NameValueCollection
+ Logger.Log(Level.Warning, "Received a parameter \"PollingInterval\" which will be interpreted as ExpirationScanFrequency.");
+ Logger.Log(Level.Warning, "Received a parameter \"CacheMemoryLimit\" which will be ignored.");
+
+ var cacheConfig = new MemoryCacheOptions
{
- { "pollingInterval", pollingInterval },
- { "physicalMemoryLimitPercentage", "0" },
- { "cacheMemoryLimitMegabytes", memoryLimit }
+ ExpirationScanFrequency = TimeSpan.Parse(pollingInterval)
};
- _cache = new MemoryCache("NameClientCache", config);
+ _cache = new MemoryCache(cacheConfig);
+ _expirationDuration = expirationDuration;
+ }
+
+ [Inject]
+ private NameCache(
+ [Parameter(typeof(NameCacheConfiguration.CacheEntryExpiryTime))] double expirationDuration,
+ [Parameter(typeof(NameCacheConfiguration.ExpirationScanFrequency))] string expirationScanFrequency)
+ {
+ var cacheConfig = new MemoryCacheOptions
+ {
+ ExpirationScanFrequency = TimeSpan.Parse(expirationScanFrequency)
+ };
+
+ _cache = new MemoryCache(cacheConfig);
_expirationDuration = expirationDuration;
}
@@ -83,21 +100,5 @@
{
_cache.Remove(identifier);
}
-
- /// <summary>
- /// returns physical memory of the cache in MB
- /// </summary>
- internal long PhysicalMemoryLimit
- {
- get { return _cache.CacheMemoryLimit; }
- }
-
- /// <summary>
- /// returns the interval after which Cache checks its memory usage
- /// </summary>
- internal TimeSpan PollingInterval
- {
- get { return _cache.PollingInterval; }
- }
}
}
diff --git a/lang/cs/Org.Apache.REEF.Network/Naming/Parameters/NameCacheConfiguration.cs b/lang/cs/Org.Apache.REEF.Network/Naming/Parameters/NameCacheConfiguration.cs
index c178a3c..e57e633 100644
--- a/lang/cs/Org.Apache.REEF.Network/Naming/Parameters/NameCacheConfiguration.cs
+++ b/lang/cs/Org.Apache.REEF.Network/Naming/Parameters/NameCacheConfiguration.cs
@@ -15,6 +15,7 @@
// specific language governing permissions and limitations
// under the License.
+using System;
using Org.Apache.REEF.Tang.Annotations;
namespace Org.Apache.REEF.Network.Naming.Parameters
@@ -26,12 +27,19 @@
{
}
- [NamedParameter("Maximum cache memory in MB", "cachememorylimit", "20")]
+ [NamedParameter("Frequency to check for cache expirations", "expirationscanfrequency", "00:20:00")]
+ public class ExpirationScanFrequency : Name<string>
+ {
+ }
+
+ [Obsolete("TODO[JIRA REEF-1856] This parameter will be removed.")]
+ [NamedParameter("Maximum cache memory in MB", "cachememorylimit")]
public class CacheMemoryLimit : Name<string>
{
}
- [NamedParameter("Polling interval for checking cache memory", "cachepollinginterval", "00:20:00")]
+ [Obsolete("TODO[JIRA REEF-1856] This parameter will be removed.")]
+ [NamedParameter("Polling interval for checking cache memory", "cachepollinginterval")]
public class PollingInterval : Name<string>
{
}
diff --git a/lang/cs/Org.Apache.REEF.Network/Org.Apache.REEF.Network.csproj b/lang/cs/Org.Apache.REEF.Network/Org.Apache.REEF.Network.csproj
index 4c3b6b8..5faff4b 100644
--- a/lang/cs/Org.Apache.REEF.Network/Org.Apache.REEF.Network.csproj
+++ b/lang/cs/Org.Apache.REEF.Network/Org.Apache.REEF.Network.csproj
@@ -30,6 +30,21 @@
</PropertyGroup>
<Import Project="$(SolutionDir)\build.props" />
<ItemGroup>
+ <Reference Include="Microsoft.Extensions.Caching.Abstractions, Version=1.1.2.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
+ <HintPath>..\packages\Microsoft.Extensions.Caching.Abstractions.1.1.2\lib\netstandard1.0\Microsoft.Extensions.Caching.Abstractions.dll</HintPath>
+ </Reference>
+ <Reference Include="Microsoft.Extensions.Caching.Memory, Version=1.1.2.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
+ <HintPath>..\packages\Microsoft.Extensions.Caching.Memory.1.1.2\lib\net451\Microsoft.Extensions.Caching.Memory.dll</HintPath>
+ </Reference>
+ <Reference Include="Microsoft.Extensions.DependencyInjection.Abstractions, Version=1.1.1.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
+ <HintPath>..\packages\Microsoft.Extensions.DependencyInjection.Abstractions.1.1.1\lib\netstandard1.0\Microsoft.Extensions.DependencyInjection.Abstractions.dll</HintPath>
+ </Reference>
+ <Reference Include="Microsoft.Extensions.Options, Version=1.1.2.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
+ <HintPath>..\packages\Microsoft.Extensions.Options.1.1.2\lib\netstandard1.0\Microsoft.Extensions.Options.dll</HintPath>
+ </Reference>
+ <Reference Include="Microsoft.Extensions.Primitives, Version=1.1.1.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
+ <HintPath>..\packages\Microsoft.Extensions.Primitives.1.1.1\lib\netstandard1.0\Microsoft.Extensions.Primitives.dll</HintPath>
+ </Reference>
<Reference Include="Microsoft.Hadoop.Avro">
<HintPath>$(PackagesDir)\Microsoft.Hadoop.Avro.$(AvroVersion)\lib\net45\Microsoft.Hadoop.Avro.dll</HintPath>
</Reference>
@@ -37,7 +52,11 @@
<HintPath>$(PackagesDir)\protobuf-net.$(ProtobufVersion)\lib\net451\protobuf-net.dll</HintPath>
</Reference>
<Reference Include="System" />
+ <Reference Include="System.ComponentModel.Composition" />
<Reference Include="System.Core" />
+ <Reference Include="System.IO.Compression" />
+ <Reference Include="System.Net.Http" />
+ <Reference Include="System.Numerics" />
<Reference Include="System.Reactive.Core">
<HintPath>$(PackagesDir)\System.Reactive.Core.$(SystemReactiveVersion)\lib\net45\System.Reactive.Core.dll</HintPath>
</Reference>
@@ -45,8 +64,15 @@
<HintPath>$(PackagesDir)\System.Reactive.Interfaces.$(SystemReactiveVersion)\lib\net45\System.Reactive.Interfaces.dll</HintPath>
</Reference>
<Reference Include="System.Runtime.Caching" />
+ <Reference Include="System.Runtime.CompilerServices.Unsafe, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
+ <HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.4.3.0\lib\netstandard1.0\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Runtime.InteropServices.RuntimeInformation, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
+ <HintPath>..\packages\System.Runtime.InteropServices.RuntimeInformation.4.3.0\lib\net45\System.Runtime.InteropServices.RuntimeInformation.dll</HintPath>
+ </Reference>
<Reference Include="System.Runtime.Serialization" />
<Reference Include="System.Xml" />
+ <Reference Include="System.Xml.Linq" />
</ItemGroup>
<ItemGroup>
<Compile Include="$(SolutionDir)\SharedAssemblyInfo.cs">
diff --git a/lang/cs/Org.Apache.REEF.Network/packages.config b/lang/cs/Org.Apache.REEF.Network/packages.config
index 7db384f..101b301 100644
--- a/lang/cs/Org.Apache.REEF.Network/packages.config
+++ b/lang/cs/Org.Apache.REEF.Network/packages.config
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
@@ -18,10 +18,49 @@
under the License.
-->
<packages>
+ <package id="Microsoft.Extensions.Caching.Abstractions" version="1.1.2" targetFramework="net451" />
+ <package id="Microsoft.Extensions.Caching.Memory" version="1.1.2" targetFramework="net451" />
+ <package id="Microsoft.Extensions.DependencyInjection.Abstractions" version="1.1.1" targetFramework="net451" />
+ <package id="Microsoft.Extensions.Options" version="1.1.2" targetFramework="net451" />
+ <package id="Microsoft.Extensions.Primitives" version="1.1.1" targetFramework="net451" />
<package id="Microsoft.Hadoop.Avro" version="1.5.6" targetFramework="net45" />
+ <package id="Microsoft.NETCore.Platforms" version="1.1.0" targetFramework="net451" />
+ <package id="NETStandard.Library" version="1.6.1" targetFramework="net451" />
<package id="Newtonsoft.Json" version="8.0.3" targetFramework="net45" />
<package id="protobuf-net" version="2.1.0" targetFramework="net45" />
<package id="StyleCop.MSBuild" version="4.7.49.1" targetFramework="net45" developmentDependency="true" />
+ <package id="System.Collections" version="4.3.0" targetFramework="net451" />
+ <package id="System.Collections.Concurrent" version="4.3.0" targetFramework="net451" />
+ <package id="System.ComponentModel" version="4.3.0" targetFramework="net451" />
+ <package id="System.Diagnostics.Debug" version="4.3.0" targetFramework="net451" />
+ <package id="System.Diagnostics.Tools" version="4.3.0" targetFramework="net451" />
+ <package id="System.Diagnostics.Tracing" version="4.3.0" targetFramework="net451" />
+ <package id="System.Globalization" version="4.3.0" targetFramework="net451" />
+ <package id="System.IO" version="4.3.0" targetFramework="net451" />
+ <package id="System.IO.Compression" version="4.3.0" targetFramework="net451" />
+ <package id="System.Linq" version="4.3.0" targetFramework="net451" />
+ <package id="System.Linq.Expressions" version="4.3.0" targetFramework="net451" />
+ <package id="System.Net.Http" version="4.3.0" targetFramework="net451" />
+ <package id="System.Net.Primitives" version="4.3.0" targetFramework="net451" />
+ <package id="System.ObjectModel" version="4.3.0" targetFramework="net451" />
<package id="System.Reactive.Core" version="3.1.1" targetFramework="net451" />
<package id="System.Reactive.Interfaces" version="3.1.1" targetFramework="net451" />
-</packages>
+ <package id="System.Reflection" version="4.3.0" targetFramework="net451" />
+ <package id="System.Reflection.Extensions" version="4.3.0" targetFramework="net451" />
+ <package id="System.Reflection.Primitives" version="4.3.0" targetFramework="net451" />
+ <package id="System.Resources.ResourceManager" version="4.3.0" targetFramework="net451" />
+ <package id="System.Runtime" version="4.3.0" targetFramework="net451" />
+ <package id="System.Runtime.CompilerServices.Unsafe" version="4.3.0" targetFramework="net451" />
+ <package id="System.Runtime.Extensions" version="4.3.0" targetFramework="net451" />
+ <package id="System.Runtime.InteropServices" version="4.3.0" targetFramework="net451" />
+ <package id="System.Runtime.InteropServices.RuntimeInformation" version="4.3.0" targetFramework="net451" />
+ <package id="System.Runtime.Numerics" version="4.3.0" targetFramework="net451" />
+ <package id="System.Text.Encoding" version="4.3.0" targetFramework="net451" />
+ <package id="System.Text.Encoding.Extensions" version="4.3.0" targetFramework="net451" />
+ <package id="System.Text.RegularExpressions" version="4.3.0" targetFramework="net451" />
+ <package id="System.Threading" version="4.3.0" targetFramework="net451" />
+ <package id="System.Threading.Tasks" version="4.3.0" targetFramework="net451" />
+ <package id="System.Threading.Timer" version="4.3.0" targetFramework="net451" />
+ <package id="System.Xml.ReaderWriter" version="4.3.0" targetFramework="net451" />
+ <package id="System.Xml.XDocument" version="4.3.0" targetFramework="net451" />
+</packages>
\ No newline at end of file