ignite-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From agoncha...@apache.org
Subject [51/51] [abbrv] incubator-ignite git commit: # IGNITE-45 - Fixing tests
Date Thu, 12 Mar 2015 05:36:16 GMT
# IGNITE-45 - Fixing tests


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

Branch: refs/heads/ignite-45
Commit: 65d22d5861eafda5912fb83df197df35024a8f9c
Parents: 25e1fbd
Author: Alexey Goncharuk <agoncharuk@gridgain.com>
Authored: Wed Mar 11 22:35:06 2015 -0700
Committer: Alexey Goncharuk <agoncharuk@gridgain.com>
Committed: Wed Mar 11 22:35:06 2015 -0700

----------------------------------------------------------------------
 .../configuration/IgniteConfiguration.java      |   1 +
 .../apache/ignite/internal/IgniteKernal.java    |  33 +++-
 .../org/apache/ignite/internal/IgnitionEx.java  |   1 +
 .../internal/cluster/ClusterGroupAdapter.java   |   6 +
 .../cache/GridCacheExplicitLockSpan.java        |  20 +-
 .../processors/cache/GridCacheMvccManager.java  |  16 +-
 .../processors/cache/GridCacheProcessor.java    | 192 +++++++++++--------
 .../colocated/GridDhtColocatedLockFuture.java   |  67 +++----
 .../distributed/near/GridNearLockFuture.java    |  64 +++----
 .../cache/distributed/near/GridNearTxLocal.java |  22 +--
 .../near/GridNearTxPrepareFuture.java           |  19 --
 .../cache/transactions/IgniteInternalTx.java    |   5 +
 .../cache/transactions/IgniteTxAdapter.java     |  13 +-
 .../cache/version/GridCacheVersionManager.java  |  13 +-
 .../datastructures/DataStructuresProcessor.java |   2 +-
 .../spi/discovery/tcp/TcpDiscoverySpi.java      |   2 +
 .../cache/GridCacheAbstractFlagsTest.java       |   7 +-
 .../cache/GridCacheAbstractSelfTest.java        |  18 +-
 ...ridCacheMultinodeUpdateAbstractSelfTest.java |  16 +-
 .../cache/IgniteDynamicCacheStartSelfTest.java  |  14 +-
 .../GridCacheClientModesAbstractSelfTest.java   |   5 -
 ...idCacheNearOnlyMultiNodeFullApiSelfTest.java |  28 ++-
 ...dCacheAtomicLocalMetricsNoStoreSelfTest.java |  11 +-
 23 files changed, 306 insertions(+), 269 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/65d22d58/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 031fdec..c2bfce4 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
