You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by sb...@apache.org on 2015/07/02 09:20:20 UTC

[21/21] incubator-ignite git commit: ignite-752: improvements

ignite-752: improvements


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

Branch: refs/heads/ignite-752
Commit: dd076a0899f464e331fab8aa27643be542259937
Parents: 12ba6bc
Author: Denis Magda <dm...@gridgain.com>
Authored: Thu Jul 2 10:19:48 2015 +0300
Committer: Denis Magda <dm...@gridgain.com>
Committed: Thu Jul 2 10:19:48 2015 +0300

----------------------------------------------------------------------
 .../configuration/IgniteConfiguration.java      |   3 +
 .../communication/tcp/TcpCommunicationSpi.java  |  28 ++--
 .../ignite/spi/discovery/tcp/ClientImpl.java    |   2 +-
 .../ignite/spi/discovery/tcp/ServerImpl.java    |   2 +-
 .../spi/discovery/tcp/TcpDiscoverySpi.java      |  12 +-
 .../IgniteConfigurationValidationSelfTest.java  | 141 +++++++++++++++++++
 .../tcp/TcpClientDiscoverySpiSelfTest.java      |   4 +-
 .../testsuites/IgniteKernalSelfTestSuite.java   |   1 +
 8 files changed, 177 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/dd076a08/modules/core/src/main/java/org/apache/ignite/configuration/IgniteConfiguration.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/configuration/IgniteConfiguration.java b/modules/core/src/main/java/org/apache/ignite/configuration/IgniteConfiguration.java
