IGNITE-3130: .NET: Added missing properties to TcpDiscoverySpi. This closes 
#715.


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/5a430250
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/5a430250
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/5a430250

Branch: refs/heads/master
Commit: 5a43025088dfb1648fc63591198c4a1808a47617
Parents: dc7b37f
Author: vozerov-gridgain <[email protected]>
Authored: Mon May 16 11:39:59 2016 +0300
Committer: vozerov-gridgain <[email protected]>
Committed: Mon May 16 11:39:59 2016 +0300

----------------------------------------------------------------------
 .../utils/PlatformConfigurationUtils.java       |  28 ++++
 .../IgniteConfigurationSerializerTest.cs        |  19 ++-
 .../IgniteConfigurationTest.cs                  |  27 +++-
 .../Discovery/Tcp/TcpDiscoverySpi.cs            | 161 +++++++++++++++++++
 .../IgniteConfigurationSection.xsd              |  13 ++
 5 files changed, 244 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/5a430250/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 30e45ef..d2eab1e 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
@@ -515,6 +515,20 @@ public class PlatformConfigurationUtils {
         disco.setNetworkTimeout(in.readLong());
         disco.setJoinTimeout(in.readLong());
 
+        disco.setForceServerMode(in.readBoolean());
+        disco.setClientReconnectDisabled(in.readBoolean());
+        disco.setLocalAddress(in.readString());
+        disco.setReconnectCount(in.readInt());
+        disco.setLocalPort(in.readInt());
+        disco.setLocalPortRange(in.readInt());
+        disco.setMaxMissedHeartbeats(in.readInt());
+        disco.setMaxMissedClientHeartbeats(in.readInt());
+        disco.setStatisticsPrintFrequency(in.readLong());
+        disco.setIpFinderCleanFrequency(in.readLong());
+        disco.setThreadPriority(in.readInt());
+        disco.setHeartbeatFrequency(in.readLong());
+        disco.setTopHistorySize(in.readInt());
+
         cfg.setDiscoverySpi(disco);
     }
 