@@ -431,6 +431,7 @@ public class IgniteConfiguration {
         cacheSanityCheckEnabled = cfg.isCacheSanityCheckEnabled();
         connectorCfg = cfg.getConnectorConfiguration();
         classLdr = cfg.getClassLoader();
+        clientMode = cfg.isClientMode();
         clockSyncFreq = cfg.getClockSyncFrequency();
         clockSyncSamples = cfg.getClockSyncSamples();
         deployMode = cfg.getDeploymentMode();

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/65d22d58/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 b4b4c8b..cac8666 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
@@ -2258,7 +2258,7 @@ public class IgniteKernal implements IgniteEx, IgniteMXBean, Externalizable {
         guard();
 
         try {
-            ctx.cache().dynamicStartCache(cacheCfg).get();
+            ctx.cache().dynamicStartCache(cacheCfg, null).get();
 
             return ctx.cache().publicJCache(cacheCfg.getName());
         }
@@ -2273,14 +2273,37 @@ public class IgniteKernal implements IgniteEx, IgniteMXBean, Externalizable {
     /** {@inheritDoc} */
     @Override public <K, V> IgniteCache<K, V> createCache(CacheConfiguration<K, V> cacheCfg,
         @Nullable NearCacheConfiguration<K, V> nearCfg) {
-        // TODO: implement.
-        return null;
+        guard();
+
+        try {
+            ctx.cache().dynamicStartCache(cacheCfg, nearCfg).get();
+
+            return ctx.cache().publicJCache(cacheCfg.getName());
+        }
+        catch (IgniteCheckedException e) {
+            throw new CacheException(e);
+        }
+        finally {
+            unguard();
+        }
+
     }
 
     /** {@inheritDoc} */
     @Override public <K, V> IgniteCache<K, V> createCache(@Nullable NearCacheConfiguration<K, V> nearCfg) {
-        // TODO: implement.
-        return null;
+        guard();
+
+        try {
+            ctx.cache().dynamicStartCache(null, nearCfg).get();
+
+            return ctx.cache().publicJCache(nearCfg.getName());
+        }
+        catch (IgniteCheckedException e) {
+            throw new CacheException(e);
+        }
+        finally {
+            unguard();
+        }
     }
 
     /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/65d22d58/modules/core/src/main/java/org/apache/ignite/internal/IgnitionEx.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/IgnitionEx.java b/modules/core/src/main/java/org/apache/ignite/internal/IgnitionEx.java
index 3c8e953..deb7707 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/IgnitionEx.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/IgnitionEx.java
@@ -1915,6 +1915,7 @@ public class IgnitionEx {
                 cache.setPreloadMode(SYNC);
                 cache.setWriteSynchronizationMode(FULL_SYNC);
                 cache.setAffinity(new CacheRendezvousAffinityFunction(false, 100));
+                cache.setNodeFilter(CacheConfiguration.ALL_NODES);
 
                 return cache;
             }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/65d22d58/modules/core/src/main/java/org/apache/ignite/internal/cluster/ClusterGroupAdapter.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/cluster/ClusterGroupAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/cluster/ClusterGroupAdapter.java
index e955d81..529bee2 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/cluster/ClusterGroupAdapter.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/cluster/ClusterGroupAdapter.java
@@ -333,8 +333,14 @@ public class ClusterGroupAdapter implements ClusterGroupEx, Externalizable {
         guard();
 
         try {
+            if (p != null)
+                ctx.resource().injectGeneric(p);
+
             return new ClusterGroupAdapter(ctx, subjId, this.p != null ? F.and(p, this.p) : p);
         }
+        catch (IgniteCheckedException e) {
+            throw U.convertException(e);
+        }
         finally {
             unguard();
         }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/65d22d58/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheExplicitLockSpan.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheExplicitLockSpan.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheExplicitLockSpan.java
index a468fb9..242e769 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheExplicitLockSpan.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheExplicitLockSpan.java
@@ -18,7 +18,7 @@
 package org.apache.ignite.internal.processors.cache;
 
 import org.apache.ignite.internal.*;
-import org.apache.ignite.internal.managers.discovery.*;
+import org.apache.ignite.internal.processors.affinity.*;
 import org.apache.ignite.internal.processors.cache.version.*;
 import org.apache.ignite.internal.util.future.*;
 import org.apache.ignite.internal.util.tostring.*;
@@ -38,7 +38,7 @@ public class GridCacheExplicitLockSpan extends ReentrantLock {
 
     /** Topology snapshot. */
     @GridToStringInclude
-    private final GridDiscoveryTopologySnapshot topSnapshot;
+    private final AffinityTopologyVersion topVer;
 
     /** Pending candidates. */
     @GridToStringInclude
@@ -49,11 +49,11 @@ public class GridCacheExplicitLockSpan extends ReentrantLock {
     private final GridFutureAdapter<Object> releaseFut = new GridFutureAdapter<>();
 
     /**
-     * @param topSnapshot Topology snapshot.
+     * @param topVer Topology version.
      * @param cand Candidate.
      */
-    public GridCacheExplicitLockSpan(GridDiscoveryTopologySnapshot topSnapshot, GridCacheMvccCandidate cand) {
-        this.topSnapshot = topSnapshot;
+    public GridCacheExplicitLockSpan(AffinityTopologyVersion topVer, GridCacheMvccCandidate cand) {
+        this.topVer = topVer;
 
         ensureDeque(cand.key()).addFirst(cand);
     }
@@ -61,19 +61,19 @@ public class GridCacheExplicitLockSpan extends ReentrantLock {
     /**
      * Adds candidate to a lock span.
      *
-     * @param topSnapshot Topology snapshot for which candidate is added.
+     * @param topVer Topology snapshot for which candidate is added.
      * @param cand Candidate to add.
      * @return {@code True} if candidate was added, {@code false} if this span is empty and
      *      new span should be created.
      */
-    public boolean addCandidate(GridDiscoveryTopologySnapshot topSnapshot, GridCacheMvccCandidate cand) {
+    public boolean addCandidate(AffinityTopologyVersion topVer, GridCacheMvccCandidate cand) {
         lock();
 
         try {
             if (cands.isEmpty())
                 return false;
 
-            assert this.topSnapshot.topologyVersion() == topSnapshot.topologyVersion();
+            assert this.topVer.equals(this.topVer);
 
             Deque<GridCacheMvccCandidate> deque = ensureDeque(cand.key());
 
@@ -234,8 +234,8 @@ public class GridCacheExplicitLockSpan extends ReentrantLock {
      *
      * @return Topology snapshot or {@code null} if candidate list is empty.
      */
-    @Nullable public GridDiscoveryTopologySnapshot topologySnapshot() {
-        return releaseFut.isDone() ? null : topSnapshot;
+    @Nullable public AffinityTopologyVersion topologyVersion() {
+        return releaseFut.isDone() ? null : topVer;
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/65d22d58/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMvccManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMvccManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMvccManager.java
index 5725d6c..2ca8986 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMvccManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMvccManager.java
@@ -736,14 +736,14 @@ public class GridCacheMvccManager extends GridCacheSharedManagerAdapter {
      *
      * @param threadId Thread ID.
      * @param cand Candidate to add.
-     * @param snapshot Topology snapshot.
+     * @param topVer Topology version.
      */
-    public void addExplicitLock(long threadId, GridCacheMvccCandidate cand, GridDiscoveryTopologySnapshot snapshot) {
+    public void addExplicitLock(long threadId, GridCacheMvccCandidate cand, AffinityTopologyVersion topVer) {
         while (true) {
             GridCacheExplicitLockSpan span = pendingExplicit.get(cand.threadId());
 
             if (span == null) {
-                span = new GridCacheExplicitLockSpan(snapshot, cand);
+                span = new GridCacheExplicitLockSpan(topVer, cand);
 
                 GridCacheExplicitLockSpan old = pendingExplicit.putIfAbsent(threadId, span);
 
@@ -754,7 +754,7 @@ public class GridCacheMvccManager extends GridCacheSharedManagerAdapter {
             }
 
             // Either span was not empty, or concurrent put did not succeed.
-            if (span.addCandidate(snapshot, cand))
+            if (span.addCandidate(topVer, cand))
                 break;
             else
                 pendingExplicit.remove(threadId, span);
@@ -887,10 +887,10 @@ public class GridCacheMvccManager extends GridCacheSharedManagerAdapter {
      * @param threadId Thread ID.
      * @return Topology snapshot for last acquired and not released lock.
      */
-    @Nullable public GridDiscoveryTopologySnapshot lastExplicitLockTopologySnapshot(long threadId) {
+    @Nullable public AffinityTopologyVersion lastExplicitLockTopologyVersion(long threadId) {
         GridCacheExplicitLockSpan span = pendingExplicit.get(threadId);
 
-        return span != null ? span.topologySnapshot() : null;
+        return span != null ? span.topologyVersion() : null;
     }
 
     /** {@inheritDoc} */
@@ -944,9 +944,9 @@ public class GridCacheMvccManager extends GridCacheSharedManagerAdapter {
         GridCompoundFuture<Object, Object> res = new GridCompoundFuture<>();
 
         for (GridCacheExplicitLockSpan span : pendingExplicit.values()) {
-            GridDiscoveryTopologySnapshot snapshot = span.topologySnapshot();
+            AffinityTopologyVersion snapshot = span.topologyVersion();
 
-            if (snapshot != null && snapshot.topologyVersion() < topVer.topologyVersion())
+            if (snapshot != null && snapshot.compareTo(topVer) < 0)
                 res.add(span.releaseFuture());
         }
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/65d22d58/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 83397b0..758a4f8 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
@@ -75,6 +75,9 @@ import static org.apache.ignite.transactions.TransactionIsolation.*;
  */
 @SuppressWarnings("unchecked")
 public class GridCacheProcessor extends GridProcessorAdapter {
+    /** Null cache name. */
+    private static final String NULL_NAME = U.id8(UUID.randomUUID());
+
     /** Shared cache context. */
     private GridCacheSharedContext<?, ?> sharedCtx;
 
@@ -100,7 +103,7 @@ public class GridCacheProcessor extends GridProcessorAdapter {
     private final Set<String> sysCaches;
 
     /** Caches stop sequence. */
-    private final Deque<GridCacheAdapter<?, ?>> stopSeq;
+    private final Deque<String> stopSeq;
 
     /** Transaction interface implementation. */
     private IgniteTransactionsImpl transactions;
@@ -590,8 +593,6 @@ public class GridCacheProcessor extends GridProcessorAdapter {
         ctx.performance().add("Disable serializable transactions (set 'txSerializableEnabled' to false)",
             !ctx.config().getTransactionConfiguration().isTxSerializableEnabled());
 
-        Collection<GridCacheAdapter<?, ?>> startSeq = new ArrayList<>(cfgs.length);
-
         for (int i = 0; i < cfgs.length; i++) {
             CacheConfiguration<?, ?> cfg = new CacheConfiguration(cfgs[i]);
 
@@ -613,13 +614,11 @@ public class GridCacheProcessor extends GridProcessorAdapter {
                         "assign unique name to each cache).");
             }
 
-            GridCacheContext cacheCtx = createCache(cfg, cacheObjCtx);
-
             DynamicCacheDescriptor desc = new DynamicCacheDescriptor(cfg, IgniteUuid.randomUuid());
 
             desc.locallyConfigured(true);
 
-            registeredCaches.put(cfg.getName(), desc);
+            registeredCaches.put(maskNull(cfg.getName()), desc);
 
             ctx.discovery().setCacheFilter(
                 cfg.getName(),
@@ -627,25 +626,16 @@ public class GridCacheProcessor extends GridProcessorAdapter {
                 cfg.getNearConfiguration() != null,
                 cfg.getCacheMode() == LOCAL);
 
-            sharedCtx.addCacheContext(cacheCtx);
-
-            startSeq.add(cacheCtx.cache());
-
-            caches.put(cfg.getName(), cacheCtx.cache());
-
             if (sysCaches.contains(cfg.getName()))
-                stopSeq.addLast(cacheCtx.cache());
+                stopSeq.addLast(cfg.getName());
             else
-                stopSeq.addFirst(cacheCtx.cache());
+                stopSeq.addFirst(cfg.getName());
         }
 
         // Start shared managers.
         for (GridCacheSharedManager mgr : sharedCtx.managers())
             mgr.start(sharedCtx);
 
-        for (GridCacheAdapter<?, ?> cache : startSeq)
-            startCache(cache);
-
         for (Map.Entry<String, GridCacheAdapter<?, ?>> e : caches.entrySet()) {
             GridCacheAdapter cache = e.getValue();
 
@@ -654,25 +644,8 @@ public class GridCacheProcessor extends GridProcessorAdapter {
             jCacheProxies.put(e.getKey(), new IgniteCacheProxy(cache.context(), cache, null, false));
         }
 
-        // Internal caches which should not be returned to user.
-        for (Map.Entry<String, GridCacheAdapter<?, ?>> e : caches.entrySet()) {
-            GridCacheAdapter cache = e.getValue();
-
-            if (!sysCaches.contains(e.getKey()))
-                publicProxies.put(e.getKey(), new GridCacheProxyImpl(cache.context(), cache, null));
-        }
-
         transactions = new IgniteTransactionsImpl(sharedCtx);
 
-        marshallerCache().context().preloader().syncFuture().listen(new CI1<IgniteInternalFuture<?>>() {
-            @Override public void apply(IgniteInternalFuture<?> f) {
-                ctx.marshallerContext().onMarshallerCacheReady(ctx);
-            }
-        });
-
-        if (log.isDebugEnabled())
-            log.debug("Started cache processor.");
-
         if (log.isDebugEnabled())
             log.debug("Started cache processor.");
     }
@@ -706,7 +679,7 @@ public class GridCacheProcessor extends GridProcessorAdapter {
 
             IgnitePredicate filter = ccfg.getNodeFilter();
 
-            if (filter.apply(ctx.discovery().localNode()) && !desc.locallyConfigured()) {
+            if (filter.apply(ctx.discovery().localNode())) {
                 CacheObjectContext cacheObjCtx = ctx.cacheObjects().contextForCache(null, ccfg.getName(), ccfg);
 
                 GridCacheContext ctx = createCache(ccfg, cacheObjCtx);
@@ -729,6 +702,20 @@ public class GridCacheProcessor extends GridProcessorAdapter {
             }
         }
 
+        marshallerCache().context().preloader().syncFuture().listen(new CI1<IgniteInternalFuture<?>>() {
+            @Override public void apply(IgniteInternalFuture<?> f) {
+                ctx.marshallerContext().onMarshallerCacheReady(ctx);
+            }
+        });
+
+        // Internal caches which should not be returned to user.
+        for (Map.Entry<String, GridCacheAdapter<?, ?>> e : caches.entrySet()) {
+            GridCacheAdapter cache = e.getValue();
+
+            if (!sysCaches.contains(e.getKey()))
+                publicProxies.put(e.getKey(), new GridCacheProxyImpl(cache.context(), cache, null));
+        }
+
         // Must call onKernalStart on shared managers after creation of fetched caches.
         for (GridCacheSharedManager<?, ?> mgr : sharedCtx.managers())
             mgr.onKernalStart();
@@ -782,8 +769,9 @@ public class GridCacheProcessor extends GridProcessorAdapter {
         if (ctx.config().isDaemon())
             return;
 
-        for (GridCacheAdapter<?, ?> cache : stopSeq)
-            stopCache(cache, cancel);
+        for (String cacheName : stopSeq) {
+            stopCache(caches.get(cacheName), cancel);
+        }
 
         List<? extends GridCacheSharedManager<?, ?>> mgrs = sharedCtx.managers();
 
@@ -805,8 +793,8 @@ public class GridCacheProcessor extends GridProcessorAdapter {
         if (ctx.config().isDaemon())
             return;
 
-        for (GridCacheAdapter<?, ?> cache : stopSeq)
-            onKernalStop(cache, cancel);
+        for (String cacheName : stopSeq)
+            onKernalStop(caches.get(cacheName), cancel);
 
         List<? extends GridCacheSharedManager<?, ?>> sharedMgrs = sharedCtx.managers();
 
@@ -1225,7 +1213,12 @@ public class GridCacheProcessor extends GridProcessorAdapter {
      * @return Collection of started cache names.
      */
     public Collection<String> cacheNames() {
-        return registeredCaches.keySet();
+        return F.viewReadOnly(registeredCaches.keySet(),
+            new IgniteClosure<String, String>() {
+                @Override public String apply(String s) {
+                    return unmaskNull(s);
+                }
+            });
     }
 
     /**
@@ -1235,7 +1228,7 @@ public class GridCacheProcessor extends GridProcessorAdapter {
      * @return Cache mode.
      */
     public CacheMode cacheMode(String cacheName) {
-        DynamicCacheDescriptor desc = registeredCaches.get(cacheName);
+        DynamicCacheDescriptor desc = registeredCaches.get(maskNull(cacheName));
 
         return desc != null ? desc.cacheConfiguration().getCacheMode() : null;
     }
@@ -1246,7 +1239,7 @@ public class GridCacheProcessor extends GridProcessorAdapter {
      */
     @SuppressWarnings("IfMayBeConditional")
     public boolean dynamicCacheRegistered(DynamicCacheChangeRequest req) {
-        DynamicCacheDescriptor desc = registeredCaches.get(req.cacheName());
+        DynamicCacheDescriptor desc = registeredCaches.get(maskNull(req.cacheName()));
 
         if (desc != null && desc.deploymentId().equals(req.deploymentId())) {
             if (req.isStart() || req.isClientStart())
@@ -1351,13 +1344,15 @@ public class GridCacheProcessor extends GridProcessorAdapter {
                 jCacheProxies.put(cache.name(), new IgniteCacheProxy(cache.context(), cache, null, false));
         }
         else {
-            DynamicCacheDescriptor desc = registeredCaches.get(req.cacheName());
+            String masked = maskNull(req.cacheName());
+
+            DynamicCacheDescriptor desc = registeredCaches.get(masked);
 
             if (desc != null && desc.cancelled() && desc.deploymentId().equals(req.deploymentId()))
-                registeredCaches.remove(req.cacheName(), desc);
+                registeredCaches.remove(masked, desc);
         }
 
-        DynamicCacheStartFuture fut = (DynamicCacheStartFuture)pendingFuts.get(req.cacheName());
+        DynamicCacheStartFuture fut = (DynamicCacheStartFuture)pendingFuts.get(maskNull(req.cacheName()));
 
         assert req.deploymentId() != null;
         assert fut == null || fut.deploymentId != null;
@@ -1421,7 +1416,7 @@ public class GridCacheProcessor extends GridProcessorAdapter {
             DynamicCacheChangeBatch batch = (DynamicCacheChangeBatch)data;
 
             for (DynamicCacheChangeRequest req : batch.requests()) {
-                DynamicCacheDescriptor existing = registeredCaches.get(req.cacheName());
+                DynamicCacheDescriptor existing = registeredCaches.get(maskNull(req.cacheName()));
 
                 try {
                     if (req.isStart()) {
@@ -1442,7 +1437,7 @@ public class GridCacheProcessor extends GridProcessorAdapter {
                             }
                         }
                         else
-                            registeredCaches.put(req.cacheName(), new DynamicCacheDescriptor(
+                            registeredCaches.put(maskNull(req.cacheName()), new DynamicCacheDescriptor(
                                 ccfg,
                                 req.deploymentId()));
                     }
@@ -1460,21 +1455,54 @@ public class GridCacheProcessor extends GridProcessorAdapter {
      * @param ccfg Cache configuration.
      * @return Future that will be completed when cache is deployed.
      */
-    public IgniteInternalFuture<?> dynamicStartCache(CacheConfiguration ccfg) {
-        try {
-            CacheConfiguration cfg = new CacheConfiguration(ccfg);
+    public IgniteInternalFuture<?> dynamicStartCache(
+        @Nullable CacheConfiguration ccfg,
+        @Nullable NearCacheConfiguration nearCfg
+    ) {
+        Collection<DynamicCacheChangeRequest> reqs = new ArrayList<>(2);
 
-            CacheObjectContext cacheObjCtx = ctx.cacheObjects().contextForCache(null, ccfg.getName(), ccfg);
+        if (ccfg != null) {
+            try {
+                CacheConfiguration cfg = new CacheConfiguration(ccfg);
 
-            initialize(cfg, cacheObjCtx);
+                CacheObjectContext cacheObjCtx = ctx.cacheObjects().contextForCache(null, ccfg.getName(), ccfg);
+
+                initialize(cfg, cacheObjCtx);
 
-            DynamicCacheChangeRequest req = new DynamicCacheChangeRequest(cfg);
+                DynamicCacheChangeRequest req = new DynamicCacheChangeRequest(cfg);
 
-            return F.first(initiateCacheChanges(F.asList(req)));
+                reqs.add(req);
+            }
+            catch (IgniteCheckedException e) {
+                return new GridFinishedFuture(e);
+            }
         }
-        catch (IgniteCheckedException e) {
-            return new GridFinishedFuture(e);
+
+        if (nearCfg != null) {
+            if (ccfg == null) {
+                DynamicCacheDescriptor desc = registeredCaches.get(maskNull(nearCfg.getName()));
+
+                if (desc != null && !desc.cancelled())
+                    ccfg = desc.cacheConfiguration();
+            }
+
+            if (ccfg == null)
+                return new GridFinishedFuture<>(new IgniteCheckedException("Failed to start near cache " +
+                    "(a cache with the given name is not started): " + nearCfg.getName()));
+
+            DynamicCacheChangeRequest req = new DynamicCacheChangeRequest(ctx.localNodeId(), ccfg, nearCfg);
+
+            reqs.add(req);
         }
+
+        GridCompoundFuture fut = new GridCompoundFuture();
+
+        for (DynamicCacheStartFuture startFut : initiateCacheChanges(reqs))
+            fut.add(startFut);
+
+        fut.markInitialized();
+
+        return fut;
     }
 
     /**
@@ -1498,29 +1526,14 @@ public class GridCacheProcessor extends GridProcessorAdapter {
             DynamicCacheStartFuture fut = new DynamicCacheStartFuture(req.cacheName(), req.deploymentId());
 
             try {
-                for (CacheConfiguration ccfg0 : ctx.config().getCacheConfiguration()) {
-                    if (ccfg0.getName().equals(req.cacheName())) {
-                        Exception ex = new IgniteCheckedException("Failed to " +
-                            (req.isStart() ? "start" : "stop") + " cache " +
-                            "(a cache with the same name is manually configured): " + ccfg0.getName());
-
-                        fut.onDone(ex);
-
-                        break;
-                    }
-                }
-
-                if (fut.isDone())
-                    continue;
-
                 if (req.isStart()) {
-                    if (registeredCaches.containsKey(req.cacheName())) {
+                    if (registeredCaches.containsKey(maskNull(req.cacheName()))) {
                         fut.onDone(new IgniteCheckedException("Failed to start cache " +
                             "(a cache with the same name is already started): " + req.cacheName()));
                     }
                 }
                 else if (!req.isClientStart()) {
-                    DynamicCacheDescriptor desc = registeredCaches.get(req.cacheName());
+                    DynamicCacheDescriptor desc = registeredCaches.get(maskNull(req.cacheName()));
 
                     if (desc == null)
                         // No-op.
@@ -1539,7 +1552,8 @@ public class GridCacheProcessor extends GridProcessorAdapter {
                 if (fut.isDone())
                     continue;
 
-                DynamicCacheStartFuture old = (DynamicCacheStartFuture)pendingFuts.putIfAbsent(req.cacheName(), fut);
+                DynamicCacheStartFuture old = (DynamicCacheStartFuture)pendingFuts.putIfAbsent(
+                    maskNull(req.cacheName()), fut);
 
                 if (old != null) {
                     if (req.isStart()) {
@@ -1578,7 +1592,7 @@ public class GridCacheProcessor extends GridProcessorAdapter {
      */
     private void onCacheChangeRequested(DynamicCacheChangeBatch batch) {
         for (DynamicCacheChangeRequest req : batch.requests()) {
-            DynamicCacheDescriptor desc = registeredCaches.get(req.cacheName());
+            DynamicCacheDescriptor desc = registeredCaches.get(maskNull(req.cacheName()));
 
             if (req.isStart()) {
                 CacheConfiguration ccfg = req.startCacheConfiguration();
@@ -1586,7 +1600,7 @@ public class GridCacheProcessor extends GridProcessorAdapter {
                 // Check if cache with the same name was concurrently started form different node.
                 if (desc != null) {
                     // If local node initiated start, fail the start future.
-                    DynamicCacheStartFuture startFut = (DynamicCacheStartFuture)pendingFuts.get(ccfg.getName());
+                    DynamicCacheStartFuture startFut = (DynamicCacheStartFuture)pendingFuts.get(maskNull(ccfg.getName()));
 
                     if (startFut != null && startFut.deploymentId().equals(req.deploymentId())) {
                         startFut.onDone(new IgniteCheckedException("Failed to start cache " +
@@ -1598,7 +1612,7 @@ public class GridCacheProcessor extends GridProcessorAdapter {
 
                 DynamicCacheDescriptor startDesc = new DynamicCacheDescriptor(ccfg, req.deploymentId());
 
-                DynamicCacheDescriptor old = registeredCaches.put(ccfg.getName(), startDesc);
+                DynamicCacheDescriptor old = registeredCaches.put(maskNull(ccfg.getName()), startDesc);
 
                 ctx.discovery().setCacheFilter(
                     ccfg.getName(),
@@ -1622,7 +1636,7 @@ public class GridCacheProcessor extends GridProcessorAdapter {
             else {
                 if (desc == null) {
                     // If local node initiated start, fail the start future.
-                    DynamicCacheStartFuture changeFut = (DynamicCacheStartFuture)pendingFuts.get(req.cacheName());
+                    DynamicCacheStartFuture changeFut = (DynamicCacheStartFuture)pendingFuts.get(maskNull(req.cacheName()));
 
                     if (changeFut != null && changeFut.deploymentId().equals(req.deploymentId())) {
                         // No-op.
@@ -2072,7 +2086,7 @@ public class GridCacheProcessor extends GridProcessorAdapter {
             IgniteCache<K,V> cache = (IgniteCache<K, V>)jCacheProxies.get(name);
 
             if (cache == null) {
-                DynamicCacheDescriptor desc = registeredCaches.get(name);
+                DynamicCacheDescriptor desc = registeredCaches.get(maskNull(name));
 
                 if (desc == null || desc.cancelled())
                     throw new IllegalArgumentException("Cache is not started: " + name);
@@ -2298,6 +2312,24 @@ public class GridCacheProcessor extends GridProcessorAdapter {
     }
 
     /**
+     * @param name Name to mask.
+     * @return Masked name.
+     */
+    private static String maskNull(String name) {
+        return name == null ? NULL_NAME : name;
+    }
+
+    /**
+     * @param name Name to unmask.
+     * @return Unmasked name.
+     */
+    @SuppressWarnings("StringEquality")
+    private static String unmaskNull(String name) {
+        // Intentional identity equality.
+        return name == NULL_NAME ? null : name;
+    }
+
+    /**
      *
      */
     @SuppressWarnings("ExternalizableWithoutPublicNoArgConstructor")
@@ -2325,7 +2357,7 @@ public class GridCacheProcessor extends GridProcessorAdapter {
         /** {@inheritDoc} */
         @Override public boolean onDone(@Nullable Object res, @Nullable Throwable err) {
             if (super.onDone(res, err)) {
-                pendingFuts.remove(cacheName, this);
+                pendingFuts.remove(maskNull(cacheName), this);
 
                 return true;
             }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/65d22d58/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/colocated/GridDhtColocatedLockFuture.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/colocated/GridDhtColocatedLockFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/colocated/GridDhtColocatedLockFuture.java
index cb889f2..08045bc 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/colocated/GridDhtColocatedLockFuture.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/colocated/GridDhtColocatedLockFuture.java
@@ -21,7 +21,6 @@ import org.apache.ignite.*;
 import org.apache.ignite.cluster.*;
 import org.apache.ignite.internal.*;
 import org.apache.ignite.internal.cluster.*;
-import org.apache.ignite.internal.managers.discovery.*;
 import org.apache.ignite.internal.processors.affinity.*;
 import org.apache.ignite.internal.processors.cache.*;
 import org.apache.ignite.internal.processors.cache.distributed.*;
@@ -99,8 +98,7 @@ public final class GridDhtColocatedLockFuture<K, V> extends GridCompoundIdentity
     private GridNearTxLocal tx;
 
     /** Topology snapshot to operate on. */
-    private AtomicReference<GridDiscoveryTopologySnapshot> topSnapshot =
-        new AtomicReference<>();
+    private AtomicReference<AffinityTopologyVersion> topVer = new AtomicReference<>();
 
     /** Map of current values. */
     private Map<KeyCacheObject, IgniteBiTuple<GridCacheVersion, CacheObject>> valMap;
@@ -286,7 +284,7 @@ public final class GridDhtColocatedLockFuture<K, V> extends GridCompoundIdentity
                     false,
                     false);
 
-                cand.topologyVersion(new AffinityTopologyVersion(topSnapshot.get().topologyVersion()));
+                cand.topologyVersion(new AffinityTopologyVersion(topVer.get().topologyVersion()));
             }
         }
         else {
@@ -305,12 +303,12 @@ public final class GridDhtColocatedLockFuture<K, V> extends GridCompoundIdentity
                     false,
                     false);
 
-                cand.topologyVersion(new AffinityTopologyVersion(topSnapshot.get().topologyVersion()));
+                cand.topologyVersion(new AffinityTopologyVersion(topVer.get().topologyVersion()));
             }
             else
                 cand = cand.reenter();
 
-            cctx.mvcc().addExplicitLock(threadId, cand, topSnapshot.get());
+            cctx.mvcc().addExplicitLock(threadId, cand, topVer.get());
         }
 
         return cand;
@@ -519,12 +517,12 @@ public final class GridDhtColocatedLockFuture<K, V> extends GridCompoundIdentity
      */
     void map() {
         // Obtain the topology version to use.
-        GridDiscoveryTopologySnapshot snapshot = tx != null ? tx.topologySnapshot() :
-            cctx.mvcc().lastExplicitLockTopologySnapshot(threadId);
+        AffinityTopologyVersion topVer = tx != null ? tx.topologyVersionSnapshot() :
+            cctx.mvcc().lastExplicitLockTopologyVersion(threadId);
 
-        if (snapshot != null) {
+        if (topVer != null) {
             // Continue mapping on the same topology version as it was before.
-            topSnapshot.compareAndSet(null, snapshot);
+            this.topVer.compareAndSet(null, topVer);
 
             map(keys);
 
@@ -543,40 +541,33 @@ public final class GridDhtColocatedLockFuture<K, V> extends GridCompoundIdentity
      */
     private void mapOnTopology() {
         // We must acquire topology snapshot from the topology version future.
-        try {
-            cctx.topology().readLock();
+        cctx.topology().readLock();
 
-            try {
-                GridDhtTopologyFuture fut = cctx.topologyVersionFuture();
+        try {
+            GridDhtTopologyFuture fut = cctx.topologyVersionFuture();
 
-                if (fut.isDone()) {
-                    GridDiscoveryTopologySnapshot snapshot = fut.topologySnapshot();
+            if (fut.isDone()) {
+                AffinityTopologyVersion topVer = fut.topologyVersion();
 
-                    if (tx != null) {
-                        tx.topologyVersion(new AffinityTopologyVersion(snapshot.topologyVersion()));
-                        tx.topologySnapshot(snapshot);
-                    }
+                if (tx != null)
+                    tx.topologyVersion(topVer);
 
-                    topSnapshot.compareAndSet(null, snapshot);
+                this.topVer.compareAndSet(null, topVer);
 
-                    map(keys);
+                map(keys);
 
-                    markInitialized();
-                }
-                else {
-                    fut.listen(new CI1<IgniteInternalFuture<AffinityTopologyVersion>>() {
-                        @Override public void apply(IgniteInternalFuture<AffinityTopologyVersion> t) {
-                            mapOnTopology();
-                        }
-                    });
-                }
+                markInitialized();
             }
-            finally {
-                cctx.topology().readUnlock();
+            else {
+                fut.listen(new CI1<IgniteInternalFuture<AffinityTopologyVersion>>() {
+                    @Override public void apply(IgniteInternalFuture<AffinityTopologyVersion> t) {
+                        mapOnTopology();
+                    }
+                });
             }
         }
-        catch (IgniteCheckedException e) {
-            onDone(e);
+        finally {
+            cctx.topology().readUnlock();
         }
     }
 
@@ -589,11 +580,9 @@ public final class GridDhtColocatedLockFuture<K, V> extends GridCompoundIdentity
      */
     private void map(Collection<KeyCacheObject> keys) {
         try {
-            GridDiscoveryTopologySnapshot snapshot = topSnapshot.get();
-
-            assert snapshot != null;
+            AffinityTopologyVersion topVer = this.topVer.get();
 
-            final AffinityTopologyVersion topVer = new AffinityTopologyVersion(snapshot.topologyVersion());
+            assert topVer != null;
 
             assert topVer.topologyVersion() > 0;
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/65d22d58/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearLockFuture.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearLockFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearLockFuture.java
index df2ffde..1dfeb45 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearLockFuture.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearLockFuture.java
@@ -21,7 +21,6 @@ import org.apache.ignite.*;
 import org.apache.ignite.cluster.*;
 import org.apache.ignite.internal.*;
 import org.apache.ignite.internal.cluster.*;
-import org.apache.ignite.internal.managers.discovery.*;
 import org.apache.ignite.internal.processors.affinity.*;
 import org.apache.ignite.internal.processors.cache.*;
 import org.apache.ignite.internal.processors.cache.distributed.*;
@@ -101,7 +100,7 @@ public final class GridNearLockFuture<K, V> extends GridCompoundIdentityFuture<B
     private GridNearTxLocal tx;
 
     /** Topology snapshot to operate on. */
-    private AtomicReference<GridDiscoveryTopologySnapshot> topSnapshot =
+    private AtomicReference<AffinityTopologyVersion> topVer =
         new AtomicReference<>();
 
     /** Map of current values. */
@@ -650,12 +649,12 @@ public final class GridNearLockFuture<K, V> extends GridCompoundIdentityFuture<B
      */
     void map() {
         // Obtain the topology version to use.
-        GridDiscoveryTopologySnapshot snapshot = tx != null ? tx.topologySnapshot() :
-            cctx.mvcc().lastExplicitLockTopologySnapshot(Thread.currentThread().getId());
+        AffinityTopologyVersion topVer = tx != null ? tx.topologyVersionSnapshot() :
+            cctx.mvcc().lastExplicitLockTopologyVersion(Thread.currentThread().getId());
 
-        if (snapshot != null) {
+        if (topVer != null) {
             // Continue mapping on the same topology version as it was before.
-            topSnapshot.compareAndSet(null, snapshot);
+            this.topVer.compareAndSet(null, topVer);
 
             map(keys);
 
@@ -674,40 +673,33 @@ public final class GridNearLockFuture<K, V> extends GridCompoundIdentityFuture<B
      */
     void mapOnTopology() {
         // We must acquire topology snapshot from the topology version future.
-        try {
-            cctx.topology().readLock();
+        cctx.topology().readLock();
 
-            try {
-                GridDhtTopologyFuture fut = cctx.topologyVersionFuture();
+        try {
+            GridDhtTopologyFuture fut = cctx.topologyVersionFuture();
 
-                if (fut.isDone()) {
-                    GridDiscoveryTopologySnapshot snapshot = fut.topologySnapshot();
+            if (fut.isDone()) {
+                AffinityTopologyVersion topVer = fut.topologyVersion();
 
-                    if (tx != null) {
-                        tx.topologyVersion(new AffinityTopologyVersion(snapshot.topologyVersion()));
-                        tx.topologySnapshot(snapshot);
-                    }
+                if (tx != null)
+                    tx.topologyVersion(topVer);
 
-                    topSnapshot.compareAndSet(null, snapshot);
+                this.topVer.compareAndSet(null, topVer);
 
-                    map(keys);
+                map(keys);
 
-                    markInitialized();
-                }
-                else {
-                    fut.listen(new CI1<IgniteInternalFuture<AffinityTopologyVersion>>() {
-                        @Override public void apply(IgniteInternalFuture<AffinityTopologyVersion> t) {
-                            mapOnTopology();
-                        }
-                    });
-                }
+                markInitialized();
             }
-            finally {
-                cctx.topology().readUnlock();
+            else {
+                fut.listen(new CI1<IgniteInternalFuture<AffinityTopologyVersion>>() {
+                    @Override public void apply(IgniteInternalFuture<AffinityTopologyVersion> t) {
+                        mapOnTopology();
+                    }
+                });
             }
         }
-        catch (IgniteCheckedException e) {
-            onDone(e);
+        finally {
+            cctx.topology().readUnlock();
         }
     }
 
@@ -720,11 +712,9 @@ public final class GridNearLockFuture<K, V> extends GridCompoundIdentityFuture<B
      */
     private void map(Iterable<KeyCacheObject> keys) {
         try {
-            GridDiscoveryTopologySnapshot snapshot = topSnapshot.get();
-
-            assert snapshot != null;
+            AffinityTopologyVersion topVer = this.topVer.get();
 
-            AffinityTopologyVersion topVer = new AffinityTopologyVersion(snapshot.topologyVersion());
+            assert topVer != null;
 
             assert topVer.topologyVersion() > 0;
 
@@ -811,7 +801,7 @@ public final class GridNearLockFuture<K, V> extends GridCompoundIdentityFuture<B
 
                             if (cand != null) {
                                 if (tx == null && !cand.reentry())
-                                    cctx.mvcc().addExplicitLock(threadId, cand, snapshot);
+                                    cctx.mvcc().addExplicitLock(threadId, cand, topVer);
 
                                 IgniteBiTuple<GridCacheVersion, CacheObject> val = entry.versionedValue();
 
@@ -1328,7 +1318,7 @@ public final class GridNearLockFuture<K, V> extends GridCompoundIdentityFuture<B
 
                 int i = 0;
 
-                AffinityTopologyVersion topVer = new AffinityTopologyVersion(topSnapshot.get().topologyVersion());
+                AffinityTopologyVersion topVer = GridNearLockFuture.this.topVer.get();
 
                 for (KeyCacheObject k : keys) {
                     while (true) {

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/65d22d58/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxLocal.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxLocal.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxLocal.java
index d5ff286..4776b23 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxLocal.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxLocal.java
@@ -50,14 +50,11 @@ import static org.apache.ignite.transactions.TransactionState.*;
 /**
  * Replicated user transaction.
  */
+@SuppressWarnings("unchecked")
 public class GridNearTxLocal extends GridDhtTxLocalAdapter {
     /** */
     private static final long serialVersionUID = 0L;
 
-    /** Topology snapshot on which this tx was started. */
-    private final AtomicReference<GridDiscoveryTopologySnapshot> topSnapshot =
-        new AtomicReference<>();
-
     /** DHT mappings. */
     private ConcurrentMap<UUID, GridDistributedTxMapping> mappings =
         new ConcurrentHashMap8<>();
@@ -597,23 +594,6 @@ public class GridNearTxLocal extends GridDhtTxLocalAdapter {
         }
     }
 
-    /**
-     * @return Topology snapshot on which this tx was started.
-     */
-    public GridDiscoveryTopologySnapshot topologySnapshot() {
-        return topSnapshot.get();
-    }
-
-    /**
-     * Sets topology snapshot on which this tx was started.
-     *
-     * @param topSnapshot Topology snapshot.
-     * @return {@code True} if topology snapshot was set by this call.
-     */
-    public boolean topologySnapshot(GridDiscoveryTopologySnapshot topSnapshot) {
-        return this.topSnapshot.compareAndSet(null, topSnapshot);
-    }
-
     /** {@inheritDoc} */
     @SuppressWarnings({"CatchGenericClass", "ThrowableInstanceNeverThrown"})
     @Override public boolean finish(boolean commit) throws IgniteCheckedException {

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/65d22d58/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxPrepareFuture.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxPrepareFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxPrepareFuture.java
index c269283..5d4daf4 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxPrepareFuture.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxPrepareFuture.java
@@ -21,7 +21,6 @@ import org.apache.ignite.*;
 import org.apache.ignite.cluster.*;
 import org.apache.ignite.internal.*;
 import org.apache.ignite.internal.cluster.*;
-import org.apache.ignite.internal.managers.discovery.*;
 import org.apache.ignite.internal.processors.affinity.*;
 import org.apache.ignite.internal.processors.cache.*;
 import org.apache.ignite.internal.processors.cache.distributed.*;
@@ -330,10 +329,7 @@ public final class GridNearTxPrepareFuture<K, V> extends GridCompoundIdentityFut
                             return;
                         }
 
-                        GridDiscoveryTopologySnapshot snapshot = topFut.topologySnapshot();
-
                         tx.topologyVersion(topFut.topologyVersion());
-                        tx.topologySnapshot(snapshot);
 
                         // Make sure to add future before calling prepare.
                         cctx.mvcc().addFuture(this);
@@ -343,17 +339,6 @@ public final class GridNearTxPrepareFuture<K, V> extends GridCompoundIdentityFut
                     catch (TransactionTimeoutException | TransactionOptimisticException e) {
                         onError(cctx.localNodeId(), null, e);
                     }
-                    catch (IgniteCheckedException e) {
-                        tx.setRollbackOnly();
-
-                        String msg = "Failed to prepare transaction (will attempt rollback): " + this;
-
-                        U.error(log, msg, e);
-
-                        tx.rollbackAsync();
-
-                        onError(null, null, new IgniteTxRollbackCheckedException(msg, e));
-                    }
                 }
                 else {
                     topFut.listen(new CI1<IgniteInternalFuture<AffinityTopologyVersion>>() {
@@ -455,10 +440,6 @@ public final class GridNearTxPrepareFuture<K, V> extends GridCompoundIdentityFut
     ) throws IgniteCheckedException {
         assert tx.optimistic();
 
-        GridDiscoveryTopologySnapshot snapshot = tx.topologySnapshot();
-
-        assert snapshot != null;
-
         AffinityTopologyVersion topVer = tx.topologyVersion();
 
         assert topVer.topologyVersion() > 0;

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/65d22d58/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteInternalTx.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteInternalTx.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteInternalTx.java
index a4c1fdb..8dcfcb1 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteInternalTx.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteInternalTx.java
@@ -254,6 +254,11 @@ public interface IgniteInternalTx extends AutoCloseable, GridTimeoutObject {
     public AffinityTopologyVersion topologyVersion();
 
     /**
+     * @return Topology version snapshot.
+     */
+    public AffinityTopologyVersion topologyVersionSnapshot();
+
+    /**
      * @return Flag indicating whether transaction is implicit with only one key.
      */
     public boolean implicitSingle();

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/65d22d58/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxAdapter.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxAdapter.java
index 3993527..acd3202 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxAdapter.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxAdapter.java
@@ -45,7 +45,6 @@ import java.util.concurrent.locks.*;
 
 import static org.apache.ignite.events.EventType.*;
 import static org.apache.ignite.internal.processors.cache.GridCacheOperation.*;
-import static org.apache.ignite.internal.processors.cache.GridCacheUtils.*;
 import static org.apache.ignite.transactions.TransactionConcurrency.*;
 import static org.apache.ignite.transactions.TransactionIsolation.*;
 import static org.apache.ignite.transactions.TransactionState.*;
@@ -518,6 +517,13 @@ public abstract class IgniteTxAdapter extends GridMetadataAwareAdapter
     }
 
     /** {@inheritDoc} */
+    @Override public AffinityTopologyVersion topologyVersionSnapshot() {
+        AffinityTopologyVersion ret = topVer.get();
+
+        return AffinityTopologyVersion.NONE.equals(ret) ? null : ret;
+    }
+
+    /** {@inheritDoc} */
     @Override public AffinityTopologyVersion topologyVersion(AffinityTopologyVersion topVer) {
         this.topVer.compareAndSet(AffinityTopologyVersion.NONE, topVer);
 
@@ -1745,6 +1751,11 @@ public abstract class IgniteTxAdapter extends GridMetadataAwareAdapter
         }
 
         /** {@inheritDoc} */
+        @Override public AffinityTopologyVersion topologyVersionSnapshot() {
+            throw new IllegalStateException("Deserialized transaction can only be used as read-only.");
+        }
+
+        /** {@inheritDoc} */
         @Override public boolean implicitSingle() {
             throw new IllegalStateException("Deserialized transaction can only be used as read-only.");
         }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/65d22d58/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCacheVersionManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCacheVersionManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCacheVersionManager.java
index d5b3db7..c776361 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCacheVersionManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCacheVersionManager.java
@@ -89,8 +89,6 @@ public class GridCacheVersionManager extends GridCacheSharedManagerAdapter {
     @Override public void start0() throws IgniteCheckedException {
         txSerEnabled = cctx.gridConfig().getTransactionConfiguration().isTxSerializableEnabled();
 
-        dataCenterId = cctx.dataCenterId();
-
         last = new GridCacheVersion(0, 0, order.get(), 0, dataCenterId);
 
         cctx.gridEvents().addLocalEventListener(discoLsnr, EVT_NODE_METRICS_UPDATED);
@@ -108,6 +106,17 @@ public class GridCacheVersionManager extends GridCacheSharedManagerAdapter {
     }
 
     /**
+     * Sets data center ID.
+     *
+     * @param dataCenterId Data center ID.
+     */
+    public void dataCenterId(byte dataCenterId) {
+        this.dataCenterId = dataCenterId;
+
+        last = new GridCacheVersion(0, 0, order.get(), 0, dataCenterId);
+    }
+
+    /**
      * @param nodeId Node ID.
      * @param ver Remote version.
      */

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/65d22d58/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/DataStructuresProcessor.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/DataStructuresProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/DataStructuresProcessor.java
index d5641df..49081ae 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/DataStructuresProcessor.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/DataStructuresProcessor.java
@@ -105,7 +105,7 @@ public final class DataStructuresProcessor extends GridProcessorAdapter {
 
     /** {@inheritDoc} */
     @SuppressWarnings("unchecked")
-    @Override public void start() {
+    @Override public void onKernalStart() {
         if (ctx.config().isDaemon())
             return;
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/65d22d58/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
index 5061353..6193aec 100644
--- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
+++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
@@ -1458,6 +1458,8 @@ public class TcpDiscoverySpi extends TcpDiscoverySpiAdapter implements TcpDiscov
                             }
                         }
                         catch (IgniteSpiException e) {
+                            e.printStackTrace();
+
                             ex = e;
                         }
                     }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/65d22d58/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheAbstractFlagsTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheAbstractFlagsTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheAbstractFlagsTest.java
index ee35555..72a8cfe 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheAbstractFlagsTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheAbstractFlagsTest.java
@@ -49,6 +49,8 @@ public abstract class GridCacheAbstractFlagsTest extends GridCacheAbstractSelfTe
         if (cacheMode() == CacheMode.PARTITIONED)
             c.setBackups(1);
 
+        c.setCacheStoreFactory(null);
+
         return c;
     }
 
@@ -57,11 +59,6 @@ public abstract class GridCacheAbstractFlagsTest extends GridCacheAbstractSelfTe
         return false;
     }
 
-    /** {@inheritDoc} */
-    @Override protected CacheStore<?, ?> cacheStore() {
-        return null;
-    }
-
     /**
      * Tests SYNC_COMMIT cache flag.
      *

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/65d22d58/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheAbstractSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheAbstractSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheAbstractSelfTest.java
index cfe4fdc..e4e2fc8 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheAbstractSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheAbstractSelfTest.java
@@ -43,7 +43,6 @@ import java.util.*;
 import java.util.concurrent.atomic.*;
 
 import static org.apache.ignite.cache.CacheAtomicityMode.*;
-import static org.apache.ignite.cache.CacheDistributionMode.*;
 import static org.apache.ignite.cache.CacheMemoryMode.*;
 import static org.apache.ignite.cache.CacheMode.*;
 import static org.apache.ignite.cache.CacheWriteSynchronizationMode.*;
@@ -77,7 +76,7 @@ public abstract class GridCacheAbstractSelfTest extends GridCommonAbstractTest {
 
         assert cnt >= 1 : "At least one grid must be started";
 
-        startGridsMultiThreaded(cnt);
+        startGrids(cnt);
     }
 
     /** {@inheritDoc} */
@@ -104,6 +103,8 @@ public abstract class GridCacheAbstractSelfTest extends GridCommonAbstractTest {
         }
 
         for (int i = 0; i < gridCount(); i++) {
+            info("Checking grid: " + i);
+
             while (true) {
                 try {
                     final int fi = i;
@@ -241,7 +242,7 @@ public abstract class GridCacheAbstractSelfTest extends GridCommonAbstractTest {
         CacheStore<?, ?> store = cacheStore();
 
         if (store != null) {
-            cfg.setCacheStoreFactory(new FactoryBuilder.SingletonFactory(store));
+            cfg.setCacheStoreFactory(new TestStoreFactory());
             cfg.setReadThrough(true);
             cfg.setWriteThrough(true);
             cfg.setLoadPreviousValue(true);
@@ -290,7 +291,7 @@ public abstract class GridCacheAbstractSelfTest extends GridCommonAbstractTest {
     /**
      * @return Write through storage emulator.
      */
-    protected CacheStore<?, ?> cacheStore() {
+    protected static CacheStore<?, ?> cacheStore() {
         return new CacheStoreAdapter<Object, Object>() {
             @Override public void loadCache(IgniteBiInClosure<Object, Object> clo,
                 Object... args) {
@@ -596,4 +597,13 @@ public abstract class GridCacheAbstractSelfTest extends GridCommonAbstractTest {
             return sum;
         }
     }
+
+    /**
+     * Serializable factory.
+     */
+    private static class TestStoreFactory implements Factory<CacheStore> {
+        @Override public CacheStore create() {
+            return cacheStore();
+        }
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/65d22d58/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheMultinodeUpdateAbstractSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheMultinodeUpdateAbstractSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheMultinodeUpdateAbstractSelfTest.java
index de1769c..886d8fa 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheMultinodeUpdateAbstractSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheMultinodeUpdateAbstractSelfTest.java
@@ -19,9 +19,8 @@ package org.apache.ignite.internal.processors.cache;
 
 import org.apache.ignite.*;
 import org.apache.ignite.cache.*;
-import org.apache.ignite.cache.store.*;
+import org.apache.ignite.configuration.*;
 import org.apache.ignite.testframework.*;
-import org.jetbrains.annotations.*;
 
 import javax.cache.processor.*;
 import java.io.*;
@@ -44,11 +43,6 @@ public abstract class GridCacheMultinodeUpdateAbstractSelfTest extends GridCache
     }
 
     /** {@inheritDoc} */
-    @Nullable @Override protected CacheStore<?, ?> cacheStore() {
-        return null;
-    }
-
-    /** {@inheritDoc} */
     @Override protected CacheMode cacheMode() {
         return PARTITIONED;
     }
@@ -58,6 +52,14 @@ public abstract class GridCacheMultinodeUpdateAbstractSelfTest extends GridCache
         return 3 * 60_000;
     }
 
+    @Override protected CacheConfiguration cacheConfiguration(String gridName) throws Exception {
+        CacheConfiguration ccfg = super.cacheConfiguration(gridName);
+
+        ccfg.setCacheStoreFactory(null);
+
+        return ccfg;
+    }
+
     /**
      * @throws Exception If failed.
      */

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/65d22d58/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteDynamicCacheStartSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteDynamicCacheStartSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteDynamicCacheStartSelfTest.java
index 6efc2a8..6ea7cb4 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteDynamicCacheStartSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteDynamicCacheStartSelfTest.java
@@ -105,7 +105,7 @@ public class IgniteDynamicCacheStartSelfTest extends GridCommonAbstractTest {
 
                 ccfg.setName(DYNAMIC_CACHE_NAME);
 
-                futs.add(kernal.context().cache().dynamicStartCache(ccfg));
+                futs.add(kernal.context().cache().dynamicStartCache(ccfg, null));
 
                 return null;
             }
@@ -166,7 +166,7 @@ public class IgniteDynamicCacheStartSelfTest extends GridCommonAbstractTest {
 
                 IgniteKernal kernal = (IgniteKernal)grid(ThreadLocalRandom.current().nextInt(nodeCount()));
 
-                futs.add(kernal.context().cache().dynamicStartCache(ccfg));
+                futs.add(kernal.context().cache().dynamicStartCache(ccfg, null));
 
                 return null;
             }
@@ -239,7 +239,7 @@ public class IgniteDynamicCacheStartSelfTest extends GridCommonAbstractTest {
 
         ccfg.setName(DYNAMIC_CACHE_NAME);
 
-        kernal.context().cache().dynamicStartCache(ccfg).get();
+        kernal.context().cache().dynamicStartCache(ccfg, null).get();
 
         for (int g = 0; g < nodeCount(); g++) {
             IgniteKernal kernal0 = (IgniteKernal)grid(g);
@@ -298,7 +298,7 @@ public class IgniteDynamicCacheStartSelfTest extends GridCommonAbstractTest {
 
         ccfg.setName(DYNAMIC_CACHE_NAME);
 
-        kernal.context().cache().dynamicStartCache(ccfg).get();
+        kernal.context().cache().dynamicStartCache(ccfg, null).get();
 
         info(">>>>>>> Deployed dynamic cache");
 
@@ -359,7 +359,7 @@ public class IgniteDynamicCacheStartSelfTest extends GridCommonAbstractTest {
 
             ccfg.setNodeFilter(NODE_FILTER);
 
-            kernal.context().cache().dynamicStartCache(ccfg).get();
+            kernal.context().cache().dynamicStartCache(ccfg, null).get();
 
             startGrid(nodeCount() + 1);
 
@@ -424,7 +424,7 @@ public class IgniteDynamicCacheStartSelfTest extends GridCommonAbstractTest {
 
                 ccfg.setNodeFilter(NODE_FILTER);
 
-                return kernal.context().cache().dynamicStartCache(ccfg).get();
+                return kernal.context().cache().dynamicStartCache(ccfg, null).get();
             }
         }, IgniteCheckedException.class, null);
     }
@@ -447,7 +447,7 @@ public class IgniteDynamicCacheStartSelfTest extends GridCommonAbstractTest {
 
             ccfg.setNodeFilter(NODE_FILTER);
 
-            kernal.context().cache().dynamicStartCache(ccfg).get();
+            kernal.context().cache().dynamicStartCache(ccfg, null).get();
 
             GridTestUtils.assertThrows(log, new Callable<Object>() {
                 @Override public Object call() throws Exception {

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/65d22d58/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/GridCacheClientModesAbstractSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/GridCacheClientModesAbstractSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/GridCacheClientModesAbstractSelfTest.java
index 6f0b923..4911a49 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/GridCacheClientModesAbstractSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/GridCacheClientModesAbstractSelfTest.java
@@ -54,11 +54,6 @@ public abstract class GridCacheClientModesAbstractSelfTest extends GridCacheAbst
     }
 
     /** {@inheritDoc} */
-    @Override protected CacheStore<?, ?> cacheStore() {
-        return null;
-    }
-
-    /** {@inheritDoc} */
     @Override protected CacheConfiguration cacheConfiguration(String gridName) throws Exception {
         CacheConfiguration cfg = super.cacheConfiguration(gridName);
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/65d22d58/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/GridCacheNearOnlyMultiNodeFullApiSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/GridCacheNearOnlyMultiNodeFullApiSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/GridCacheNearOnlyMultiNodeFullApiSelfTest.java
index 4b425fe..458d86f 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/GridCacheNearOnlyMultiNodeFullApiSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/GridCacheNearOnlyMultiNodeFullApiSelfTest.java
@@ -22,7 +22,6 @@ import org.apache.ignite.cache.*;
 import org.apache.ignite.cluster.*;
 import org.apache.ignite.configuration.*;
 import org.apache.ignite.events.*;
-import org.apache.ignite.internal.*;
 import org.apache.ignite.internal.processors.cache.*;
 import org.apache.ignite.internal.util.lang.*;
 import org.apache.ignite.internal.util.typedef.*;
@@ -58,16 +57,22 @@ public class GridCacheNearOnlyMultiNodeFullApiSelfTest extends GridCachePartitio
         super.beforeTestsStarted();
     }
 
-    /** {@inheritDoc} */
-    @Override protected CacheConfiguration cacheConfiguration(String gridName) throws Exception {
-        CacheConfiguration cfg = super.cacheConfiguration(gridName);
+    @Override protected IgniteConfiguration getConfiguration(String gridName) throws Exception {
+        IgniteConfiguration cfg = super.getConfiguration(gridName);
 
         if (cnt.getAndIncrement() == 0) {
             info("Use grid '" + gridName + "' as near-only.");
 
-            return null;
+            cfg.setClientMode(true);
         }
 
+        return cfg;
+    }
+
+    /** {@inheritDoc} */
+    @Override protected CacheConfiguration cacheConfiguration(String gridName) throws Exception {
+        CacheConfiguration cfg = super.cacheConfiguration(gridName);
+
         cfg.setWriteSynchronizationMode(FULL_SYNC);
         cfg.setAtomicWriteOrderMode(PRIMARY);
 
@@ -77,7 +82,9 @@ public class GridCacheNearOnlyMultiNodeFullApiSelfTest extends GridCachePartitio
     /** {@inheritDoc} */
     @Override protected void beforeTest() throws Exception {
         for (int i = 0; i < gridCount(); i++) {
-            if (!cache(i).affinityNode()) {
+            if (ignite(i).configuration().isClientMode()) {
+                ignite(i).createCache(new NearCacheConfiguration<>());
+
                 nearIdx = i;
 
                 break;
@@ -95,15 +102,6 @@ public class GridCacheNearOnlyMultiNodeFullApiSelfTest extends GridCachePartitio
     @Override public Collection<ClusterNode> affinityNodes() {
         info("Near node ID: " + grid(nearIdx).localNode().id());
 
-        for (int i = 0; i < gridCount(); i++) {
-            ClusterNode node = grid(i).localNode();
-
-            GridCacheAttributes[] nodeAttrs = node.attribute(IgniteNodeAttributes.ATTR_CACHE);
-
-            info("Cache attributes for node [nodeId=" + node.id() + ", attrs=" +
-                Arrays.asList(nodeAttrs) + ']');
-        }
-
         return F.view(super.affinityNodes(), new P1<ClusterNode>() {
             @Override public boolean apply(ClusterNode n) {
                 return !F.eq(G.ignite(n.id()).name(), grid(nearIdx).name());

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/65d22d58/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheAtomicLocalMetricsNoStoreSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheAtomicLocalMetricsNoStoreSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheAtomicLocalMetricsNoStoreSelfTest.java
index 3a4ac6c..e2f953a 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheAtomicLocalMetricsNoStoreSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheAtomicLocalMetricsNoStoreSelfTest.java
@@ -17,13 +17,18 @@
 
 package org.apache.ignite.internal.processors.cache.local;
 
-import org.apache.ignite.cache.store.*;
+import org.apache.ignite.configuration.*;
 
 /**
  * Local atomic cache metrics test.
  */
 public class GridCacheAtomicLocalMetricsNoStoreSelfTest extends GridCacheAtomicLocalMetricsSelfTest {
-    @Override protected CacheStore<?, ?> cacheStore() {
-        return null; // Test cache without store.
+    /** {@inheritDoc} */
+    @Override protected CacheConfiguration cacheConfiguration(String gridName) throws Exception {
+        CacheConfiguration ccfg = super.cacheConfiguration(gridName);
+
+        ccfg.setCacheStoreFactory(null);
+
+        return ccfg;
     }
 }


Mime
View raw message