index d1d55ee..3fec5a4 100644
--- a/modules/core/src/main/java/org/apache/ignite/configuration/IgniteConfiguration.java
+++ b/modules/core/src/main/java/org/apache/ignite/configuration/IgniteConfiguration.java
@@ -1196,6 +1196,9 @@ public class IgniteConfiguration {
      * In case of {@link TcpCommunicationSpi} this timeout is set as default for socket connection timeout and
      * used for maximum socket connection timeout calculation.
      *
+     * Refer to {@link TcpDiscoverySpi} and {@link TcpCommunicationSpi} if advanced network related settings are
+     * required.
+     *
      * @param spiCommTimeout SPI communication timeout.
      * @return {@code this} for chaining.
      */

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/dd076a08/modules/core/src/main/java/org/apache/ignite/spi/communication/tcp/TcpCommunicationSpi.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/communication/tcp/TcpCommunicationSpi.java b/modules/core/src/main/java/org/apache/ignite/spi/communication/tcp/TcpCommunicationSpi.java
index c9976af..bf3fa46 100644
--- a/modules/core/src/main/java/org/apache/ignite/spi/communication/tcp/TcpCommunicationSpi.java
+++ b/modules/core/src/main/java/org/apache/ignite/spi/communication/tcp/TcpCommunicationSpi.java
@@ -179,6 +179,9 @@ public class TcpCommunicationSpi extends IgniteSpiAdapter
     /** Default message queue limit per connection (for incoming and outgoing . */
     public static final int DFLT_MSG_QUEUE_LIMIT = GridNioServer.DFLT_SEND_QUEUE_LIMIT;
 
+    /** Default max connection timeout can't be bigger than this value. */
+    public static final long DFLT_MAX_CONN_TIMEOUT_LIMIT = 20000;
+
     /**
      * Default count of selectors for TCP server equals to
      * {@code "Math.min(4, Runtime.getRuntime().availableProcessors())"}.
@@ -1243,6 +1246,15 @@ public class TcpCommunicationSpi extends IgniteSpiAdapter
     @Override public Map<String, Object> getNodeAttributes() throws IgniteSpiException {
         nodeIdMsg = new NodeIdMessage(getLocalNodeId());
 
+        if (connTimeout == null)
+            connTimeout = ignite.configuration().getSpiCommunicationTimeout() != null ?
+                ignite.configuration().getSpiCommunicationTimeout() :
+                IgniteConfiguration.DFLT_SPI_COMMUNICATION_TIMEOUT;
+
+        if (maxConnTimeout == null)
+            // connTimeout will be doubled at least four times before failing. Using geometric progression formula.
+            maxConnTimeout = defaultMaxConnectTimeout();
+
         assertParameter(locPort > 1023, "locPort > 1023");
         assertParameter(locPort <= 0xffff, "locPort < 0xffff");
         assertParameter(locPortRange >= 0, "locPortRange >= 0");
@@ -1313,15 +1325,6 @@ public class TcpCommunicationSpi extends IgniteSpiAdapter
     @Override public void spiStart(String gridName) throws IgniteSpiException {
         assert locHost != null;
 
-        if (connTimeout == null)
-            connTimeout = ignite.configuration().getSpiCommunicationTimeout() != null ?
-                ignite.configuration().getSpiCommunicationTimeout() :
-                IgniteConfiguration.DFLT_SPI_COMMUNICATION_TIMEOUT;
-
-        if (maxConnTimeout == null)
-            // connTimeout will be doubled at least four times before failing. Using geometric progression formula.
-            maxConnTimeout = defaultMaxConnectTimeout();
-
         // Start SPI start stopwatch.
         startStopwatch();
 
@@ -2366,7 +2369,12 @@ public class TcpCommunicationSpi extends IgniteSpiAdapter
      * @return Max connect timeout.
      */
     private long defaultMaxConnectTimeout() {
-        return getConnectTimeout() * (1 << 4);
+        long maxTimeout = getConnectTimeout() * (1 << 4);
+
+        if (maxTimeout > DFLT_MAX_CONN_TIMEOUT_LIMIT)
+            maxTimeout = DFLT_MAX_CONN_TIMEOUT_LIMIT;
+
+        return maxTimeout;
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/dd076a08/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ClientImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ClientImpl.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ClientImpl.java
index 04276d2..4d4e6f6 100644
--- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ClientImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ClientImpl.java
@@ -982,7 +982,7 @@ class ClientImpl extends TcpDiscoveryImpl {
                     try {
                         oldTimeout = sock.getSoTimeout();
 
-                        sock.setSoTimeout((int)spi.netTimeout);
+                        sock.setSoTimeout(spi.netTimeout.intValue());
 
                         InputStream in = new BufferedInputStream(sock.getInputStream());
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/dd076a08/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ServerImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ServerImpl.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ServerImpl.java
index 720ce3a..2f20cd1 100644
--- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ServerImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ServerImpl.java
@@ -4044,7 +4044,7 @@ class ServerImpl extends TcpDiscoveryImpl {
 
                     int timeout = sock.getSoTimeout();
 
-                    sock.setSoTimeout((int)spi.netTimeout);
+                    sock.setSoTimeout(spi.netTimeout.intValue());
 
                     for (IgniteInClosure<Socket> connLsnr : spi.incomeConnLsnrs)
                         connLsnr.apply(sock);

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/dd076a08/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
index 764ec92..bfab4ce 100644
--- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
+++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
@@ -193,6 +193,9 @@ public class TcpDiscoverySpi extends IgniteSpiAdapter implements DiscoverySpi, T
     /** Default statistics print frequency in milliseconds (value is <tt>0ms</tt>). */
     public static final long DFLT_STATS_PRINT_FREQ = 0;
 
+    /** Default max ack timeout can't be bigger than this value. */
+    public static final long DFLT_MAX_ACK_TIMEOUT_LIMIT = 20000;
+
     /** Local address. */
     protected String locAddr;
 
@@ -499,7 +502,7 @@ public class TcpDiscoverySpi extends IgniteSpiAdapter implements DiscoverySpi, T
      * is reached, then the process of message sending is considered as failed.
      * <p>
      * If not specified, default is calculated in a way that message acknowledgement timeout will be doubled and used
-     * at least four times before failing.
+     * at least four times before failing and must be no bigger than {@link #DFLT_MAX_ACK_TIMEOUT_LIMIT}.
      * <p>
      * Affected server nodes only.
      *
@@ -1779,7 +1782,12 @@ public class TcpDiscoverySpi extends IgniteSpiAdapter implements DiscoverySpi, T
      * @return Max acknowledgement timeout.
      */
     private long defaultMaxAckTimeout() {
-        return getAckTimeout() * (1 << 4);
+        long maxAck = getAckTimeout() * (1 << 4);
+
+        if (maxAck > DFLT_MAX_ACK_TIMEOUT_LIMIT)
+            maxAck = DFLT_MAX_ACK_TIMEOUT_LIMIT;
+
+        return maxAck;
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/dd076a08/modules/core/src/test/java/org/apache/ignite/internal/IgniteConfigurationValidationSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/IgniteConfigurationValidationSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/IgniteConfigurationValidationSelfTest.java
new file mode 100644
index 0000000..dccdccc
--- /dev/null
+++ b/modules/core/src/test/java/org/apache/ignite/internal/IgniteConfigurationValidationSelfTest.java
@@ -0,0 +1,141 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.internal;
+
+import org.apache.ignite.*;
+import org.apache.ignite.configuration.*;
+import org.apache.ignite.spi.communication.tcp.*;
+import org.apache.ignite.spi.discovery.tcp.*;
+import org.apache.ignite.testframework.junits.common.*;
+
+import java.lang.reflect.*;
+
+/**
+ * Ignite configuration validation test.
+ */
+public class IgniteConfigurationValidationSelfTest extends GridCommonAbstractTest {
+    /** */
+    private static final long SPI_COMM_TIMEOUT = 2000;
+
+    /**
+     * @throws Exception In case of error.
+     */
+    public void testDefaultSpiCommunicationTimeouts() throws Exception {
+        IgniteConfiguration cfg = new IgniteConfiguration();
+
+        cfg.setDiscoverySpi(new TcpDiscoverySpi());
+        cfg.setCommunicationSpi(new TcpCommunicationSpi());
+
+        assertNull(cfg.getSpiCommunicationTimeout());
+
+        cfg.setSpiCommunicationTimeout(SPI_COMM_TIMEOUT);
+
+        checkTimeouts(cfg, IgniteConfiguration.DFLT_SPI_COMMUNICATION_TIMEOUT);
+    }
+
+    /**
+     * @throws Exception In case of error.
+     */
+    public void testDefaultCommunicationTimeoutsAfterNodeStart() throws Exception {
+        IgniteConfiguration cfg = new IgniteConfiguration();
+
+        cfg.setGridLogger(getTestResources().getLogger());
+        cfg.setSpiCommunicationTimeout(SPI_COMM_TIMEOUT);
+
+        Ignite node = startGrid(getTestGridName(), cfg);
+
+        try {
+            checkTimeouts(node.configuration(), SPI_COMM_TIMEOUT);
+        }
+        finally {
+            stopGrid();
+        }
+    }
+
+    /**
+     * @throws Exception
+     */
+    public void testAdvancedTimeoutsAfterNodeStart() throws Exception {
+        IgniteConfiguration cfg = super.getConfiguration();
+
+        cfg.setSpiCommunicationTimeout(SPI_COMM_TIMEOUT);
+
+        TcpDiscoverySpi discSpi = (TcpDiscoverySpi)cfg.getDiscoverySpi();
+
+        discSpi.setSocketTimeout(2500);
+        discSpi.setHeartbeatFrequency(1200);
+
+        TcpCommunicationSpi commSpi = (TcpCommunicationSpi)cfg.getCommunicationSpi();
+
+        commSpi.setConnectTimeout(6000);
+
+        Ignite node = startGrid(getTestGridName(), cfg);
+
+        try {
+            discSpi = (TcpDiscoverySpi)node.configuration().getDiscoverySpi();
+
+            assertEquals(2500, discSpi.getSocketTimeout());
+            assertEquals(SPI_COMM_TIMEOUT, discSpi.getNetworkTimeout());
+            assertEquals(SPI_COMM_TIMEOUT, discSpi.getAckTimeout());
+            assertEquals(1200, discSpi.getHeartbeatFrequency());
+
+            assert discSpi.getMaxAckTimeout() > discSpi.getAckTimeout() && discSpi.getMaxAckTimeout()
+                <= TcpDiscoverySpi.DFLT_MAX_ACK_TIMEOUT_LIMIT;
+
+            commSpi = (TcpCommunicationSpi)node.configuration().getCommunicationSpi();
+
+            assertEquals(6000, commSpi.getConnectTimeout());
+
+            assert commSpi.getMaxConnectTimeout() > commSpi.getConnectTimeout() && commSpi.getMaxConnectTimeout() <=
+                TcpCommunicationSpi.DFLT_MAX_CONN_TIMEOUT_LIMIT;
+        }
+        finally {
+            stopGrid();
+        }
+    }
+
+    /**
+     * Checks timeouts.
+     *
+     * @param cfg Ignite configuration.
+     * @param expectedTimeout Expected timeout value.
+     * @throws Exception In case of error.
+     */
+    private void checkTimeouts(IgniteConfiguration cfg, long expectedTimeout) throws Exception {
+        TcpDiscoverySpi discSpi = (TcpDiscoverySpi)cfg.getDiscoverySpi();
+
+        assertEquals(expectedTimeout, discSpi.getSocketTimeout());
+        assertEquals(expectedTimeout, discSpi.getNetworkTimeout());
+        assertEquals(expectedTimeout, discSpi.getAckTimeout());
+
+        Field field = TcpDiscoverySpi.class.getDeclaredField("HEARTBEAT_DIVIDER");
+        field.setAccessible(true);
+
+        assertEquals((long)(expectedTimeout / field.getDouble(null)), discSpi.getHeartbeatFrequency());
+
+        assert discSpi.getMaxAckTimeout() > discSpi.getAckTimeout() && discSpi.getMaxAckTimeout()
+            <= TcpDiscoverySpi.DFLT_MAX_ACK_TIMEOUT_LIMIT;
+
+        TcpCommunicationSpi commSpi = (TcpCommunicationSpi)cfg.getCommunicationSpi();
+
+        assertEquals(expectedTimeout, commSpi.getConnectTimeout());
+
+        assert commSpi.getMaxConnectTimeout() > commSpi.getConnectTimeout() && commSpi.getMaxConnectTimeout() <=
+            TcpCommunicationSpi.DFLT_MAX_CONN_TIMEOUT_LIMIT;
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/dd076a08/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpClientDiscoverySpiSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpClientDiscoverySpiSelfTest.java b/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpClientDiscoverySpiSelfTest.java
index ec6a526..9986539 100644
--- a/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpClientDiscoverySpiSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpClientDiscoverySpiSelfTest.java
@@ -100,7 +100,7 @@ public class TcpClientDiscoverySpiSelfTest extends GridCommonAbstractTest {
     private long joinTimeout = TcpDiscoverySpi.DFLT_JOIN_TIMEOUT;
 
     /** */
-    private long netTimeout = TcpDiscoverySpi.DFLT_NETWORK_TIMEOUT;
+    private long netTimeout = IgniteConfiguration.DFLT_SPI_COMMUNICATION_TIMEOUT;
 
     /** */
     private boolean longSockTimeouts;
@@ -193,7 +193,7 @@ public class TcpClientDiscoverySpiSelfTest extends GridCommonAbstractTest {
         nodeId = null;
         clientIpFinder = null;
         joinTimeout = TcpDiscoverySpi.DFLT_JOIN_TIMEOUT;
-        netTimeout = TcpDiscoverySpi.DFLT_NETWORK_TIMEOUT;
+        netTimeout = IgniteConfiguration.DFLT_SPI_COMMUNICATION_TIMEOUT;
         longSockTimeouts = false;
 
         assert G.allGrids().isEmpty();

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/dd076a08/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteKernalSelfTestSuite.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteKernalSelfTestSuite.java b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteKernalSelfTestSuite.java
index 575f1fa..74181d8 100644
--- a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteKernalSelfTestSuite.java
+++ b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteKernalSelfTestSuite.java
@@ -84,6 +84,7 @@ public class IgniteKernalSelfTestSuite extends TestSuite {
         suite.addTestSuite(GridUpdateNotifierSelfTest.class);
         suite.addTestSuite(GridLocalEventListenerSelfTest.class);
         suite.addTestSuite(IgniteTopologyPrintFormatSelfTest.class);
+        suite.addTestSuite(IgniteConfigurationValidationSelfTest.class);
 
         // Managed Services.
         suite.addTestSuite(GridServiceProcessorSingleNodeSelfTest.class);