@@ -852,6 +866,20 @@ public class PlatformConfigurationUtils {
         w.writeLong(tcp.getMaxAckTimeout());
         w.writeLong(tcp.getNetworkTimeout());
         w.writeLong(tcp.getJoinTimeout());
+
+        w.writeBoolean(tcp.isForceServerMode());
+        w.writeBoolean(tcp.isClientReconnectDisabled());
+        w.writeString(tcp.getLocalAddress());
+        w.writeInt(tcp.getReconnectCount());
+        w.writeInt(tcp.getLocalPort());
+        w.writeInt(tcp.getLocalPortRange());
+        w.writeInt(tcp.getMaxMissedHeartbeats());
+        w.writeInt(tcp.getMaxMissedClientHeartbeats());
+        w.writeLong(tcp.getStatisticsPrintFrequency());
+        w.writeLong(tcp.getIpFinderCleanFrequency());
+        w.writeInt(tcp.getThreadPriority());
+        w.writeLong(tcp.getHeartbeatFrequency());
+        w.writeInt((int)tcp.getTopHistorySize());
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/ignite/blob/5a430250/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 e3507b8..72ca7f5 100644
--- 
a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/IgniteConfigurationSerializerTest.cs
+++ 
b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/IgniteConfigurationSerializerTest.cs
@@ -63,7 +63,7 @@ namespace Apache.Ignite.Core.Tests
                                     
<string>Apache.Ignite.Core.Tests.IgniteConfigurationSerializerTest+FooClass, 
Apache.Ignite.Core.Tests</string>
                                 </types>
                             </binaryConfiguration>
-                            <discoverySpi type='TcpDiscoverySpi' 
joinTimeout='0:1:0'>
+                            <discoverySpi type='TcpDiscoverySpi' 
joinTimeout='0:1:0' localAddress='192.168.1.1' localPort='6655'>
                                 <ipFinder type='TcpDiscoveryMulticastIpFinder' 
addressRequestAttempts='7' />
                             </discoverySpi>
                             <communicationSpi type='TcpCommunicationSpi' 
ackSendThreshold='33' idleConnectionTimeout='0:1:2' />
@@ -113,6 +113,8 @@ namespace Apache.Ignite.Core.Tests
             Assert.AreEqual(1024, cfg.JvmMaxMemoryMb);
             Assert.AreEqual(TimeSpan.FromSeconds(10), cfg.MetricsLogFrequency);
             Assert.AreEqual(TimeSpan.FromMinutes(1), 
((TcpDiscoverySpi)cfg.DiscoverySpi).JoinTimeout);
+            Assert.AreEqual("192.168.1.1", 
((TcpDiscoverySpi)cfg.DiscoverySpi).LocalAddress);
+            Assert.AreEqual(6655, 
((TcpDiscoverySpi)cfg.DiscoverySpi).LocalPort);
             Assert.AreEqual(7,
                 ((TcpDiscoveryMulticastIpFinder) ((TcpDiscoverySpi) 
cfg.DiscoverySpi).IpFinder).AddressRequestAttempts);
             Assert.AreEqual(new[] { "-Xms1g", "-Xmx4g" }, cfg.JvmOptions);
@@ -420,7 +422,20 @@ namespace Apache.Ignite.Core.Tests
                         ResponseTimeout = TimeSpan.FromDays(1),
                         LocalAddress = "127.0.0.2",
                         Endpoints = new[] {"", "abc"}
-                    }
+                    },
+                    ClientReconnectDisabled = true,
+                    ForceServerMode = true,
+                    HeartbeatFrequency = TimeSpan.FromSeconds(3),
+                    IpFinderCleanFrequency = TimeSpan.FromMinutes(7),
+                    LocalAddress = "127.0.0.1",
+                    LocalPort = 49900,
+                    LocalPortRange = 13,
+                    MaxMissedClientHeartbeats = 9,
+                    MaxMissedHeartbeats = 7,
+                    ReconnectCount = 11,
+                    StatisticsPrintFrequency = TimeSpan.FromSeconds(20),
+                    ThreadPriority = 6,
+                    TopologyHistorySize = 1234567
                 },
                 IgniteHome = "igniteHome",
                 IncludedEventTypes = EventType.CacheQueryAll,

http://git-wip-us.apache.org/repos/asf/ignite/blob/5a430250/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 3e5e877..465ba27 100644
--- 
a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/IgniteConfigurationTest.cs
+++ 
b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/IgniteConfigurationTest.cs
@@ -92,6 +92,16 @@ namespace Apache.Ignite.Core.Tests
                 Assert.AreEqual(disco.SocketTimeout, resDisco.SocketTimeout);
                 Assert.AreEqual(disco.JoinTimeout, resDisco.JoinTimeout);
 
+                Assert.AreEqual(disco.LocalAddress, resDisco.LocalAddress);
+                Assert.AreEqual(disco.LocalPort, resDisco.LocalPort);
+                Assert.AreEqual(disco.LocalPortRange, resDisco.LocalPortRange);
+                Assert.AreEqual(disco.MaxMissedClientHeartbeats, 
resDisco.MaxMissedClientHeartbeats);
+                Assert.AreEqual(disco.MaxMissedHeartbeats, 
resDisco.MaxMissedHeartbeats);
+                Assert.AreEqual(disco.ReconnectCount, resDisco.ReconnectCount);
+                Assert.AreEqual(disco.StatisticsPrintFrequency, 
resDisco.StatisticsPrintFrequency);
+                Assert.AreEqual(disco.ThreadPriority, resDisco.ThreadPriority);
+                Assert.AreEqual(disco.TopologyHistorySize, 
resDisco.TopologyHistorySize);
+
                 var ip = (TcpDiscoveryStaticIpFinder) disco.IpFinder;
                 var resIp = (TcpDiscoveryStaticIpFinder) resDisco.IpFinder;
 
