IGNITE-3118: .NET: Pass EvictionPolicy configuration back and forth. This closes #710.
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/424cf893 Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/424cf893 Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/424cf893 Branch: refs/heads/master Commit: 424cf8937e25f2f9f3095a56a87a47c2ecfea4be Parents: 5a43025 Author: Pavel Tupitsyn <[email protected]> Authored: Mon May 16 11:43:29 2016 +0300 Committer: vozerov-gridgain <[email protected]> Committed: Mon May 16 11:43:29 2016 +0300 ---------------------------------------------------------------------- .../utils/PlatformConfigurationUtils.java | 34 +++++++++++++++---- .../Cache/CacheConfigurationTest.cs | 7 ++++ .../IgniteConfigurationSerializerTest.cs | 35 +++++++++++++++++++- .../IgniteConfigurationTest.cs | 1 + .../Cache/Configuration/CacheConfiguration.cs | 11 ++++++ .../IgniteConfigurationSection.xsd | 23 +++++++++++++ 6 files changed, 103 insertions(+), 8 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/424cf893/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/utils/PlatformConfigurationUtils.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/utils/PlatformConfigurationUtils.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/utils/PlatformConfigurationUtils.java index d2eab1e..e462d40 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/utils/PlatformConfigurationUtils.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/utils/PlatformConfigurationUtils.java @@ -174,6 +174,8 @@ public class PlatformConfigurationUtils { if (in.readBoolean()) ccfg.setNearConfiguration(readNearConfiguration(in)); + ccfg.setEvictionPolicy(readEvictionPolicy(in)); + return ccfg; } @@ -185,8 +187,20 @@ public class PlatformConfigurationUtils { */ public static NearCacheConfiguration readNearConfiguration(BinaryRawReader in) { NearCacheConfiguration cfg = new NearCacheConfiguration(); + cfg.setNearStartSize(in.readInt()); + cfg.setNearEvictionPolicy(readEvictionPolicy(in)); + + return cfg; + } + /** + * Reads the eviction policy. + * + * @param in Stream. + * @return Eviction policy. + */ + public static EvictionPolicy readEvictionPolicy(BinaryRawReader in) { byte plcTyp = in.readByte(); switch (plcTyp) { @@ -197,22 +211,20 @@ public class PlatformConfigurationUtils { p.setBatchSize(in.readInt()); p.setMaxSize(in.readInt()); p.setMaxMemorySize(in.readLong()); - cfg.setNearEvictionPolicy(p); - break; + return p; } case 2: { LruEvictionPolicy p = new LruEvictionPolicy(); p.setBatchSize(in.readInt()); p.setMaxSize(in.readInt()); p.setMaxMemorySize(in.readLong()); - cfg.setNearEvictionPolicy(p); - break; + return p; } default: assert false; } - return cfg; + return null; } /** @@ -226,9 +238,15 @@ public class PlatformConfigurationUtils { assert cfg != null; out.writeInt(cfg.getNearStartSize()); + writeEvictionPolicy(out, cfg.getNearEvictionPolicy()); + } - EvictionPolicy p = cfg.getNearEvictionPolicy(); - + /** + * Writes the eviction policy. + * @param out Stream. + * @param p Policy. + */ + private static void writeEvictionPolicy(BinaryRawWriter out, EvictionPolicy p) { if (p instanceof FifoEvictionPolicy) { out.writeByte((byte)1); @@ -610,6 +628,8 @@ public class PlatformConfigurationUtils { } else writer.writeBoolean(false); + + writeEvictionPolicy(writer, ccfg.getEvictionPolicy()); } /** http://git-wip-us.apache.org/repos/asf/ignite/blob/424cf893/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/CacheConfigurationTest.cs ---------------------------------------------------------------------- diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/CacheConfigurationTest.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/CacheConfigurationTest.cs index d474f38..8a91f88 100644 --- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/CacheConfigurationTest.cs +++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/CacheConfigurationTest.cs @@ -239,6 +239,7 @@ namespace Apache.Ignite.Core.Tests.Cache AssertConfigsAreEqual(x.QueryEntities, y.QueryEntities); AssertConfigsAreEqual(x.NearConfiguration, y.NearConfiguration); + AssertConfigsAreEqual(x.EvictionPolicy, y.EvictionPolicy); } /// <summary> @@ -509,6 +510,12 @@ namespace Apache.Ignite.Core.Tests.Cache MaxMemorySize = 2500, BatchSize = 3 } + }, + EvictionPolicy = new FifoEvictionPolicy + { + MaxSize = 26, + MaxMemorySize = 2501, + BatchSize = 33 } }; } http://git-wip-us.apache.org/repos/asf/ignite/blob/424cf893/modules/platforms/dotnet/Apache.Ignite.Core.Tests/IgniteConfigurationSerializerTest.cs ---------------------------------------------------------------------- diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/IgniteConfigurationSerializerTest.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/IgniteConfigurationSerializerTest.cs index 72ca7f5..62690c3 100644 --- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/IgniteConfigurationSerializerTest.cs +++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/IgniteConfigurationSerializerTest.cs @@ -31,6 +31,7 @@ namespace Apache.Ignite.Core.Tests using System.Xml.Schema; using Apache.Ignite.Core.Binary; using Apache.Ignite.Core.Cache.Configuration; + using Apache.Ignite.Core.Cache.Eviction; using Apache.Ignite.Core.Cache.Store; using Apache.Ignite.Core.Common; using Apache.Ignite.Core.Communication.Tcp; @@ -90,6 +91,10 @@ namespace Apache.Ignite.Core.Tests </indexes> </queryEntity> </queryEntities> + <evictionPolicy type='LruEvictionPolicy' batchSize='1' maxSize='2' maxMemorySize='3' /> + <nearConfiguration nearStartSize='7'> + <evictionPolicy type='FifoEvictionPolicy' batchSize='10' maxSize='20' maxMemorySize='30' /> + </nearConfiguration> </cacheConfiguration> <cacheConfiguration name='secondCache' /> </cacheConfiguration> @@ -145,6 +150,22 @@ namespace Apache.Ignite.Core.Tests Assert.AreEqual("indexFld", queryEntity.Indexes.Single().Fields.Single().Name); Assert.AreEqual(true, queryEntity.Indexes.Single().Fields.Single().IsDescending); + var nearCfg = cacheCfg.NearConfiguration; + Assert.IsNotNull(nearCfg); + Assert.AreEqual(7, nearCfg.NearStartSize); + + var plc = nearCfg.EvictionPolicy as FifoEvictionPolicy; + Assert.IsNotNull(plc); + Assert.AreEqual(10, plc.BatchSize); + Assert.AreEqual(20, plc.MaxSize); + Assert.AreEqual(30, plc.MaxMemorySize); + + var plc2 = cacheCfg.EvictionPolicy as LruEvictionPolicy; + Assert.IsNotNull(plc2); + Assert.AreEqual(1, plc2.BatchSize); + Assert.AreEqual(2, plc2.MaxSize); + Assert.AreEqual(3, plc2.MaxMemorySize); + Assert.AreEqual(new Dictionary<string, object> {{"myNode", "true"}}, cfg.UserAttributes); var atomicCfg = cfg.AtomicConfiguration; @@ -402,7 +423,19 @@ namespace Apache.Ignite.Core.Tests WriteBehindFlushFrequency = TimeSpan.FromSeconds(5), WriteBehindFlushSize = 66, WriteBehindFlushThreadCount = 2, - WriteSynchronizationMode = CacheWriteSynchronizationMode.FullAsync + WriteSynchronizationMode = CacheWriteSynchronizationMode.FullAsync, + NearConfiguration = new NearCacheConfiguration + { + NearStartSize = 5, + EvictionPolicy = new FifoEvictionPolicy + { + BatchSize = 19, MaxMemorySize = 1024, MaxSize = 555 + } + }, + EvictionPolicy = new LruEvictionPolicy + { + BatchSize = 18, MaxMemorySize = 1023, MaxSize = 554 + } } }, ClientMode = true, http://git-wip-us.apache.org/repos/asf/ignite/blob/424cf893/modules/platforms/dotnet/Apache.Ignite.Core.Tests/IgniteConfigurationTest.cs ---------------------------------------------------------------------- diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/IgniteConfigurationTest.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/IgniteConfigurationTest.cs index 465ba27..9657c9b 100644 --- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/IgniteConfigurationTest.cs +++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/IgniteConfigurationTest.cs @@ -374,6 +374,7 @@ namespace Apache.Ignite.Core.Tests /// </summary> private static IgniteConfiguration GetCustomConfig() { + // CacheConfiguration is not tested here - see CacheConfigurationTest return new IgniteConfiguration { DiscoverySpi = new TcpDiscoverySpi http://git-wip-us.apache.org/repos/asf/ignite/blob/424cf893/modules/platforms/dotnet/Apache.Ignite.Core/Cache/Configuration/CacheConfiguration.cs ---------------------------------------------------------------------- diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Cache/Configuration/CacheConfiguration.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Cache/Configuration/CacheConfiguration.cs index e5fcdb1..627e244 100644 --- a/modules/platforms/dotnet/Apache.Ignite.Core/Cache/Configuration/CacheConfiguration.cs +++ b/modules/platforms/dotnet/Apache.Ignite.Core/Cache/Configuration/CacheConfiguration.cs @@ -27,6 +27,7 @@ namespace Apache.Ignite.Core.Cache.Configuration using System.Linq; using Apache.Ignite.Core.Binary; using Apache.Ignite.Core.Cache; + using Apache.Ignite.Core.Cache.Eviction; using Apache.Ignite.Core.Cache.Store; using Apache.Ignite.Core.Common; using Apache.Ignite.Core.Impl.Binary; @@ -269,6 +270,8 @@ namespace Apache.Ignite.Core.Cache.Configuration QueryEntities = count == 0 ? null : Enumerable.Range(0, count).Select(x => new QueryEntity(reader)).ToList(); NearConfiguration = reader.ReadBoolean() ? new NearCacheConfiguration(reader) : null; + + EvictionPolicy = EvictionPolicyBase.Read(reader); } /// <summary> @@ -339,6 +342,8 @@ namespace Apache.Ignite.Core.Cache.Configuration } else writer.WriteBoolean(false); + + EvictionPolicyBase.Write(writer, EvictionPolicy); } /// <summary> @@ -648,5 +653,11 @@ namespace Apache.Ignite.Core.Cache.Configuration /// Gets or sets the near cache configuration. /// </summary> public NearCacheConfiguration NearConfiguration { get; set; } + + /// <summary> + /// Gets or sets the eviction policy. + /// Null value means disabled evictions. + /// </summary> + public IEvictionPolicy EvictionPolicy { get; set; } } } http://git-wip-us.apache.org/repos/asf/ignite/blob/424cf893/modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfigurationSection.xsd ---------------------------------------------------------------------- diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfigurationSection.xsd b/modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfigurationSection.xsd index cd16c1c..6bc2e8f 100644 --- a/modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfigurationSection.xsd +++ b/modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfigurationSection.xsd @@ -166,6 +166,29 @@ </xs:sequence> </xs:complexType> </xs:element> + <xs:element name="nearConfiguration" minOccurs="0"> + <xs:complexType> + <xs:all> + <xs:element name="evictionPolicy" minOccurs="0"> + <xs:complexType> + <xs:attribute name="batchSize" type="xs:int" /> + <xs:attribute name="maxSize" type="xs:int" /> + <xs:attribute name="maxMemorySize" type="xs:int" /> + <xs:attribute name="type" type="xs:string" use="required" /> + </xs:complexType> + </xs:element> + </xs:all> + <xs:attribute name="nearStartSize" type="xs:int" /> + </xs:complexType> + </xs:element> + <xs:element name="evictionPolicy" minOccurs="0"> + <xs:complexType> + <xs:attribute name="batchSize" type="xs:int" /> + <xs:attribute name="maxSize" type="xs:int" /> + <xs:attribute name="maxMemorySize" type="xs:int" /> + <xs:attribute name="type" type="xs:string" use="required" /> + </xs:complexType> + </xs:element> </xs:all> <xs:attribute name="name" type="xs:string" /> <xs:attribute name="cacheMode" type="xs:string" />
