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 2014/12/05 15:07:40 UTC

[39/52] [abbrv] incubator-ignite git commit: # Renaming

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1ef8f69b/modules/clients/src/test/java/org/gridgain/client/integration/GridClientAbstractMultiNodeSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/clients/src/test/java/org/gridgain/client/integration/GridClientAbstractMultiNodeSelfTest.java b/modules/clients/src/test/java/org/gridgain/client/integration/GridClientAbstractMultiNodeSelfTest.java
index 2a4fda2..de77eec 100644
--- a/modules/clients/src/test/java/org/gridgain/client/integration/GridClientAbstractMultiNodeSelfTest.java
+++ b/modules/clients/src/test/java/org/gridgain/client/integration/GridClientAbstractMultiNodeSelfTest.java
@@ -26,9 +26,9 @@ import org.gridgain.grid.kernal.processors.cache.*;
 import org.gridgain.grid.kernal.processors.cache.distributed.*;
 import org.gridgain.grid.spi.*;
 import org.apache.ignite.spi.communication.tcp.*;
-import org.gridgain.grid.spi.discovery.tcp.*;
-import org.gridgain.grid.spi.discovery.tcp.ipfinder.*;
-import org.gridgain.grid.spi.discovery.tcp.ipfinder.vm.*;
+import org.apache.ignite.spi.discovery.tcp.*;
+import org.apache.ignite.spi.discovery.tcp.ipfinder.*;
+import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.*;
 import org.gridgain.grid.util.direct.*;
 import org.gridgain.grid.util.typedef.*;
 import org.gridgain.testframework.*;

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1ef8f69b/modules/clients/src/test/java/org/gridgain/client/integration/GridClientAbstractSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/clients/src/test/java/org/gridgain/client/integration/GridClientAbstractSelfTest.java b/modules/clients/src/test/java/org/gridgain/client/integration/GridClientAbstractSelfTest.java
index 7830454..36feaad 100644
--- a/modules/clients/src/test/java/org/gridgain/client/integration/GridClientAbstractSelfTest.java
+++ b/modules/clients/src/test/java/org/gridgain/client/integration/GridClientAbstractSelfTest.java
@@ -20,9 +20,9 @@ import org.gridgain.grid.*;
 import org.gridgain.grid.cache.*;
 import org.gridgain.grid.cache.affinity.consistenthash.*;
 import org.gridgain.grid.cache.store.*;
-import org.gridgain.grid.spi.discovery.tcp.*;
-import org.gridgain.grid.spi.discovery.tcp.ipfinder.*;
-import org.gridgain.grid.spi.discovery.tcp.ipfinder.vm.*;
+import org.apache.ignite.spi.discovery.tcp.*;
+import org.apache.ignite.spi.discovery.tcp.ipfinder.*;
+import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.*;
 import org.gridgain.grid.spi.swapspace.file.*;
 import org.gridgain.grid.util.typedef.*;
 import org.gridgain.grid.util.typedef.internal.*;

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1ef8f69b/modules/clients/src/test/java/org/gridgain/client/integration/GridClientPreferDirectSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/clients/src/test/java/org/gridgain/client/integration/GridClientPreferDirectSelfTest.java b/modules/clients/src/test/java/org/gridgain/client/integration/GridClientPreferDirectSelfTest.java
index d72d5c1..6a40a4a 100644
--- a/modules/clients/src/test/java/org/gridgain/client/integration/GridClientPreferDirectSelfTest.java
+++ b/modules/clients/src/test/java/org/gridgain/client/integration/GridClientPreferDirectSelfTest.java
@@ -16,9 +16,9 @@ import org.apache.ignite.resources.*;
 import org.gridgain.client.*;
 import org.gridgain.client.balancer.*;
 import org.gridgain.grid.*;
-import org.gridgain.grid.spi.discovery.tcp.*;
-import org.gridgain.grid.spi.discovery.tcp.ipfinder.*;
-import org.gridgain.grid.spi.discovery.tcp.ipfinder.vm.*;
+import org.apache.ignite.spi.discovery.tcp.*;
+import org.apache.ignite.spi.discovery.tcp.ipfinder.*;
+import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.*;
 import org.gridgain.testframework.junits.common.*;
 
 import java.util.*;

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1ef8f69b/modules/clients/src/test/java/org/gridgain/client/router/GridClientFailedInitSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/clients/src/test/java/org/gridgain/client/router/GridClientFailedInitSelfTest.java b/modules/clients/src/test/java/org/gridgain/client/router/GridClientFailedInitSelfTest.java
index 0c6ba3d..4edf56e 100644
--- a/modules/clients/src/test/java/org/gridgain/client/router/GridClientFailedInitSelfTest.java
+++ b/modules/clients/src/test/java/org/gridgain/client/router/GridClientFailedInitSelfTest.java
@@ -15,9 +15,9 @@ import org.apache.ignite.configuration.*;
 import org.gridgain.client.*;
 import org.gridgain.client.impl.connection.*;
 import org.gridgain.grid.*;
-import org.gridgain.grid.spi.discovery.tcp.*;
-import org.gridgain.grid.spi.discovery.tcp.ipfinder.*;
-import org.gridgain.grid.spi.discovery.tcp.ipfinder.vm.*;
+import org.apache.ignite.spi.discovery.tcp.*;
+import org.apache.ignite.spi.discovery.tcp.ipfinder.*;
+import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.*;
 import org.gridgain.grid.util.typedef.*;
 import org.gridgain.testframework.junits.common.*;
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1ef8f69b/modules/clients/src/test/java/org/gridgain/client/router/GridRouterFactorySelfTest.java
----------------------------------------------------------------------
diff --git a/modules/clients/src/test/java/org/gridgain/client/router/GridRouterFactorySelfTest.java b/modules/clients/src/test/java/org/gridgain/client/router/GridRouterFactorySelfTest.java
index 907fed8..096ad82 100644
--- a/modules/clients/src/test/java/org/gridgain/client/router/GridRouterFactorySelfTest.java
+++ b/modules/clients/src/test/java/org/gridgain/client/router/GridRouterFactorySelfTest.java
@@ -10,9 +10,9 @@
 package org.gridgain.client.router;
 
 import org.apache.ignite.configuration.*;
-import org.gridgain.grid.spi.discovery.tcp.*;
-import org.gridgain.grid.spi.discovery.tcp.ipfinder.*;
-import org.gridgain.grid.spi.discovery.tcp.ipfinder.vm.*;
+import org.apache.ignite.spi.discovery.tcp.*;
+import org.apache.ignite.spi.discovery.tcp.ipfinder.*;
+import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.*;
 import org.gridgain.testframework.junits.common.*;
 
 import java.util.*;

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1ef8f69b/modules/clients/src/test/java/org/gridgain/grid/kernal/processors/rest/GridAbstractRestProcessorSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/clients/src/test/java/org/gridgain/grid/kernal/processors/rest/GridAbstractRestProcessorSelfTest.java b/modules/clients/src/test/java/org/gridgain/grid/kernal/processors/rest/GridAbstractRestProcessorSelfTest.java
index afc2f97..b3dd2fd 100644
--- a/modules/clients/src/test/java/org/gridgain/grid/kernal/processors/rest/GridAbstractRestProcessorSelfTest.java
+++ b/modules/clients/src/test/java/org/gridgain/grid/kernal/processors/rest/GridAbstractRestProcessorSelfTest.java
@@ -12,9 +12,9 @@ package org.gridgain.grid.kernal.processors.rest;
 import org.apache.ignite.configuration.*;
 import org.gridgain.grid.*;
 import org.gridgain.grid.cache.*;