@@ -375,8 +385,21 @@ namespace Apache.Ignite.Core.Tests
                     JoinTimeout = TimeSpan.FromSeconds(5),
                     IpFinder = new TcpDiscoveryStaticIpFinder
                     {
-                        Endpoints = new[] { "127.0.0.1:47500", 
"127.0.0.1:47501" }
-                    }
+                        Endpoints = new[] { "127.0.0.1:49900", 
"127.0.0.1:49901" }
+                    },
+                    ClientReconnectDisabled = true,
+                    ForceServerMode = true,
+                    HeartbeatFrequency = TimeSpan.FromSeconds(3),
+                    IpFinderCleanFrequency = TimeSpan.FromMinutes(7),
+                    LocalAddress = "127.0.0.1",
+                    LocalPort = 49900,
+                    LocalPortRange = 13,
+                    MaxMissedClientHeartbeats = 9,
+                    MaxMissedHeartbeats = 7,
+                    ReconnectCount = 11,
+                    StatisticsPrintFrequency = TimeSpan.FromSeconds(20),
+                    ThreadPriority = 6,
+                    TopologyHistorySize = 1234567
                 },
                 GridName = "gridName1",
                 IncludedEventTypes = EventType.SwapspaceAll,

http://git-wip-us.apache.org/repos/asf/ignite/blob/5a430250/modules/platforms/dotnet/Apache.Ignite.Core/Discovery/Tcp/TcpDiscoverySpi.cs
----------------------------------------------------------------------
diff --git 
a/modules/platforms/dotnet/Apache.Ignite.Core/Discovery/Tcp/TcpDiscoverySpi.cs 
b/modules/platforms/dotnet/Apache.Ignite.Core/Discovery/Tcp/TcpDiscoverySpi.cs
index ea946e8..e03be3c 100644
--- 
a/modules/platforms/dotnet/Apache.Ignite.Core/Discovery/Tcp/TcpDiscoverySpi.cs
+++ 
b/modules/platforms/dotnet/Apache.Ignite.Core/Discovery/Tcp/TcpDiscoverySpi.cs
@@ -53,6 +53,51 @@ namespace Apache.Ignite.Core.Discovery.Tcp
         public static readonly TimeSpan DefaultJoinTimeout = TimeSpan.Zero;
 
         /// <summary>
+        /// Default value for the <see cref="ReconnectCount"/> property.
+        /// </summary>
+        public const int DefaultReconnectCount = 10;
+
+        /// <summary>
+        /// Default value for the <see cref="LocalPort"/> property.
+        /// </summary>
+        public const int DefaultLocalPort = 47500;
+
+        /// <summary>
+        /// Default value for the <see cref="LocalPortRange"/> property.
+        /// </summary>
+        public const int DefaultLocalPortRange = 100;
+
+        /// <summary>
+        /// Default value for the <see cref="MaxMissedHeartbeats"/> property.
+        /// </summary>
+        public const int DefaultMaxMissedHeartbeats = 1;
+
+        /// <summary>
+        /// Default value for the <see cref="MaxMissedClientHeartbeats"/> 
property.
+        /// </summary>
+        public const int DefaultMaxMissedClientHeartbeats = 5;
+
+        /// <summary>
+        /// Default value for the <see cref="IpFinderCleanFrequency"/> 
property.
+        /// </summary>
+        public static readonly TimeSpan DefaultIpFinderCleanFrequency = 
TimeSpan.FromSeconds(60);
+
+        /// <summary>
+        /// Default value for the <see cref="ThreadPriority"/> property.
+        /// </summary>
+        public const int DefaultThreadPriority = 10;
+
+        /// <summary>
+        /// Default value for the <see cref="HeartbeatFrequency"/> property.
+        /// </summary>
+        public static readonly TimeSpan DefaultHeartbeatFrequency = 
TimeSpan.FromSeconds(2);
+        
+        /// <summary>
+        /// Default value for the <see cref="TopologyHistorySize"/> property.
+        /// </summary>
+        public const int DefaultTopologyHistorySize = 1000;
+
+        /// <summary>
         /// Initializes a new instance of the <see cref="TcpDiscoverySpi"/> 
class.
         /// </summary>
         public TcpDiscoverySpi()
@@ -62,6 +107,15 @@ namespace Apache.Ignite.Core.Discovery.Tcp
             MaxAckTimeout = DefaultMaxAckTimeout;
             NetworkTimeout = DefaultNetworkTimeout;
             JoinTimeout = DefaultJoinTimeout;
