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>