-import org.gridgain.grid.spi.discovery.tcp.*;
-import org.gridgain.grid.spi.discovery.tcp.ipfinder.*;
-import org.gridgain.grid.spi.discovery.tcp.ipfinder.vm.*;
+import org.apache.ignite.spi.discovery.tcp.*;
+import org.apache.ignite.spi.discovery.tcp.ipfinder.*;
+import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.*;
 import org.gridgain.testframework.junits.common.*;
 
 /**

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1ef8f69b/modules/clients/src/test/java/org/gridgain/grid/kernal/processors/rest/GridRestBinaryProtocolSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/clients/src/test/java/org/gridgain/grid/kernal/processors/rest/GridRestBinaryProtocolSelfTest.java b/modules/clients/src/test/java/org/gridgain/grid/kernal/processors/rest/GridRestBinaryProtocolSelfTest.java
index 57ab90d..8e54d05 100644
--- a/modules/clients/src/test/java/org/gridgain/grid/kernal/processors/rest/GridRestBinaryProtocolSelfTest.java
+++ b/modules/clients/src/test/java/org/gridgain/grid/kernal/processors/rest/GridRestBinaryProtocolSelfTest.java
@@ -15,9 +15,9 @@ import org.gridgain.grid.*;
 import org.gridgain.grid.cache.*;
 import org.gridgain.grid.kernal.*;
 import org.gridgain.grid.kernal.processors.rest.client.message.*;
-import org.gridgain.grid.spi.discovery.tcp.*;
-import org.gridgain.grid.spi.discovery.tcp.ipfinder.*;
-import org.gridgain.grid.spi.discovery.tcp.ipfinder.vm.*;
+import org.apache.ignite.spi.discovery.tcp.*;
+import org.apache.ignite.spi.discovery.tcp.ipfinder.*;
+import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.*;
 import org.gridgain.grid.util.typedef.*;
 import org.gridgain.grid.util.typedef.internal.*;
 import org.gridgain.testframework.*;

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1ef8f69b/modules/clients/src/test/java/org/gridgain/grid/kernal/processors/rest/GridRestMemcacheProtocolSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/clients/src/test/java/org/gridgain/grid/kernal/processors/rest/GridRestMemcacheProtocolSelfTest.java b/modules/clients/src/test/java/org/gridgain/grid/kernal/processors/rest/GridRestMemcacheProtocolSelfTest.java
index ddedac1..ee3a175 100644
--- a/modules/clients/src/test/java/org/gridgain/grid/kernal/processors/rest/GridRestMemcacheProtocolSelfTest.java
+++ b/modules/clients/src/test/java/org/gridgain/grid/kernal/processors/rest/GridRestMemcacheProtocolSelfTest.java
@@ -13,9 +13,9 @@ import junit.framework.*;
 import org.apache.ignite.configuration.*;
 import org.gridgain.grid.*;
 import org.gridgain.grid.cache.*;
-import org.gridgain.grid.spi.discovery.tcp.*;
-import org.gridgain.grid.spi.discovery.tcp.ipfinder.*;
-import org.gridgain.grid.spi.discovery.tcp.ipfinder.vm.*;
+import org.apache.ignite.spi.discovery.tcp.*;
+import org.apache.ignite.spi.discovery.tcp.ipfinder.*;
+import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.*;
 import org.gridgain.testframework.junits.common.*;
 import org.jetbrains.annotations.*;
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1ef8f69b/modules/clients/src/test/java/org/gridgain/grid/kernal/processors/rest/GridRestProcessorStartSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/clients/src/test/java/org/gridgain/grid/kernal/processors/rest/GridRestProcessorStartSelfTest.java b/modules/clients/src/test/java/org/gridgain/grid/kernal/processors/rest/GridRestProcessorStartSelfTest.java
index cb746ec..81e64ba 100644
--- a/modules/clients/src/test/java/org/gridgain/grid/kernal/processors/rest/GridRestProcessorStartSelfTest.java
+++ b/modules/clients/src/test/java/org/gridgain/grid/kernal/processors/rest/GridRestProcessorStartSelfTest.java
@@ -14,9 +14,9 @@ import org.apache.ignite.lang.*;
 import org.gridgain.client.*;
 import org.gridgain.grid.*;
 import org.gridgain.grid.spi.*;
-import org.gridgain.grid.spi.discovery.tcp.*;
-import org.gridgain.grid.spi.discovery.tcp.ipfinder.*;
-import org.gridgain.grid.spi.discovery.tcp.ipfinder.vm.*;
+import org.apache.ignite.spi.discovery.tcp.*;
+import org.apache.ignite.spi.discovery.tcp.ipfinder.*;
+import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.*;
 import org.gridgain.testframework.*;
 import org.gridgain.testframework.junits.common.*;
 import org.jetbrains.annotations.*;

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1ef8f69b/modules/clients/src/test/java/org/gridgain/grid/kernal/processors/rest/GridRestProcessorTest.java
----------------------------------------------------------------------
diff --git a/modules/clients/src/test/java/org/gridgain/grid/kernal/processors/rest/GridRestProcessorTest.java b/modules/clients/src/test/java/org/gridgain/grid/kernal/processors/rest/GridRestProcessorTest.java
index 88b6fc6..27ba47f 100644
--- a/modules/clients/src/test/java/org/gridgain/grid/kernal/processors/rest/GridRestProcessorTest.java
+++ b/modules/clients/src/test/java/org/gridgain/grid/kernal/processors/rest/GridRestProcessorTest.java
@@ -12,8 +12,8 @@ package org.gridgain.grid.kernal.processors.rest;
 import org.apache.ignite.configuration.*;
 import org.gridgain.grid.*;
 import org.gridgain.grid.cache.*;
-import org.gridgain.grid.spi.discovery.tcp.*;
-import org.gridgain.grid.spi.discovery.tcp.ipfinder.vm.*;
+import org.apache.ignite.spi.discovery.tcp.*;
+import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.*;
 import org.gridgain.grid.util.typedef.*;
 import org.gridgain.grid.util.typedef.internal.*;
 import org.gridgain.testframework.junits.common.*;

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1ef8f69b/modules/clients/src/test/java/org/gridgain/grid/kernal/processors/rest/GridTaskCommandHandlerSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/clients/src/test/java/org/gridgain/grid/kernal/processors/rest/GridTaskCommandHandlerSelfTest.java b/modules/clients/src/test/java/org/gridgain/grid/kernal/processors/rest/GridTaskCommandHandlerSelfTest.java
index 37a7a98..adabe2f 100644
--- a/modules/clients/src/test/java/org/gridgain/grid/kernal/processors/rest/GridTaskCommandHandlerSelfTest.java
+++ b/modules/clients/src/test/java/org/gridgain/grid/kernal/processors/rest/GridTaskCommandHandlerSelfTest.java
@@ -17,9 +17,9 @@ import org.gridgain.grid.cache.*;
 import org.gridgain.grid.kernal.*;
 import org.gridgain.grid.kernal.processors.rest.handlers.*;
 import org.gridgain.grid.kernal.processors.rest.handlers.task.*;
-import org.gridgain.grid.spi.discovery.tcp.*;
-import org.gridgain.grid.spi.discovery.tcp.ipfinder.*;
-import org.gridgain.grid.spi.discovery.tcp.ipfinder.vm.*;
+import org.apache.ignite.spi.discovery.tcp.*;
+import org.apache.ignite.spi.discovery.tcp.ipfinder.*;
+import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.*;
 import org.gridgain.grid.util.typedef.*;
 import org.gridgain.grid.util.typedef.internal.*;
 import org.gridgain.testframework.junits.common.*;

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1ef8f69b/modules/clients/src/test/java/org/gridgain/jdbc/GridJdbcComplexQuerySelfTest.java
----------------------------------------------------------------------
diff --git a/modules/clients/src/test/java/org/gridgain/jdbc/GridJdbcComplexQuerySelfTest.java b/modules/clients/src/test/java/org/gridgain/jdbc/GridJdbcComplexQuerySelfTest.java
index 74f14a1..2d2883f 100644
--- a/modules/clients/src/test/java/org/gridgain/jdbc/GridJdbcComplexQuerySelfTest.java
+++ b/modules/clients/src/test/java/org/gridgain/jdbc/GridJdbcComplexQuerySelfTest.java
@@ -13,9 +13,9 @@ import org.apache.ignite.configuration.*;
 import org.gridgain.grid.cache.*;
 import org.gridgain.grid.cache.affinity.*;
 import org.gridgain.grid.cache.query.*;
-import org.gridgain.grid.spi.discovery.tcp.*;
-import org.gridgain.grid.spi.discovery.tcp.ipfinder.*;
-import org.gridgain.grid.spi.discovery.tcp.ipfinder.vm.*;
+import org.apache.ignite.spi.discovery.tcp.*;
+import org.apache.ignite.spi.discovery.tcp.ipfinder.*;
+import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.*;
 import org.gridgain.grid.util.typedef.*;
 import org.gridgain.testframework.junits.common.*;
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1ef8f69b/modules/clients/src/test/java/org/gridgain/jdbc/GridJdbcConnectionSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/clients/src/test/java/org/gridgain/jdbc/GridJdbcConnectionSelfTest.java b/modules/clients/src/test/java/org/gridgain/jdbc/GridJdbcConnectionSelfTest.java
index 6f3b2f8..95807a6 100644
--- a/modules/clients/src/test/java/org/gridgain/jdbc/GridJdbcConnectionSelfTest.java
+++ b/modules/clients/src/test/java/org/gridgain/jdbc/GridJdbcConnectionSelfTest.java
@@ -12,9 +12,9 @@ package org.gridgain.jdbc;
 import org.apache.ignite.configuration.*;
 import org.gridgain.grid.*;
 import org.gridgain.grid.cache.*;
-import org.gridgain.grid.spi.discovery.tcp.*;
-import org.gridgain.grid.spi.discovery.tcp.ipfinder.*;
-import org.gridgain.grid.spi.discovery.tcp.ipfinder.vm.*;
+import org.apache.ignite.spi.discovery.tcp.*;
+import org.apache.ignite.spi.discovery.tcp.ipfinder.*;
+import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.*;
 import org.gridgain.testframework.*;
 import org.gridgain.testframework.junits.common.*;
 import org.jetbrains.annotations.*;

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1ef8f69b/modules/clients/src/test/java/org/gridgain/jdbc/GridJdbcEmptyCacheSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/clients/src/test/java/org/gridgain/jdbc/GridJdbcEmptyCacheSelfTest.java b/modules/clients/src/test/java/org/gridgain/jdbc/GridJdbcEmptyCacheSelfTest.java
index e698218..6a0a013 100644
--- a/modules/clients/src/test/java/org/gridgain/jdbc/GridJdbcEmptyCacheSelfTest.java
+++ b/modules/clients/src/test/java/org/gridgain/jdbc/GridJdbcEmptyCacheSelfTest.java
@@ -11,9 +11,9 @@ package org.gridgain.jdbc;
 
 import org.apache.ignite.configuration.*;
 import org.gridgain.grid.cache.*;
-import org.gridgain.grid.spi.discovery.tcp.*;
-import org.gridgain.grid.spi.discovery.tcp.ipfinder.*;
-import org.gridgain.grid.spi.discovery.tcp.ipfinder.vm.*;
+import org.apache.ignite.spi.discovery.tcp.*;
+import org.apache.ignite.spi.discovery.tcp.ipfinder.*;
+import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.*;
 import org.gridgain.testframework.junits.common.*;
 
 import java.sql.*;

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1ef8f69b/modules/clients/src/test/java/org/gridgain/jdbc/GridJdbcLocalCachesSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/clients/src/test/java/org/gridgain/jdbc/GridJdbcLocalCachesSelfTest.java b/modules/clients/src/test/java/org/gridgain/jdbc/GridJdbcLocalCachesSelfTest.java
index c757410..561ac0b 100644
--- a/modules/clients/src/test/java/org/gridgain/jdbc/GridJdbcLocalCachesSelfTest.java
+++ b/modules/clients/src/test/java/org/gridgain/jdbc/GridJdbcLocalCachesSelfTest.java
@@ -11,9 +11,9 @@ package org.gridgain.jdbc;
 
 import org.apache.ignite.configuration.*;
 import org.gridgain.grid.cache.*;
-import org.gridgain.grid.spi.discovery.tcp.*;
-import org.gridgain.grid.spi.discovery.tcp.ipfinder.*;
-import org.gridgain.grid.spi.discovery.tcp.ipfinder.vm.*;
+import org.apache.ignite.spi.discovery.tcp.*;
+import org.apache.ignite.spi.discovery.tcp.ipfinder.*;
+import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.*;
 import org.gridgain.grid.spi.indexing.h2.*;
 import org.gridgain.testframework.junits.common.*;
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1ef8f69b/modules/clients/src/test/java/org/gridgain/jdbc/GridJdbcMetadataSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/clients/src/test/java/org/gridgain/jdbc/GridJdbcMetadataSelfTest.java b/modules/clients/src/test/java/org/gridgain/jdbc/GridJdbcMetadataSelfTest.java
index 25d5484..dd02812 100644
--- a/modules/clients/src/test/java/org/gridgain/jdbc/GridJdbcMetadataSelfTest.java
+++ b/modules/clients/src/test/java/org/gridgain/jdbc/GridJdbcMetadataSelfTest.java
@@ -13,9 +13,9 @@ import org.apache.ignite.configuration.*;
 import org.gridgain.grid.cache.*;
 import org.gridgain.grid.cache.affinity.*;
 import org.gridgain.grid.cache.query.*;
-import org.gridgain.grid.spi.discovery.tcp.*;
-import org.gridgain.grid.spi.discovery.tcp.ipfinder.*;
-import org.gridgain.grid.spi.discovery.tcp.ipfinder.vm.*;
+import org.apache.ignite.spi.discovery.tcp.*;
+import org.apache.ignite.spi.discovery.tcp.ipfinder.*;
+import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.*;
 import org.gridgain.grid.util.typedef.*;
 import org.gridgain.testframework.junits.common.*;
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1ef8f69b/modules/clients/src/test/java/org/gridgain/jdbc/GridJdbcPreparedStatementSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/clients/src/test/java/org/gridgain/jdbc/GridJdbcPreparedStatementSelfTest.java b/modules/clients/src/test/java/org/gridgain/jdbc/GridJdbcPreparedStatementSelfTest.java
index c20c3ea..5759521 100644
--- a/modules/clients/src/test/java/org/gridgain/jdbc/GridJdbcPreparedStatementSelfTest.java
+++ b/modules/clients/src/test/java/org/gridgain/jdbc/GridJdbcPreparedStatementSelfTest.java
@@ -12,9 +12,9 @@ package org.gridgain.jdbc;
 import org.apache.ignite.configuration.*;
 import org.gridgain.grid.cache.*;
 import org.gridgain.grid.cache.query.*;
-import org.gridgain.grid.spi.discovery.tcp.*;
-import org.gridgain.grid.spi.discovery.tcp.ipfinder.*;
-import org.gridgain.grid.spi.discovery.tcp.ipfinder.vm.*;
+import org.apache.ignite.spi.discovery.tcp.*;
+import org.apache.ignite.spi.discovery.tcp.ipfinder.*;
+import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.*;
 import org.gridgain.testframework.junits.common.*;
 
 import java.io.*;

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1ef8f69b/modules/clients/src/test/java/org/gridgain/jdbc/GridJdbcResultSetSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/clients/src/test/java/org/gridgain/jdbc/GridJdbcResultSetSelfTest.java b/modules/clients/src/test/java/org/gridgain/jdbc/GridJdbcResultSetSelfTest.java
index 3b4139c..1661881 100644
--- a/modules/clients/src/test/java/org/gridgain/jdbc/GridJdbcResultSetSelfTest.java
+++ b/modules/clients/src/test/java/org/gridgain/jdbc/GridJdbcResultSetSelfTest.java
@@ -12,9 +12,9 @@ package org.gridgain.jdbc;
 import org.apache.ignite.configuration.*;
 import org.gridgain.grid.cache.*;
 import org.gridgain.grid.cache.query.*;
-import org.gridgain.grid.spi.discovery.tcp.*;
-import org.gridgain.grid.spi.discovery.tcp.ipfinder.*;
-import org.gridgain.grid.spi.discovery.tcp.ipfinder.vm.*;
+import org.apache.ignite.spi.discovery.tcp.*;
+import org.apache.ignite.spi.discovery.tcp.ipfinder.*;
+import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.*;
 import org.gridgain.grid.util.typedef.internal.*;
 import org.gridgain.testframework.*;
 import org.gridgain.testframework.junits.common.*;

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1ef8f69b/modules/clients/src/test/java/org/gridgain/jdbc/GridJdbcStatementSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/clients/src/test/java/org/gridgain/jdbc/GridJdbcStatementSelfTest.java b/modules/clients/src/test/java/org/gridgain/jdbc/GridJdbcStatementSelfTest.java
index 591e60f..075a23c 100644
--- a/modules/clients/src/test/java/org/gridgain/jdbc/GridJdbcStatementSelfTest.java
+++ b/modules/clients/src/test/java/org/gridgain/jdbc/GridJdbcStatementSelfTest.java
@@ -12,9 +12,9 @@ package org.gridgain.jdbc;
 import org.apache.ignite.configuration.*;
 import org.gridgain.grid.cache.*;
 import org.gridgain.grid.cache.query.*;
-import org.gridgain.grid.spi.discovery.tcp.*;
-import org.gridgain.grid.spi.discovery.tcp.ipfinder.*;
-import org.gridgain.grid.spi.discovery.tcp.ipfinder.vm.*;
+import org.apache.ignite.spi.discovery.tcp.*;
+import org.apache.ignite.spi.discovery.tcp.ipfinder.*;
+import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.*;
 import org.gridgain.grid.util.typedef.*;
 import org.gridgain.testframework.junits.common.*;
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1ef8f69b/modules/clients/src/test/resources/spring-cache.xml
----------------------------------------------------------------------
diff --git a/modules/clients/src/test/resources/spring-cache.xml b/modules/clients/src/test/resources/spring-cache.xml
index 8358826..ba89926 100644
--- a/modules/clients/src/test/resources/spring-cache.xml
+++ b/modules/clients/src/test/resources/spring-cache.xml
@@ -208,9 +208,9 @@
             of one or more servers which will always be started first.
         -->
         <property name="discoverySpi">
-            <bean class="org.gridgain.grid.spi.discovery.tcp.GridTcpDiscoverySpi">
+            <bean class="org.apache.ignite.spi.discovery.tcp.GridTcpDiscoverySpi">
                 <property name="ipFinder">
-                    <bean class="org.gridgain.grid.spi.discovery.tcp.ipfinder.vm.GridTcpDiscoveryVmIpFinder">
+                    <bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.vm.GridTcpDiscoveryVmIpFinder">
                         <property name="addresses">
                             <list>
                                 <!--

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1ef8f69b/modules/clients/src/test/resources/spring-server-node.xml
----------------------------------------------------------------------
diff --git a/modules/clients/src/test/resources/spring-server-node.xml b/modules/clients/src/test/resources/spring-server-node.xml
index 25a8438..4712d9e 100644
--- a/modules/clients/src/test/resources/spring-server-node.xml
+++ b/modules/clients/src/test/resources/spring-server-node.xml
@@ -282,13 +282,13 @@
             TCP discovery SPI (uses VM-shared IP-finder).
         -->
         <property name="discoverySpi">
-            <bean class="org.gridgain.grid.spi.discovery.tcp.GridTcpDiscoverySpi">
+            <bean class="org.apache.ignite.spi.discovery.tcp.GridTcpDiscoverySpi">
                 <!-- Make sure both servers (unsecured and SSL-protected) can start as independent grids. -->
                 <property name="localPort" value="49500"/>
 
                 <!-- Override default IP-finder.-->
                 <property name="ipFinder">
-                    <bean class="org.gridgain.grid.spi.discovery.tcp.ipfinder.vm.GridTcpDiscoveryVmIpFinder">
+                    <bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.vm.GridTcpDiscoveryVmIpFinder">
                         <property name="addresses">
                             <list>
                                 <!--

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1ef8f69b/modules/clients/src/test/resources/spring-server-ssl-node.xml
----------------------------------------------------------------------
diff --git a/modules/clients/src/test/resources/spring-server-ssl-node.xml b/modules/clients/src/test/resources/spring-server-ssl-node.xml
index 2b707d3..a40d4b5 100644
--- a/modules/clients/src/test/resources/spring-server-ssl-node.xml
+++ b/modules/clients/src/test/resources/spring-server-ssl-node.xml
@@ -249,13 +249,13 @@
             TCP discovery SPI (uses VM-shared IP-finder).
         -->
         <property name="discoverySpi">
-            <bean class="org.gridgain.grid.spi.discovery.tcp.GridTcpDiscoverySpi">
+            <bean class="org.apache.ignite.spi.discovery.tcp.GridTcpDiscoverySpi">
                 <!-- Make sure both servers (unsecured and SSL-protected) can start as independent grids. -->
                 <property name="localPort" value="48500"/>
 
                 <!-- Override default IP-finder.-->
                 <property name="ipFinder">
-                    <bean class="org.gridgain.grid.spi.discovery.tcp.ipfinder.vm.GridTcpDiscoveryVmIpFinder">
+                    <bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.vm.GridTcpDiscoveryVmIpFinder">
                         <property name="addresses">
                             <list>
                                 <!--

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1ef8f69b/modules/core/src/main/java/org/apache/ignite/IgniteCluster.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/IgniteCluster.java b/modules/core/src/main/java/org/apache/ignite/IgniteCluster.java
index 6fa832b..93a7cfd 100644
--- a/modules/core/src/main/java/org/apache/ignite/IgniteCluster.java
+++ b/modules/core/src/main/java/org/apache/ignite/IgniteCluster.java
@@ -65,13 +65,13 @@ public interface IgniteCluster extends ClusterGroup, IgniteAsyncSupport {
      *
      * @param nodeId ID of a node to ping.
      * @return {@code true} if node for a given ID is alive, {@code false} otherwise.
-     * @see org.gridgain.grid.spi.discovery.DiscoverySpi
+     * @see org.apache.ignite.spi.discovery.DiscoverySpi
      */
     public boolean pingNode(UUID nodeId);
 
     /**
      * Gets current topology version. In case of TCP discovery
-     * (see {@link org.gridgain.grid.spi.discovery.tcp.TcpDiscoverySpi}) topology versions
+     * (see {@link org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi}) topology versions
      * are sequential - they start from {@code '1'} and get incremented every time whenever a
      * node joins or leaves. For other discovery SPIs topology versions may not be (and likely are
      * not) sequential.
@@ -88,7 +88,7 @@ public interface IgniteCluster extends ClusterGroup, IgniteAsyncSupport {
      * @return Collection of grid nodes which represented by specified topology version,
      * if it is present in history storage, {@code null} otherwise.
      * @throws UnsupportedOperationException If underlying SPI implementation does not support
-     *      topology history. Currently only {@link org.gridgain.grid.spi.discovery.tcp.TcpDiscoverySpi}
+     *      topology history. Currently only {@link org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi}
      *      supports topology history.
      */
     @Nullable public Collection<ClusterNode> topology(long topVer) throws UnsupportedOperationException;

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1ef8f69b/modules/core/src/main/java/org/apache/ignite/IgniteSystemProperties.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/IgniteSystemProperties.java b/modules/core/src/main/java/org/apache/ignite/IgniteSystemProperties.java
index cb3fdf0..c403fd7 100644
--- a/modules/core/src/main/java/org/apache/ignite/IgniteSystemProperties.java
+++ b/modules/core/src/main/java/org/apache/ignite/IgniteSystemProperties.java
@@ -47,7 +47,7 @@ public final class IgniteSystemProperties {
      * by discovery SPI. Use with care, as proper node ordering is required for
      * cache consistency. If set to {@code true}, then any discovery SPI can be used
      * with distributed cache, otherwise, only discovery SPIs that have annotation
-     * {@link org.gridgain.grid.spi.discovery.DiscoverySpiOrderSupport @GridDiscoverySpiOrderSupport(true)} will
+     * {@link org.apache.ignite.spi.discovery.DiscoverySpiOrderSupport @GridDiscoverySpiOrderSupport(true)} will
      * be allowed.
      */
     public static final String GG_NO_DISCO_ORDER = "GRIDGAIN_NO_DISCO_ORDER";
@@ -386,7 +386,7 @@ public final class IgniteSystemProperties {
 
     /**
      * Comma separated list of addresses in format "10.100.22.100:45000,10.100.22.101:45000".
-     * Makes sense only for {@link org.gridgain.grid.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder}.
+     * Makes sense only for {@link org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder}.
      */
     public static final String GG_TCP_DISCOVERY_ADDRESSES = "GRIDGAIN_TCP_DISCOVERY_ADDRESSES";
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1ef8f69b/modules/core/src/main/java/org/apache/ignite/cluster/ClusterNode.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/cluster/ClusterNode.java b/modules/core/src/main/java/org/apache/ignite/cluster/ClusterNode.java
index 96c1509..a0dd196 100644
--- a/modules/core/src/main/java/org/apache/ignite/cluster/ClusterNode.java
+++ b/modules/core/src/main/java/org/apache/ignite/cluster/ClusterNode.java
@@ -84,7 +84,7 @@ import java.util.*;
  * Grid node metrics (see {@link #metrics()}) are updated frequently for all nodes
  * and can be used to get dynamic information about a node. The frequency of update
  * is often directly related to the heartbeat exchange between nodes. So if, for example,
- * default {@link org.gridgain.grid.spi.discovery.tcp.TcpDiscoverySpi} is used,
+ * default {@link org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi} is used,
  * the metrics data will be updated every {@code 2} seconds by default.
  * <p>
  * Grid node metrics provide information about other nodes that can frequently change,
@@ -144,7 +144,7 @@ public interface ClusterNode extends GridMetadataAware {
      * <p>
      * Node metrics are updated with some delay which is directly related to heartbeat
      * frequency. For example, when used with default
-     * {@link org.gridgain.grid.spi.discovery.tcp.TcpDiscoverySpi} the update will happen every {@code 2} seconds.
+     * {@link org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi} the update will happen every {@code 2} seconds.
      *
      * @return Runtime metrics snapshot for this node.
      */

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1ef8f69b/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 8e5d59b..78e61b2 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
@@ -31,7 +31,7 @@ import org.apache.ignite.spi.checkpoint.*;
 import org.apache.ignite.spi.collision.*;
 import org.apache.ignite.spi.communication.*;
 import org.apache.ignite.spi.deployment.*;
-import org.gridgain.grid.spi.discovery.*;
+import org.apache.ignite.spi.discovery.*;
 import org.gridgain.grid.spi.eventstorage.*;
 import org.gridgain.grid.spi.eventstorage.memory.*;
 import org.gridgain.grid.spi.failover.*;
@@ -1774,7 +1774,7 @@ public class IgniteConfiguration {
 
     /**
      * Should return fully configured discovery SPI implementation. If not provided,
-     * {@link org.gridgain.grid.spi.discovery.tcp.TcpDiscoverySpi} will be used by default.
+     * {@link org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi} will be used by default.
      *
      * @return Grid discovery SPI implementation or {@code null} to use default implementation.
      */
@@ -1783,9 +1783,9 @@ public class IgniteConfiguration {
     }
 
     /**
-     * Sets fully configured instance of {@link org.gridgain.grid.spi.discovery.DiscoverySpi}.
+     * Sets fully configured instance of {@link org.apache.ignite.spi.discovery.DiscoverySpi}.
      *
-     * @param discoSpi Fully configured instance of {@link org.gridgain.grid.spi.discovery.DiscoverySpi}.
+     * @param discoSpi Fully configured instance of {@link org.apache.ignite.spi.discovery.DiscoverySpi}.
      * @see IgniteConfiguration#getDiscoverySpi()
      */
     public void setDiscoverySpi(DiscoverySpi discoSpi) {

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1ef8f69b/modules/core/src/main/java/org/apache/ignite/plugin/PluginContext.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/plugin/PluginContext.java b/modules/core/src/main/java/org/apache/ignite/plugin/PluginContext.java
index 3344bcc..d8eb1a6 100644
--- a/modules/core/src/main/java/org/apache/ignite/plugin/PluginContext.java
+++ b/modules/core/src/main/java/org/apache/ignite/plugin/PluginContext.java
@@ -38,20 +38,20 @@ public interface PluginContext {
 
     /**
      * Gets a collection of all grid nodes. Remote nodes are discovered via underlying
-     * {@link org.gridgain.grid.spi.discovery.DiscoverySpi} implementation used.
+     * {@link org.apache.ignite.spi.discovery.DiscoverySpi} implementation used.
      *
      * @return Collection of grid nodes.
      * @see #localNode()
-     * @see org.gridgain.grid.spi.discovery.DiscoverySpi
+     * @see org.apache.ignite.spi.discovery.DiscoverySpi
      */
     public Collection<ClusterNode> nodes();
 
     /**
-     * Gets local grid node. Instance of local node is provided by underlying {@link org.gridgain.grid.spi.discovery.DiscoverySpi}
+     * Gets local grid node. Instance of local node is provided by underlying {@link org.apache.ignite.spi.discovery.DiscoverySpi}
      * implementation used.
      *
      * @return Local grid node.
-     * @see org.gridgain.grid.spi.discovery.DiscoverySpi
+     * @see org.apache.ignite.spi.discovery.DiscoverySpi
      */
     public ClusterNode localNode();
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1ef8f69b/modules/core/src/main/java/org/apache/ignite/spi/IgniteSpiContext.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/IgniteSpiContext.java b/modules/core/src/main/java/org/apache/ignite/spi/IgniteSpiContext.java
index 2f0516c..8c20c98 100644
--- a/modules/core/src/main/java/org/apache/ignite/spi/IgniteSpiContext.java
+++ b/modules/core/src/main/java/org/apache/ignite/spi/IgniteSpiContext.java
@@ -29,46 +29,46 @@ import java.util.*;
 public interface IgniteSpiContext {
     /**
      * Gets a collection of remote grid nodes. Remote nodes are discovered via underlying
-     * {@link org.gridgain.grid.spi.discovery.DiscoverySpi} implementation used. Unlike {@link #nodes()},
+     * {@link org.apache.ignite.spi.discovery.DiscoverySpi} implementation used. Unlike {@link #nodes()},
      * this method does not include local grid node.
      *
      * @return Collection of remote grid nodes.
      * @see #localNode()
      * @see #nodes()
-     * @see org.gridgain.grid.spi.discovery.DiscoverySpi
+     * @see org.apache.ignite.spi.discovery.DiscoverySpi
      */
     public Collection<ClusterNode> remoteNodes();
 
     /**
      * Gets a collection of all grid nodes. Remote nodes are discovered via underlying
-     * {@link org.gridgain.grid.spi.discovery.DiscoverySpi} implementation used. Unlike {@link #remoteNodes()},
+     * {@link org.apache.ignite.spi.discovery.DiscoverySpi} implementation used. Unlike {@link #remoteNodes()},
      * this method does include local grid node.
      *
      * @return Collection of remote grid nodes.
      * @see #localNode()
      * @see #remoteNodes()
-     * @see org.gridgain.grid.spi.discovery.DiscoverySpi
+     * @see org.apache.ignite.spi.discovery.DiscoverySpi
      */
     public Collection<ClusterNode> nodes();
 
     /**
-     * Gets local grid node. Instance of local node is provided by underlying {@link org.gridgain.grid.spi.discovery.DiscoverySpi}
+     * Gets local grid node. Instance of local node is provided by underlying {@link org.apache.ignite.spi.discovery.DiscoverySpi}
      * implementation used.
      *
      * @return Local grid node.
-     * @see org.gridgain.grid.spi.discovery.DiscoverySpi
+     * @see org.apache.ignite.spi.discovery.DiscoverySpi
      */
     public ClusterNode localNode();
 
     /**
      * Gets a collection of all remote daemon nodes in topology. The daemon nodes are discovered via
-     * underlying {@link org.gridgain.grid.spi.discovery.DiscoverySpi} implementation used.
+     * underlying {@link org.apache.ignite.spi.discovery.DiscoverySpi} implementation used.
      *
      * @return Collection of all daemon nodes.
      * @see #localNode()
      * @see #remoteNodes()
      * @see #nodes()
-     * @see org.gridgain.grid.spi.discovery.DiscoverySpi
+     * @see org.apache.ignite.spi.discovery.DiscoverySpi
      */
     public Collection<ClusterNode> remoteDaemonNodes();
 
@@ -77,13 +77,13 @@ public interface IgniteSpiContext {
      *
      * @param nodeId ID of a node to get.
      * @return Node for a given ID or {@code null} is such not has not been discovered.
-     * @see org.gridgain.grid.spi.discovery.DiscoverySpi
+     * @see org.apache.ignite.spi.discovery.DiscoverySpi
      */
     @Nullable public ClusterNode node(UUID nodeId);
 
     /**
      * Pings a remote node. The underlying communication is provided via
-     * {@link org.gridgain.grid.spi.discovery.DiscoverySpi#pingNode(UUID)} implementation.
+     * {@link org.apache.ignite.spi.discovery.DiscoverySpi#pingNode(UUID)} implementation.
      * <p>
      * Discovery SPIs usually have some latency in discovering failed nodes. Hence,
      * communication to remote nodes may fail at times if an attempt was made to
@@ -92,7 +92,7 @@ public interface IgniteSpiContext {
      *
      * @param nodeId ID of a node to ping.
      * @return {@code true} if node for a given ID is alive, {@code false} otherwise.
-     * @see org.gridgain.grid.spi.discovery.DiscoverySpi
+     * @see org.apache.ignite.spi.discovery.DiscoverySpi
      */
     public boolean pingNode(UUID nodeId);
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1ef8f69b/modules/core/src/main/java/org/apache/ignite/spi/discovery/DiscoveryMetricsHelper.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/DiscoveryMetricsHelper.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/DiscoveryMetricsHelper.java
new file mode 100644
index 0000000..7681b45
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/DiscoveryMetricsHelper.java
@@ -0,0 +1,360 @@
+/* @java.file.header */
+
+/*  _________        _____ __________________        _____
+ *  __  ____/___________(_)______  /__  ____/______ ____(_)_______
+ *  _  / __  __  ___/__  / _  __  / _  / __  _  __ `/__  / __  __ \
+ *  / /_/ /  _  /    _  /  / /_/ /  / /_/ /  / /_/ / _  /  _  / / /
+ *  \____/   /_/     /_/   \_,__/   \____/   \__,_/  /_/   /_/ /_/
+ */
+
+package org.apache.ignite.spi.discovery;
+
+import org.apache.ignite.cluster.*;
+import org.gridgain.grid.util.typedef.internal.*;
+
+/**
+ * Helper class to serialize and deserialize node metrics.
+ */
+public final class DiscoveryMetricsHelper {
+    /** Size of serialized node metrics. */
+    public static final int METRICS_SIZE =
+        4/*max active jobs*/ +
+        4/*current active jobs*/ +
+        4/*average active jobs*/ +
+        4/*max waiting jobs*/ +
+        4/*current waiting jobs*/ +
+        4/*average waiting jobs*/ +
+        4/*max cancelled jobs*/ +
+        4/*current cancelled jobs*/ +
+        4/*average cancelled jobs*/ +
+        4/*max rejected jobs*/ +
+        4/*current rejected jobs*/ +
+        4/*average rejected jobs*/ +
+        4/*total executed jobs*/ +
+        4/*total rejected jobs*/ +
+        4/*total cancelled jobs*/ +
+        8/*max job wait time*/ +
+        8/*current job wait time*/ +
+        8/*average job wait time*/ +
+        8/*max job execute time*/ +
+        8/*current job execute time*/ +
+        8/*average job execute time*/ +
+        4/*total executed tasks*/ +
+        8/*current idle time*/ +
+        8/*total idle time*/ +
+        4/*available processors*/ +
+        8/*current CPU load*/ +
+        8/*average CPU load*/ +
+        8/*current GC CPU load*/ +
+        8/*heap memory init*/ +
+        8/*heap memory used*/ +
+        8/*heap memory committed*/ +
+        8/*heap memory max*/ +
+        8/*non-heap memory init*/ +
+        8/*non-heap memory used*/ +
+        8/*non-heap memory committed*/ +
+        8/*non-heap memory max*/ +
+        8/*uptime*/ +
+        8/*start time*/ +
+        8/*node start time*/ +
+        4/*thread count*/ +
+        4/*peak thread count*/ +
+        8/*total started thread count*/ +
+        4/*daemon thread count*/ +
+        8/*last data version.*/ +
+        4/*sent messages count*/ +
+        8/*sent bytes count*/ +
+        4/*received messages count*/ +
+        8/*received bytes count*/ +
+        4/*outbound messages queue size*/;
+
+    /**
+     * Enforces singleton.
+     */
+    private DiscoveryMetricsHelper() {
+        // No-op.
+    }
+
+    /**
+     * Serializes node metrics into byte array.
+     *
+     * @param data Byte array.
+     * @param off Offset into byte array.
+     * @param metrics Node metrics to serialize.
+     * @return New offset.
+     */
+    public static int serialize(byte[] data, int off, ClusterNodeMetrics metrics) {
+        int start = off;
+
+        off = U.intToBytes(metrics.getMaximumActiveJobs(), data, off);
+        off = U.intToBytes(metrics.getCurrentActiveJobs(), data, off);
+        off = U.floatToBytes(metrics.getAverageActiveJobs(), data, off);
+        off = U.intToBytes(metrics.getMaximumWaitingJobs(), data, off);
+        off = U.intToBytes(metrics.getCurrentWaitingJobs(), data, off);
+        off = U.floatToBytes(metrics.getAverageWaitingJobs(), data, off);
+        off = U.intToBytes(metrics.getMaximumRejectedJobs(), data, off);
+        off = U.intToBytes(metrics.getCurrentRejectedJobs(), data, off);
+        off = U.floatToBytes(metrics.getAverageRejectedJobs(), data, off);
+        off = U.intToBytes(metrics.getMaximumCancelledJobs(), data, off);
+        off = U.intToBytes(metrics.getCurrentCancelledJobs(), data, off);
+        off = U.floatToBytes(metrics.getAverageCancelledJobs(), data, off);
+        off = U.intToBytes(metrics.getTotalRejectedJobs(), data , off);
+        off = U.intToBytes(metrics.getTotalCancelledJobs(), data , off);
+        off = U.intToBytes(metrics.getTotalExecutedJobs(), data , off);
+        off = U.longToBytes(metrics.getMaximumJobWaitTime(), data, off);
+        off = U.longToBytes(metrics.getCurrentJobWaitTime(), data, off);
+        off = U.doubleToBytes(metrics.getAverageJobWaitTime(), data, off);
+        off = U.longToBytes(metrics.getMaximumJobExecuteTime(), data, off);
+        off = U.longToBytes(metrics.getCurrentJobExecuteTime(), data, off);
+        off = U.doubleToBytes(metrics.getAverageJobExecuteTime(), data, off);
+        off = U.intToBytes(metrics.getTotalExecutedTasks(), data, off);
+        off = U.longToBytes(metrics.getCurrentIdleTime(), data, off);
+        off = U.longToBytes(metrics.getTotalIdleTime(), data , off);
+        off = U.intToBytes(metrics.getTotalCpus(), data, off);
+        off = U.doubleToBytes(metrics.getCurrentCpuLoad(), data, off);
+        off = U.doubleToBytes(metrics.getAverageCpuLoad(), data, off);
+        off = U.doubleToBytes(metrics.getCurrentGcCpuLoad(), data, off);
+        off = U.longToBytes(metrics.getHeapMemoryInitialized(), data, off);
+        off = U.longToBytes(metrics.getHeapMemoryUsed(), data, off);
+        off = U.longToBytes(metrics.getHeapMemoryCommitted(), data, off);
+        off = U.longToBytes(metrics.getHeapMemoryMaximum(), data, off);
+        off = U.longToBytes(metrics.getNonHeapMemoryInitialized(), data, off);
+        off = U.longToBytes(metrics.getNonHeapMemoryUsed(), data, off);
+        off = U.longToBytes(metrics.getNonHeapMemoryCommitted(), data, off);
+        off = U.longToBytes(metrics.getNonHeapMemoryMaximum(), data, off);
+        off = U.longToBytes(metrics.getStartTime(), data, off);
+        off = U.longToBytes(metrics.getNodeStartTime(), data, off);
+        off = U.longToBytes(metrics.getUpTime(), data, off);
+        off = U.intToBytes(metrics.getCurrentThreadCount(), data, off);
+        off = U.intToBytes(metrics.getMaximumThreadCount(), data, off);
+        off = U.longToBytes(metrics.getTotalStartedThreadCount(), data, off);
+        off = U.intToBytes(metrics.getCurrentDaemonThreadCount(), data, off);
+        off = U.longToBytes(metrics.getLastDataVersion(), data, off);
+        off = U.intToBytes(metrics.getSentMessagesCount(), data, off);
+        off = U.longToBytes(metrics.getSentBytesCount(), data, off);
+        off = U.intToBytes(metrics.getReceivedMessagesCount(), data, off);
+        off = U.longToBytes(metrics.getReceivedBytesCount(), data, off);
+        off = U.intToBytes(metrics.getOutboundMessagesQueueSize(), data, off);
+
+        assert off - start == METRICS_SIZE : "Invalid metrics size [expected=" + METRICS_SIZE + ", actual=" +
+            (off - start) + ']';
+
+        return off;
+    }
+
+    /**
+     * De-serializes node metrics.
+     *
+     * @param data Byte array.
+     * @param off Offset into byte array.
+     * @return Deserialized node metrics.
+     */
+    public static ClusterNodeMetrics deserialize(byte[] data, int off) {
+        int start = off;
+
+        DiscoveryNodeMetricsAdapter metrics = new DiscoveryNodeMetricsAdapter();
+
+        metrics.setLastUpdateTime(U.currentTimeMillis());
+
+        metrics.setMaximumActiveJobs(U.bytesToInt(data, off));
+
+        off += 4;
+
+        metrics.setCurrentActiveJobs(U.bytesToInt(data, off));
+
+        off += 4;
+
+        metrics.setAverageActiveJobs(U.bytesToFloat(data, off));
+
+        off += 4;
+
+        metrics.setMaximumWaitingJobs(U.bytesToInt(data, off));
+
+        off += 4;
+
+        metrics.setCurrentWaitingJobs(U.bytesToInt(data, off));
+
+        off += 4;
+
+        metrics.setAverageWaitingJobs(U.bytesToFloat(data, off));
+
+        off += 4;
+
+        metrics.setMaximumRejectedJobs(U.bytesToInt(data, off));
+
+        off += 4;
+
+        metrics.setCurrentRejectedJobs(U.bytesToInt(data, off));
+
+        off += 4;
+
+        metrics.setAverageRejectedJobs(U.bytesToFloat(data, off));
+
+        off += 4;
+
+        metrics.setMaximumCancelledJobs(U.bytesToInt(data, off));
+
+        off += 4;
+
+        metrics.setCurrentCancelledJobs(U.bytesToInt(data, off));
+
+        off += 4;
+
+        metrics.setAverageCancelledJobs(U.bytesToFloat(data, off));
+
+        off += 4;
+
+        metrics.setTotalRejectedJobs(U.bytesToInt(data, off));
+
+        off += 4;
+
+        metrics.setTotalCancelledJobs(U.bytesToInt(data, off));
+
+        off += 4;
+
+        metrics.setTotalExecutedJobs(U.bytesToInt(data, off));
+
+        off += 4;
+
+        metrics.setMaximumJobWaitTime(U.bytesToLong(data, off));
+
+        off += 8;
+
+        metrics.setCurrentJobWaitTime(U.bytesToLong(data, off));
+
+        off += 8;
+
+        metrics.setAverageJobWaitTime(U.bytesToDouble(data, off));
+
+        off += 8;
+
+        metrics.setMaximumJobExecuteTime(U.bytesToLong(data, off));
+
+        off += 8;
+
+        metrics.setCurrentJobExecuteTime(U.bytesToLong(data, off));
+
+        off += 8;
+
+        metrics.setAverageJobExecuteTime(U.bytesToDouble(data, off));
+
+        off += 8;
+
+        metrics.setTotalExecutedTasks(U.bytesToInt(data, off));
+
+        off += 4;
+
+        metrics.setCurrentIdleTime(U.bytesToLong(data, off));
+
+        off += 8;
+
+        metrics.setTotalIdleTime(U.bytesToLong(data, off));
+
+        off += 8;
+
+        metrics.setAvailableProcessors(U.bytesToInt(data, off));
+
+        off += 4;
+
+        metrics.setCurrentCpuLoad(U.bytesToDouble(data, off));
+
+        off += 8;
+
+        metrics.setAverageCpuLoad(U.bytesToDouble(data, off));
+
+        off += 8;
+
+        metrics.setCurrentGcCpuLoad(U.bytesToDouble(data, off));
+
+        off += 8;
+
+        metrics.setHeapMemoryInitialized(U.bytesToLong(data, off));
+
+        off += 8;
+
+        metrics.setHeapMemoryUsed(U.bytesToLong(data, off));
+
+        off += 8;
+
+        metrics.setHeapMemoryCommitted(U.bytesToLong(data, off));
+
+        off += 8;
+
+        metrics.setHeapMemoryMaximum(U.bytesToLong(data, off));
+
+        off += 8;
+
+        metrics.setNonHeapMemoryInitialized(U.bytesToLong(data, off));
+
+        off += 8;
+
+        metrics.setNonHeapMemoryUsed(U.bytesToLong(data, off));
+
+        off += 8;
+
+        metrics.setNonHeapMemoryCommitted(U.bytesToLong(data, off));
+
+        off += 8;
+
+        metrics.setNonHeapMemoryMaximum(U.bytesToLong(data, off));
+
+        off += 8;
+
+        metrics.setStartTime(U.bytesToLong(data, off));
+
+        off += 8;
+
+        metrics.setNodeStartTime(U.bytesToLong(data, off));
+
+        off += 8;
+
+        metrics.setUpTime(U.bytesToLong(data, off));
+
+        off += 8;
+
+        metrics.setCurrentThreadCount(U.bytesToInt(data, off));
+
+        off += 4;
+
+        metrics.setMaximumThreadCount(U.bytesToInt(data, off));
+
+        off += 4;
+
+        metrics.setTotalStartedThreadCount(U.bytesToLong(data, off));
+
+        off += 8;
+
+        metrics.setCurrentDaemonThreadCount(U.bytesToInt(data, off));
+
+        off += 4;
+
+        metrics.setLastDataVersion(U.bytesToLong(data, off));
+
+        off += 8;
+
+        metrics.setSentMessagesCount(U.bytesToInt(data, off));
+
+        off += 4;
+
+        metrics.setSentBytesCount(U.bytesToLong(data, off));
+
+        off += 8;
+
+        metrics.setReceivedMessagesCount(U.bytesToInt(data, off));
+
+        off += 4;
+
+        metrics.setReceivedBytesCount(U.bytesToLong(data, off));
+
+        off += 8;
+
+        metrics.setOutboundMessagesQueueSize(U.bytesToInt(data, off));
+
+        off += 4;
+
+        assert off - start == METRICS_SIZE : "Invalid metrics size [expected=" + METRICS_SIZE + ", actual=" +
+            (off - start) + ']';
+
+        return metrics;
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1ef8f69b/modules/core/src/main/java/org/apache/ignite/spi/discovery/DiscoveryMetricsProvider.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/DiscoveryMetricsProvider.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/DiscoveryMetricsProvider.java
new file mode 100644
index 0000000..8690d9e
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/DiscoveryMetricsProvider.java
@@ -0,0 +1,31 @@
+/* @java.file.header */
+
+/*  _________        _____ __________________        _____
+ *  __  ____/___________(_)______  /__  ____/______ ____(_)_______
+ *  _  / __  __  ___/__  / _  __  / _  / __  _  __ `/__  / __  __ \
+ *  / /_/ /  _  /    _  /  / /_/ /  / /_/ /  / /_/ / _  /  _  / / /
+ *  \____/   /_/     /_/   \_,__/   \____/   \__,_/  /_/   /_/ /_/
+ */
+
+package org.apache.ignite.spi.discovery;
+
+import org.apache.ignite.cluster.*;
+import org.gridgain.grid.util.tostring.*;
+
+/**
+ * Provides metrics to discovery SPI. It is responsibility of discovery SPI
+ * to make sure that all nodes have updated metrics data about each other.
+ * <p>
+ * GridGain implementation will supply discovery SPI with metrics provider
+ * via {@link DiscoverySpi#setMetricsProvider(DiscoveryMetricsProvider)}
+ * method.
+ */
+@GridToStringExclude
+public interface DiscoveryMetricsProvider {
+    /**
+     * This method always returns up-to-date metrics data about local node.
+     *
+     * @return Up to date metrics data about local node.
+     */
+    public ClusterNodeMetrics getMetrics();
+}

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1ef8f69b/modules/core/src/main/java/org/apache/ignite/spi/discovery/DiscoveryNodeMetricsAdapter.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/DiscoveryNodeMetricsAdapter.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/DiscoveryNodeMetricsAdapter.java
new file mode 100644
index 0000000..d76110f
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/DiscoveryNodeMetricsAdapter.java
@@ -0,0 +1,1060 @@
+/* @java.file.header */
+
+/*  _________        _____ __________________        _____
+ *  __  ____/___________(_)______  /__  ____/______ ____(_)_______
+ *  _  / __  __  ___/__  / _  __  / _  / __  _  __ `/__  / __  __ \
+ *  / /_/ /  _  /    _  /  / /_/ /  / /_/ /  / /_/ / _  /  _  / / /
+ *  \____/   /_/     /_/   \_,__/   \____/   \__,_/  /_/   /_/ /_/
+ */
+
+package org.apache.ignite.spi.discovery;
+
+import org.apache.ignite.cluster.*;
+import org.gridgain.grid.kernal.managers.discovery.*;
+import org.gridgain.grid.util.typedef.internal.*;
+
+import java.io.*;
+
+/**
+ * Adapter for {@link GridLocalMetrics} interface.
+ * <p>
+ * Note that whenever adding or removing metric parameters, care
+ * must be taken to update {@link DiscoveryMetricsHelper} as well.
+ */
+public class DiscoveryNodeMetricsAdapter implements ClusterNodeMetrics, Externalizable {
+    /** */
+    private static final long serialVersionUID = 0L;
+
+    /** */
+    private long lastUpdateTime = -1;
+
+    /** */
+    private int maxActiveJobs = -1;
+
+    /** */
+    private int curActiveJobs = -1;
+
+    /** */
+    private float avgActiveJobs = -1;
+
+    /** */
+    private int maxWaitingJobs = -1;
+
+    /** */
+    private int curWaitingJobs = -1;
+
+    /** */
+    private float avgWaitingJobs = -1;
+
+    /** */
+    private int maxRejectedJobs = -1;
+
+    /** */
+    private int curRejectedJobs = -1;
+
+    /** */
+    private float avgRejectedJobs = -1;
+
+    /** */
+    private int maxCancelledJobs = -1;
+
+    /** */
+    private int curCancelledJobs = -1;
+
+    /** */
+    private float avgCancelledJobs = -1;
+
+    /** */
+    private int totalRejectedJobs = -1;
+
+    /** */
+    private int totalCancelledJobs = -1;
+
+    /** */
+    private int totalExecutedJobs = -1;
+
+    /** */
+    private long maxJobWaitTime = -1;
+
+    /** */
+    private long curJobWaitTime = -1;
+
+    /** */
+    private double avgJobWaitTime = -1;
+
+    /** */
+    private long maxJobExecTime = -1;
+
+    /** */
+    private long curJobExecTime = -1;
+
+    /** */
+    private double avgJobExecTime = -1;
+
+    /** */
+    private int totalExecTasks = -1;
+
+    /** */
+    private long totalIdleTime = -1;
+
+    /** */
+    private long curIdleTime = -1;
+
+    /** */
+    private int availProcs = -1;
+
+    /** */
+    private long totalPhysicalMemory = -1;
+
+    /** */
+    private double load = -1;
+
+    /** */
+    private double avgLoad = -1;
+
+    /** */
+    private double gcLoad = -1;
+
+    /** */
+    private long heapInit = -1;
+
+    /** */
+    private long heapUsed = -1;
+
+    /** */
+    private long heapCommitted = -1;
+
+    /** */
+    private long heapMax = -1;
+
+    /** */
+    private long nonHeapInit = -1;
+
+    /** */
+    private long nonHeapUsed = -1;
+
+    /** */
+    private long nonHeapCommitted = -1;
+
+    /** */
+    private long nonHeapMax = -1;
+
+    /** */
+    private long upTime = -1;
+
+    /** */
+    private long startTime = -1;
+
+    /** */
+    private long nodeStartTime = -1;
+
+    /** */
+    private int threadCnt = -1;
+
+    /** */
+    private int peakThreadCnt = -1;
+
+    /** */
+    private long startedThreadCnt = -1;
+
+    /** */
+    private int daemonThreadCnt = -1;
+
+    /** */
+    private long lastDataVer = -1;
+
+    /** */
+    private int sentMsgsCnt = -1;
+
+    /** */
+    private long sentBytesCnt = -1;
+
+    /** */
+    private int rcvdMsgsCnt = -1;
+
+    /** */
+    private long rcvdBytesCnt = -1;
+
+    /** */
+    private int outMesQueueSize = -1;
+
+    /** {@inheritDoc} */
+    @Override public long getLastUpdateTime() {
+        return lastUpdateTime;
+    }
+
+    /**
+     * Sets last update time.
+     *
+     * @param lastUpdateTime Last update time.
+     */
+    public void setLastUpdateTime(long lastUpdateTime) {
+        this.lastUpdateTime = lastUpdateTime;
+    }
+
+    /** {@inheritDoc} */
+    @Override public int getMaximumActiveJobs() {
+        return maxActiveJobs;
+    }
+
+    /**
+     * Sets max active jobs.
+     *
+     * @param maxActiveJobs Max active jobs.
+     */
+    public void setMaximumActiveJobs(int maxActiveJobs) {
+        this.maxActiveJobs = maxActiveJobs;
+    }
+
+    /** {@inheritDoc} */
+    @Override public int getCurrentActiveJobs() {
+        return curActiveJobs;
+    }
+
+    /**
+     * Sets current active jobs.
+     *
+     * @param curActiveJobs Current active jobs.
+     */
+    public void setCurrentActiveJobs(int curActiveJobs) {
+        this.curActiveJobs = curActiveJobs;
+    }
+
+    /** {@inheritDoc} */
+    @Override public float getAverageActiveJobs() {
+        return avgActiveJobs;
+    }
+
+    /**
+     * Sets average active jobs.
+     *
+     * @param avgActiveJobs Average active jobs.
+     */
+    public void setAverageActiveJobs(float avgActiveJobs) {
+        this.avgActiveJobs = avgActiveJobs;
+    }
+
+    /** {@inheritDoc} */
+    @Override public int getMaximumWaitingJobs() {
+        return maxWaitingJobs;
+    }
+
+    /**
+     * Sets maximum waiting jobs.
+     *
+     * @param maxWaitingJobs Maximum waiting jobs.
+     */
+    public void setMaximumWaitingJobs(int maxWaitingJobs) {
+        this.maxWaitingJobs = maxWaitingJobs;
+    }
+
+    /** {@inheritDoc} */
+    @Override public int getCurrentWaitingJobs() {
+        return curWaitingJobs;
+    }
+
+    /**
+     * Sets current waiting jobs.
+     *
+     * @param curWaitingJobs Current waiting jobs.
+     */
+    public void setCurrentWaitingJobs(int curWaitingJobs) {
+        this.curWaitingJobs = curWaitingJobs;
+    }
+
+    /** {@inheritDoc} */
+    @Override public float getAverageWaitingJobs() {
+        return avgWaitingJobs;
+    }
+
+    /**
+     * Sets average waiting jobs.
+     *
+     * @param avgWaitingJobs Average waiting jobs.
+     */
+    public void setAverageWaitingJobs(float avgWaitingJobs) {
+        this.avgWaitingJobs = avgWaitingJobs;
+    }
+
+    /** {@inheritDoc} */
+    @Override public int getMaximumRejectedJobs() {
+        return maxRejectedJobs;
+    }
+
+    /**
+     * @param maxRejectedJobs Maximum number of jobs rejected during a single collision resolution event.
+     */
+    public void setMaximumRejectedJobs(int maxRejectedJobs) {
+        this.maxRejectedJobs = maxRejectedJobs;
+    }
+
+    /** {@inheritDoc} */
+    @Override public int getCurrentRejectedJobs() {
+        return curRejectedJobs;
+    }
+
+    /**
+     * @param curRejectedJobs Number of jobs rejected during most recent collision resolution.
+     */
+    public void setCurrentRejectedJobs(int curRejectedJobs) {
+        this.curRejectedJobs = curRejectedJobs;
+    }
+
+    /** {@inheritDoc} */
+    @Override public float getAverageRejectedJobs() {
+        return avgRejectedJobs;
+    }
+
+    /**
+     * @param avgRejectedJobs Average number of jobs this node rejects.
+     */
+    public void setAverageRejectedJobs(float avgRejectedJobs) {
+        this.avgRejectedJobs = avgRejectedJobs;
+    }
+
+    /** {@inheritDoc} */
+    @Override public int getTotalRejectedJobs() {
+        return totalRejectedJobs;
+    }
+
+    /**
+     * @param totalRejectedJobs Total number of jobs this node ever rejected.
+     */
+    public void setTotalRejectedJobs(int totalRejectedJobs) {
+        this.totalRejectedJobs = totalRejectedJobs;
+    }
+
+    /** {@inheritDoc} */
+    @Override public int getMaximumCancelledJobs() {
+        return maxCancelledJobs;
+    }
+
+    /**
+     * Sets maximum cancelled jobs.
+     *
+     * @param maxCancelledJobs Maximum cancelled jobs.
+     */
+    public void setMaximumCancelledJobs(int maxCancelledJobs) {
+        this.maxCancelledJobs = maxCancelledJobs;
+    }
+
+    /** {@inheritDoc} */
+    @Override public int getCurrentCancelledJobs() {
+        return curCancelledJobs;
+    }
+
+    /**
+     * Sets current cancelled jobs.
+     *
+     * @param curCancelledJobs Current cancelled jobs.
+     */
+    public void setCurrentCancelledJobs(int curCancelledJobs) {
+        this.curCancelledJobs = curCancelledJobs;
+    }
+
+    /** {@inheritDoc} */
+    @Override public float getAverageCancelledJobs() {
+        return avgCancelledJobs;
+    }
+
+    /**
+     * Sets average cancelled jobs.
+     *
+     * @param avgCancelledJobs Average cancelled jobs.
+     */
+    public void setAverageCancelledJobs(float avgCancelledJobs) {
+        this.avgCancelledJobs = avgCancelledJobs;
+    }
+
+    /** {@inheritDoc} */
+    @Override public int getTotalExecutedJobs() {
+        return totalExecutedJobs;
+    }
+
+    /**
+     * Sets total active jobs.
+     *
+     * @param totalExecutedJobs Total active jobs.
+     */
+    public void setTotalExecutedJobs(int totalExecutedJobs) {
+        this.totalExecutedJobs = totalExecutedJobs;
+    }
+
+    /** {@inheritDoc} */
+    @Override public int getTotalCancelledJobs() {
+        return totalCancelledJobs;
+    }
+
+    /**
+     * Sets total cancelled jobs.
+     *
+     * @param totalCancelledJobs Total cancelled jobs.
+     */
+    public void setTotalCancelledJobs(int totalCancelledJobs) {
+        this.totalCancelledJobs = totalCancelledJobs;
+    }
+
+    /** {@inheritDoc} */
+    @Override public long getMaximumJobWaitTime() {
+        return maxJobWaitTime;
+    }
+
+    /**
+     * Sets max job wait time.
+     *
+     * @param maxJobWaitTime Max job wait time.
+     */
+    public void setMaximumJobWaitTime(long maxJobWaitTime) {
+        this.maxJobWaitTime = maxJobWaitTime;
+    }
+
+    /** {@inheritDoc} */
+    @Override public long getCurrentJobWaitTime() {
+        return curJobWaitTime;
+    }
+
+    /**
+     * Sets current job wait time.
+     *
+     * @param curJobWaitTime Current job wait time.
+     */
+    public void setCurrentJobWaitTime(long curJobWaitTime) {
+        this.curJobWaitTime = curJobWaitTime;
+    }
+
+    /** {@inheritDoc} */
+    @Override public double getAverageJobWaitTime() {
+        return avgJobWaitTime;
+    }
+
+    /**
+     * Sets average job wait time.
+     *
+     * @param avgJobWaitTime Average job wait time.
+     */
+    public void setAverageJobWaitTime(double avgJobWaitTime) {
+        this.avgJobWaitTime = avgJobWaitTime;
+    }
+
+    /** {@inheritDoc} */
+    @Override public long getMaximumJobExecuteTime() {
+        return maxJobExecTime;
+    }
+
+    /**
+     * Sets maximum job execution time.
+     *
+     * @param maxJobExecTime Maximum job execution time.
+     */
+    public void setMaximumJobExecuteTime(long maxJobExecTime) {
+        this.maxJobExecTime = maxJobExecTime;
+    }
+
+    /** {@inheritDoc} */
+    @Override public long getCurrentJobExecuteTime() {
+        return curJobExecTime;
+    }
+
+    /**
+     * Sets current job execute time.
+     *
+     * @param curJobExecTime Current job execute time.
+     */
+    public void setCurrentJobExecuteTime(long curJobExecTime) {
+        this.curJobExecTime = curJobExecTime;
+    }
+
+    /** {@inheritDoc} */
+    @Override public double getAverageJobExecuteTime() {
+        return avgJobExecTime;
+    }
+
+    /**
+     * Sets average job execution time.
+     *
+     * @param avgJobExecTime Average job execution time.
+     */
+    public void setAverageJobExecuteTime(double avgJobExecTime) {
+        this.avgJobExecTime = avgJobExecTime;
+    }
+
+    /** {@inheritDoc} */
+    @Override public int getTotalExecutedTasks() {
+        return totalExecTasks;
+    }
+
+    /**
+     * Sets total executed tasks count.
+     *
+     * @param totalExecTasks total executed tasks count.
+     */
+    public void setTotalExecutedTasks(int totalExecTasks) {
+        this.totalExecTasks = totalExecTasks;
+    }
+
+    /** {@inheritDoc} */
+    @Override public long getTotalBusyTime() {
+        return getUpTime() - getTotalIdleTime();
+    }
+
+    /** {@inheritDoc} */
+    @Override public long getTotalIdleTime() {
+        return totalIdleTime;
+    }
+
+    /**
+     * Set total node idle time.
+     *
+     * @param totalIdleTime Total node idle time.
+     */
+    public void setTotalIdleTime(long totalIdleTime) {
+        this.totalIdleTime = totalIdleTime;
+    }
+
+    /** {@inheritDoc} */
+    @Override public long getCurrentIdleTime() {
+        return curIdleTime;
+    }
+
+    /**
+     * Sets time elapsed since execution of last job.
+     *
+     * @param curIdleTime Time elapsed since execution of last job.
+     */
+    public void setCurrentIdleTime(long curIdleTime) {
+        this.curIdleTime = curIdleTime;
+    }
+
+    /** {@inheritDoc} */
+    @Override public float getBusyTimePercentage() {
+        return 1 - getIdleTimePercentage();
+    }
+
+    /** {@inheritDoc} */
+    @Override public float getIdleTimePercentage() {
+        return getTotalIdleTime() / (float)getUpTime();
+    }
+
+    /** {@inheritDoc} */
+    @Override public int getTotalCpus() {
+        return availProcs;
+    }
+
+    /** {@inheritDoc} */
+    @Override public double getCurrentCpuLoad() {
+        return load;
+    }
+
+    /** {@inheritDoc} */
+    @Override public double getAverageCpuLoad() {
+        return avgLoad;
+    }
+
+    /** {@inheritDoc} */
+    @Override public double getCurrentGcCpuLoad() {
+        return gcLoad;
+    }
+
+    /** {@inheritDoc} */
+    @Override public long getHeapMemoryInitialized() {
+        return heapInit;
+    }
+
+    /** {@inheritDoc} */
+    @Override public long getHeapMemoryUsed() {
+        return heapUsed;
+    }
+
+    /** {@inheritDoc} */
+    @Override public long getHeapMemoryCommitted() {
+        return heapCommitted;
+    }
+
+    /** {@inheritDoc} */
+    @Override public long getHeapMemoryMaximum() {
+        return heapMax;
+    }
+
+    /** {@inheritDoc} */
+    @Override public long getNonHeapMemoryInitialized() {
+        return nonHeapInit;
+    }
+
+    /** {@inheritDoc} */
+    @Override public long getNonHeapMemoryUsed() {
+        return nonHeapUsed;
+    }
+
+    /** {@inheritDoc} */
+    @Override public long getNonHeapMemoryCommitted() {
+        return nonHeapCommitted;
+    }
+
+    /** {@inheritDoc} */
+    @Override public long getNonHeapMemoryMaximum() {
+        return nonHeapMax;
+    }
+
+    /** {@inheritDoc} */
+    @Override public long getUpTime() {
+        return upTime;
+    }
+
+    /** {@inheritDoc} */
+    @Override public long getStartTime() {
+        return startTime;
+    }
+
+    /** {@inheritDoc} */
+    @Override public long getNodeStartTime() {
+        return nodeStartTime;
+    }
+
+    /** {@inheritDoc} */
+    @Override public int getCurrentThreadCount() {
+        return threadCnt;
+    }
+
+    /** {@inheritDoc} */
+    @Override public int getMaximumThreadCount() {
+        return peakThreadCnt;
+    }
+
+    /** {@inheritDoc} */
+    @Override public long getTotalStartedThreadCount() {
+        return startedThreadCnt;
+    }
+
+    /** {@inheritDoc} */
+    @Override public int getCurrentDaemonThreadCount() {
+        return daemonThreadCnt;
+    }
+
+    /** {@inheritDoc} */
+    @Override public long getLastDataVersion() {
+        return lastDataVer;
+    }
+
+    /** {@inheritDoc} */
+    @Override public int getSentMessagesCount() {
+        return sentMsgsCnt;
+    }
+
+    /** {@inheritDoc} */
+    @Override public long getSentBytesCount() {
+        return sentBytesCnt;
+    }
+
+    /** {@inheritDoc} */
+    @Override public int getReceivedMessagesCount() {
+        return rcvdMsgsCnt;
+    }
+
+    /** {@inheritDoc} */
+    @Override public long getReceivedBytesCount() {
+        return rcvdBytesCnt;
+    }
+
+    /** {@inheritDoc} */
+    @Override public int getOutboundMessagesQueueSize() {
+        return outMesQueueSize;
+    }
+
+    /**
+     * Sets available processors.
+     *
+     * @param availProcs Available processors.
+     */
+    public void setAvailableProcessors(int availProcs) {
+        this.availProcs = availProcs;
+    }
+
+    /**
+     * Sets current CPU load.
+     *
+     * @param load Current CPU load.
+     */
+    public void setCurrentCpuLoad(double load) {
+        this.load = load;
+    }
+
+    /**
+     * Sets CPU load average over the metrics history.
+     *
+     * @param avgLoad CPU load average.
+     */
+    public void setAverageCpuLoad(double avgLoad) {
+        this.avgLoad = avgLoad;
+    }
+
+    /**
+     * Sets current GC load.
+     *
+     * @param gcLoad Current GC load.
+     */
+    public void setCurrentGcCpuLoad(double gcLoad) {
+        this.gcLoad = gcLoad;
+    }
+
+    /**
+     * Sets heap initial memory.
+     *
+     * @param heapInit Heap initial memory.
+     */
+    public void setHeapMemoryInitialized(long heapInit) {
+        this.heapInit = heapInit;
+    }
+
+    /**
+     * Sets used heap memory.
+     *
+     * @param heapUsed Used heap memory.
+     */
+    public void setHeapMemoryUsed(long heapUsed) {
+        this.heapUsed = heapUsed;
+    }
+
+    /**
+     * Sets committed heap memory.
+     *
+     * @param heapCommitted Committed heap memory.
+     */
+    public void setHeapMemoryCommitted(long heapCommitted) {
+        this.heapCommitted = heapCommitted;
+    }
+
+    /**
+     * Sets maximum possible heap memory.
+     *
+     * @param heapMax Maximum possible heap memory.
+     */
+    public void setHeapMemoryMaximum(long heapMax) {
+        this.heapMax = heapMax;
+    }
+
+    /**
+     * Sets initial non-heap memory.
+     *
+     * @param nonHeapInit Initial non-heap memory.
+     */
+    public void setNonHeapMemoryInitialized(long nonHeapInit) {
+        this.nonHeapInit = nonHeapInit;
+    }
+
+    /**
+     * Sets used non-heap memory.
+     *
+     * @param nonHeapUsed Used non-heap memory.
+     */
+    public void setNonHeapMemoryUsed(long nonHeapUsed) {
+        this.nonHeapUsed = nonHeapUsed;
+    }
+
+    /**
+     * Sets committed non-heap memory.
+     *
+     * @param nonHeapCommitted Committed non-heap memory.
+     */
+    public void setNonHeapMemoryCommitted(long nonHeapCommitted) {
+        this.nonHeapCommitted = nonHeapCommitted;
+    }
+
+    /**
+     * Sets maximum possible non-heap memory.
+     *
+     * @param nonHeapMax Maximum possible non-heap memory.
+     */
+    public void setNonHeapMemoryMaximum(long nonHeapMax) {
+        this.nonHeapMax = nonHeapMax;
+    }
+
+    /**
+     * Sets VM up time.
+     *
+     * @param upTime VM up time.
+     */
+    public void setUpTime(long upTime) {
+        this.upTime = upTime;
+    }
+
+    /**
+     * Sets VM start time.
+     *
+     * @param startTime VM start time.
+     */
+    public void setStartTime(long startTime) {
+        this.startTime = startTime;
+    }
+
+    /**
+     * Sets node start time.
+     *
+     * @param nodeStartTime node start time.
+     */
+    public void setNodeStartTime(long nodeStartTime) {
+        this.nodeStartTime = nodeStartTime;
+    }
+
+    /**
+     * Sets thread count.
+     *
+     * @param threadCnt Thread count.
+     */
+    public void setCurrentThreadCount(int threadCnt) {
+        this.threadCnt = threadCnt;
+    }
+
+    /**
+     * Sets peak thread count.
+     *
+     * @param peakThreadCnt Peak thread count.
+     */
+    public void setMaximumThreadCount(int peakThreadCnt) {
+        this.peakThreadCnt = peakThreadCnt;
+    }
+
+    /**
+     * Sets started thread count.
+     *
+     * @param startedThreadCnt Started thread count.
+     */
+    public void setTotalStartedThreadCount(long startedThreadCnt) {
+        this.startedThreadCnt = startedThreadCnt;
+    }
+
+    /**
+     * Sets daemon thread count.
+     *
+     * @param daemonThreadCnt Daemon thread count.
+     */
+    public void setCurrentDaemonThreadCount(int daemonThreadCnt) {
+        this.daemonThreadCnt = daemonThreadCnt;
+    }
+
+    /**
+     * Sets last data version.
+     *
+     * @param lastDataVer Last data version.
+     */
+    public void setLastDataVersion(long lastDataVer) {
+        this.lastDataVer = lastDataVer;
+    }
+
+    /**
+     * Sets sent messages count.
+     *
+     * @param sentMsgsCnt Sent messages count.
+     */
+    public void setSentMessagesCount(int sentMsgsCnt) {
+        this.sentMsgsCnt = sentMsgsCnt;
+    }
+
+    /**
+     * Sets sent bytes count.
+     *
+     * @param sentBytesCnt Sent bytes count.
+     */
+    public void setSentBytesCount(long sentBytesCnt) {
+        this.sentBytesCnt = sentBytesCnt;
+    }
+
+    /**
+     * Sets received messages count.
+     *
+     * @param rcvdMsgsCnt Received messages count.
+     */
+    public void setReceivedMessagesCount(int rcvdMsgsCnt) {
+        this.rcvdMsgsCnt = rcvdMsgsCnt;
+    }
+
+    /**
+     * Sets received bytes count.
+     *
+     * @param rcvdBytesCnt Received bytes count.
+     */
+    public void setReceivedBytesCount(long rcvdBytesCnt) {
+        this.rcvdBytesCnt = rcvdBytesCnt;
+    }
+
+    /**
+     * Sets outbound messages queue size.
+     *
+     * @param outMesQueueSize Outbound messages queue size.
+     */
+    public void setOutboundMessagesQueueSize(int outMesQueueSize) {
+        this.outMesQueueSize = outMesQueueSize;
+    }
+
+    /** {@inheritDoc} */
+    @Override public void writeExternal(ObjectOutput out) throws IOException {
+        out.writeInt(maxActiveJobs);
+        out.writeInt(curActiveJobs);
+        out.writeFloat(avgActiveJobs);
+        out.writeInt(maxWaitingJobs);
+        out.writeInt(curWaitingJobs);
+        out.writeFloat(avgWaitingJobs);
+        out.writeInt(maxCancelledJobs);
+        out.writeInt(curCancelledJobs);
+        out.writeFloat(avgCancelledJobs);
+        out.writeInt(maxRejectedJobs);
+        out.writeInt(curRejectedJobs);
+        out.writeFloat(avgRejectedJobs);
+        out.writeInt(totalExecutedJobs);
+        out.writeInt(totalCancelledJobs);
+        out.writeInt(totalRejectedJobs);
+        out.writeLong(maxJobWaitTime);
+        out.writeLong(curJobWaitTime);
+        out.writeDouble(avgJobWaitTime);
+        out.writeLong(maxJobExecTime);
+        out.writeLong(curJobExecTime);
+        out.writeDouble(avgJobExecTime);
+        out.writeInt(totalExecTasks);
+        out.writeLong(curIdleTime);
+        out.writeLong(totalIdleTime);
+        out.writeInt(availProcs);
+        out.writeLong(totalPhysicalMemory);
+        out.writeDouble(load);
+        out.writeDouble(avgLoad);
+        out.writeDouble(gcLoad);
+        out.writeLong(heapInit);
+        out.writeLong(heapUsed);
+        out.writeLong(heapCommitted);
+        out.writeLong(heapMax);
+        out.writeLong(nonHeapInit);
+        out.writeLong(nonHeapUsed);
+        out.writeLong(nonHeapCommitted);
+        out.writeLong(nonHeapMax);
+        out.writeLong(upTime);
+        out.writeLong(startTime);
+        out.writeLong(nodeStartTime);
+        out.writeInt(threadCnt);
+        out.writeInt(peakThreadCnt);
+        out.writeLong(startedThreadCnt);
+        out.writeInt(daemonThreadCnt);
+        out.writeLong(lastDataVer);
+        out.writeInt(sentMsgsCnt);
+        out.writeLong(sentBytesCnt);
+        out.writeInt(rcvdMsgsCnt);
+        out.writeLong(rcvdBytesCnt);
+        out.writeInt(outMesQueueSize);
+    }
+
+    /** {@inheritDoc} */
+    @Override public void readExternal(ObjectInput in) throws IOException {
+        lastUpdateTime = U.currentTimeMillis();
+
+        maxActiveJobs = in.readInt();
+        curActiveJobs = in.readInt();
+        avgActiveJobs = in.readFloat();
+        maxWaitingJobs = in.readInt();
+        curWaitingJobs = in.readInt();
+        avgWaitingJobs = in.readFloat();
+        maxCancelledJobs = in.readInt();
+        curCancelledJobs = in.readInt();
+        avgCancelledJobs = in.readFloat();
+        maxRejectedJobs = in.readInt();
+        curRejectedJobs = in.readInt();
+        avgRejectedJobs = in.readFloat();
+        totalExecutedJobs = in.readInt();
+        totalCancelledJobs = in.readInt();
+        totalRejectedJobs = in.readInt();
+        maxJobWaitTime = in.readLong();
+        curJobWaitTime = in.readLong();
+        avgJobWaitTime = in.readDouble();
+        maxJobExecTime = in.readLong();
+        curJobExecTime = in.readLong();
+        avgJobExecTime = in.readDouble();
+        totalExecTasks = in.readInt();
+        curIdleTime = in.readLong();
+        totalIdleTime = in.readLong();
+        availProcs = in.readInt();
+        totalPhysicalMemory = in.readLong();
+        load = in.readDouble();
+        avgLoad = in.readDouble();
+        gcLoad = in.readDouble();
+        heapInit = in.readLong();
+        heapUsed = in.readLong();
+        heapCommitted = in.readLong();
+        heapMax = in.readLong();
+        nonHeapInit = in.readLong();
+        nonHeapUsed = in.readLong();
+        nonHeapCommitted = in.readLong();
+        nonHeapMax = in.readLong();
+        upTime = in.readLong();
+        startTime = in.readLong();
+        nodeStartTime = in.readLong();
+        threadCnt = in.readInt();
+        peakThreadCnt = in.readInt();
+        startedThreadCnt = in.readLong();
+        daemonThreadCnt = in.readInt();
+        lastDataVer = in.readLong();
+        sentMsgsCnt = in.readInt();
+        sentBytesCnt = in.readLong();
+        rcvdMsgsCnt = in.readInt();
+        rcvdBytesCnt = in.readLong();
+        outMesQueueSize = in.readInt();
+    }
+
+    /** {@inheritDoc} */
+    @Override public int hashCode() {
+        return System.identityHashCode(this);
+    }
+
+    /** {@inheritDoc} */
+    @Override public boolean equals(Object obj) {
+        if (this == obj)
+            return true;
+
+        if (obj == null || getClass() != obj.getClass())
+            return false;
+
+        DiscoveryNodeMetricsAdapter other = (DiscoveryNodeMetricsAdapter)obj;
+
+        return
+            availProcs == other.availProcs &&
+            totalPhysicalMemory == other.totalPhysicalMemory &&
+            curActiveJobs == other.curActiveJobs &&
+            curCancelledJobs == other.curCancelledJobs &&
+            curIdleTime == other.curIdleTime &&
+            curJobExecTime == other.curJobExecTime &&
+            curJobWaitTime == other.curJobWaitTime &&
+            curRejectedJobs == other.curRejectedJobs &&
+            curWaitingJobs == other.curWaitingJobs &&
+            daemonThreadCnt == other.daemonThreadCnt &&
+            heapCommitted == other.heapCommitted &&
+            heapInit == other.heapInit &&
+            heapMax == other.heapMax &&
+            heapUsed == other.heapUsed &&
+            maxActiveJobs == other.maxActiveJobs &&
+            maxCancelledJobs == other.maxCancelledJobs &&
+            maxJobExecTime == other.maxJobExecTime &&
+            maxJobWaitTime == other.maxJobWaitTime &&
+            maxRejectedJobs == other.maxRejectedJobs &&
+            maxWaitingJobs == other.maxWaitingJobs &&
+            nonHeapCommitted == other.nonHeapCommitted &&
+            nonHeapInit == other.nonHeapInit &&
+            nonHeapMax == other.nonHeapMax &&
+            nonHeapUsed == other.nonHeapUsed &&
+            peakThreadCnt == other.peakThreadCnt &&
+            rcvdBytesCnt == other.rcvdBytesCnt &&
+            outMesQueueSize == other.outMesQueueSize &&
+            rcvdMsgsCnt == other.rcvdMsgsCnt &&
+            sentBytesCnt == other.sentBytesCnt &&
+            sentMsgsCnt == other.sentMsgsCnt &&
+            startTime == other.startTime &&
+            nodeStartTime == other.nodeStartTime &&
+            startedThreadCnt == other.startedThreadCnt &&
+            threadCnt == other.threadCnt &&
+            totalCancelledJobs == other.totalCancelledJobs &&
+            totalExecutedJobs == other.totalExecutedJobs &&
+            totalExecTasks == other.totalExecTasks &&
+            totalIdleTime == other.totalIdleTime &&
+            totalRejectedJobs == other.totalRejectedJobs &&
+            upTime == other.upTime;
+    }
+
+    /** {@inheritDoc} */
+    @Override public String toString() {
+        return S.toString(DiscoveryNodeMetricsAdapter.class, this);
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1ef8f69b/modules/core/src/main/java/org/apache/ignite/spi/discovery/DiscoverySpi.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/DiscoverySpi.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/DiscoverySpi.java
new file mode 100644
index 0000000..efeb0e0
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/DiscoverySpi.java
@@ -0,0 +1,132 @@
+/* @java.file.header */
+
+/*  _________        _____ __________________        _____
+ *  __  ____/___________(_)______  /__  ____/______ ____(_)_______
+ *  _  / __  __  ___/__  / _  __  / _  / __  _  __ `/__  / __  __ \
+ *  / /_/ /  _  /    _  /  / /_/ /  / /_/ /  / /_/ / _  /  _  / / /
+ *  \____/   /_/     /_/   \_,__/   \____/   \__,_/  /_/   /_/ /_/
+ */
+
+package org.apache.ignite.spi.discovery;
+
+import org.apache.ignite.cluster.*;
+import org.apache.ignite.product.*;
+import org.apache.ignite.spi.*;
+import org.jetbrains.annotations.*;
+
+import java.util.*;
+
+/**
+ * Grid discovery SPI allows to discover remote nodes in grid.
+ * <p>
+ * The default discovery SPI is {@link org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi}
+ * with default configuration which allows all nodes in local network
+ * (with enabled multicast) to discover each other.
+ * <p>
+ * Gridgain provides the following {@code GridDeploymentSpi} implementation:
+ * <ul>
+ * <li>{@link org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi}</li>
+ * </ul>
+ * <b>NOTE:</b> this SPI (i.e. methods in this interface) should never be used directly. SPIs provide
+ * internal view on the subsystem and is used internally by GridGain kernal. In rare use cases when
+ * access to a specific implementation of this SPI is required - an instance of this SPI can be obtained
+ * via {@link org.apache.ignite.Ignite#configuration()} method to check its configuration properties or call other non-SPI
+ * methods. Note again that calling methods from this interface on the obtained instance can lead
+ * to undefined behavior and explicitly not supported.
+ */
+public interface DiscoverySpi extends IgniteSpi {
+    /**
+     * Gets collection of remote nodes in grid or empty collection if no remote nodes found.
+     *
+     * @return Collection of remote nodes.
+     */
+    public Collection<ClusterNode> getRemoteNodes();
+
+    /**
+     * Gets local node.
+     *
+     * @return Local node.
+     */
+    public ClusterNode getLocalNode();
+
+    /**
+     * Gets node by ID.
+     *
+     * @param nodeId Node ID.
+     * @return Node with given ID or {@code null} if node is not found.
+     */
+    @Nullable public ClusterNode getNode(UUID nodeId);
+
+    /**
+     * Pings the remote node to see if it's alive.
+     *
+     * @param nodeId Node Id.
+     * @return {@code true} if node alive, {@code false} otherwise.
+     */
+    public boolean pingNode(UUID nodeId);
+
+    /**
+     * Sets node attributes and node version which will be distributed in grid during
+     * join process. Note that these attributes cannot be changed and set only once.
+     *
+     * @param attrs Map of node attributes.
+     * @param ver Product version.
+     */
+    public void setNodeAttributes(Map<String, Object> attrs, IgniteProductVersion ver);
+
+    /**
+     * Sets a listener for discovery events. Refer to
+     * {@link org.apache.ignite.events.IgniteDiscoveryEvent} for a set of all possible
+     * discovery events.
+     * <p>
+     * Note that as of GridGain 3.0.2 this method is called <b>before</b>
+     * method {@link #spiStart(String)} is called. This is done to
+     * avoid potential window when SPI is started but the listener is
+     * not registered yet.
+     *
+     * @param lsnr Listener to discovery events or {@code null} to unset the listener.
+     */
+    public void setListener(@Nullable DiscoverySpiListener lsnr);
+
+    /**
+     * Sets a handler for initial data exchange between GridGain nodes.
+     *
+     * @param exchange Discovery data exchange handler.
+     */
+    public void setDataExchange(DiscoverySpiDataExchange exchange);
+
+    /**
+     * Sets discovery metrics provider. Use metrics provided by
+     * {@link DiscoveryMetricsProvider#getMetrics()} method to exchange
+     * dynamic metrics between nodes.
+     *
+     * @param metricsProvider Provider of metrics data.
+     */
+    public void setMetricsProvider(DiscoveryMetricsProvider metricsProvider);
+
+    /**
+     * Tells discovery SPI to disconnect from topology. This is very close to calling
+     * {@link #spiStop()} with accounting that it is not a full stop,
+     * but disconnect due to segmentation.
+     *
+     * @throws org.apache.ignite.spi.IgniteSpiException If any error occurs.
+     */
+    public void disconnect() throws IgniteSpiException;
+
+    /**
+     * Sets discovery SPI node authenticator. This method is called before SPI start() method.
+     *
+     * @param auth Discovery SPI authenticator.
+     */
+    public void setAuthenticator(DiscoverySpiNodeAuthenticator auth);
+
+    /**
+     * Gets start time of the very first node in the grid. This value should be the same
+     * on all nodes in the grid and it should not change even if very first node fails
+     * of leaves grid.
+     *
+     * @return Start time of the first node in grid or {@code 0} if SPI implementation
+     *         does not support this method.
+     */
+    public long getGridStartTime();
+}