+            ReconnectCount = DefaultReconnectCount;
+            LocalPort = DefaultLocalPort;
+            LocalPortRange = DefaultLocalPortRange;
+            MaxMissedHeartbeats = DefaultMaxMissedHeartbeats;
+            MaxMissedClientHeartbeats = DefaultMaxMissedClientHeartbeats;
+            IpFinderCleanFrequency = DefaultIpFinderCleanFrequency;
+            ThreadPriority = DefaultThreadPriority;
+            HeartbeatFrequency = DefaultHeartbeatFrequency;
+            TopologyHistorySize = DefaultTopologyHistorySize;
         }
 
         /// <summary>
@@ -77,6 +131,20 @@ namespace Apache.Ignite.Core.Discovery.Tcp
             MaxAckTimeout = reader.ReadLongAsTimespan();
             NetworkTimeout = reader.ReadLongAsTimespan();
             JoinTimeout = reader.ReadLongAsTimespan();
+
+            ForceServerMode = reader.ReadBoolean();
+            ClientReconnectDisabled = reader.ReadBoolean();
+            LocalAddress = reader.ReadString();
+            ReconnectCount = reader.ReadInt();
+            LocalPort = reader.ReadInt();
+            LocalPortRange = reader.ReadInt();
+            MaxMissedHeartbeats = reader.ReadInt();
+            MaxMissedClientHeartbeats = reader.ReadInt();
+            StatisticsPrintFrequency = reader.ReadLongAsTimespan();
+            IpFinderCleanFrequency = reader.ReadLongAsTimespan();
+            ThreadPriority = reader.ReadInt();
+            HeartbeatFrequency = reader.ReadLongAsTimespan();
+            TopologyHistorySize = reader.ReadInt();
         }
 
         /// <summary>
@@ -114,6 +182,85 @@ namespace Apache.Ignite.Core.Discovery.Tcp
         public TimeSpan JoinTimeout { get; set; }
 
         /// <summary>
+        /// Gets or sets a value indicating whether TcpDiscoverySpi is started 
in server mode 
+        /// regardless of <see cref="IgniteConfiguration.ClientMode"/> setting.
+        /// </summary>
+        public bool ForceServerMode { get; set; }
+
+        /// <summary>
+        /// Gets or sets a value indicating whether client does not try to 
reconnect after
+        /// server detected client node failure.
+        /// </summary>
+        public bool ClientReconnectDisabled { get; set; }
+
+        /// <summary>
+        /// Gets or sets the local host IP address that discovery SPI uses.
+        /// </summary>
+        public string LocalAddress { get; set; }
+
+        /// <summary>
+        /// Gets or sets the number of times node tries to (re)establish 
connection to another node.
+        /// </summary>
+        [DefaultValue(DefaultReconnectCount)]
+        public int ReconnectCount { get; set; }
+
+        /// <summary>
+        /// Gets or sets the local port to listen to.
+        /// </summary>
+        [DefaultValue(DefaultLocalPort)]
+        public int LocalPort { get; set; }
+
+        /// <summary>
+        /// Gets or sets the range for local ports. Local node will try to 
bind on first available port starting from
+        /// <see cref="LocalPort"/> up until (<see cref="LocalPort"/> + <see 
cref="LocalPortRange"/>).
+        /// </summary>
+        [DefaultValue(DefaultLocalPortRange)]
+        public int LocalPortRange { get; set; }
+
+        /// <summary>
+        /// Gets or sets the maximum heartbeats count node can miss without 
initiating status check.
+        /// </summary>
+        [DefaultValue(DefaultMaxMissedHeartbeats)]
+        public int MaxMissedHeartbeats { get; set; }
+
+        /// <summary>
+        /// Gets or sets the maximum heartbeats count node can miss without 
failing client node.
+        /// </summary>
+        [DefaultValue(DefaultMaxMissedClientHeartbeats)]
+        public int MaxMissedClientHeartbeats { get; set; }
+
+        /// <summary>
+        /// Gets or sets the statistics print frequency.
+        /// <see cref="TimeSpan.Zero"/> for no statistics.
+        /// </summary>
+        public TimeSpan StatisticsPrintFrequency { get; set; }
+
+        /// <summary>
+        /// Gets or sets the IP finder clean frequency.
+        /// </summary>
+        [DefaultValue(typeof(TimeSpan), "0:1:0")]
+        public TimeSpan IpFinderCleanFrequency { get; set; }
+
+        /// <summary>
+        /// Sets thread priority, 1 (lowest) to 10 (highest). All threads 
within SPI will be started with it.
+        /// </summary>
+        [DefaultValue(DefaultThreadPriority)]
+        public int ThreadPriority { get; set; }
+
+        /// <summary>
+        /// Gets or sets delay between issuing of heartbeat messages. SPI 
sends heartbeat messages
+        /// in configurable time interval to other nodes to notify them about 
its state.
+        /// </summary>
+        [DefaultValue(typeof(TimeSpan), "0:0:2")]
+        public TimeSpan HeartbeatFrequency { get; set; }
+
+        /// <summary>
+        /// Gets or sets the size of topology snapshots history.
+        /// </summary>
+        [DefaultValue(DefaultTopologyHistorySize)]
+        public int TopologyHistorySize { get; set; }
+
+        /// <summary>
         /// Writes this instance to the specified writer.
         /// </summary>
         internal void Write(IBinaryRawWriter writer)
