ignite-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From agoncha...@apache.org
Subject [4/4] ignite git commit: IGNITE-5392 - Joining node must accept cluster active status
Date Sun, 11 Jun 2017 18:54:23 GMT
IGNITE-5392 - Joining node must accept cluster active status


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

Branch: refs/heads/ignite-5267-merge-ea
Commit: bdbba0ee9a5437a3f66d05c8175bfcb2f309b3bd
Parents: f9ed612
Author: Dmitriy Govorukhin <dmitriy.govorukhin@gmail.com>
Authored: Sun Jun 11 21:53:56 2017 +0300
Committer: Alexey Goncharuk <alexey.goncharuk@gmail.com>
Committed: Sun Jun 11 21:53:56 2017 +0300

----------------------------------------------------------------------
 .../apache/ignite/internal/GridComponent.java   |   4 +-
 .../ignite/internal/GridPluginComponent.java    |   4 +-
 .../apache/ignite/internal/IgniteKernal.java    |  13 +-
 .../internal/managers/GridManagerAdapter.java   |   2 +-
 .../checkpoint/GridCheckpointManager.java       |   2 +-
 .../collision/GridCollisionManager.java         |   2 +-
 .../managers/communication/GridIoManager.java   |   2 +-
 .../deployment/GridDeploymentManager.java       |   2 +-
 .../discovery/GridDiscoveryManager.java         |  43 +-
 .../eventstorage/GridEventStorageManager.java   |   2 +-
 .../managers/failover/GridFailoverManager.java  |   2 +-
 .../managers/indexing/GridIndexingManager.java  |   2 +-
 .../loadbalancer/GridLoadBalancerManager.java   |   2 +-
 .../pagemem/store/IgnitePageStoreManager.java   |   2 +-
 .../processors/GridProcessorAdapter.java        |   4 +-
 .../affinity/GridAffinityProcessor.java         |   2 +-
 .../cache/CacheAffinitySharedManager.java       |  38 +-
 .../CacheClientReconnectDiscoveryData.java      |   2 +-
 .../internal/processors/cache/CacheData.java    |   7 +
 .../cache/CacheJoinNodeDiscoveryData.java       |  20 +-
 .../cache/CacheNodeCommonDiscoveryData.java     |  10 +-
 .../processors/cache/ClusterCachesInfo.java     |  56 +-
 .../cache/DynamicCacheChangeRequest.java        |   7 +-
 .../processors/cache/GridCacheProcessor.java    | 259 ++-----
 .../binary/CacheObjectBinaryProcessorImpl.java  |   6 +-
 .../IgniteCacheDatabaseSharedManager.java       |  16 +-
 .../closure/GridClosureProcessor.java           |   2 +-
 .../processors/cluster/ClusterProcessor.java    |   2 +-
 .../cluster/GridClusterStateProcessor.java      | 362 +++++++--
 .../continuous/GridContinuousProcessor.java     |   2 +-
 .../datastreamer/DataStreamProcessor.java       |   2 +-
 .../datastructures/DataStructuresProcessor.java |  20 +-
 .../internal/processors/igfs/IgfsProcessor.java |   4 +-
 .../processors/job/GridJobProcessor.java        |   2 +-
 .../jobmetrics/GridJobMetricsProcessor.java     |   2 +-
 .../GridMarshallerMappingProcessor.java         |   2 +-
 .../processors/odbc/SqlListenerProcessor.java   |   2 +-
 .../platform/PlatformProcessorImpl.java         |   2 +-
 .../plugin/IgnitePluginProcessor.java           |   2 +-
 .../processors/port/GridPortProcessor.java      |   2 +-
 .../processors/query/GridQueryProcessor.java    |   4 +-
 .../resource/GridResourceProcessor.java         |   2 +-
 .../processors/rest/GridRestProcessor.java      |   4 +-
 .../service/GridServiceProcessor.java           |  12 +-
 .../session/GridTaskSessionProcessor.java       |   2 +-
 .../processors/task/GridTaskProcessor.java      |   4 +-
 .../timeout/GridTimeoutProcessor.java           |   2 +-
 .../ignite/spi/discovery/tcp/ServerImpl.java    |  26 -
 ...GridManagerLocalMessageListenerSelfTest.java |   8 +-
 .../managers/GridNoopManagerSelfTest.java       |   2 +-
 ...cpCommunicationSpiMultithreadedSelfTest.java |   4 +-
 .../discovery/tcp/TestReconnectProcessor.java   |   2 +-
 .../testframework/junits/GridAbstractTest.java  |  18 +-
 .../junits/GridTestKernalContext.java           |   2 +-
 .../processors/hadoop/HadoopProcessor.java      |   6 +-
 .../GridCacheDatabaseSharedManager.java         | 109 ++-
 .../database/file/FilePageStoreManager.java     |  66 +-
 .../database/pagemem/NoOpPageStoreManager.java  |   1 +
 .../AbstractNodeJoinTemplate.java               | 743 +++++++++++++++++++
 .../IgniteChangeGlobalStateAbstractTest.java    |   4 +-
 .../IgniteStandByClusterTest.java               | 213 ++++++
 .../join/JoinActiveNodeToActiveCluster.java     | 431 +++++++++++
 .../join/JoinActiveNodeToInActiveCluster.java   | 227 ++++++
 .../join/JoinInActiveNodeToActiveCluster.java   | 356 +++++++++
 .../join/JoinInActiveNodeToInActiveCluster.java | 226 ++++++
 ...ctiveNodeToActiveClusterWithPersistence.java |  97 +++
 ...iveNodeToInActiveClusterWithPersistence.java |  31 +
 ...ctiveNodeToActiveClusterWithPersistence.java |  85 +++
 ...iveNodeToInActiveClusterWithPersistence.java |  31 +
 ...gniteAbstractStandByClientReconnectTest.java | 336 +++++++++
 .../IgniteStandByClientReconnectTest.java       | 283 +++++++
 ...eStandByClientReconnectToNewClusterTest.java | 289 ++++++++
 .../schedule/IgniteScheduleProcessor.java       |   2 +-
 73 files changed, 4031 insertions(+), 516 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/bdbba0ee/modules/core/src/main/java/org/apache/ignite/internal/GridComponent.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/GridComponent.java b/modules/core/src/main/java/org/apache/ignite/internal/GridComponent.java
