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" />

Reply via email to