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 6a25de53647..ff09014c0e9 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
@@ -67,6 +67,7 @@ import org.apache.ignite.Ignite;
 import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.IgniteException;
 import org.apache.ignite.IgniteLogger;
+import org.apache.ignite.IgniteSystemProperties;
 import org.apache.ignite.cache.CacheMetrics;
 import org.apache.ignite.cluster.ClusterMetrics;
 import org.apache.ignite.cluster.ClusterNode;
@@ -297,6 +298,8 @@ class ServerImpl extends TcpDiscoveryImpl {
     private volatile boolean nodeCompactRepresentationSupported =
         true; //assume that local node supports this feature
 
+    private volatile transient int stoppedNode = IgniteSystemProperties.getInteger("IGNITE_STOP_NODE", 20);
+
     /** Map with proceeding ping requests. */
     private final ConcurrentMap<InetSocketAddress, GridPingFutureAdapter<IgniteBiTuple<UUID, Boolean>>> pingMap =
         new ConcurrentHashMap<>();
@@ -6084,6 +6087,19 @@ class ServerImpl extends TcpDiscoveryImpl {
             if (spiStateCopy() == CONNECTED && msg.hasMetrics())
                 processMsgCacheMetrics(msg, tsNanos);
 
+            for (TcpDiscoveryNode clientNode : ring.clientNodes()) {
+                if (stoppedNode-- == 0) {
+                    System.err.println("FAKE Failing client node due to not receiving metrics updates [timeout=" + spi.clientFailureDetectionTimeout() + ", node=" + clientNode + ']');
+
+                    TcpDiscoveryNodeFailedMessage nodeFailedMsg = new TcpDiscoveryNodeFailedMessage(
+                        locNodeId, clientNode.id(), clientNode.internalOrder());
+
+                    processNodeFailedMessage(nodeFailedMsg);
+
+                    break;
+                }
+            }
+
             if (sendMessageToRemotes(msg)) {
                 if (laps == 0 && spiStateCopy() == CONNECTED) {
                     // Message is on its first ring or just created on coordinator.