@@ -139,6 +286,20 @@ namespace Apache.Ignite.Core.Discovery.Tcp
             writer.WriteLong((long) MaxAckTimeout.TotalMilliseconds);
             writer.WriteLong((long) NetworkTimeout.TotalMilliseconds);
             writer.WriteLong((long) JoinTimeout.TotalMilliseconds);
+
+            writer.WriteBoolean(ForceServerMode);
+            writer.WriteBoolean(ClientReconnectDisabled);
+            writer.WriteString(LocalAddress);
+            writer.WriteInt(ReconnectCount);
+            writer.WriteInt(LocalPort);
+            writer.WriteInt(LocalPortRange);
+            writer.WriteInt(MaxMissedHeartbeats);
+            writer.WriteInt(MaxMissedClientHeartbeats);
+            writer.WriteLong((long) 
StatisticsPrintFrequency.TotalMilliseconds);
+            writer.WriteLong((long) IpFinderCleanFrequency.TotalMilliseconds);
+            writer.WriteInt(ThreadPriority);
+            writer.WriteLong((long) HeartbeatFrequency.TotalMilliseconds);
+            writer.WriteInt(TopologyHistorySize);
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/5a430250/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 29074e7..cd16c1c 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfigurationSection.xsd
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfigurationSection.xsd
@@ -259,6 +259,19 @@
                         <xs:attribute name="maxAckTimeout" type="xs:string" />
                         <xs:attribute name="networkTimeout" type="xs:string" />
                         <xs:attribute name="joinTimeout" type="xs:string" />
+                        <xs:attribute name="clientReconnectDisabled" 
type="xs:boolean" />
+                        <xs:attribute name="forceServerMode" type="xs:boolean" 
/>
+                        <xs:attribute name="heartbeatFrequency" 
type="xs:string" />
+                        <xs:attribute name="ipFinderCleanFrequency" 
type="xs:string" />
+                        <xs:attribute name="localAddress" type="xs:string" />
+                        <xs:attribute name="localPort" type="xs:int" />
+                        <xs:attribute name="localPortRange" type="xs:int" />
+                        <xs:attribute name="maxMissedClientHeartbeats" 
type="xs:int" />
+                        <xs:attribute name="maxMissedHeartbeats" type="xs:int" 
/>
+                        <xs:attribute name="reconnectCount" type="xs:int" />
+                        <xs:attribute name="statisticsPrintFrequency" 
type="xs:string" />
+                        <xs:attribute name="threadPriority" type="xs:int" />
+                        <xs:attribute name="topologyHistorySize" type="xs:int" 
/>
                         <xs:attribute name="type" type="xs:string" 
use="required" />
                     </xs:complexType>
                 </xs:element>

Reply via email to