index 98edf0f..0505929 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/GridComponent.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/GridComponent.java
@@ -69,7 +69,7 @@ public interface GridComponent {
      *
      * @throws IgniteCheckedException Throws in case of any errors.
      */
-    public void start(boolean activeOnStart) throws IgniteCheckedException;
+    public void start() throws IgniteCheckedException;
 
     /**
      * Stops grid component.
@@ -86,7 +86,7 @@ public interface GridComponent {
      *
      * @throws IgniteCheckedException Thrown in case of any errors.
      */
-    public void onKernalStart(boolean activeOnStart) throws IgniteCheckedException;
+    public void onKernalStart() throws IgniteCheckedException;
 
     /**
      * Callback to notify that kernal is about to stop.

http://git-wip-us.apache.org/repos/asf/ignite/blob/bdbba0ee/modules/core/src/main/java/org/apache/ignite/internal/GridPluginComponent.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/GridPluginComponent.java b/modules/core/src/main/java/org/apache/ignite/internal/GridPluginComponent.java
index 1e613b7..cc1ae71 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/GridPluginComponent.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/GridPluginComponent.java
@@ -51,7 +51,7 @@ public class GridPluginComponent implements GridComponent {
 
     /** {@inheritDoc} */
     @SuppressWarnings("unchecked")
-    @Override public void start(boolean activeOnStart) throws IgniteCheckedException {
+    @Override public void start() throws IgniteCheckedException {
         throw new UnsupportedOperationException();
     }
 
@@ -61,7 +61,7 @@ public class GridPluginComponent implements GridComponent {
     }
 
     /** {@inheritDoc} */
-    @Override public void onKernalStart(boolean activeOnStart) throws IgniteCheckedException {
+    @Override public void onKernalStart() throws IgniteCheckedException {
         plugin.onIgniteStart();
     }
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/bdbba0ee/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java b/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
index f092e2b..fa605d6 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
@@ -926,7 +926,8 @@ public class IgniteKernal implements IgniteEx, IgniteMXBean, Externalizable {
                 startProcessor(new  GridAffinityProcessor(ctx));
                 startProcessor(createComponent(GridSegmentationProcessor.class, ctx));
                 startProcessor(createComponent(IgniteCacheObjectProcessor.class, ctx));
-                startProcessor(new GridCacheProcessor(ctx));startProcessor(new GridClusterStateProcessor(ctx));
+                startProcessor(new GridClusterStateProcessor(ctx));
+                startProcessor(new GridCacheProcessor(ctx));
                 startProcessor(new GridQueryProcessor(ctx));
                 startProcessor(new SqlListenerProcessor(ctx));
                 startProcessor(new GridServiceProcessor(ctx));
@@ -991,10 +992,10 @@ public class IgniteKernal implements IgniteEx, IgniteMXBean, Externalizable {
             ctx.performance().addAll(OsConfigurationSuggestions.getSuggestions());
 
             // Notify discovery manager the first to make sure that topology is discovered.
-            ctx.discovery().onKernalStart(activeOnStart);
+            ctx.discovery().onKernalStart();
 
             // Notify IO manager the second so further components can send and receive messages.
-            ctx.io().onKernalStart(activeOnStart);
+            ctx.io().onKernalStart();
 
             // Start plugins.
             for (PluginProvider provider : ctx.plugins().allProviders())
@@ -1017,7 +1018,7 @@ public class IgniteKernal implements IgniteEx, IgniteMXBean, Externalizable {
 
                 if (!skipDaemon(comp)) {
                     try {
-                        comp.onKernalStart(activeOnStart);
+                        comp.onKernalStart();
                     }
                     catch (IgniteNeedReconnectException e) {
                         assert ctx.discovery().reconnectSupported();
@@ -1749,7 +1750,7 @@ public class IgniteKernal implements IgniteEx, IgniteMXBean, Externalizable {
 
         try {
             if (!skipDaemon(mgr))
-                mgr.start(cfg.isActiveOnStart());
+                mgr.start();
         }
         catch (IgniteCheckedException e) {
             U.error(log, "Failed to start manager: " + mgr, e);
@@ -1767,7 +1768,7 @@ public class IgniteKernal implements IgniteEx, IgniteMXBean, Externalizable {
 
         try {
             if (!skipDaemon(proc))
-                proc.start(cfg.isActiveOnStart());
+                proc.start();
         }
         catch (IgniteCheckedException e) {
             throw new IgniteCheckedException("Failed to start processor: " + proc, e);

http://git-wip-us.apache.org/repos/asf/ignite/blob/bdbba0ee/modules/core/src/main/java/org/apache/ignite/internal/managers/GridManagerAdapter.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/managers/GridManagerAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/managers/GridManagerAdapter.java
index 7d9ee74..7dfeffb 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/managers/GridManagerAdapter.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/managers/GridManagerAdapter.java
@@ -362,7 +362,7 @@ public abstract class GridManagerAdapter<T extends IgniteSpi> implements GridMan
     }
 
     /** {@inheritDoc} */
-    @Override public final void onKernalStart(boolean activeOnStart) throws IgniteCheckedException {
+    @Override public final void onKernalStart() throws IgniteCheckedException {
         for (final IgniteSpi spi : spis) {
             try {
                 spi.onContextInitialized(new IgniteSpiContext() {

http://git-wip-us.apache.org/repos/asf/ignite/blob/bdbba0ee/modules/core/src/main/java/org/apache/ignite/internal/managers/checkpoint/GridCheckpointManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/managers/checkpoint/GridCheckpointManager.java b/modules/core/src/main/java/org/apache/ignite/internal/managers/checkpoint/GridCheckpointManager.java
index 782ee5e..3c08e9e 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/managers/checkpoint/GridCheckpointManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/managers/checkpoint/GridCheckpointManager.java
@@ -102,7 +102,7 @@ public class GridCheckpointManager extends GridManagerAdapter<CheckpointSpi> {
     }
 
     /** {@inheritDoc} */
-    @Override public void start(boolean activeOnStart) throws IgniteCheckedException {
+    @Override public void start() throws IgniteCheckedException {
         for (CheckpointSpi spi : getSpis()) {
             spi.setCheckpointListener(new CheckpointListener() {
                 @Override public void onCheckpointRemoved(String key) {

http://git-wip-us.apache.org/repos/asf/ignite/blob/bdbba0ee/modules/core/src/main/java/org/apache/ignite/internal/managers/collision/GridCollisionManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/managers/collision/GridCollisionManager.java b/modules/core/src/main/java/org/apache/ignite/internal/managers/collision/GridCollisionManager.java
index 14f69de..40901b6 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/managers/collision/GridCollisionManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/managers/collision/GridCollisionManager.java
@@ -47,7 +47,7 @@ public class GridCollisionManager extends GridManagerAdapter<CollisionSpi> {
     }
 
     /** {@inheritDoc} */
-    @Override public void start(boolean activeOnStart) throws IgniteCheckedException {
+    @Override public void start() throws IgniteCheckedException {
         startSpi();
 
         if (enabled()) {

http://git-wip-us.apache.org/repos/asf/ignite/blob/bdbba0ee/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoManager.java b/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoManager.java
index 3769a9c..85ae024 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoManager.java
@@ -261,7 +261,7 @@ public class GridIoManager extends GridManagerAdapter<CommunicationSpi<Serializa
 
     /** {@inheritDoc} */
     @SuppressWarnings("deprecation")
-    @Override public void start(boolean activeOnStart) throws IgniteCheckedException {
+    @Override public void start() throws IgniteCheckedException {
         assertParameter(discoDelay > 0, "discoveryStartupDelay > 0");
 
         startSpi();

http://git-wip-us.apache.org/repos/asf/ignite/blob/bdbba0ee/modules/core/src/main/java/org/apache/ignite/internal/managers/deployment/GridDeploymentManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/managers/deployment/GridDeploymentManager.java b/modules/core/src/main/java/org/apache/ignite/internal/managers/deployment/GridDeploymentManager.java
index 17d30eb..cea1786 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/managers/deployment/GridDeploymentManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/managers/deployment/GridDeploymentManager.java
@@ -91,7 +91,7 @@ public class GridDeploymentManager extends GridManagerAdapter<DeploymentSpi> {
     }
 
     /** {@inheritDoc} */
-    @Override public void start(boolean activeOnStart) throws IgniteCheckedException {
+    @Override public void start() throws IgniteCheckedException {
         GridProtocolHandler.registerDeploymentManager(this);
 
         assertParameter(ctx.config().getDeploymentMode() != null, "ctx.config().getDeploymentMode() != null");

http://git-wip-us.apache.org/repos/asf/ignite/blob/bdbba0ee/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/GridDiscoveryManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/GridDiscoveryManager.java b/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/GridDiscoveryManager.java
index a442d04..5bb0265 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/GridDiscoveryManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/managers/discovery/GridDiscoveryManager.java
@@ -73,6 +73,7 @@ import org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion;
 import org.apache.ignite.internal.processors.cache.CacheGroupDescriptor;
 import org.apache.ignite.internal.processors.cache.DynamicCacheDescriptor;
 import org.apache.ignite.internal.processors.cache.GridCacheAdapter;
+import org.apache.ignite.internal.processors.cluster.GridClusterStateProcessor;
 import org.apache.ignite.internal.processors.jobmetrics.GridJobMetrics;
 import org.apache.ignite.internal.processors.security.SecurityContext;
 import org.apache.ignite.internal.processors.timeout.GridTimeoutProcessor;
@@ -463,7 +464,7 @@ public class GridDiscoveryManager extends GridManagerAdapter<DiscoverySpi> {
     }
 
     /** {@inheritDoc} */
-    @Override public void start(boolean activeOnStart) throws IgniteCheckedException {
+    @Override public void start() throws IgniteCheckedException {
         long totSysMemory = -1;
 
         try {
@@ -741,19 +742,36 @@ public class GridDiscoveryManager extends GridManagerAdapter<DiscoverySpi> {
             }
 
             @Override public void onExchange(DiscoveryDataBag dataBag) {
+                assert dataBag != null;
+                assert dataBag.joiningNodeId() != null;
+
                 if (ctx.localNodeId().equals(dataBag.joiningNodeId())) {
-                    //NodeAdded msg reached joining node after round-trip over the ring
+                    // NodeAdded msg reached joining node after round-trip over the ring.
+                    GridClusterStateProcessor stateProc = ctx.state();
+
+                    stateProc.onGridDataReceived(dataBag.gridDiscoveryData(
+                        stateProc.discoveryDataType().ordinal()));
+
                     for (GridComponent c : ctx.components()) {
-                        if (c.discoveryDataType() != null)
+                        if (c.discoveryDataType() != null && c != stateProc)
                             c.onGridDataReceived(dataBag.gridDiscoveryData(c.discoveryDataType().ordinal()));
                     }
                 }
                 else {
-                    //discovery data from newly joined node has to be applied to the current old node
+                    // Discovery data from newly joined node has to be applied to the current old node.
+                    GridClusterStateProcessor stateProc = ctx.state();
+
+                    JoiningNodeDiscoveryData data0 = dataBag.newJoinerDiscoveryData(
+                        stateProc.discoveryDataType().ordinal());
+
+                    assert data0 != null;
+
+                    stateProc.onJoiningNodeDataReceived(data0);
+
                     for (GridComponent c : ctx.components()) {
-                        if (c.discoveryDataType() != null) {
-                            JoiningNodeDiscoveryData data =
-                                    dataBag.newJoinerDiscoveryData(c.discoveryDataType().ordinal());
+                        if (c.discoveryDataType() != null && c != stateProc) {
+                            JoiningNodeDiscoveryData data = dataBag.newJoinerDiscoveryData(
+                                c.discoveryDataType().ordinal());
 
                             if (data != null)
                                 c.onJoiningNodeDataReceived(data);
@@ -1222,17 +1240,6 @@ public class GridDiscoveryManager extends GridManagerAdapter<DiscoverySpi> {
                     ", rmtAddrs=" + U.addressesAsString(n) + ']');
             }
 
-            boolean rmtActiveOnStart = n.attribute(ATTR_ACTIVE_ON_START);
-
-            if (locActiveOnStart != rmtActiveOnStart) {
-                throw new IgniteCheckedException("Remote node has active on start flag different from local " +
-                    "[locId8=" + U.id8(locNode.id()) +
-                    ", locActiveOnStart=" + locActiveOnStart +
-                    ", rmtId8=" + U.id8(n.id()) +
-                    ", rmtActiveOnStart=" + rmtActiveOnStart +
-                    ", rmtAddrs=" + U.addressesAsString(n) + ']');
-            }
-
             Boolean rmtSrvcCompatibilityEnabled = n.attribute(ATTR_SERVICES_COMPATIBILITY_MODE);
 
             if (!F.eq(locSrvcCompatibilityEnabled, rmtSrvcCompatibilityEnabled)) {

http://git-wip-us.apache.org/repos/asf/ignite/blob/bdbba0ee/modules/core/src/main/java/org/apache/ignite/internal/managers/eventstorage/GridEventStorageManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/managers/eventstorage/GridEventStorageManager.java b/modules/core/src/main/java/org/apache/ignite/internal/managers/eventstorage/GridEventStorageManager.java
index 04fb5b9..53b258a 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/managers/eventstorage/GridEventStorageManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/managers/eventstorage/GridEventStorageManager.java
@@ -273,7 +273,7 @@ public class GridEventStorageManager extends GridManagerAdapter<EventStorageSpi>
     }
 
     /** {@inheritDoc} */
-    @Override public void start(boolean activeOnStart) throws IgniteCheckedException {
+    @Override public void start() throws IgniteCheckedException {
         Map<IgnitePredicate<? extends Event>, int[]> evtLsnrs = ctx.config().getLocalEventListeners();
 
         if (evtLsnrs != null) {

http://git-wip-us.apache.org/repos/asf/ignite/blob/bdbba0ee/modules/core/src/main/java/org/apache/ignite/internal/managers/failover/GridFailoverManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/managers/failover/GridFailoverManager.java b/modules/core/src/main/java/org/apache/ignite/internal/managers/failover/GridFailoverManager.java
index 5393d9c..d287e63 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/managers/failover/GridFailoverManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/managers/failover/GridFailoverManager.java
@@ -40,7 +40,7 @@ public class GridFailoverManager extends GridManagerAdapter<FailoverSpi> {
     }
 
     /** {@inheritDoc} */
-    @Override public void start(boolean activeOnStart) throws IgniteCheckedException {
+    @Override public void start() throws IgniteCheckedException {
         startSpi();
 
         if (log.isDebugEnabled())

http://git-wip-us.apache.org/repos/asf/ignite/blob/bdbba0ee/modules/core/src/main/java/org/apache/ignite/internal/managers/indexing/GridIndexingManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/managers/indexing/GridIndexingManager.java b/modules/core/src/main/java/org/apache/ignite/internal/managers/indexing/GridIndexingManager.java
index 6d29604..f1f8f87 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/managers/indexing/GridIndexingManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/managers/indexing/GridIndexingManager.java
@@ -48,7 +48,7 @@ public class GridIndexingManager extends GridManagerAdapter<IndexingSpi> {
     /**
      * @throws IgniteCheckedException Thrown in case of any errors.
      */
-    @Override public void start(boolean activeOnStart) throws IgniteCheckedException {
+    @Override public void start() throws IgniteCheckedException {
         startSpi();
 
         if (log.isDebugEnabled())

http://git-wip-us.apache.org/repos/asf/ignite/blob/bdbba0ee/modules/core/src/main/java/org/apache/ignite/internal/managers/loadbalancer/GridLoadBalancerManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/managers/loadbalancer/GridLoadBalancerManager.java b/modules/core/src/main/java/org/apache/ignite/internal/managers/loadbalancer/GridLoadBalancerManager.java
index 2c218f0..15a4d2c 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/managers/loadbalancer/GridLoadBalancerManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/managers/loadbalancer/GridLoadBalancerManager.java
@@ -45,7 +45,7 @@ public class GridLoadBalancerManager extends GridManagerAdapter<LoadBalancingSpi
     }
 
     /** {@inheritDoc} */
-    @Override public void start(boolean activeOnStart) throws IgniteCheckedException {
+    @Override public void start() throws IgniteCheckedException {
         startSpi();
 
         if (log.isDebugEnabled())

http://git-wip-us.apache.org/repos/asf/ignite/blob/bdbba0ee/modules/core/src/main/java/org/apache/ignite/internal/pagemem/store/IgnitePageStoreManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/store/IgnitePageStoreManager.java b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/store/IgnitePageStoreManager.java
index f3e3aa4..468d35d 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/store/IgnitePageStoreManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/store/IgnitePageStoreManager.java
@@ -20,6 +20,7 @@ package org.apache.ignite.internal.pagemem.store;
 import java.nio.ByteBuffer;
 import java.util.Map;
 import org.apache.ignite.IgniteCheckedException;
+import org.apache.ignite.configuration.CacheConfiguration;
 import org.apache.ignite.internal.pagemem.PageMemory;
 import org.apache.ignite.internal.processors.cache.CacheGroupContext;
 import org.apache.ignite.internal.processors.cache.CacheGroupDescriptor;
@@ -187,7 +188,6 @@ public interface IgnitePageStoreManager extends GridCacheSharedManager, IgniteCh
      * @throws IgniteCheckedException If failed.
      */
     public void storeCacheData(CacheGroupDescriptor grpDesc, StoredCacheData cacheData) throws IgniteCheckedException;
-
     /**
      * @param grpId Cache group ID.
      * @return {@code True} if index store for given cache group existed before node started.

http://git-wip-us.apache.org/repos/asf/ignite/blob/bdbba0ee/modules/core/src/main/java/org/apache/ignite/internal/processors/GridProcessorAdapter.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/GridProcessorAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/GridProcessorAdapter.java
index cd97aea..4b4aec5 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/GridProcessorAdapter.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/GridProcessorAdapter.java
@@ -55,7 +55,7 @@ public abstract class GridProcessorAdapter implements GridProcessor {
     }
 
     /** {@inheritDoc} */
-    @Override public void onKernalStart(boolean activeOnStart) throws IgniteCheckedException {
+    @Override public void onKernalStart() throws IgniteCheckedException {
         // No-op.
     }
 
@@ -100,7 +100,7 @@ public abstract class GridProcessorAdapter implements GridProcessor {
     }
 
     /** {@inheritDoc} */
-    @Override public void start(boolean activeOnStart) throws IgniteCheckedException {
+    @Override public void start() throws IgniteCheckedException {
         // No-op.
     }
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/bdbba0ee/modules/core/src/main/java/org/apache/ignite/internal/processors/affinity/GridAffinityProcessor.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/affinity/GridAffinityProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/affinity/GridAffinityProcessor.java
index 87c424a..71a6e72 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/affinity/GridAffinityProcessor.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/affinity/GridAffinityProcessor.java
@@ -133,7 +133,7 @@ public class GridAffinityProcessor extends GridProcessorAdapter {
     }
 
     /** {@inheritDoc} */
-    @Override public void start(boolean activeOnStart) throws IgniteCheckedException {
+    @Override public void start() throws IgniteCheckedException {
         ctx.event().addLocalEventListener(lsnr, EVT_NODE_FAILED, EVT_NODE_LEFT, EVT_NODE_JOINED);
     }
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/bdbba0ee/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheAffinitySharedManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheAffinitySharedManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheAffinitySharedManager.java
index d8ca177..70bf117 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheAffinitySharedManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheAffinitySharedManager.java
@@ -349,11 +349,11 @@ public class CacheAffinitySharedManager<K, V> extends GridCacheSharedManagerAdap
      * @throws IgniteCheckedException If failed.
      * @return {@code True} if client-only exchange is needed.
      */
-    public boolean onCacheChangeRequest(final GridDhtPartitionsExchangeFuture fut,
+    public boolean onCacheChangeRequest(
+        final GridDhtPartitionsExchangeFuture fut,
         boolean crd,
-        final ExchangeActions exchActions)
-        throws IgniteCheckedException
-    {
+        final ExchangeActions exchActions
+    ) throws IgniteCheckedException {
         assert exchActions != null && !exchActions.empty() : exchActions;
 
         updateCachesInfo(exchActions);
@@ -377,7 +377,19 @@ public class CacheAffinitySharedManager<K, V> extends GridCacheSharedManagerAdap
 
             NearCacheConfiguration nearCfg = null;
 
-            if (cctx.localNodeId().equals(req.initiatingNodeId())) {
+            if (exchActions.newClusterState() == ClusterState.ACTIVE) {
+                if (CU.isSystemCache(req.cacheName()))
+                    startCache = true;
+                else if (!cctx.localNode().isClient()) {
+                    startCache = cctx.cacheContext(action.descriptor().cacheId()) == null &&
+                        CU.affinityNode(cctx.localNode(), req.startCacheConfiguration().getNodeFilter());
+
+                    nearCfg = req.nearCacheConfiguration();
+                }
+                else // Only static cache configured on client must be started.
+                    startCache = cctx.kernalContext().state().isLocalConfigure(req.cacheName());
+            }
+            else if (cctx.localNodeId().equals(req.initiatingNodeId())) {
                 startCache = true;
 
                 nearCfg = req.nearCacheConfiguration();
@@ -388,9 +400,19 @@ public class CacheAffinitySharedManager<K, V> extends GridCacheSharedManagerAdap
             }
 
             try {
+                // Save configuration before cache started.
+                if (cctx.pageStore() != null && !cctx.localNode().isClient())
+                    cctx.pageStore().storeCacheData(
+                        cacheDesc.groupDescriptor(),
+                        new StoredCacheData(req.startCacheConfiguration())
+                    );
+
                 if (startCache) {
                     cctx.cache().prepareCacheStart(cacheDesc, nearCfg, fut.topologyVersion());
 
+                    if (exchActions.newClusterState() == null)
+                        cctx.kernalContext().state().onCacheStart(req);
+
                     if (fut.cacheAddedOnExchange(cacheDesc.cacheId(), cacheDesc.receivedFrom())) {
                         if (fut.discoCache().cacheGroupAffinityNodes(cacheDesc.groupId()).isEmpty())
                             U.quietAndWarn(log, "No server nodes found for cache client: " + req.cacheName());
@@ -845,9 +867,11 @@ public class CacheAffinitySharedManager<K, V> extends GridCacheSharedManagerAdap
      * @param descs Cache descriptors.
      * @throws IgniteCheckedException If failed.
      */
-    public void initStartedCaches(boolean crd,
+    public void initStartedCaches(
+        boolean crd,
         final GridDhtPartitionsExchangeFuture fut,
-        Collection<DynamicCacheDescriptor> descs) throws IgniteCheckedException {
+        Collection<DynamicCacheDescriptor> descs
+    ) throws IgniteCheckedException {
         for (DynamicCacheDescriptor desc : descs) {
             CacheGroupDescriptor grpDesc = desc.groupDescriptor();
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/bdbba0ee/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheClientReconnectDiscoveryData.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheClientReconnectDiscoveryData.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheClientReconnectDiscoveryData.java
index 6a6f40d..c264263 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheClientReconnectDiscoveryData.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheClientReconnectDiscoveryData.java
@@ -56,7 +56,7 @@ public class CacheClientReconnectDiscoveryData implements Serializable {
     /**
      * @return Information about caches started on re-joining client node.
      */
-    Map<String, CacheInfo> clientCaches() {
+   public Map<String, CacheInfo> clientCaches() {
         return clientCaches;
     }
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/bdbba0ee/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheData.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheData.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheData.java
index b728d96..dee32fa 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheData.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheData.java
@@ -177,6 +177,13 @@ public class CacheData implements Serializable {
         return rcvdFrom;
     }
 
+    /**
+     * @return Flags.
+     */
+    public long flags() {
+        return flags;
+    }
+
     /** {@inheritDoc} */
     @Override public String toString() {
         return S.toString(CacheData.class, this, "cacheName", cacheCfg.getName());

http://git-wip-us.apache.org/repos/asf/ignite/blob/bdbba0ee/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheJoinNodeDiscoveryData.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheJoinNodeDiscoveryData.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheJoinNodeDiscoveryData.java
index 3f99134..ecfa8bc 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheJoinNodeDiscoveryData.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheJoinNodeDiscoveryData.java
@@ -26,7 +26,7 @@ import org.apache.ignite.lang.IgniteUuid;
 /**
  * Information about configured caches sent from joining node.
  */
-class CacheJoinNodeDiscoveryData implements Serializable {
+public class CacheJoinNodeDiscoveryData implements Serializable {
     /** */
     private static final long serialVersionUID = 0L;
 
@@ -51,7 +51,7 @@ class CacheJoinNodeDiscoveryData implements Serializable {
      * @param templates Templates.
      * @param startCaches {@code True} if required to start all caches on joining node.
      */
-    CacheJoinNodeDiscoveryData(
+   public CacheJoinNodeDiscoveryData(
         IgniteUuid cacheDeploymentId,
         Map<String, CacheJoinNodeDiscoveryData.CacheInfo> caches,
         Map<String, CacheJoinNodeDiscoveryData.CacheInfo> templates,
@@ -72,28 +72,28 @@ class CacheJoinNodeDiscoveryData implements Serializable {
     /**
      * @return Deployment ID assigned on joining node.
      */
-    IgniteUuid cacheDeploymentId() {
+    public IgniteUuid cacheDeploymentId() {
         return cacheDeploymentId;
     }
 
     /**
      * @return Templates configured on joining node.
      */
-    Map<String, CacheInfo> templates() {
+    public Map<String, CacheInfo> templates() {
         return templates;
     }
 
     /**
      * @return Caches configured on joining node.
      */
-    Map<String, CacheInfo> caches() {
+    public Map<String, CacheInfo> caches() {
         return caches;
     }
 
     /**
      *
      */
-    static class CacheInfo implements Serializable {
+   public static class CacheInfo implements Serializable {
         /** */
         private static final long serialVersionUID = 0L;
 
@@ -118,7 +118,7 @@ class CacheJoinNodeDiscoveryData implements Serializable {
          * @param sql SQL flag - {@code true} if cache was created with {@code CREATE TABLE}.
          * @param flags Flags (for future usage).
          */
-        CacheInfo(StoredCacheData cacheData, CacheType cacheType, boolean sql, long flags) {
+        public CacheInfo(StoredCacheData cacheData, CacheType cacheType, boolean sql, long flags) {
             this.cacheData = cacheData;
             this.cacheType = cacheType;
             this.sql = sql;
@@ -128,21 +128,21 @@ class CacheJoinNodeDiscoveryData implements Serializable {
         /**
          * @return Cache data.
          */
-        StoredCacheData cacheData() {
+        public StoredCacheData cacheData() {
             return cacheData;
         }
 
         /**
          * @return Cache type.
          */
-        CacheType cacheType() {
+        public CacheType cacheType() {
             return cacheType;
         }
 
         /**
          * @return SQL flag - {@code true} if cache was created with {@code CREATE TABLE}.
          */
-        boolean sql() {
+        public boolean sql() {
             return sql;
         }
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/bdbba0ee/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheNodeCommonDiscoveryData.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheNodeCommonDiscoveryData.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheNodeCommonDiscoveryData.java
index 796ed9d..abcc192 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheNodeCommonDiscoveryData.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheNodeCommonDiscoveryData.java
@@ -27,7 +27,7 @@ import org.apache.ignite.internal.util.typedef.internal.S;
 /**
  * Cache information sent in discovery data to joining node.
  */
-class CacheNodeCommonDiscoveryData implements Serializable {
+public class CacheNodeCommonDiscoveryData implements Serializable {
     /** */
     private static final long serialVersionUID = 0L;
 
@@ -55,7 +55,7 @@ class CacheNodeCommonDiscoveryData implements Serializable {
      * @param cacheGrps Started cache groups.
      * @param clientNodesMap Information about cache client nodes.
      */
-    CacheNodeCommonDiscoveryData(Map<String, CacheData> caches,
+    public CacheNodeCommonDiscoveryData(Map<String, CacheData> caches,
         Map<String, CacheData> templates,
         Map<Integer, CacheGroupData> cacheGrps,
         Map<String, Map<UUID, Boolean>> clientNodesMap,
@@ -83,21 +83,21 @@ class CacheNodeCommonDiscoveryData implements Serializable {
     /**
      * @return Started caches.
      */
-    Map<String, CacheData> caches() {
+    public Map<String, CacheData> caches() {
         return caches;
     }
 
     /**
      * @return Configured templates.
      */
-    Map<String, CacheData> templates() {
+    public Map<String, CacheData> templates() {
         return templates;
     }
 
     /**
      * @return Information about cache client nodes.
      */
-    Map<String, Map<UUID, Boolean>> clientNodesMap() {
+    public Map<String, Map<UUID, Boolean>> clientNodesMap() {
         return clientNodesMap;
     }
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/bdbba0ee/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/ClusterCachesInfo.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/ClusterCachesInfo.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/ClusterCachesInfo.java
index 4838a82..ef5dd51 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/ClusterCachesInfo.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/ClusterCachesInfo.java
@@ -82,10 +82,10 @@ class ClusterCachesInfo {
     /** */
     private CachesOnDisconnect cachesOnDisconnect;
 
-    /** */
+    /** Local cache info */
     private CacheJoinNodeDiscoveryData joinDiscoData;
 
-    /** */
+    /** Cluster cache info */
     private GridData gridData;
 
     /** */
@@ -109,25 +109,6 @@ class ClusterCachesInfo {
      */
     void onStart(CacheJoinNodeDiscoveryData joinDiscoData) throws IgniteCheckedException {
         this.joinDiscoData = joinDiscoData;
-
-        Map<String, CacheConfiguration> grpCfgs = new HashMap<>();
-
-        for (CacheJoinNodeDiscoveryData.CacheInfo info : joinDiscoData.caches().values()) {
-            if (info.cacheData().config().getGroupName() == null)
-                continue;
-
-            CacheConfiguration ccfg = grpCfgs.get(info.cacheData().config().getGroupName());
-
-            if (ccfg == null)
-                grpCfgs.put(info.cacheData().config().getGroupName(), info.cacheData().config());
-            else
-                validateCacheGroupConfiguration(ccfg, info.cacheData().config());
-        }
-
-        String conflictErr = processJoiningNode(joinDiscoData, ctx.localNodeId(), true);
-
-        if (conflictErr != null)
-            throw new IgniteCheckedException("Failed to start configured cache. " + conflictErr);
     }
 
     /**
@@ -175,7 +156,6 @@ class ClusterCachesInfo {
         joinDiscoData = null;
         gridData = null;
     }
-
     /**
      * Checks that remote caches has configuration compatible with the local.
      *
@@ -218,7 +198,7 @@ class ClusterCachesInfo {
             }
 
             CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "cacheAffinity", "Cache affinity",
-                    locAttr.cacheAffinityClassName(), rmtAttr.cacheAffinityClassName(), true);
+                locAttr.cacheAffinityClassName(), rmtAttr.cacheAffinityClassName(), true);
 
             CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "cacheAffinityMapper",
                 "Cache affinity mapper", locAttr.cacheAffinityMapperClassName(),
@@ -691,6 +671,27 @@ class ClusterCachesInfo {
         return started != null ? started : Collections.<DynamicCacheDescriptor>emptyList();
     }
 
+    public void addJoinInfo() {
+        Map<String, CacheConfiguration> grpCfgs = new HashMap<>();
+
+        for (CacheJoinNodeDiscoveryData.CacheInfo info : joinDiscoData.caches().values()) {
+            if (info.cacheData().config().getGroupName() == null)
+                continue;
+
+            CacheConfiguration ccfg = grpCfgs.get(info.cacheData().config().getGroupName());
+
+            if (ccfg == null)
+                grpCfgs.put(info.cacheData().config().getGroupName(), info.cacheData().config());
+            /*else
+                validateCacheGroupConfiguration(ccfg, info.cacheData().config());*/
+        }
+
+        String conflictErr = processJoiningNode(joinDiscoData, ctx.localNodeId(), true);
+
+       /* if (conflictErr != null)
+            throw new IgniteCheckedException("Failed to start configured cache. " + conflictErr);*/
+    }
+
     /**
      * Discovery event callback, executed from discovery thread.
      *
@@ -719,6 +720,9 @@ class ClusterCachesInfo {
                 if (gridData == null) { // First node starts.
                     assert joinDiscoData != null || !ctx.state().active();
 
+                    if (ctx.state().active())
+                        addJoinInfo();
+
                     initStartCachesForLocalJoin(true);
                 }
             }
@@ -983,7 +987,7 @@ class ClusterCachesInfo {
                     clientReconnectReqs.put(data.joiningNodeId(), (CacheClientReconnectDiscoveryData)joiningNodeData);
                 }
                 else
-                    processClientReconnectData((CacheClientReconnectDiscoveryData) joiningNodeData, data.joiningNodeId());
+                    processClientReconnectData((CacheClientReconnectDiscoveryData)joiningNodeData, data.joiningNodeId());
             }
             else if (joiningNodeData instanceof CacheJoinNodeDiscoveryData)
                 processJoiningNode((CacheJoinNodeDiscoveryData)joiningNodeData, data.joiningNodeId(), false);
@@ -1364,7 +1368,7 @@ class ClusterCachesInfo {
 
             boolean stopped;
 
-            if (!surviveReconnect(cacheName)) {
+            if (!surviveReconnect(cacheName) || !ctx.state().active()) {
                 DynamicCacheDescriptor newDesc = registeredCaches.get(cacheName);
 
                 stopped = newDesc == null || !desc.deploymentId().equals(newDesc.deploymentId());
@@ -1391,7 +1395,7 @@ class ClusterCachesInfo {
     /**
      * @return {@code True} if client node is currently in disconnected state.
      */
-    private boolean disconnectedState() {
+    public boolean disconnectedState() {
         return cachesOnDisconnect != null;
     }
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/bdbba0ee/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/DynamicCacheChangeRequest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/DynamicCacheChangeRequest.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/DynamicCacheChangeRequest.java
index 7c0c55c..ae6f9e0 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/DynamicCacheChangeRequest.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/DynamicCacheChangeRequest.java
@@ -176,7 +176,12 @@ public class DynamicCacheChangeRequest implements Serializable {
      * @param destroy Destroy flag.
      * @return Cache stop request.
      */
-    static DynamicCacheChangeRequest stopRequest(GridKernalContext ctx, String cacheName, boolean sql, boolean destroy) {
+    public static DynamicCacheChangeRequest stopRequest(
+        GridKernalContext ctx,
+        String cacheName,
+        boolean sql,
+        boolean destroy
+    ) {
         DynamicCacheChangeRequest req = new DynamicCacheChangeRequest(UUID.randomUUID(), cacheName, ctx.localNodeId());
 
         req.sql(sql);

http://git-wip-us.apache.org/repos/asf/ignite/blob/bdbba0ee/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java
index fefaf07..5ee80ef 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java
@@ -74,6 +74,7 @@ import org.apache.ignite.internal.pagemem.store.IgnitePageStoreManager;
 import org.apache.ignite.internal.pagemem.wal.IgniteWriteAheadLogManager;
 import org.apache.ignite.internal.processors.GridProcessorAdapter;
 import org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion;
+import org.apache.ignite.internal.processors.cache.CacheJoinNodeDiscoveryData.CacheInfo;
 import org.apache.ignite.internal.processors.affinity.GridAffinityAssignmentCache;
 import org.apache.ignite.internal.processors.cache.binary.CacheObjectBinaryProcessorImpl;
 import org.apache.ignite.internal.processors.cache.database.IgniteCacheDatabaseSharedManager;
@@ -638,7 +639,7 @@ public class GridCacheProcessor extends GridProcessorAdapter {
 
     /** {@inheritDoc} */
     @SuppressWarnings({"unchecked"})
-    @Override public void start(boolean activeOnStart) throws IgniteCheckedException {
+    @Override public void start() throws IgniteCheckedException {
         cachesInfo = new ClusterCachesInfo(ctx);
 
         DeploymentMode depMode = ctx.config().getDeploymentMode();
@@ -652,8 +653,10 @@ public class GridCacheProcessor extends GridProcessorAdapter {
 
         initializeInternalCacheNames();
 
-        sharedCtx = createSharedContext(
-            ctx, CU.startStoreSessionListeners(ctx, ctx.config().getCacheStoreSessionListenerFactories()));
+        Collection<CacheStoreSessionListener> sessionListeners =
+            CU.startStoreSessionListeners(ctx, ctx.config().getCacheStoreSessionListenerFactories());
+
+        sharedCtx = createSharedContext(ctx, sessionListeners);
 
         transactions = new IgniteTransactionsImpl(sharedCtx);
 
@@ -661,31 +664,28 @@ public class GridCacheProcessor extends GridProcessorAdapter {
         for (GridCacheSharedManager mgr : sharedCtx.managers())
             mgr.start(sharedCtx);
 
-        if (activeOnStart && !ctx.config().isDaemon()) {
-            Map<String, CacheJoinNodeDiscoveryData.CacheInfo> caches = new HashMap<>();
+        if (ctx.config().isDaemon())
+            return;
 
-            Map<String, CacheJoinNodeDiscoveryData.CacheInfo> templates = new HashMap<>();
+        Map<String, CacheInfo> caches = new HashMap<>();
 
-            addCacheOnJoinFromConfig(caches, templates);
+        Map<String, CacheInfo> templates = new HashMap<>();
 
-            addCacheOnJoinFromPersistentStore(caches, templates);
+        addCacheOnJoinFromConfig(caches, templates);
 
-            CacheJoinNodeDiscoveryData discoData = new CacheJoinNodeDiscoveryData(IgniteUuid.randomUuid(),
-                caches,
-                templates,
-                startAllCachesOnClientStart());
+        CacheJoinNodeDiscoveryData discoData = new CacheJoinNodeDiscoveryData(
+            IgniteUuid.randomUuid(),
+            caches,
+            templates,
+            startAllCachesOnClientStart()
+        );
 
-            cachesInfo.onStart(discoData);
-        }
-        else {
-            cachesInfo.onStart(new CacheJoinNodeDiscoveryData(IgniteUuid.randomUuid(),
-                Collections.<String, CacheJoinNodeDiscoveryData.CacheInfo>emptyMap(),
-                Collections.<String, CacheJoinNodeDiscoveryData.CacheInfo>emptyMap(),
-                false));
-        }
+        cachesInfo.onStart(discoData);
 
         if (log.isDebugEnabled())
             log.debug("Started cache processor.");
+
+        ctx.state().cacheProcessorStarted(discoData);
     }
 
     /**
@@ -695,8 +695,8 @@ public class GridCacheProcessor extends GridProcessorAdapter {
      * @throws IgniteCheckedException If failed.
      */
     private void addCacheOnJoin(StoredCacheData cacheData,
-        Map<String, CacheJoinNodeDiscoveryData.CacheInfo> caches,
-        Map<String, CacheJoinNodeDiscoveryData.CacheInfo> templates) throws IgniteCheckedException {
+        Map<String, CacheInfo> caches,
+        Map<String, CacheInfo> templates) throws IgniteCheckedException {
         CacheConfiguration<?, ?> cfg = cacheData.config();
 
         CU.validateCacheName(cfg.getName());
@@ -716,14 +716,7 @@ public class GridCacheProcessor extends GridProcessorAdapter {
                     "assign unique name to each cache): " + cfg.getName());
             }
 
-            CacheType cacheType;
-
-            if (CU.isUtilityCache(cfg.getName()))
-                cacheType = CacheType.UTILITY;
-            else if (internalCaches.contains(cfg.getName()))
-                cacheType = CacheType.INTERNAL;
-            else
-                cacheType = CacheType.USER;
+            CacheType cacheType = cacheType(cfg.getName());
 
             if (cacheType != CacheType.USER && cfg.getMemoryPolicyName() == null)
                 cfg.setMemoryPolicyName(sharedCtx.database().systemMemoryPolicyName());
@@ -745,8 +738,8 @@ public class GridCacheProcessor extends GridProcessorAdapter {
      * @throws IgniteCheckedException If failed.
      */
     private void addCacheOnJoinFromConfig(
-        Map<String, CacheJoinNodeDiscoveryData.CacheInfo> caches,
-        Map<String, CacheJoinNodeDiscoveryData.CacheInfo> templates
+        Map<String, CacheInfo> caches,
+        Map<String, CacheInfo> templates
     ) throws IgniteCheckedException {
         assert !ctx.config().isDaemon();
 
@@ -755,7 +748,8 @@ public class GridCacheProcessor extends GridProcessorAdapter {
         for (int i = 0; i < cfgs.length; i++) {
             CacheConfiguration<?, ?> cfg = new CacheConfiguration(cfgs[i]);
 
-            cfgs[i] = cfg; // Replace original configuration value.
+            // Replace original configuration value.
+            cfgs[i] = cfg;
             StoredCacheData cacheData = new StoredCacheData(cfg);
             cacheData.sql(false);
 
@@ -764,36 +758,6 @@ public class GridCacheProcessor extends GridProcessorAdapter {
     }
 
     /**
-     * @param caches Caches map.
-     * @param templates Templates map.
-     * @throws IgniteCheckedException If failed.
-     */
-    private void addCacheOnJoinFromPersistentStore(
-        Map<String, CacheJoinNodeDiscoveryData.CacheInfo> caches,
-        Map<String, CacheJoinNodeDiscoveryData.CacheInfo> templates
-    ) throws IgniteCheckedException {
-        assert !ctx.config().isDaemon();
-
-        if (sharedCtx.pageStore() != null && sharedCtx.database().persistenceEnabled()) {
-            Map<String, StoredCacheData> cacheDataMap = sharedCtx.pageStore().readCacheConfigurations();
-
-            for (String cache : caches.keySet())
-                cacheDataMap.remove(cache);
-
-            for (String cache : internalCaches)
-                cacheDataMap.remove(cache);
-
-            if (!F.isEmpty(cacheDataMap)) {
-                if (log.isInfoEnabled())
-                    log.info("Register persistent caches: " + cacheDataMap.keySet());
-
-                for (StoredCacheData cacheData : cacheDataMap.values())
-                    addCacheOnJoin(cacheData, caches, templates);
-            }
-        }
-    }
-
-    /**
      * Initialize internal cache names
      */
     private void initializeInternalCacheNames() {
@@ -829,9 +793,11 @@ public class GridCacheProcessor extends GridProcessorAdapter {
 
     /** {@inheritDoc} */
     @SuppressWarnings("unchecked")
-    @Override public void onKernalStart(boolean activeOnStart) throws IgniteCheckedException {
+    @Override public void onKernalStart() throws IgniteCheckedException {
         ClusterNode locNode = ctx.discovery().localNode();
 
+        boolean active = ctx.state().active();
+
         try {
             boolean checkConsistency =
                 !ctx.config().isDaemon() && !getBoolean(IGNITE_SKIP_CONFIGURATION_CONSISTENCY_CHECK);
@@ -841,42 +807,7 @@ public class GridCacheProcessor extends GridProcessorAdapter {
 
             cachesInfo.onKernalStart(checkConsistency);
 
-            boolean currStatus = ctx.state().active();
-
-            // If we start as inactive node, and join to active cluster, we must register all caches
-            // which were received on join.
-            if (!ctx.isDaemon() && currStatus && !activeOnStart) {
-                List<CacheConfiguration> tmpCacheCfg = new ArrayList<>();
-
-                for (CacheConfiguration conf : ctx.config().getCacheConfiguration()) {
-                    assert conf.getName() != null;
-
-                    for (DynamicCacheDescriptor desc : cacheDescriptors().values()) {
-                        CacheConfiguration c = desc.cacheConfiguration();
-                        IgnitePredicate filter = desc.groupDescriptor().config().getNodeFilter();
-
-                        if (c.getName().equals(conf.getName()) &&
-                            ((desc.receivedOnDiscovery() && CU.affinityNode(locNode, filter)) ||
-                                CU.isSystemCache(c.getName()))) {
-                            tmpCacheCfg.add(c);
-
-                            break;
-                        }
-                    }
-                }
-
-                if (!tmpCacheCfg.isEmpty()) {
-                    CacheConfiguration[] newCacheCfg = new CacheConfiguration[tmpCacheCfg.size()];
-
-                    tmpCacheCfg.toArray(newCacheCfg);
-
-                    ctx.config().setCacheConfiguration(newCacheCfg);
-                }
-
-                activeOnStart = currStatus;
-            }
-
-            if (activeOnStart && !ctx.clientNode() && !ctx.isDaemon())
+            if (active && !ctx.clientNode() && !ctx.isDaemon())
                 sharedCtx.database().lock();
 
             // Must start database before start first cache.
@@ -884,6 +815,8 @@ public class GridCacheProcessor extends GridProcessorAdapter {
 
             ctx.query().onCacheKernalStart();
 
+            // In shared context, we start exchange manager and wait until processed local join
+            // event, all caches which we get on join will be start.
             for (GridCacheSharedManager<?, ?> mgr : sharedCtx.managers()) {
                 if (sharedCtx.database() != mgr)
                     mgr.onKernalStart(false);
@@ -893,8 +826,8 @@ public class GridCacheProcessor extends GridProcessorAdapter {
             cacheStartedLatch.countDown();
         }
 
-        // Escape if start active on start false
-        if (!activeOnStart)
+        // Escape if cluster inactive.
+        if (!active)
             return;
 
         if (!ctx.config().isDaemon())
@@ -1809,7 +1742,8 @@ public class GridCacheProcessor extends GridProcessorAdapter {
             for (DynamicCacheDescriptor desc : started) {
                 IgnitePredicate<ClusterNode> filter = desc.groupDescriptor().config().getNodeFilter();
 
-                if (CU.affinityNode(ctx.discovery().localNode(), filter)) {
+                //Todo check second condition.
+                if (CU.affinityNode(ctx.discovery().localNode(), filter) || CU.isSystemCache(desc.cacheName())) {
                     prepareCacheStart(
                         desc,
                         null,
@@ -2029,7 +1963,8 @@ public class GridCacheProcessor extends GridProcessorAdapter {
 
             sharedCtx.removeCacheContext(ctx);
 
-            onKernalStop(cache, req.destroy());
+            // Todo cancel = true?
+            onKernalStop(cache, true);
 
             stopCache(cache, true, req.destroy());
 
@@ -2102,6 +2037,9 @@ public class GridCacheProcessor extends GridProcessorAdapter {
                 try {
                     stopCtx = prepareCacheStop(action.request(), forceClose);
                     destroy = action.request().destroy();
+
+                    if (exchActions.newClusterState() == null)
+                        ctx.state().onCacheStop(action.request());
                 }
                 finally {
                     sharedCtx.database().checkpointReadUnlock();
@@ -2231,7 +2169,7 @@ public class GridCacheProcessor extends GridProcessorAdapter {
         IgnitePageStoreManager pageStoreMgr = null;
         IgniteWriteAheadLogManager walMgr = null;
 
-        if (ctx.config().isPersistentStoreEnabled()) {
+        if (ctx.config().isPersistentStoreEnabled() && !ctx.clientNode()) {
             if (ctx.clientNode()) {
                 U.warn(log, "Persistent Store is not supported on client nodes (Persistent Store's" +
                     " configuration will be ignored).");
@@ -2288,24 +2226,37 @@ public class GridCacheProcessor extends GridProcessorAdapter {
 
     /** {@inheritDoc} */
     @Override public void collectGridNodeData(DiscoveryDataBag dataBag) {
-        cachesInfo.collectGridNodeData(dataBag);
-    }
-
-    /**
-     * @return {@code True} if need locally start all existing caches on client node start.
-     */
-    private boolean startAllCachesOnClientStart() {
-        return startClientCaches && ctx.clientNode();
+        if (ctx.state().active())
+            cachesInfo.collectGridNodeData(dataBag);
+        else
+            ctx.state().collectGridNodeData0(dataBag);
     }
 
     /** {@inheritDoc} */
     @Override public void onJoiningNodeDataReceived(JoiningNodeDiscoveryData data) {
-        cachesInfo.onJoiningNodeDataReceived(data);
+        if (ctx.state().active())
+            cachesInfo.onJoiningNodeDataReceived(data);
+
+        ctx.state().onJoiningNodeDataReceived0(data);
     }
 
     /** {@inheritDoc} */
     @Override public void onGridDataReceived(GridDiscoveryData data) {
-        cachesInfo.onGridDataReceived(data);
+        if (ctx.state().active()) {
+            if (!cachesInfo.disconnectedState())
+                cachesInfo.addJoinInfo();
+
+            cachesInfo.onGridDataReceived(data);
+        }
+
+        ctx.state().onGridDataReceived0(data);
+    }
+
+    /**
+     * @return {@code True} if need locally start all existing caches on client node start.
+     */
+    private boolean startAllCachesOnClientStart() {
+        return startClientCaches && ctx.clientNode();
     }
 
     /**
@@ -2723,84 +2674,14 @@ public class GridCacheProcessor extends GridProcessorAdapter {
         return fut;
     }
 
-    /**
-     *
-     */
-    public Collection<DynamicCacheChangeRequest> startAllCachesRequests() throws IgniteCheckedException {
-        List<DynamicCacheChangeRequest> reqs = new ArrayList<>();
-
-        if (!ctx.config().isDaemon() &&
-            sharedCtx.pageStore() != null &&
-            sharedCtx.database().persistenceEnabled()) {
-            Map<String, StoredCacheData> savedCaches = sharedCtx.pageStore().readCacheConfigurations();
-
-            for (StoredCacheData cfg : savedCaches.values())
-                reqs.add(createRequest(cfg.config(), false));
-
-            for (CacheConfiguration cfg : ctx.config().getCacheConfiguration()) {
-                if (!savedCaches.containsKey(cfg.getName()))
-                    reqs.add(createRequest(cfg, true));
-            }
-        }
-        else {
-            for (CacheConfiguration cfg : ctx.config().getCacheConfiguration())
-                reqs.add(createRequest(cfg, true));
-        }
-
-        return reqs;
-    }
-
-    /**
-     *
-     */
-    public Collection<DynamicCacheChangeRequest> stopAllCachesRequests() {
-        List<DynamicCacheChangeRequest> reqs = new ArrayList<>();
-
-        for (String cacheName : cacheNames()) {
-            DynamicCacheChangeRequest req = DynamicCacheChangeRequest.stopRequest(ctx, cacheName, false, false);
-
-            reqs.add(req);
-        }
-
-        return reqs;
-    }
-
-    /**
-     * @param cfg Cache configuration.
-     */
-    private DynamicCacheChangeRequest createRequest(
-        CacheConfiguration cfg,
-        boolean needInit
-    ) throws IgniteCheckedException {
-        assert cfg != null;
-        assert cfg.getName() != null;
-
-        cloneCheckSerializable(cfg);
-
-        if (needInit) {
-            CacheObjectContext cacheObjCtx = ctx.cacheObjects().contextForCache(cfg);
-
-            initialize(cfg, cacheObjCtx);
-        }
-
-        String cacheName = cfg.getName();
-
-        DynamicCacheChangeRequest req = new DynamicCacheChangeRequest(UUID.randomUUID(), cacheName, ctx.localNodeId());
-
-        req.startCacheConfiguration(cfg);
-        req.template(cfg.getName().endsWith("*"));
-        req.nearCacheConfiguration(cfg.getNearConfiguration());
-        req.deploymentId(IgniteUuid.randomUuid());
-        req.schema(new QuerySchema(cfg.getQueryEntities()));
 
+    public CacheType cacheType (String cacheName ) {
         if (CU.isUtilityCache(cacheName))
-            req.cacheType(CacheType.UTILITY);
+            return CacheType.UTILITY;
         else if (internalCaches.contains(cacheName))
-            req.cacheType(CacheType.INTERNAL);
+            return CacheType.INTERNAL;
         else
-            req.cacheType(CacheType.USER);
-
-        return req;
+            return CacheType.USER;
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/ignite/blob/bdbba0ee/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/binary/CacheObjectBinaryProcessorImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/binary/CacheObjectBinaryProcessorImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/binary/CacheObjectBinaryProcessorImpl.java
index a2d319f..f46b4bc 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/binary/CacheObjectBinaryProcessorImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/binary/CacheObjectBinaryProcessorImpl.java
@@ -138,7 +138,7 @@ public class CacheObjectBinaryProcessorImpl extends IgniteCacheObjectProcessorIm
     }
 
     /** {@inheritDoc} */
-    @Override public void start(boolean activeOnStart) throws IgniteCheckedException {
+    @Override public void start() throws IgniteCheckedException {
         if (marsh instanceof BinaryMarshaller) {
             if (ctx.clientNode())
                 ctx.event().addLocalEventListener(clientDisconLsnr, EVT_CLIENT_NODE_DISCONNECTED);
@@ -251,8 +251,8 @@ public class CacheObjectBinaryProcessorImpl extends IgniteCacheObjectProcessorIm
     }
 
     /** {@inheritDoc} */
-    @Override public void onKernalStart(boolean activeOnStart) throws IgniteCheckedException {
-        super.onKernalStart(activeOnStart);
+    @Override public void onKernalStart() throws IgniteCheckedException {
+        super.onKernalStart();
 
         discoveryStarted = true;
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/bdbba0ee/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/IgniteCacheDatabaseSharedManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/IgniteCacheDatabaseSharedManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/IgniteCacheDatabaseSharedManager.java
index 27650a2..a4ca5d2 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/IgniteCacheDatabaseSharedManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/IgniteCacheDatabaseSharedManager.java
@@ -118,7 +118,7 @@ public class IgniteCacheDatabaseSharedManager extends GridCacheSharedManagerAdap
 
         initPageMemoryPolicies(memCfg);
 
-        registerMetricsMBeans();
+        //registerMetricsMBeans();
 
         startMemoryPolicies();
 
@@ -143,9 +143,11 @@ public class IgniteCacheDatabaseSharedManager extends GridCacheSharedManagerAdap
      * @param memPlcCfg Memory policy configuration.
      * @param cfg Ignite configuration.
      */
-    private void registerMetricsMBean(MemoryMetricsImpl memMetrics,
+    private void registerMetricsMBean(
+        MemoryMetricsImpl memMetrics,
         MemoryPolicyConfiguration memPlcCfg,
-        IgniteConfiguration cfg) {
+        IgniteConfiguration cfg
+    ) {
         try {
             U.registerMBean(
                     cfg.getMBeanServer(),
@@ -660,7 +662,7 @@ public class IgniteCacheDatabaseSharedManager extends GridCacheSharedManagerAdap
 
                 IgniteConfiguration cfg = cctx.gridConfig();
 
-                try {
+              /*  try {
                     cfg.getMBeanServer().unregisterMBean(
                         U.makeMBeanName(
                             cfg.getIgniteInstanceName(),
@@ -670,7 +672,7 @@ public class IgniteCacheDatabaseSharedManager extends GridCacheSharedManagerAdap
                 catch (JMException e) {
                     U.error(log, "Failed to unregister MBean for memory metrics: " +
                         memPlc.memoryMetrics().getName(), e);
-                }
+                }*/
             }
         }
     }
@@ -949,12 +951,12 @@ public class IgniteCacheDatabaseSharedManager extends GridCacheSharedManagerAdap
 
     /** {@inheritDoc} */
     @Override public void onActivate(GridKernalContext kctx) throws IgniteCheckedException {
-        // No-op.
+        start0();
     }
 
     /** {@inheritDoc} */
     @Override public void onDeActivate(GridKernalContext kctx) throws IgniteCheckedException {
-        // No-op.
+        stop0(true);
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/ignite/blob/bdbba0ee/modules/core/src/main/java/org/apache/ignite/internal/processors/closure/GridClosureProcessor.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/closure/GridClosureProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/closure/GridClosureProcessor.java
index 40e21a0..01207e3 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/closure/GridClosureProcessor.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/closure/GridClosureProcessor.java
@@ -104,7 +104,7 @@ public class GridClosureProcessor extends GridProcessorAdapter {
     }
 
     /** {@inheritDoc} */
-    @Override public void start(boolean activeOnStart) throws IgniteCheckedException {
+    @Override public void start() throws IgniteCheckedException {
         if (log.isDebugEnabled())
             log.debug("Started closure processor.");
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/bdbba0ee/modules/core/src/main/java/org/apache/ignite/internal/processors/cluster/ClusterProcessor.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cluster/ClusterProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cluster/ClusterProcessor.java
index 26b1a2e..7cb8577 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cluster/ClusterProcessor.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cluster/ClusterProcessor.java
@@ -294,7 +294,7 @@ public class ClusterProcessor extends GridProcessorAdapter {
     }
 
     /** {@inheritDoc} */
-    @Override public void onKernalStart(boolean activeOnStart) throws IgniteCheckedException {
+    @Override public void onKernalStart() throws IgniteCheckedException {
         if (notifyEnabled.get()) {
             try {
                 verChecker = new GridUpdateNotifier(ctx.igniteInstanceName(),


Mime
View raw message