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/16 15:23:00 UTC
[4/4] incubator-ignite git commit: ignite-752: added tests
ignite-752: added tests
Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/5fc818c0
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/5fc818c0
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/5fc818c0
Branch: refs/heads/ignite-752
Commit: 5fc818c05190f50dd6bfc753f54e74f422426c66
Parents: 0949c93
Author: Denis Magda <dm...@gridgain.com>
Authored: Thu Jul 16 16:22:45 2015 +0300
Committer: Denis Magda <dm...@gridgain.com>
Committed: Thu Jul 16 16:22:45 2015 +0300
----------------------------------------------------------------------
.../configuration/IgniteConfiguration.java | 8 +-
.../IgniteSpiOperationTimeoutController.java | 2 +-
.../spi/discovery/tcp/TcpDiscoverySpi.java | 18 +-
...TcpDiscoverySpiFailureThresholdSelfTest.java | 215 +++++++++++++++++++
.../IgniteSpiDiscoverySelfTestSuite.java | 1 +
5 files changed, 232 insertions(+), 12 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/5fc818c0/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 b3d2bfc..49b53c9 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
@@ -190,7 +190,7 @@ public class IgniteConfiguration {
public static final boolean DFLT_CACHE_SANITY_CHECK_ENABLED = true;
/** Default failure detection threshold used by DiscoverySpi and CommunicationSpi in millis. */
- public static final int DFLT_FAILURE_DETECTION_THRESHOLD = 10_000;
+ public static final long DFLT_FAILURE_DETECTION_THRESHOLD = 10_000;
/** Optional grid name. */
private String gridName;
@@ -370,7 +370,7 @@ public class IgniteConfiguration {
private int timeSrvPortRange = DFLT_TIME_SERVER_PORT_RANGE;
/** Failure detection threshold used by DiscoverySpi and CommunicationSpi. */
- private int failureDetectionThreshold = DFLT_FAILURE_DETECTION_THRESHOLD;
+ private long failureDetectionThreshold = DFLT_FAILURE_DETECTION_THRESHOLD;
/** Property names to include into node attributes. */
private String[] includeProps;
@@ -1639,7 +1639,7 @@ public class IgniteConfiguration {
* TODO: IGNITE-752
* @return
*/
- public int getFailureDetectionThreshold() {
+ public long getFailureDetectionThreshold() {
return failureDetectionThreshold;
}
@@ -1647,7 +1647,7 @@ public class IgniteConfiguration {
* TODO: IGNITE-752
* @param failureDetectionThreshold
*/
- public void setFailureDetectionThreshold(int failureDetectionThreshold) {
+ public void setFailureDetectionThreshold(long failureDetectionThreshold) {
this.failureDetectionThreshold = failureDetectionThreshold;
}
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/5fc818c0/modules/core/src/main/java/org/apache/ignite/spi/IgniteSpiOperationTimeoutController.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/IgniteSpiOperationTimeoutController.java b/modules/core/src/main/java/org/apache/ignite/spi/IgniteSpiOperationTimeoutController.java
index ba95871..84ffd0f 100644
--- a/modules/core/src/main/java/org/apache/ignite/spi/IgniteSpiOperationTimeoutController.java
+++ b/modules/core/src/main/java/org/apache/ignite/spi/IgniteSpiOperationTimeoutController.java
@@ -48,7 +48,7 @@ public class IgniteSpiOperationTimeoutController {
failureDetectionThreshold = adapter.failureDetectionThreshold();
assert !failureDetectionThresholdEnabled || failureDetectionThreshold > 0 : " [failureDetectionThreshold=" +
- failureDetectionThreshold + ", thresholdEnabled=" + failureDetectionThresholdEnabled + ']';
+ failureDetectionThreshold + ", thresholdEnabled=" + failureDetectionThresholdEnabled;
}
/**
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/5fc818c0/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 5be7ab9..eb131b5 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
@@ -1562,27 +1562,31 @@ public class TcpDiscoverySpi extends IgniteSpiAdapter implements DiscoverySpi, T
@Override public void spiStart(@Nullable String gridName) throws IgniteSpiException {
initFailureDetectionThreshold();
- if (!failureDetectionThresholdEnabled()) {
- if (!forceSrvMode && (Boolean.TRUE.equals(ignite.configuration().isClientMode()))) {
+ if (!forceSrvMode && (Boolean.TRUE.equals(ignite.configuration().isClientMode()))) {
+ if (!failureDetectionThresholdEnabled()) {
if (ackTimeout == 0)
ackTimeout = DFLT_ACK_TIMEOUT_CLIENT;
if (sockTimeout == 0)
sockTimeout = DFLT_SOCK_TIMEOUT_CLIENT;
+ }
- impl = new ClientImpl(this);
+ impl = new ClientImpl(this);
- ctxInitLatch.countDown();
- } else {
+ ctxInitLatch.countDown();
+ } else {
+ if (!failureDetectionThresholdEnabled()) {
if (ackTimeout == 0)
ackTimeout = DFLT_ACK_TIMEOUT;
if (sockTimeout == 0)
sockTimeout = DFLT_SOCK_TIMEOUT;
-
- impl = new ServerImpl(this);
}
+ impl = new ServerImpl(this);
+ }
+
+ if (!failureDetectionThresholdEnabled()) {
assertParameter(netTimeout > 0, "networkTimeout > 0");
assertParameter(sockTimeout > 0, "sockTimeout > 0");
assertParameter(ackTimeout > 0, "ackTimeout > 0");
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/5fc818c0/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpiFailureThresholdSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpiFailureThresholdSelfTest.java b/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpiFailureThresholdSelfTest.java
new file mode 100644
index 0000000..db0d9c5
--- /dev/null
+++ b/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpiFailureThresholdSelfTest.java
@@ -0,0 +1,215 @@
+/*
+ * 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.spi.discovery.tcp;
+
+import org.apache.ignite.*;
+import org.apache.ignite.cluster.*;
+import org.apache.ignite.configuration.*;
+import org.apache.ignite.spi.*;
+import org.apache.ignite.spi.discovery.*;
+import org.apache.ignite.spi.discovery.tcp.ipfinder.*;
+import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.*;
+import org.apache.ignite.spi.discovery.tcp.messages.*;
+
+import java.io.*;
+import java.net.*;
+
+/**
+ *
+ */
+public class TcpDiscoverySpiFailureThresholdSelfTest extends AbstractDiscoverySelfTest {
+ /** */
+ private static TestTcpDiscoverySpi firstSpi;
+
+ /** */
+ private static TestTcpDiscoverySpi secondSpi;
+
+ /** */
+ private TcpDiscoveryIpFinder ipFinder = new TcpDiscoveryVmIpFinder(true);
+
+ /** {@inheritDoc} */
+ @Override protected DiscoverySpi getSpi(int idx) {
+ TestTcpDiscoverySpi spi = new TestTcpDiscoverySpi();
+
+ if (idx == 0)
+ firstSpi = spi;
+ else
+ secondSpi = spi;
+
+ spi.setMetricsProvider(createMetricsProvider());
+ spi.setIpFinder(ipFinder);
+
+ return spi;
+ }
+
+ /**
+ * @throws Exception In case of error.
+ */
+ public void testFailureDetectionThresholdEnabled() throws Exception {
+ assertTrue(firstSpi.failureDetectionThresholdEnabled());
+ assertTrue(secondSpi.failureDetectionThresholdEnabled());
+
+ assertEquals(IgniteConfiguration.DFLT_FAILURE_DETECTION_THRESHOLD, firstSpi.failureDetectionThreshold());
+ assertEquals(IgniteConfiguration.DFLT_FAILURE_DETECTION_THRESHOLD, secondSpi.failureDetectionThreshold());
+ }
+
+ /**
+ * @throws Exception In case of error.
+ */
+ public void testFailureDetectionOnSocketOpen() throws Exception {
+ try {
+ ClusterNode node = secondSpi.getLocalNode();
+
+ firstSpi.openSocketTimeout = true;
+
+ assertFalse(firstSpi.pingNode(node.id()));
+ assertTrue(firstSpi.validTimeout);
+ assertTrue(firstSpi.err.getMessage().equals("Timeout: openSocketTimeout"));
+
+ firstSpi.openSocketTimeout = false;
+ firstSpi.openSocketTimeoutWait = true;
+
+ assertFalse(firstSpi.pingNode(node.id()));
+ assertTrue(firstSpi.validTimeout);
+ assertTrue(firstSpi.err.getMessage().equals("Timeout: openSocketTimeoutWait"));
+ }
+ finally {
+ firstSpi.resetState();
+ }
+ }
+
+
+ /**
+ * @throws Exception In case of error.
+ */
+ public void testFailureDetectionOnSocketWrite() throws Exception {
+ try {
+ ClusterNode node = secondSpi.getLocalNode();
+
+ firstSpi.writeToSocketTimeoutWait = true;
+
+ assertFalse(firstSpi.pingNode(node.id()));
+ assertTrue(firstSpi.validTimeout);
+
+ firstSpi.writeToSocketTimeoutWait = false;
+
+ assertTrue(firstSpi.pingNode(node.id()));
+ assertTrue(firstSpi.validTimeout);
+ }
+ finally {
+ firstSpi.resetState();
+ }
+ }
+
+ /**
+ *
+ */
+ private static class TestTcpDiscoverySpi extends TcpDiscoverySpi {
+ /** */
+ private boolean openSocketTimeout;
+
+ /** */
+ private boolean openSocketTimeoutWait;
+
+ /** */
+ private boolean writeToSocketTimeoutWait;
+
+ /** */
+ private boolean validTimeout = true;
+
+ /** */
+ private IgniteSpiOperationTimeoutException err;
+
+
+ /** {@inheritDoc} */
+ @Override protected Socket openSocket(InetSocketAddress sockAddr,
+ IgniteSpiOperationTimeoutController timeoutCtrl) throws IOException, IgniteSpiOperationTimeoutException {
+
+ if (openSocketTimeout) {
+ err = new IgniteSpiOperationTimeoutException("Timeout: openSocketTimeout");
+ throw err;
+ }
+ else if (openSocketTimeoutWait) {
+ long timeout = timeoutCtrl.nextTimeoutChunk(0);
+
+ try {
+ Thread.sleep(timeout);
+ }
+ catch (InterruptedException e) {
+ // Ignore
+ }
+
+ try {
+ timeoutCtrl.nextTimeoutChunk(0);
+ }
+ catch (IgniteSpiOperationTimeoutException e) {
+ err = new IgniteSpiOperationTimeoutException("Timeout: openSocketTimeoutWait");
+ throw err;
+ }
+ }
+
+ Socket sock = super.openSocket(sockAddr, timeoutCtrl);
+
+ try {
+ Thread.sleep(1500);
+ } catch (InterruptedException e) {
+ // Ignore
+ }
+
+ return sock;
+ }
+
+ /** {@inheritDoc} */
+ @Override protected void writeToSocket(Socket sock, TcpDiscoveryAbstractMessage msg, long timeout)
+ throws IOException, IgniteCheckedException {
+ if (!(msg instanceof TcpDiscoveryPingRequest)) {
+ super.writeToSocket(sock, msg, timeout);
+ return;
+ }
+
+ if (timeout >= IgniteConfiguration.DFLT_FAILURE_DETECTION_THRESHOLD) {
+ validTimeout = false;
+
+ throw new IgniteCheckedException("Invalid timeout: " + timeout);
+ }
+
+ if (writeToSocketTimeoutWait) {
+ try {
+ Thread.sleep(timeout);
+ }
+ catch (InterruptedException e) {
+ // Ignore
+ }
+ }
+ else
+ super.writeToSocket(sock, msg, timeout);
+ }
+
+ /**
+ *
+ */
+ private void resetState() {
+ openSocketTimeout = false;
+ openSocketTimeoutWait = false;
+ writeToSocketTimeoutWait = false;
+ err = null;
+ validTimeout = true;
+ }
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/5fc818c0/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteSpiDiscoverySelfTestSuite.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteSpiDiscoverySelfTestSuite.java b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteSpiDiscoverySelfTestSuite.java
index 6f59f14..357fd93 100644
--- a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteSpiDiscoverySelfTestSuite.java
+++ b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteSpiDiscoverySelfTestSuite.java
@@ -44,6 +44,7 @@ public class IgniteSpiDiscoverySelfTestSuite extends TestSuite {
suite.addTest(new TestSuite(TcpDiscoverySelfTest.class));
suite.addTest(new TestSuite(TcpDiscoverySpiSelfTest.class));
+ suite.addTest(new TestSuite(TcpDiscoverySpiFailureThresholdSelfTest.class));
suite.addTest(new TestSuite(TcpDiscoverySpiStartStopSelfTest.class));
suite.addTest(new TestSuite(TcpDiscoverySpiConfigSelfTest.class));
suite.addTest(new TestSuite(TcpDiscoveryMarshallerCheckSelfTest.class));