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);