IGNITE-15759 Remove LOCAL caches (#10157)


diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/IndexScan.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/IndexScan.java
index 805cfa0..8b9b2fc 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/IndexScan.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/IndexScan.java
@@ -235,11 +235,8 @@
             for (int i = 0; i < parts.length; i++)
                 toReserve.add(top.localPartition(parts[i]));
         }
-        else {
-            assert cctx.isLocal();
-
+        else
             toReserve = Collections.emptyList();
-        }
 
         reserved = new ArrayList<>(toReserve.size());
 
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/TableScan.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/TableScan.java
index 6152959..55011b1 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/TableScan.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/TableScan.java
@@ -155,11 +155,8 @@
             for (int i = 0; i < parts.length; i++)
                 toReserve.add(top.localPartition(parts[i]));
         }
-        else {
-            assert cctx.isLocal();
-
+        else
             toReserve = Collections.emptyList();
-        }
 
         reserved = new ArrayList<>(toReserve.size());
 
diff --git a/modules/clients/src/test/java/org/apache/ignite/internal/client/ClientAbstractMultiThreadedSelfTest.java b/modules/clients/src/test/java/org/apache/ignite/internal/client/ClientAbstractMultiThreadedSelfTest.java
index 455e267..5543ea1 100644
--- a/modules/clients/src/test/java/org/apache/ignite/internal/client/ClientAbstractMultiThreadedSelfTest.java
+++ b/modules/clients/src/test/java/org/apache/ignite/internal/client/ClientAbstractMultiThreadedSelfTest.java
@@ -29,7 +29,6 @@
 import java.util.concurrent.atomic.AtomicLong;
 import java.util.concurrent.atomic.AtomicReference;
 import org.apache.ignite.Ignite;
-import org.apache.ignite.cache.affinity.rendezvous.RendezvousAffinityFunction;
 import org.apache.ignite.compute.ComputeJob;
 import org.apache.ignite.compute.ComputeJobAdapter;
 import org.apache.ignite.compute.ComputeJobResult;
@@ -44,14 +43,10 @@
 import org.apache.ignite.lang.IgniteBiTuple;
 import org.apache.ignite.resources.IgniteInstanceResource;
 import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
-import org.jetbrains.annotations.NotNull;
 import org.junit.Test;
-
-import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL;
-import static org.apache.ignite.cache.CacheMode.LOCAL;
 import static org.apache.ignite.cache.CacheMode.PARTITIONED;
 import static org.apache.ignite.cache.CacheMode.REPLICATED;
-import static org.apache.ignite.cache.CacheWriteSynchronizationMode.FULL_SYNC;
+import static org.apache.ignite.cache.CacheWriteSynchronizationMode.FULL_ASYNC;
 
 /**
  *
@@ -168,52 +163,31 @@
 
         c.setConnectorConfiguration(clientCfg);
 
-        c.setCacheConfiguration(cacheConfiguration(DEFAULT_CACHE_NAME), cacheConfiguration(PARTITIONED_CACHE_NAME),
-            cacheConfiguration(REPLICATED_CACHE_NAME), cacheConfiguration(PARTITIONED_ASYNC_BACKUP_CACHE_NAME),
-            cacheConfiguration(REPLICATED_ASYNC_CACHE_NAME));
+        CacheConfiguration<?, ?> ccfg1 = defaultCacheConfiguration()
+            .setName(PARTITIONED_CACHE_NAME)
+            .setCacheMode(PARTITIONED)
+            .setBackups(0);
+
+        CacheConfiguration<?, ?> ccfg2 = defaultCacheConfiguration()
+            .setName(PARTITIONED_ASYNC_BACKUP_CACHE_NAME)
+            .setCacheMode(PARTITIONED)
+            .setBackups(1)
+            .setWriteSynchronizationMode(FULL_ASYNC);
+
+        CacheConfiguration<?, ?> ccfg3 = defaultCacheConfiguration()
+            .setName(REPLICATED_CACHE_NAME)
+            .setCacheMode(REPLICATED);
+
+        CacheConfiguration<?, ?> ccfg4 = defaultCacheConfiguration()
+            .setName(REPLICATED_ASYNC_CACHE_NAME)
+            .setCacheMode(REPLICATED)
+            .setWriteSynchronizationMode(FULL_ASYNC);
+
+        c.setCacheConfiguration(ccfg1, ccfg2, ccfg3, ccfg4);
 
         return c;
     }
 
-    /**
-     * @param cacheName Cache name.
-     * @return Cache configuration.
-     * @throws Exception In case of error.
-     */
-    private CacheConfiguration cacheConfiguration(@NotNull String cacheName) throws Exception {
-        CacheConfiguration cfg = defaultCacheConfiguration();
-
-        cfg.setAffinity(new RendezvousAffinityFunction());
-
-        cfg.setAtomicityMode(TRANSACTIONAL);
-
-        switch (cacheName) {
-            case DEFAULT_CACHE_NAME:
-                cfg.setCacheMode(LOCAL);
-                break;
-            case PARTITIONED_CACHE_NAME:
-                cfg.setCacheMode(PARTITIONED);
-
-                cfg.setBackups(0);
-                break;
-            case PARTITIONED_ASYNC_BACKUP_CACHE_NAME:
-                cfg.setCacheMode(PARTITIONED);
-
-                cfg.setBackups(1);
-                break;
-            default:
-                cfg.setCacheMode(REPLICATED);
-                break;
-        }
-
-        cfg.setName(cacheName);
-
-        if (!DEFAULT_CACHE_NAME.equals(cacheName) && !cacheName.contains("async"))
-            cfg.setWriteSynchronizationMode(FULL_SYNC);
-
-        return cfg;
-    }
-
     /** {@inheritDoc} */
     @Override protected void beforeTestsStarted() throws Exception {
         startGridsMultiThreaded(NODES_CNT);
diff --git a/modules/clients/src/test/java/org/apache/ignite/internal/client/ClientDefaultCacheSelfTest.java b/modules/clients/src/test/java/org/apache/ignite/internal/client/ClientDefaultCacheSelfTest.java
index 39aa869..43922e6 100644
--- a/modules/clients/src/test/java/org/apache/ignite/internal/client/ClientDefaultCacheSelfTest.java
+++ b/modules/clients/src/test/java/org/apache/ignite/internal/client/ClientDefaultCacheSelfTest.java
@@ -29,9 +29,6 @@
 import java.util.UUID;
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
-import org.apache.ignite.cache.CacheAtomicityMode;
-import org.apache.ignite.cache.CacheMode;
-import org.apache.ignite.configuration.CacheConfiguration;
 import org.apache.ignite.configuration.ConnectorConfiguration;
 import org.apache.ignite.configuration.IgniteConfiguration;
 import org.apache.ignite.internal.processors.rest.GridRestCommand;
@@ -39,7 +36,6 @@
 import org.apache.ignite.internal.util.typedef.internal.SB;
 import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
 import org.junit.Test;
-
 import static org.apache.ignite.IgniteSystemProperties.IGNITE_JETTY_PORT;
 
 /**
@@ -64,9 +60,6 @@
     /** Used to sent request charset. */
     private static final String CHARSET = StandardCharsets.UTF_8.name();
 
-    /** Name of node local cache. */
-    private static final String LOCAL_CACHE = "local";
-
     /** JSON to java mapper. */
     private static final ObjectMapper JSON_MAPPER = new ObjectMapper();
 
@@ -99,15 +92,7 @@
 
         cfg.setConnectorConfiguration(clientCfg);
 
-        CacheConfiguration cLoc = new CacheConfiguration(DEFAULT_CACHE_NAME);
-
-        cLoc.setName(LOCAL_CACHE);
-
-        cLoc.setCacheMode(CacheMode.LOCAL);
-
-        cLoc.setAtomicityMode(CacheAtomicityMode.TRANSACTIONAL);
-
-        cfg.setCacheConfiguration(defaultCacheConfiguration(), cLoc);
+        cfg.setCacheConfiguration(defaultCacheConfiguration());
 
         return cfg;
     }
@@ -177,7 +162,7 @@
         String val = "{\"v\":\"my Value\",\"t\":1422559650154}";
 
         // Put to cache JSON format string value.
-        String ret = content(F.asMap("cmd", GridRestCommand.CACHE_PUT.key(), "cacheName", LOCAL_CACHE,
+        String ret = content(F.asMap("cmd", GridRestCommand.CACHE_PUT.key(), "cacheName", DEFAULT_CACHE_NAME,
             "key", "a", "val", URLEncoder.encode(val, CHARSET)));
 
         JsonNode res = jsonResponse(ret);
@@ -185,7 +170,7 @@
         assertEquals("Incorrect put response", true, res.asBoolean());
 
         // Escape '\' symbols disappear from response string on transformation to JSON object.
-        ret = content(F.asMap("cmd", GridRestCommand.CACHE_GET.key(), "cacheName", LOCAL_CACHE, "key", "a"));
+        ret = content(F.asMap("cmd", GridRestCommand.CACHE_GET.key(), "cacheName", DEFAULT_CACHE_NAME, "key", "a"));
 
         res = jsonResponse(ret);
 
diff --git a/modules/clients/src/test/java/org/apache/ignite/internal/client/integration/ClientAbstractMultiNodeSelfTest.java b/modules/clients/src/test/java/org/apache/ignite/internal/client/integration/ClientAbstractMultiNodeSelfTest.java
index b587733..0d17ee4 100644
--- a/modules/clients/src/test/java/org/apache/ignite/internal/client/integration/ClientAbstractMultiNodeSelfTest.java
+++ b/modules/clients/src/test/java/org/apache/ignite/internal/client/integration/ClientAbstractMultiNodeSelfTest.java
@@ -28,7 +28,6 @@
 import java.util.concurrent.CountDownLatch;
 import org.apache.ignite.Ignite;
 import org.apache.ignite.IgniteException;
-import org.apache.ignite.cache.affinity.rendezvous.RendezvousAffinityFunction;
 import org.apache.ignite.cluster.ClusterNode;
 import org.apache.ignite.compute.ComputeJob;
 import org.apache.ignite.compute.ComputeJobAdapter;
@@ -70,13 +69,9 @@
 import org.apache.ignite.spi.communication.tcp.TcpCommunicationSpi;
 import org.apache.ignite.testframework.GridTestUtils;
 import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
-import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 import org.junit.Test;
-
 import static java.util.concurrent.TimeUnit.MILLISECONDS;
-import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL;
-import static org.apache.ignite.cache.CacheMode.LOCAL;
 import static org.apache.ignite.cache.CacheMode.PARTITIONED;
 import static org.apache.ignite.cache.CacheMode.REPLICATED;
 import static org.apache.ignite.cache.CacheWriteSynchronizationMode.FULL_ASYNC;
@@ -178,8 +173,21 @@
 
         c.setCommunicationSpi(spi);
 
-        c.setCacheConfiguration(cacheConfiguration(DEFAULT_CACHE_NAME), cacheConfiguration(PARTITIONED_CACHE_NAME),
-            cacheConfiguration(REPLICATED_CACHE_NAME), cacheConfiguration(REPLICATED_ASYNC_CACHE_NAME));
+        CacheConfiguration<?, ?> ccfg1 = defaultCacheConfiguration()
+            .setName(PARTITIONED_CACHE_NAME)
+            .setCacheMode(PARTITIONED)
+            .setBackups(0);
+
+        CacheConfiguration<?, ?> ccfg2 = defaultCacheConfiguration()
+            .setName(REPLICATED_CACHE_NAME)
+            .setCacheMode(REPLICATED);
+
+        CacheConfiguration<?, ?> ccfg3 = defaultCacheConfiguration()
+            .setName(REPLICATED_ASYNC_CACHE_NAME)
+            .setCacheMode(REPLICATED)
+            .setWriteSynchronizationMode(FULL_ASYNC);
+
+        c.setCacheConfiguration(ccfg1, ccfg2, ccfg3);
 
         c.setPublicThreadPoolSize(40);
 
@@ -188,39 +196,6 @@
         return c;
     }
 
-    /**
-     * @param cacheName Cache name.
-     * @return Cache configuration.
-     * @throws Exception In case of error.
-     */
-    private CacheConfiguration cacheConfiguration(@NotNull String cacheName) throws Exception {
-        CacheConfiguration cfg = defaultCacheConfiguration();
-
-        cfg.setAtomicityMode(TRANSACTIONAL);
-
-        switch (cacheName) {
-            case DEFAULT_CACHE_NAME:
-                cfg.setCacheMode(LOCAL);
-                break;
-            case PARTITIONED_CACHE_NAME:
-                cfg.setCacheMode(PARTITIONED);
-
-                cfg.setBackups(0);
-                break;
-            default:
-                cfg.setCacheMode(REPLICATED);
-                break;
-        }
-
-        cfg.setName(cacheName);
-
-        cfg.setWriteSynchronizationMode(REPLICATED_ASYNC_CACHE_NAME.equals(cacheName) ? FULL_ASYNC : FULL_SYNC);
-
-        cfg.setAffinity(new RendezvousAffinityFunction());
-
-        return cfg;
-    }
-
     /** {@inheritDoc} */
     @Override protected void beforeTestsStarted() throws Exception {
         startGridsMultiThreaded(NODES_CNT);
diff --git a/modules/clients/src/test/java/org/apache/ignite/internal/client/integration/ClientAbstractSelfTest.java b/modules/clients/src/test/java/org/apache/ignite/internal/client/integration/ClientAbstractSelfTest.java
index 1992643..c06933c 100644
--- a/modules/clients/src/test/java/org/apache/ignite/internal/client/integration/ClientAbstractSelfTest.java
+++ b/modules/clients/src/test/java/org/apache/ignite/internal/client/integration/ClientAbstractSelfTest.java
@@ -70,12 +70,9 @@
 import org.jetbrains.annotations.Nullable;
 import org.junit.Assert;
 import org.junit.Test;
-
 import static org.apache.ignite.IgniteSystemProperties.IGNITE_JETTY_PORT;
-import static org.apache.ignite.cache.CacheMode.LOCAL;
 import static org.apache.ignite.cache.CacheMode.PARTITIONED;
 import static org.apache.ignite.cache.CacheMode.REPLICATED;
-import static org.apache.ignite.cache.CacheWriteSynchronizationMode.FULL_SYNC;
 
 /**
  * Tests for Java client.
@@ -83,7 +80,10 @@
 @SuppressWarnings("deprecation")
 public abstract class ClientAbstractSelfTest extends GridCommonAbstractTest {
     /** */
-    private static final String CACHE_NAME = "cache";
+    private static final String REPLICATED_CACHE_NAME = "replicated";
+
+    /** */
+    private static final String PARTITIONED_CACHE_NAME = "partitioned";
 
     /** */
     public static final String HOST = "127.0.0.1";
@@ -153,8 +153,8 @@
                 cacheStore.map.clear();
         }
 
-        grid().cache(DEFAULT_CACHE_NAME).clear();
-        grid().cache(CACHE_NAME).clear();
+        grid().cache(PARTITIONED_CACHE_NAME).clear();
+        grid().cache(REPLICATED_CACHE_NAME).clear();
 
         INTERCEPTED_OBJECTS.clear();
     }
@@ -228,8 +228,7 @@
 
         cfg.setConnectorConfiguration(clientCfg);
 
-        cfg.setCacheConfiguration(cacheConfiguration(DEFAULT_CACHE_NAME), cacheConfiguration("replicated"),
-            cacheConfiguration("partitioned"), cacheConfiguration(CACHE_NAME));
+        cfg.setCacheConfiguration(cacheConfiguration(REPLICATED_CACHE_NAME), cacheConfiguration(PARTITIONED_CACHE_NAME));
 
         clientCfg.setMessageInterceptor(new ConnectorMessageInterceptor() {
             /** {@inheritDoc} */
@@ -262,10 +261,8 @@
     private static CacheConfiguration cacheConfiguration(@NotNull final String cacheName) throws Exception {
         CacheConfiguration cfg = defaultCacheConfiguration();
 
-        cfg.setCacheMode(DEFAULT_CACHE_NAME.equals(cacheName) || CACHE_NAME.equals(cacheName) ? LOCAL : "replicated".equals(cacheName) ?
-            REPLICATED : PARTITIONED);
+        cfg.setCacheMode(REPLICATED_CACHE_NAME.equals(cacheName) ? REPLICATED : PARTITIONED);
         cfg.setName(cacheName);
-        cfg.setWriteSynchronizationMode(FULL_SYNC);
 
         cfg.setCacheStoreFactory(new Factory<CacheStore>() {
             @Override public CacheStore create() {
@@ -308,7 +305,7 @@
 
         GridClientDataConfiguration cache = new GridClientDataConfiguration();
 
-        cache.setName(CACHE_NAME);
+        cache.setName(PARTITIONED_CACHE_NAME);
 
         cfg.setDataConfigurations(Arrays.asList(nullCache, cache));
 
@@ -320,7 +317,7 @@
         cfg.setExecutorService(Executors.newCachedThreadPool(new ThreadFactory() {
             private AtomicInteger cntr = new AtomicInteger();
 
-            @SuppressWarnings("NullableProblems")
+            /** {@inheritDoc} */
             @Override public Thread newThread(Runnable r) {
                 return new Thread(r, "client-worker-thread-" + cntr.getAndIncrement());
             }
@@ -353,7 +350,7 @@
     public void testNoAsyncExceptions() throws Exception {
         GridClient client = client();
 
-        GridClientData data = client.data(CACHE_NAME);
+        GridClientData data = client.data(PARTITIONED_CACHE_NAME);
         GridClientCompute compute = client.compute().projection(new GridClientPredicate<GridClientNode>() {
             @Override public boolean apply(GridClientNode e) {
                 return false;
diff --git a/modules/clients/src/test/java/org/apache/ignite/internal/jdbc2/JdbcLocalCachesSelfTest.java b/modules/clients/src/test/java/org/apache/ignite/internal/jdbc2/JdbcLocalCachesSelfTest.java
deleted file mode 100644
index ba7c176..0000000
--- a/modules/clients/src/test/java/org/apache/ignite/internal/jdbc2/JdbcLocalCachesSelfTest.java
+++ /dev/null
@@ -1,173 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.jdbc2;
-
-import java.sql.Connection;
-import java.sql.DriverManager;
-import java.sql.ResultSet;
-import java.util.Properties;
-import org.apache.ignite.IgniteCache;
-import org.apache.ignite.configuration.CacheConfiguration;
-import org.apache.ignite.configuration.ConnectorConfiguration;
-import org.apache.ignite.configuration.IgniteConfiguration;
-import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
-import org.junit.Test;
-
-import static org.apache.ignite.IgniteJdbcDriver.CFG_URL_PREFIX;
-import static org.apache.ignite.IgniteJdbcDriver.PROP_NODE_ID;
-import static org.apache.ignite.cache.CacheMode.LOCAL;
-import static org.apache.ignite.cache.CacheWriteSynchronizationMode.FULL_SYNC;
-
-/**
- * Test JDBC with several local caches.
- */
-public class JdbcLocalCachesSelfTest extends GridCommonAbstractTest {
-    /** Cache name. */
-    private static final String CACHE_NAME = "cache";
-
-    /** JDBC URL. */
-    private static final String BASE_URL =
-        CFG_URL_PREFIX + "cache=" + CACHE_NAME + "@modules/clients/src/test/config/jdbc-config.xml";
-
-    /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
-    @Override protected IgniteConfiguration getConfiguration(String igniteInstanceName) throws Exception {
-        IgniteConfiguration cfg = super.getConfiguration(igniteInstanceName);
-
-        CacheConfiguration cache = defaultCacheConfiguration();
-
-        cache.setName(CACHE_NAME);
-        cache.setCacheMode(LOCAL);
-        cache.setWriteSynchronizationMode(FULL_SYNC);
-        cache.setIndexedTypes(
-            String.class, Integer.class
-        );
-
-        cfg.setCacheConfiguration(cache);
-
-        cfg.setConnectorConfiguration(new ConnectorConfiguration());
-
-        return cfg;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected void beforeTestsStarted() throws Exception {
-        startGridsMultiThreaded(2);
-
-        IgniteCache<Object, Object> cache1 = grid(0).cache(CACHE_NAME);
-
-        assert cache1 != null;
-
-        cache1.put("key1", 1);
-        cache1.put("key2", 2);
-
-        IgniteCache<Object, Object> cache2 = grid(1).cache(CACHE_NAME);
-
-        assert cache2 != null;
-
-        cache2.put("key1", 3);
-        cache2.put("key2", 4);
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testCache1() throws Exception {
-        Properties cfg = new Properties();
-
-        cfg.setProperty(PROP_NODE_ID, grid(0).localNode().id().toString());
-
-        Connection conn = null;
-
-        try {
-            conn = DriverManager.getConnection(BASE_URL, cfg);
-
-            ResultSet rs = conn.createStatement().executeQuery("select _val from Integer order by _val");
-
-            int cnt = 0;
-
-            while (rs.next())
-                assertEquals(++cnt, rs.getInt(1));
-
-            assertEquals(2, cnt);
-        }
-        finally {
-            if (conn != null)
-                conn.close();
-        }
-    }
-
-    /**
-     * Verifies that <code>select count(*)</code> behaves correctly in
-     * {@link org.apache.ignite.cache.CacheMode#LOCAL} mode.
-     *
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testCountAll() throws Exception {
-        Properties cfg = new Properties();
-
-        cfg.setProperty(PROP_NODE_ID, grid(0).localNode().id().toString());
-
-        Connection conn = null;
-
-        try {
-            conn = DriverManager.getConnection(BASE_URL, cfg);
-
-            ResultSet rs = conn.createStatement().executeQuery("select count(*) from Integer");
-
-            assertTrue(rs.next());
-
-            assertEquals(2L, rs.getLong(1));
-        }
-        finally {
-            if (conn != null)
-                conn.close();
-        }
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testCache2() throws Exception {
-        Properties cfg = new Properties();
-
-        cfg.setProperty(PROP_NODE_ID, grid(1).localNode().id().toString());
-
-        Connection conn = null;
-
-        try {
-            conn = DriverManager.getConnection(BASE_URL, cfg);
-
-            ResultSet rs = conn.createStatement().executeQuery("select _val from Integer order by _val");
-
-            int cnt = 0;
-
-            while (rs.next())
-                assertEquals(++cnt + 2, rs.getInt(1));
-
-            assertEquals(2, cnt);
-        }
-        finally {
-            if (conn != null)
-                conn.close();
-        }
-    }
-}
diff --git a/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/RestBinaryProtocolSelfTest.java b/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/RestBinaryProtocolSelfTest.java
index 7d1025f..6dbbaa8 100644
--- a/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/RestBinaryProtocolSelfTest.java
+++ b/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/RestBinaryProtocolSelfTest.java
@@ -44,9 +44,6 @@
 import org.jetbrains.annotations.NotNull;
 import org.junit.Test;
 
-import static org.apache.ignite.cache.CacheMode.LOCAL;
-import static org.apache.ignite.cache.CacheWriteSynchronizationMode.FULL_SYNC;
-
 /**
  * TCP protocol test.
  */
@@ -104,17 +101,11 @@
     /**
      * @param cacheName Cache name.
      * @return Cache configuration.
-     * @throws Exception In case of error.
      */
-    private CacheConfiguration cacheConfiguration(@NotNull String cacheName) throws Exception {
-        CacheConfiguration cfg = defaultCacheConfiguration();
-
-        cfg.setCacheMode(LOCAL);
-        cfg.setName(cacheName);
-        cfg.setWriteSynchronizationMode(FULL_SYNC);
-        cfg.setStatisticsEnabled(true);
-
-        return cfg;
+    private static CacheConfiguration<?, ?> cacheConfiguration(@NotNull String cacheName) {
+        return defaultCacheConfiguration()
+            .setName(cacheName)
+            .setStatisticsEnabled(true);
     }
 
     /**
diff --git a/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/RestMemcacheProtocolSelfTest.java b/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/RestMemcacheProtocolSelfTest.java
index 8dec047..12cfa0c 100644
--- a/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/RestMemcacheProtocolSelfTest.java
+++ b/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/RestMemcacheProtocolSelfTest.java
@@ -27,9 +27,6 @@
 import org.junit.Assert;
 import org.junit.Test;
 
-import static org.apache.ignite.cache.CacheMode.LOCAL;
-import static org.apache.ignite.cache.CacheWriteSynchronizationMode.FULL_SYNC;
-
 /**
  * TCP protocol test.
  */
@@ -86,17 +83,11 @@
     /**
      * @param cacheName Cache name.
      * @return Cache configuration.
-     * @throws Exception In case of error.
      */
-    private CacheConfiguration cacheConfiguration(@NotNull String cacheName) throws Exception {
-        CacheConfiguration cfg = defaultCacheConfiguration();
-
-        cfg.setCacheMode(LOCAL);
-        cfg.setName(cacheName);
-        cfg.setWriteSynchronizationMode(FULL_SYNC);
-        cfg.setStatisticsEnabled(true);
-
-        return cfg;
+    private static CacheConfiguration<?, ?> cacheConfiguration(@NotNull String cacheName) {
+        return defaultCacheConfiguration()
+            .setName(cacheName)
+            .setStatisticsEnabled(true);
     }
 
     /**
diff --git a/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/TaskCommandHandlerSelfTest.java b/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/TaskCommandHandlerSelfTest.java
index 0a92420..5a2d054 100644
--- a/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/TaskCommandHandlerSelfTest.java
+++ b/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/TaskCommandHandlerSelfTest.java
@@ -42,14 +42,10 @@
 import org.apache.ignite.internal.util.typedef.P1;
 import org.apache.ignite.internal.util.typedef.internal.U;
 import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
-import org.jetbrains.annotations.NotNull;
 import org.jsr166.ConcurrentLinkedHashMap;
 import org.junit.Test;
-
-import static org.apache.ignite.cache.CacheMode.LOCAL;
 import static org.apache.ignite.cache.CacheMode.PARTITIONED;
 import static org.apache.ignite.cache.CacheMode.REPLICATED;
-import static org.apache.ignite.cache.CacheWriteSynchronizationMode.FULL_SYNC;
 import static org.apache.ignite.internal.client.GridClientProtocol.TCP;
 
 /**
@@ -57,7 +53,10 @@
  */
 public class TaskCommandHandlerSelfTest extends GridCommonAbstractTest {
     /** */
-    private static final String CACHE_NAME = "cache";
+    private static final String REPLICATED_CACHE_NAME = "replicated";
+
+    /** */
+    private static final String PARTITIONED_CACHE_NAME = "partitioned";
 
     /** */
     public static final String HOST = "127.0.0.1";
@@ -107,24 +106,15 @@
 
         cfg.setConnectorConfiguration(clientCfg);
 
-        cfg.setCacheConfiguration(cacheConfiguration(DEFAULT_CACHE_NAME), cacheConfiguration("replicated"),
-            cacheConfiguration("partitioned"), cacheConfiguration(CACHE_NAME));
+        CacheConfiguration<?, ?> cfg1 = defaultCacheConfiguration()
+            .setName(REPLICATED_CACHE_NAME)
+            .setCacheMode(REPLICATED);
 
-        return cfg;
-    }
+        CacheConfiguration<?, ?> cfg2 = defaultCacheConfiguration()
+            .setName(PARTITIONED_CACHE_NAME)
+            .setCacheMode(PARTITIONED);
 
-    /**
-     * @param cacheName Cache name.
-     * @return Cache configuration.
-     * @throws Exception In case of error.
-     */
-    private CacheConfiguration cacheConfiguration(@NotNull String cacheName) throws Exception {
-        CacheConfiguration cfg = defaultCacheConfiguration();
-
-        cfg.setCacheMode(DEFAULT_CACHE_NAME.equals(cacheName) || CACHE_NAME.equals(cacheName) ? LOCAL : "replicated".equals(cacheName) ?
-            REPLICATED : PARTITIONED);
-        cfg.setName(cacheName);
-        cfg.setWriteSynchronizationMode(FULL_SYNC);
+        cfg.setCacheConfiguration(cfg1, cfg2);
 
         return cfg;
     }
@@ -139,12 +129,12 @@
 
         GridClientDataConfiguration cache = new GridClientDataConfiguration();
 
-        cache.setName(CACHE_NAME);
+        cache.setName(PARTITIONED_CACHE_NAME);
 
         cfg.setDataConfigurations(Arrays.asList(nullCache, cache));
 
         cfg.setProtocol(TCP);
-        cfg.setServers(Arrays.asList("localhost:" + BINARY_PORT));
+        cfg.setServers(Collections.singletonList("localhost:" + BINARY_PORT));
 
         return cfg;
     }
diff --git a/modules/clients/src/test/java/org/apache/ignite/jdbc/JdbcLocalCachesSelfTest.java b/modules/clients/src/test/java/org/apache/ignite/jdbc/JdbcLocalCachesSelfTest.java
deleted file mode 100644
index 4810d10..0000000
--- a/modules/clients/src/test/java/org/apache/ignite/jdbc/JdbcLocalCachesSelfTest.java
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.jdbc;
-
-import java.sql.Connection;
-import java.sql.DriverManager;
-import java.sql.ResultSet;
-import java.util.Properties;
-import org.apache.ignite.IgniteCache;
-import org.apache.ignite.configuration.CacheConfiguration;
-import org.apache.ignite.configuration.ConnectorConfiguration;
-import org.apache.ignite.configuration.IgniteConfiguration;
-import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
-import org.junit.Test;
-
-import static org.apache.ignite.IgniteJdbcDriver.PROP_NODE_ID;
-import static org.apache.ignite.cache.CacheMode.LOCAL;
-import static org.apache.ignite.cache.CacheWriteSynchronizationMode.FULL_SYNC;
-
-/**
- * Test JDBC with several local caches.
- */
-public class JdbcLocalCachesSelfTest extends GridCommonAbstractTest {
-    /** Cache name. */
-    private static final String CACHE_NAME = "cache";
-
-    /** URL. */
-    private static final String URL = "jdbc:ignite://127.0.0.1/" + CACHE_NAME;
-
-    /** {@inheritDoc} */
-    @Override protected IgniteConfiguration getConfiguration(String igniteInstanceName) throws Exception {
-        IgniteConfiguration cfg = super.getConfiguration(igniteInstanceName);
-
-        CacheConfiguration cache = defaultCacheConfiguration();
-
-        cache.setName(CACHE_NAME);
-        cache.setCacheMode(LOCAL);
-        cache.setWriteSynchronizationMode(FULL_SYNC);
-        cache.setIndexedTypes(
-            String.class, Integer.class
-        );
-
-        cfg.setCacheConfiguration(cache);
-
-        cfg.setConnectorConfiguration(new ConnectorConfiguration());
-
-        return cfg;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected void beforeTestsStarted() throws Exception {
-        startGridsMultiThreaded(2);
-
-        IgniteCache<Object, Object> cache1 = grid(0).cache(CACHE_NAME);
-
-        assert cache1 != null;
-
-        cache1.put("key1", 1);
-        cache1.put("key2", 2);
-
-        IgniteCache<Object, Object> cache2 = grid(1).cache(CACHE_NAME);
-
-        assert cache2 != null;
-
-        cache2.put("key1", 3);
-        cache2.put("key2", 4);
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testCache1() throws Exception {
-        Properties cfg = new Properties();
-
-        cfg.setProperty(PROP_NODE_ID, grid(0).localNode().id().toString());
-
-        Connection conn = null;
-
-        try {
-            conn = DriverManager.getConnection(URL, cfg);
-
-            ResultSet rs = conn.createStatement().executeQuery("select _val from Integer order by _val");
-
-            int cnt = 0;
-
-            while (rs.next())
-                assertEquals(++cnt, rs.getInt(1));
-
-            assertEquals(2, cnt);
-        }
-        finally {
-            if (conn != null)
-                conn.close();
-        }
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testCache2() throws Exception {
-        Properties cfg = new Properties();
-
-        cfg.setProperty(PROP_NODE_ID, grid(1).localNode().id().toString());
-
-        Connection conn = null;
-
-        try {
-            conn = DriverManager.getConnection(URL, cfg);
-
-            ResultSet rs = conn.createStatement().executeQuery("select _val from Integer order by _val");
-
-            int cnt = 0;
-
-            while (rs.next())
-                assertEquals(++cnt + 2, rs.getInt(1));
-
-            assertEquals(2, cnt);
-        }
-        finally {
-            if (conn != null)
-                conn.close();
-        }
-    }
-}
diff --git a/modules/clients/src/test/java/org/apache/ignite/jdbc/suite/IgniteJdbcDriverTestSuite.java b/modules/clients/src/test/java/org/apache/ignite/jdbc/suite/IgniteJdbcDriverTestSuite.java
index e1c3ed8..47a3429 100644
--- a/modules/clients/src/test/java/org/apache/ignite/jdbc/suite/IgniteJdbcDriverTestSuite.java
+++ b/modules/clients/src/test/java/org/apache/ignite/jdbc/suite/IgniteJdbcDriverTestSuite.java
@@ -29,7 +29,6 @@
 import org.apache.ignite.jdbc.JdbcConnectionSelfTest;
 import org.apache.ignite.jdbc.JdbcDefaultNoOpCacheTest;
 import org.apache.ignite.jdbc.JdbcEmptyCacheSelfTest;
-import org.apache.ignite.jdbc.JdbcLocalCachesSelfTest;
 import org.apache.ignite.jdbc.JdbcMetadataSelfTest;
 import org.apache.ignite.jdbc.JdbcNoDefaultCacheTest;
 import org.apache.ignite.jdbc.JdbcPojoLegacyQuerySelfTest;
@@ -120,7 +119,6 @@
     JdbcComplexQuerySelfTest.class,
     JdbcMetadataSelfTest.class,
     JdbcEmptyCacheSelfTest.class,
-    JdbcLocalCachesSelfTest.class,
     JdbcNoDefaultCacheTest.class,
     JdbcDefaultNoOpCacheTest.class,
     JdbcPojoQuerySelfTest.class,
@@ -139,7 +137,6 @@
     JdbcDistributedJoinsQueryTest.class,
     org.apache.ignite.internal.jdbc2.JdbcMetadataSelfTest.class,
     org.apache.ignite.internal.jdbc2.JdbcEmptyCacheSelfTest.class,
-    org.apache.ignite.internal.jdbc2.JdbcLocalCachesSelfTest.class,
     org.apache.ignite.internal.jdbc2.JdbcConnectionWithoutCacheNameTest.class,
     org.apache.ignite.internal.jdbc2.JdbcMergeStatementSelfTest.class,
     org.apache.ignite.internal.jdbc2.JdbcBinaryMarshallerMergeStatementSelfTest.class,
diff --git a/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinCacheToJdbcDataTypesCoverageTest.java b/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinCacheToJdbcDataTypesCoverageTest.java
index b250d71..02cbc09 100644
--- a/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinCacheToJdbcDataTypesCoverageTest.java
+++ b/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinCacheToJdbcDataTypesCoverageTest.java
@@ -46,7 +46,6 @@
 import org.apache.commons.lang3.builder.EqualsBuilder;
 import org.apache.ignite.IgniteCache;
 import org.apache.ignite.IgniteCheckedException;
-import org.apache.ignite.cache.CacheMode;
 import org.apache.ignite.cache.CacheWriteSynchronizationMode;
 import org.apache.ignite.cache.QueryEntity;
 import org.apache.ignite.cache.affinity.rendezvous.RendezvousAffinityFunction;
@@ -62,7 +61,6 @@
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.ExpectedException;
-
 import static org.apache.ignite.testframework.GridTestUtils.waitForCondition;
 
 /**
@@ -418,8 +416,7 @@
 
         Class<?> dataType = originalValItem.getClass();
 
-        IgniteEx ignite =
-            (cacheMode == CacheMode.LOCAL || writeSyncMode == CacheWriteSynchronizationMode.PRIMARY_SYNC) ?
+        IgniteEx ignite = writeSyncMode == CacheWriteSynchronizationMode.PRIMARY_SYNC ?
                 grid(0) :
                 grid(new Random().nextInt(NODES_CNT));
 
diff --git a/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinJdbcToCacheDataTypesCoverageTest.java b/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinJdbcToCacheDataTypesCoverageTest.java
index bb43e3a..9de4259 100644
--- a/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinJdbcToCacheDataTypesCoverageTest.java
+++ b/modules/clients/src/test/java/org/apache/ignite/jdbc/thin/JdbcThinJdbcToCacheDataTypesCoverageTest.java
@@ -23,7 +23,6 @@
 import java.util.Arrays;
 import java.util.Random;
 import java.util.UUID;
-import org.apache.ignite.cache.CacheMode;
 import org.apache.ignite.cache.CacheWriteSynchronizationMode;
 import org.apache.ignite.cache.affinity.rendezvous.RendezvousAffinityFunction;
 import org.apache.ignite.configuration.CacheConfiguration;
@@ -33,7 +32,6 @@
 import org.junit.Before;
 import org.junit.Ignore;
 import org.junit.Test;
-
 import static org.apache.ignite.testframework.GridTestUtils.waitForCondition;
 
 /**
@@ -55,7 +53,6 @@
     private Statement stmt;
 
     /** @inheritDoc */
-    @SuppressWarnings("RedundantMethodOverride")
     @Before
     @Override public void init() throws Exception {
         super.init();
@@ -131,8 +128,7 @@
     @Override protected void checkBasicSqlOperations(SqlDataType dataType, Object... valsToCheck) throws Exception {
         assert valsToCheck.length > 0;
 
-        IgniteEx ignite =
-            (cacheMode == CacheMode.LOCAL || writeSyncMode == CacheWriteSynchronizationMode.PRIMARY_SYNC) ?
+        IgniteEx ignite = writeSyncMode == CacheWriteSynchronizationMode.PRIMARY_SYNC ?
                 grid(0) :
                 grid(new Random().nextInt(NODES_CNT));
 
@@ -163,8 +159,7 @@
             " val " + dataType + ")" +
             " WITH " + "\"template=" + templateName + ",cache_name=" + cacheName + ",wrap_value=false\"");
 
-        if (cacheMode != CacheMode.LOCAL)
-            stmt.execute("CREATE INDEX " + idxName + " ON " + tblName + "(id, val)");
+        stmt.execute("CREATE INDEX " + idxName + " ON " + tblName + "(id, val)");
 
         for (Object valToCheck : valsToCheck) {
             Object sqlStrVal = valToCheck instanceof SqlStrConvertedValHolder ?
diff --git a/modules/clients/src/test/resources/spring-cache.xml b/modules/clients/src/test/resources/spring-cache.xml
index 86946f6..61bcd0a 100644
--- a/modules/clients/src/test/resources/spring-cache.xml
+++ b/modules/clients/src/test/resources/spring-cache.xml
@@ -108,17 +108,6 @@
                     <!-- Set synchronous rebalancing (default is asynchronous). -->
                     <property name="rebalanceMode" value="SYNC"/>
                 </bean>
-
-                <!--
-                    Local cache example configuration.
-                -->
-                <bean class="org.apache.ignite.configuration.CacheConfiguration">
-                    <!-- Cache name is 'local'. -->
-                    <property name="name" value="local"/>
-
-                    <!-- LOCAL cache mode. -->
-                    <property name="cacheMode" value="LOCAL"/>
-                </bean>
             </list>
         </property>
 
diff --git a/modules/clients/src/test/resources/spring-server-node.xml b/modules/clients/src/test/resources/spring-server-node.xml
index 2c27b2f..4d0d8d6 100644
--- a/modules/clients/src/test/resources/spring-server-node.xml
+++ b/modules/clients/src/test/resources/spring-server-node.xml
@@ -87,17 +87,6 @@
             -->
             <list>
                 <!--
-                    Local cache example configuration.
-                -->
-                <bean class="org.apache.ignite.configuration.CacheConfiguration">
-                    <!-- Cache name is null. -->
-                    <!--<property name="name"><null/></property>-->
-
-                    <!-- LOCAL cache mode. -->
-                    <property name="cacheMode" value="LOCAL"/>
-                </bean>
-
-                <!--
                     Partitioned cache example configuration.
                 -->
                 <bean class="org.apache.ignite.configuration.CacheConfiguration">
@@ -201,21 +190,6 @@
                 </bean>
 
                 <!--
-                    Local cache with store.
-                -->
-                <bean class="org.apache.ignite.configuration.CacheConfiguration">
-                    <property name="name" value="local.store"/>
-
-                    <property name="cacheMode" value="LOCAL"/>
-
-                    <property name="writeSynchronizationMode" value="FULL_SYNC"/>
-
-                    <property name="store">
-                        <bean class="org.apache.ignite.internal.client.HashMapStore"/>
-                    </property>
-                </bean>
-
-                <!--
                     Replicated cache example configuration.
                 -->
                 <bean class="org.apache.ignite.configuration.CacheConfiguration">
diff --git a/modules/clients/src/test/resources/spring-server-ssl-node.xml b/modules/clients/src/test/resources/spring-server-ssl-node.xml
index d8e16ff..8589a3c 100644
--- a/modules/clients/src/test/resources/spring-server-ssl-node.xml
+++ b/modules/clients/src/test/resources/spring-server-ssl-node.xml
@@ -88,18 +88,6 @@
             -->
             <list>
                 <!--
-                    Local cache example configuration.
-                -->
-                <bean class="org.apache.ignite.configuration.CacheConfiguration">
-                    <!-- Cache name is null. -->
-                    <!--<property name="name"><null/></property>-->
-
-                    <!-- LOCAL cache mode. -->
-                    <property name="cacheMode" value="LOCAL"/>
-
-                </bean>
-
-                <!--
                     Partitioned cache example configuration.
                 -->
                 <bean class="org.apache.ignite.configuration.CacheConfiguration">
diff --git a/modules/compatibility/src/test/java/org/apache/ignite/compatibility/cache/LocalCacheTest.java b/modules/compatibility/src/test/java/org/apache/ignite/compatibility/cache/LocalCacheTest.java
deleted file mode 100644
index e100b00..0000000
--- a/modules/compatibility/src/test/java/org/apache/ignite/compatibility/cache/LocalCacheTest.java
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.compatibility.cache;
-
-import java.io.File;
-import org.apache.ignite.Ignite;
-import org.apache.ignite.cache.CacheMode;
-import org.apache.ignite.compatibility.persistence.IgnitePersistenceCompatibilityAbstractTest;
-import org.apache.ignite.configuration.CacheConfiguration;
-import org.apache.ignite.configuration.DataRegionConfiguration;
-import org.apache.ignite.configuration.DataStorageConfiguration;
-import org.apache.ignite.configuration.IgniteConfiguration;
-import org.apache.ignite.internal.IgnitionEx;
-import org.apache.ignite.internal.processors.cache.GridCacheAbstractFullApiSelfTest;
-import org.apache.ignite.internal.util.typedef.internal.U;
-import org.apache.ignite.lang.IgniteInClosure;
-import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;
-import org.jetbrains.annotations.Nullable;
-import org.junit.Test;
-
-/**
- * Tests that local cache with persistence enabled can be started on a new version of AI.
- * This test should be removed along with GridCacheProcessor#LocalAffinityFunction.
- */
-public class LocalCacheTest extends IgnitePersistenceCompatibilityAbstractTest {
-    /** Consistent id. */
-    private static final String CONSISTENT_ID = "test-local-cache-id";
-
-    /** Ignite version. */
-    private static final String IGNITE_VERSION = "2.8.0";
-
-    /**
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testMigrationLocalCacheWithPersistenceEnabled() throws Exception {
-        try {
-            U.delete(new File(U.defaultWorkDirectory()));
-
-            startGrid(1, IGNITE_VERSION, new ConfigurationClosure(CONSISTENT_ID), new ActivateClosure());
-
-            stopAllGrids();
-
-            Ignite ig0 = IgnitionEx.start(prepareConfig(getConfiguration(), CONSISTENT_ID));
-
-            ig0.close();
-        }
-        finally {
-            stopAllGrids();
-        }
-    }
-
-    /**
-     * Updates the given ignite configuration and specifies a local cache with persistence enabled.
-     *
-     * @param cfg Ignite configuration to be updated.
-     * @param consistentId Consistent id.
-     * @return Updated configuration.
-     */
-    private static IgniteConfiguration prepareConfig(IgniteConfiguration cfg, @Nullable String consistentId) {
-        cfg.setLocalHost("127.0.0.1");
-
-        TcpDiscoverySpi disco = new TcpDiscoverySpi();
-        disco.setIpFinder(GridCacheAbstractFullApiSelfTest.LOCAL_IP_FINDER);
-
-        cfg.setDiscoverySpi(disco);
-
-        cfg.setPeerClassLoadingEnabled(false);
-
-        DataStorageConfiguration memCfg = new DataStorageConfiguration()
-            .setDefaultDataRegionConfiguration(
-                new DataRegionConfiguration()
-                    .setPersistenceEnabled(true)
-                    .setInitialSize(10L * 1024 * 1024)
-                    .setMaxSize(10L * 1024 * 1024))
-            .setPageSize(4096);
-
-        cfg.setDataStorageConfiguration(memCfg);
-
-        if (consistentId != null) {
-            cfg.setIgniteInstanceName(consistentId);
-            cfg.setConsistentId(consistentId);
-        }
-
-        CacheConfiguration<Object, Object> locCacheCfg = new CacheConfiguration<>("test-local-cache");
-        locCacheCfg.setCacheMode(CacheMode.LOCAL);
-        cfg.setCacheConfiguration(locCacheCfg);
-
-        return cfg;
-    }
-
-    /** */
-    private static class ConfigurationClosure implements IgniteInClosure<IgniteConfiguration> {
-        /** Consistent id. */
-        private final String consistentId;
-
-        /**
-         * Creates a new instance of Configuration closure.
-         *
-         * @param consistentId Consistent id.
-         */
-        public ConfigurationClosure(String consistentId) {
-            this.consistentId = consistentId;
-        }
-
-        /** {@inheritDoc} */
-        @Override public void apply(IgniteConfiguration cfg) {
-            prepareConfig(cfg, consistentId);
-        }
-    }
-
-    /**
-     * Post-startup close that activates the grid.
-     */
-    private static class ActivateClosure implements IgniteInClosure<Ignite> {
-        /** {@inheritDoc} */
-        @Override public void apply(Ignite ignite) {
-            ignite.cluster().active(true);
-        }
-    }
-}
diff --git a/modules/compatibility/src/test/java/org/apache/ignite/compatibility/cache/package-info.java b/modules/compatibility/src/test/java/org/apache/ignite/compatibility/cache/package-info.java
deleted file mode 100644
index dcf7d53..0000000
--- a/modules/compatibility/src/test/java/org/apache/ignite/compatibility/cache/package-info.java
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * Contains compatibility tests related to caches with persistence enabled.
- */
-
-package org.apache.ignite.compatibility.cache;
diff --git a/modules/compatibility/src/test/java/org/apache/ignite/compatibility/testsuites/IgniteCompatibilityBasicTestSuite.java b/modules/compatibility/src/test/java/org/apache/ignite/compatibility/testsuites/IgniteCompatibilityBasicTestSuite.java
index 7af1235..c155d19 100644
--- a/modules/compatibility/src/test/java/org/apache/ignite/compatibility/testsuites/IgniteCompatibilityBasicTestSuite.java
+++ b/modules/compatibility/src/test/java/org/apache/ignite/compatibility/testsuites/IgniteCompatibilityBasicTestSuite.java
@@ -17,7 +17,6 @@
 
 package org.apache.ignite.compatibility.testsuites;
 
-import org.apache.ignite.compatibility.cache.LocalCacheTest;
 import org.apache.ignite.compatibility.clients.JavaThinCompatibilityTest;
 import org.apache.ignite.compatibility.clients.JdbcThinCompatibilityTest;
 import org.apache.ignite.compatibility.persistence.FoldersReuseCompatibilityTest;
@@ -41,7 +40,6 @@
     FoldersReuseCompatibilityTest.class,
     MigratingToWalV2SerializerWithCompactionTest.class,
     MetaStorageCompatibilityTest.class,
-    LocalCacheTest.class,
     MoveBinaryMetadataCompatibility.class,
     JdbcThinCompatibilityTest.class,
     JavaThinCompatibilityTest.class
diff --git a/modules/core/src/main/java/org/apache/ignite/cache/CacheMode.java b/modules/core/src/main/java/org/apache/ignite/cache/CacheMode.java
index 5a82b25..392bb61 100644
--- a/modules/core/src/main/java/org/apache/ignite/cache/CacheMode.java
+++ b/modules/core/src/main/java/org/apache/ignite/cache/CacheMode.java
@@ -17,6 +17,7 @@
 
 package org.apache.ignite.cache;
 
+import java.util.stream.Stream;
 import org.apache.ignite.cache.affinity.AffinityFunction;
 import org.apache.ignite.configuration.NearCacheConfiguration;
 import org.jetbrains.annotations.Nullable;
@@ -27,28 +28,12 @@
  */
 public enum CacheMode {
     /**
-     * Specifies local-only cache behaviour. In this mode caches residing on
-     * different grid nodes will not know about each other.
-     * <p>
-     * Other than distribution, {@code local} caches still have all
-     * the caching features, such as eviction, expiration, swapping,
-     * querying, etc... This mode is very useful when caching read-only data
-     * or data that automatically expires at a certain interval and
-     * then automatically reloaded from persistence store.
-     *
-     * @deprecated Use {@link #REPLICATED} or {@link #PARTITIONED} modes instead.
-     * Please, be aware this API will be removed in the next releases.
-     */
-    @Deprecated
-    LOCAL,
-
-    /**
      * Specifies fully replicated cache behavior. In this mode all the keys are distributed
      * to all participating nodes. User still has affinity control
      * over subset of nodes for any given key via {@link AffinityFunction}
      * configuration.
      */
-    REPLICATED,
+    REPLICATED((byte)1),
 
     /**
      * Specifies partitioned cache behaviour. In this mode the overall
@@ -62,18 +47,56 @@
      * can configure the size of near cache via {@link NearCacheConfiguration#getNearEvictionPolicyFactory()}
      * configuration property.
      */
-    PARTITIONED;
+    PARTITIONED((byte)2);
 
-    /** Enumerated values. */
-    private static final CacheMode[] VALS = values();
+    /** Cached enumerated values by their codes. */
+    private static final CacheMode[] BY_CODE;
+
+    static {
+        int max = Stream.of(values())
+            .mapToInt(e -> e.code)
+            .max()
+            .orElseThrow(RuntimeException::new);
+
+        BY_CODE = new CacheMode[max + 1];
+
+        for (CacheMode e : values()) {
+            BY_CODE[e.code] = e;
+        }
+    }
+
+    /** Cache mode code. */
+    private final byte code;
 
     /**
-     * Efficiently gets enumerated value from its ordinal.
-     *
-     * @param ord Ordinal value.
-     * @return Enumerated value or {@code null} if ordinal out of range.
+     * @param code Cache mode code.
      */
-    @Nullable public static CacheMode fromOrdinal(int ord) {
-        return ord >= 0 && ord < VALS.length ? VALS[ord] : null;
+    CacheMode(byte code) {
+        this.code = code;
+    }
+
+    /**
+     * @return Cache mode code.
+     */
+    public byte code() {
+        return code;
+    }
+
+    /**
+     * Efficiently gets enumerated value from its code.
+     *
+     * @param code Code.
+     * @return Enumerated value or {@code null} if an out of range.
+     */
+    @Nullable public static CacheMode fromCode(int code) {
+        return code >= 0 && code < BY_CODE.length ? BY_CODE[code] : null;
+    }
+
+    /**
+     * @param mode Cache mode.
+     * @return Cache mode code.
+     */
+    public static byte toCode(@Nullable CacheMode mode) {
+        return mode == null ? -1 : mode.code;
     }
 }
diff --git a/modules/core/src/main/java/org/apache/ignite/cache/CachePeekMode.java b/modules/core/src/main/java/org/apache/ignite/cache/CachePeekMode.java
index eee1ba9..108021c 100644
--- a/modules/core/src/main/java/org/apache/ignite/cache/CachePeekMode.java
+++ b/modules/core/src/main/java/org/apache/ignite/cache/CachePeekMode.java
@@ -43,19 +43,16 @@
 
     /**
      * Peek into near cache only (don't peek into partitioned cache).
-     * In case of {@link CacheMode#LOCAL} cache, behaves as {@link #ALL} mode.
      */
     NEAR,
 
     /**
      * Peek value from primary copy of partitioned cache only (skip near cache).
-     * In case of {@link CacheMode#LOCAL} cache, behaves as {@link #ALL} mode.
      */
     PRIMARY,
 
     /**
      * Peek value from backup copies of partitioned cache only (skip near cache).
-     * In case of {@link CacheMode#LOCAL} cache, behaves as {@link #ALL} mode.
      */
     BACKUP,
 
diff --git a/modules/core/src/main/java/org/apache/ignite/cache/CacheRebalanceMode.java b/modules/core/src/main/java/org/apache/ignite/cache/CacheRebalanceMode.java
index 57148e8..9901922 100644
--- a/modules/core/src/main/java/org/apache/ignite/cache/CacheRebalanceMode.java
+++ b/modules/core/src/main/java/org/apache/ignite/cache/CacheRebalanceMode.java
@@ -31,8 +31,7 @@
  * current node is primary or back up.
  * <p>
  * Note that rebalance mode only makes sense for {@link CacheMode#REPLICATED} and {@link CacheMode#PARTITIONED}
- * caches. Caches with {@link CacheMode#LOCAL} mode are local by definition and therefore cannot rebalance
- * any values from neighboring nodes.
+ * caches.
  */
 public enum CacheRebalanceMode {
     /**
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 6a67355..3ffebc6 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
@@ -2242,7 +2242,7 @@
                     Map<UUID, Map<Integer, Set<Integer>>> proposedSuppliers = new HashMap<>();
 
                     for (CacheGroupContext grpCtx : grid.context().cache().cacheGroups()) {
-                        if (grpCtx.isLocal() || grpCtx.systemCache())
+                        if (grpCtx.systemCache())
                             continue;
 
                         if (grpCtx.config().getCacheMode() == PARTITIONED && grpCtx.config().getBackups() == 0) {
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/client/GridClientCacheMode.java b/modules/core/src/main/java/org/apache/ignite/internal/client/GridClientCacheMode.java
index b4c0022..7e7f3e2 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/client/GridClientCacheMode.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/client/GridClientCacheMode.java
@@ -21,9 +21,6 @@
  * Cache type on remote node.
  */
 public enum GridClientCacheMode {
-    /** Local cache. */
-    LOCAL,
-
     /** Replicated cache. */
     REPLICATED,
 
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/client/thin/ClientUtils.java b/modules/core/src/main/java/org/apache/ignite/internal/client/thin/ClientUtils.java
index 90c4633..d7e3046 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/client/thin/ClientUtils.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/client/thin/ClientUtils.java
@@ -67,7 +67,6 @@
 import org.apache.ignite.internal.util.MutableSingletonList;
 import org.apache.ignite.internal.util.typedef.internal.U;
 import org.jetbrains.annotations.Nullable;
-
 import static org.apache.ignite.internal.client.thin.ProtocolVersionFeature.EXPIRY_POLICY;
 import static org.apache.ignite.internal.client.thin.ProtocolVersionFeature.QUERY_ENTITY_PRECISION_AND_SCALE;
 import static org.apache.ignite.internal.processors.platform.cache.expiry.PlatformExpiryPolicy.convertDuration;
@@ -265,7 +264,7 @@
             };
 
             itemWriter.accept(CfgItem.NAME, w -> w.writeString(cfg.getName()));
-            itemWriter.accept(CfgItem.CACHE_MODE, w -> w.writeInt(cfg.getCacheMode().ordinal()));
+            itemWriter.accept(CfgItem.CACHE_MODE, w -> w.writeInt(CacheMode.toCode(cfg.getCacheMode())));
             itemWriter.accept(CfgItem.ATOMICITY_MODE, w -> w.writeInt(cfg.getAtomicityMode().ordinal()));
             itemWriter.accept(CfgItem.BACKUPS, w -> w.writeInt(cfg.getBackups()));
             itemWriter.accept(CfgItem.WRITE_SYNC_MODE, w -> w.writeInt(cfg.getWriteSynchronizationMode().ordinal()));
@@ -388,7 +387,7 @@
             return new ClientCacheConfiguration().setName("TBD") // cache name is to be assigned later
                 .setAtomicityMode(CacheAtomicityMode.fromOrdinal(reader.readInt()))
                 .setBackups(reader.readInt())
-                .setCacheMode(CacheMode.fromOrdinal(reader.readInt()))
+                .setCacheMode(CacheMode.fromCode(reader.readInt()))
                 .setCopyOnRead(reader.readBoolean())
                 .setDataRegionName(reader.readString())
                 .setEagerTtl(reader.readBoolean())
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/client/thin/TcpIgniteClient.java b/modules/core/src/main/java/org/apache/ignite/internal/client/thin/TcpIgniteClient.java
index f1d0bd5..82e7bb0 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/client/thin/TcpIgniteClient.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/client/thin/TcpIgniteClient.java
@@ -32,6 +32,7 @@
 import org.apache.ignite.binary.BinaryBasicNameMapper;
 import org.apache.ignite.binary.BinaryObjectException;
 import org.apache.ignite.binary.BinaryType;
+import org.apache.ignite.cache.CacheMode;
 import org.apache.ignite.cache.query.FieldsQueryCursor;
 import org.apache.ignite.cache.query.SqlFieldsQuery;
 import org.apache.ignite.client.ClientAtomicConfiguration;
@@ -362,7 +363,7 @@
                 if (cfg != null) {
                     out.out().writeBoolean(true);
                     out.out().writeInt(cfg.getAtomicSequenceReserveSize());
-                    out.out().writeByte((byte)cfg.getCacheMode().ordinal());
+                    out.out().writeByte(CacheMode.toCode(cfg.getCacheMode()));
                     out.out().writeInt(cfg.getBackups());
                     writeString(cfg.getGroupName(), out.out());
                 }
@@ -390,7 +391,7 @@
             if (cfg != null) {
                 out.out().writeBoolean(true);
                 out.out().writeByte((byte)cfg.getAtomicityMode().ordinal());
-                out.out().writeByte((byte)cfg.getCacheMode().ordinal());
+                out.out().writeByte(CacheMode.toCode(cfg.getCacheMode()));
                 out.out().writeInt(cfg.getBackups());
                 writeString(cfg.getGroupName(), out.out());
                 out.out().writeBoolean(cfg.isColocated());
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcBatchUpdateTask.java b/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcBatchUpdateTask.java
index 6ea1bd2..d3a1ce3 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcBatchUpdateTask.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcBatchUpdateTask.java
@@ -68,9 +68,6 @@
     /** Fetch size. */
     private final int fetchSize;
 
-    /** Local execution flag. */
-    private final boolean loc;
-
     /** Local query flag. */
     private final boolean locQry;
 
@@ -87,14 +84,13 @@
      * @param sql SQL query. {@code null} in case of statement batching.
      * @param sqlBatch Batch of SQL statements. {@code null} in case of parameter batching.
      * @param batchArgs Batch of SQL parameters. {@code null} in case of statement batching.
-     * @param loc Local execution flag.
      * @param fetchSize Fetch size.
      * @param locQry Local query flag.
      * @param collocatedQry Collocated query flag.
      * @param distributedJoins Distributed joins flag.
      */
     public JdbcBatchUpdateTask(Ignite ignite, String cacheName, String schemaName, String sql,
-        List<String> sqlBatch, List<List<Object>> batchArgs, boolean loc, int fetchSize,
+        List<String> sqlBatch, List<List<Object>> batchArgs, int fetchSize,
         boolean locQry, boolean collocatedQry, boolean distributedJoins) {
         this.ignite = ignite;
         this.cacheName = cacheName;
@@ -103,7 +99,6 @@
         this.sqlBatch = sqlBatch;
         this.batchArgs = batchArgs;
         this.fetchSize = fetchSize;
-        this.loc = loc;
         this.locQry = locQry;
         this.collocatedQry = collocatedQry;
         this.distributedJoins = distributedJoins;
@@ -119,7 +114,7 @@
         boolean start = ignite.configuration().isClientMode();
 
         if (cache == null && cacheName == null)
-            cache = ((IgniteKernal)ignite).context().cache().getOrStartPublicCache(start, !loc && locQry);
+            cache = ((IgniteKernal)ignite).context().cache().getOrStartPublicCache(start);
 
         if (cache == null) {
             if (cacheName == null) {
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcQueryTask.java b/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcQueryTask.java
index fce046d..b26fca5 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcQueryTask.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcQueryTask.java
@@ -150,7 +150,7 @@
             boolean start = ignite.configuration().isClientMode();
 
             if (cache == null && cacheName == null)
-                cache = ((IgniteKernal)ignite).context().cache().getOrStartPublicCache(start, !loc && locQry);
+                cache = ((IgniteKernal)ignite).context().cache().getOrStartPublicCache(start);
 
             if (cache == null) {
                 if (cacheName == null)
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcStatement.java b/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcStatement.java
index 20554d7..591fb0a 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcStatement.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcStatement.java
@@ -463,7 +463,7 @@
             throw new SQLException("Failed to query Ignite: DML operations are supported in versions 1.8.0 and newer");
 
         JdbcBatchUpdateTask task = new JdbcBatchUpdateTask(loc ? ignite : null, conn.cacheName(),
-            conn.schemaName(), command, batch, batchArgs, loc, getFetchSize(), conn.isLocalQuery(),
+            conn.schemaName(), command, batch, batchArgs, getFetchSize(), conn.isLocalQuery(),
             conn.isCollocatedQuery(), conn.isDistributedJoins());
 
         try {
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/affinity/GridAffinityAssignmentCache.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/affinity/GridAffinityAssignmentCache.java
index 0bc08e2..e562839 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/affinity/GridAffinityAssignmentCache.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/affinity/GridAffinityAssignmentCache.java
@@ -55,12 +55,10 @@
 import org.apache.ignite.internal.util.typedef.internal.U;
 import org.apache.ignite.lang.IgnitePredicate;
 import org.jetbrains.annotations.Nullable;
-
 import static org.apache.ignite.IgniteSystemProperties.IGNITE_AFFINITY_HISTORY_SIZE;
 import static org.apache.ignite.IgniteSystemProperties.IGNITE_PART_DISTRIBUTION_WARN_THRESHOLD;
 import static org.apache.ignite.IgniteSystemProperties.getFloat;
 import static org.apache.ignite.IgniteSystemProperties.getInteger;
-import static org.apache.ignite.cache.CacheMode.LOCAL;
 import static org.apache.ignite.cache.CacheMode.PARTITIONED;
 import static org.apache.ignite.internal.events.DiscoveryCustomEvent.EVT_DISCOVERY_CUSTOM_EVT;
 
@@ -142,9 +140,6 @@
     /** */
     private final GridKernalContext ctx;
 
-    /** */
-    private final boolean locCache;
-
     /** Node stop flag. */
     private volatile IgniteCheckedException stopErr;
 
@@ -163,15 +158,13 @@
      * @param aff Affinity function.
      * @param nodeFilter Node filter.
      * @param backups Number of backups.
-     * @param locCache Local cache flag.
      */
     private GridAffinityAssignmentCache(GridKernalContext ctx,
         String cacheOrGrpName,
         int grpId,
         AffinityFunction aff,
         IgnitePredicate<ClusterNode> nodeFilter,
-        int backups,
-        boolean locCache
+        int backups
     ) {
         assert ctx != null;
         assert aff != null;
@@ -184,7 +177,6 @@
         this.cacheOrGrpName = cacheOrGrpName;
         this.grpId = grpId;
         this.backups = backups;
-        this.locCache = locCache;
 
         log = ctx.log(GridAffinityAssignmentCache.class);
 
@@ -209,8 +201,7 @@
             CU.cacheGroupId(ccfg),
             aff,
             ccfg.getNodeFilter(),
-            ccfg.getBackups(),
-            ccfg.getCacheMode() == LOCAL);
+            ccfg.getBackups());
     }
 
     /**
@@ -351,15 +342,9 @@
             return prevAssignment;
 
         // Resolve nodes snapshot for specified topology version.
-        List<ClusterNode> sorted;
+        List<ClusterNode> sorted = new ArrayList<>(discoCache.cacheGroupAffinityNodes(groupId()));
 
-        if (!locCache) {
-            sorted = new ArrayList<>(discoCache.cacheGroupAffinityNodes(groupId()));
-
-            sorted.sort(NodeOrderComparator.getInstance());
-        }
-        else
-            sorted = Collections.singletonList(ctx.discovery().localNode());
+        sorted.sort(NodeOrderComparator.getInstance());
 
         boolean hasBaseline = false;
         boolean changedBaseline = false;
@@ -463,9 +448,6 @@
             baselineAssignment = null;
         }
 
-        if (locCache)
-            initialize(topVer, assignment.assignment());
-
         return assignment;
     }
 
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 0972878..caddc85 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
@@ -70,8 +70,6 @@
 import org.apache.ignite.lang.IgniteUuid;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
-
-import static org.apache.ignite.cache.CacheMode.LOCAL;
 import static org.apache.ignite.events.EventType.EVT_NODE_FAILED;
 import static org.apache.ignite.events.EventType.EVT_NODE_LEFT;
 import static org.apache.ignite.internal.GridClosureCallMode.BROADCAST;
@@ -515,9 +513,6 @@
             return new GridFinishedFuture<>((AffinityInfo)null);
         }
 
-        if (desc.cacheConfiguration().getCacheMode() == LOCAL)
-            return new GridFinishedFuture<>(new IgniteCheckedException("Failed to map keys for LOCAL cache: " + cacheName));
-
         AffinityFuture fut0 = new AffinityFuture(cacheName, topVer, cacheNodes);
 
         IgniteInternalFuture<AffinityInfo> old = affMap.putIfAbsent(key, fut0);
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/affinity/LocalAffinityFunction.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/affinity/LocalAffinityFunction.java
deleted file mode 100644
index 963de8c..0000000
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/affinity/LocalAffinityFunction.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.affinity;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.UUID;
-import org.apache.ignite.IgniteException;
-import org.apache.ignite.cache.affinity.AffinityFunction;
-import org.apache.ignite.cache.affinity.AffinityFunctionContext;
-import org.apache.ignite.cluster.ClusterNode;
-
-/**
- * Affinity function for {@link org.apache.ignite.cache.CacheMode#LOCAL} caches.
- */
-public class LocalAffinityFunction implements AffinityFunction {
-    /** */
-    private static final long serialVersionUID = 0L;
-
-    /** {@inheritDoc} */
-    @Override public List<List<ClusterNode>> assignPartitions(AffinityFunctionContext affCtx) {
-        ClusterNode locNode = null;
-
-        for (ClusterNode n : affCtx.currentTopologySnapshot()) {
-            if (n.isLocal()) {
-                locNode = n;
-
-                break;
-            }
-        }
-
-        if (locNode == null)
-            throw new IgniteException("Local node is not included into affinity nodes for 'LOCAL' cache");
-
-        List<List<ClusterNode>> res = new ArrayList<>(partitions());
-
-        for (int part = 0; part < partitions(); part++)
-            res.add(Collections.singletonList(locNode));
-
-        return Collections.unmodifiableList(res);
-    }
-
-    /** {@inheritDoc} */
-    @Override public void reset() {
-        // No-op.
-    }
-
-    /** {@inheritDoc} */
-    @Override public int partitions() {
-        return 1;
-    }
-
-    /** {@inheritDoc} */
-    @Override public int partition(Object key) {
-        return 0;
-    }
-
-    /** {@inheritDoc} */
-    @Override public void removeNode(UUID nodeId) {
-        // No-op.
-    }
-}
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 639268d..f6f4a95 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
@@ -78,8 +78,6 @@
 import org.apache.ignite.lang.IgniteInClosure;
 import org.apache.ignite.lang.IgniteUuid;
 import org.jetbrains.annotations.Nullable;
-
-import static org.apache.ignite.cache.CacheMode.LOCAL;
 import static org.apache.ignite.cache.CacheRebalanceMode.NONE;
 import static org.apache.ignite.events.EventType.EVT_NODE_FAILED;
 import static org.apache.ignite.events.EventType.EVT_NODE_JOINED;
@@ -495,11 +493,7 @@
                 CacheGroupContext grp = cctx.cache().cacheGroup(grpDesc.groupId());
 
                 assert grp != null : grpDesc.groupId();
-                assert !grp.affinityNode() || grp.isLocal() : grp.cacheOrGroupName();
-
-                // Skip for local caches.
-                if (grp.isLocal())
-                    continue;
+                assert !grp.affinityNode() : grp.cacheOrGroupName();
 
                 CacheGroupHolder grpHolder = grpHolders.get(grp.groupId());
 
@@ -615,13 +609,11 @@
         }
 
         for (DynamicCacheDescriptor desc : startDescs) {
-            if (desc.cacheConfiguration().getCacheMode() != LOCAL) {
-                CacheGroupContext grp = cctx.cache().cacheGroup(desc.groupId());
+            CacheGroupContext grp = cctx.cache().cacheGroup(desc.groupId());
 
-                assert grp != null;
+            assert grp != null;
 
-                grp.topology().onExchangeDone(null, grp.affinity().cachedAffinity(topVer), true);
-            }
+            grp.topology().onExchangeDone(null, grp.affinity().cachedAffinity(topVer), true);
         }
 
         cctx.cache().initCacheProxies(topVer, null);
@@ -1086,17 +1078,15 @@
         Set<Integer> stoppedGrps = null;
 
         for (ExchangeActions.CacheGroupActionData data : exchActions.cacheGroupsToStop()) {
-            if (data.descriptor().config().getCacheMode() != LOCAL) {
-                CacheGroupHolder cacheGrp = grpHolders.remove(data.descriptor().groupId());
+            CacheGroupHolder cacheGrp = grpHolders.remove(data.descriptor().groupId());
 
-                if (cacheGrp != null) {
-                    if (stoppedGrps == null)
-                        stoppedGrps = new HashSet<>();
+            if (cacheGrp != null) {
+                if (stoppedGrps == null)
+                    stoppedGrps = new HashSet<>();
 
-                    stoppedGrps.add(cacheGrp.groupId());
+                stoppedGrps.add(cacheGrp.groupId());
 
-                    cctx.io().removeHandler(true, cacheGrp.groupId(), GridDhtAffinityAssignmentResponse.class);
-                }
+                cctx.io().removeHandler(true, cacheGrp.groupId(), GridDhtAffinityAssignmentResponse.class);
             }
         }
 
@@ -1284,9 +1274,7 @@
      * @param c Cache closure.
      */
     private void forAllRegisteredCacheGroups(IgniteInClosureX<CacheGroupDescriptor> c) {
-        Collection<CacheGroupDescriptor> affinityCaches = cachesRegistry.allGroups().values().stream()
-            .filter(desc -> desc.config().getCacheMode() != LOCAL)
-            .collect(Collectors.toList());
+        Collection<CacheGroupDescriptor> affinityCaches = new ArrayList<>(cachesRegistry.allGroups().values());
 
         try {
             U.doInParallel(cctx.kernalContext().pools().getSystemExecutorService(), affinityCaches, t -> {
@@ -1329,9 +1317,6 @@
         throws IgniteCheckedException {
         assert grpDesc != null && grpDesc.groupId() != 0 : grpDesc;
 
-        if (grpDesc.config().getCacheMode() == LOCAL)
-            return;
-
         int grpId = grpDesc.groupId();
 
         CacheGroupHolder grpHolder = grpHolders.get(grpId);
@@ -2707,8 +2692,6 @@
         CacheGroupAffNodeHolder(CacheGroupContext grp, @Nullable GridAffinityAssignmentCache initAff) {
             super(grp.rebalanceEnabled(), grp.affinity(), initAff);
 
-            assert !grp.isLocal() : grp;
-
             this.grp = grp;
         }
 
@@ -2767,7 +2750,6 @@
             CacheConfiguration<?, ?> ccfg = grpDesc.config();
 
             assert ccfg != null : grpDesc;
-            assert ccfg.getCacheMode() != LOCAL : ccfg.getName();
 
             assert !cctx.discovery().cacheGroupAffinityNodes(grpDesc.groupId(),
                 topVer).contains(cctx.localNode()) : grpDesc.cacheOrGroupName();
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheGroupContext.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheGroupContext.java
index 9bd8051..e26a8b9 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheGroupContext.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheGroupContext.java
@@ -71,10 +71,8 @@
 import org.apache.ignite.lang.IgnitePredicate;
 import org.apache.ignite.plugin.CacheTopologyValidatorProvider;
 import org.jetbrains.annotations.Nullable;
-
 import static org.apache.ignite.cache.CacheAtomicityMode.ATOMIC;
 import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL_SNAPSHOT;
-import static org.apache.ignite.cache.CacheMode.LOCAL;
 import static org.apache.ignite.cache.CacheMode.REPLICATED;
 import static org.apache.ignite.cache.CacheRebalanceMode.NONE;
 import static org.apache.ignite.events.EventType.EVT_CACHE_REBALANCE_PART_MISSED;
@@ -704,13 +702,6 @@
     /**
      * @return {@code True} if cache is local.
      */
-    public boolean isLocal() {
-        return ccfg.getCacheMode() == LOCAL;
-    }
-
-    /**
-     * @return {@code True} if cache is local.
-     */
     public boolean isReplicated() {
         return ccfg.getCacheMode() == REPLICATED;
     }
@@ -878,18 +869,14 @@
     private void initializeIO() throws IgniteCheckedException {
         assert !recoveryMode.get() : "Couldn't initialize I/O handlers, recovery mode is on for group " + this;
 
-        if (ccfg.getCacheMode() != LOCAL) {
-            if (!ctx.kernalContext().clientNode()) {
-                ctx.io().addCacheGroupHandler(groupId(), GridDhtAffinityAssignmentRequest.class,
-                    (IgniteBiInClosure<UUID, GridDhtAffinityAssignmentRequest>)this::processAffinityAssignmentRequest);
-            }
-
-            preldr = new GridDhtPreloader(this);
-
-            preldr.start();
+        if (!ctx.kernalContext().clientNode()) {
+            ctx.io().addCacheGroupHandler(groupId(), GridDhtAffinityAssignmentRequest.class,
+                (IgniteBiInClosure<UUID, GridDhtAffinityAssignmentRequest>)this::processAffinityAssignmentRequest);
         }
-        else
-            preldr = new GridCachePreloaderAdapter(this);
+
+        preldr = new GridDhtPreloader(this);
+
+        preldr.start();
     }
 
     /**
@@ -944,7 +931,6 @@
     public void addCacheWithContinuousQuery(GridCacheContext cctx) {
         assert sharedGroup() : cacheOrGroupName();
         assert cctx.group() == this : cctx.name();
-        assert !cctx.isLocal() : cctx.name();
 
         List<GridCacheContext> contQryCaches = this.contQryCaches;
 
@@ -962,7 +948,6 @@
     public void removeCacheWithContinuousQuery(GridCacheContext cctx) {
         assert sharedGroup() : cacheOrGroupName();
         assert cctx.group() == this : cctx.name();
-        assert !cctx.isLocal() : cctx.name();
         assert listenerLock.isWriteLockedByCurrentThread();
 
         List<GridCacheContext> contQryCaches = this.contQryCaches;
@@ -998,12 +983,10 @@
         int part,
         long cntr,
         AffinityTopologyVersion topVer,
-        boolean primary) {
+        boolean primary
+    ) {
         assert sharedGroup();
 
-        if (isLocal())
-            return;
-
         List<GridCacheContext> contQryCaches;
 
         listenerLock.readLock().lock();
@@ -1065,11 +1048,9 @@
 
         aff = affCache == null ? GridAffinityAssignmentCache.create(ctx.kernalContext(), ccfg.getAffinity(), ccfg) : affCache;
 
-        if (ccfg.getCacheMode() != LOCAL) {
-            top = ctx.kernalContext().resource().resolve(new GridDhtPartitionTopologyImpl(ctx, this));
+        top = ctx.kernalContext().resource().resolve(new GridDhtPartitionTopologyImpl(ctx, this));
 
-            metrics.onTopologyInitialized();
-        }
+        metrics.onTopologyInitialized();
 
         try {
             offheapMgr = ctx.kernalContext().resource().resolve(persistenceEnabled
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheMetricsImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheMetricsImpl.java
index 8522fbc..be49398 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheMetricsImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheMetricsImpl.java
@@ -1288,9 +1288,6 @@
      * @return Valid ot not.
      */
     private boolean isValidForOperation(boolean read) {
-        if (cctx.isLocal())
-            return true;
-
         try {
             GridDhtTopologyFuture fut = cctx.shared().exchange().lastFinishedFuture();
 
@@ -1359,43 +1356,34 @@
                 sizeLong = cache.localSizeLong(null);
             }
 
-            if (cctx.isLocal()) {
-                if (cache != null) {
-                    offHeapPrimaryEntriesCnt = offHeapEntriesCnt;
+            IntSet primaries = ImmutableIntSet.wrap(cctx.affinity().primaryPartitions(cctx.localNodeId(), topVer));
+            IntSet backups = ImmutableIntSet.wrap(cctx.affinity().backupPartitions(cctx.localNodeId(), topVer));
 
-                    heapEntriesCnt = cache.sizeLong();
-                }
-            }
-            else {
-                IntSet primaries = ImmutableIntSet.wrap(cctx.affinity().primaryPartitions(cctx.localNodeId(), topVer));
-                IntSet backups = ImmutableIntSet.wrap(cctx.affinity().backupPartitions(cctx.localNodeId(), topVer));
+            if (cctx.isNear() && cache != null)
+                heapEntriesCnt = cache.nearSize();
 
-                if (cctx.isNear() && cache != null)
-                    heapEntriesCnt = cache.nearSize();
+            for (GridDhtLocalPartition part : cctx.topology().currentLocalPartitions()) {
+                // Partitions count.
+                GridDhtPartitionState partState = part.state();
 
-                for (GridDhtLocalPartition part : cctx.topology().currentLocalPartitions()) {
-                    // Partitions count.
-                    GridDhtPartitionState partState = part.state();
+                if (partState == GridDhtPartitionState.OWNING)
+                    owningPartCnt++;
 
-                    if (partState == GridDhtPartitionState.OWNING)
-                        owningPartCnt++;
+                if (partState == GridDhtPartitionState.MOVING)
+                    movingPartCnt++;
 
-                    if (partState == GridDhtPartitionState.MOVING)
-                        movingPartCnt++;
+                // Offheap entries count
+                if (cache == null)
+                    continue;
 
-                    // Offheap entries count
-                    if (cache == null)
-                        continue;
+                long cacheSize = part.dataStore().cacheSize(cctx.cacheId());
 
-                    long cacheSize = part.dataStore().cacheSize(cctx.cacheId());
+                if (primaries.contains(part.id()))
+                    offHeapPrimaryEntriesCnt += cacheSize;
+                else if (backups.contains(part.id()))
+                    offHeapBackupEntriesCnt += cacheSize;
 
-                    if (primaries.contains(part.id()))
-                        offHeapPrimaryEntriesCnt += cacheSize;
-                    else if (backups.contains(part.id()))
-                        offHeapBackupEntriesCnt += cacheSize;
-
-                    heapEntriesCnt += part.publicSize(cctx.cacheId());
-                }
+                heapEntriesCnt += part.publicSize(cctx.cacheId());
             }
         }
         catch (Exception e) {
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 29f2684..2944c2f 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
@@ -85,9 +85,7 @@
 import org.apache.ignite.spi.systemview.view.CacheGroupView;
 import org.apache.ignite.spi.systemview.view.CacheView;
 import org.jetbrains.annotations.Nullable;
-
 import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL_SNAPSHOT;
-import static org.apache.ignite.cache.CacheMode.LOCAL;
 import static org.apache.ignite.cache.CacheMode.PARTITIONED;
 import static org.apache.ignite.events.EventType.EVT_NODE_JOINED;
 import static org.apache.ignite.internal.GridComponent.DiscoveryDataExchangeType.CACHE_PROC;
@@ -402,123 +400,121 @@
         CU.checkAttributeMismatch(log, rmtAttr.groupName(), rmt, "groupName", "Cache group name",
             locAttr.groupName(), rmtAttr.groupName(), true);
 
-        if (rmtAttr.cacheMode() != LOCAL) {
-            CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "interceptor", "Cache Interceptor",
-                locAttr.interceptorClassName(), rmtAttr.interceptorClassName(), true);
+        CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "interceptor", "Cache Interceptor",
+            locAttr.interceptorClassName(), rmtAttr.interceptorClassName(), true);
 
-            CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "atomicityMode",
-                "Cache atomicity mode", locAttr.atomicityMode(), rmtAttr.atomicityMode(), true);
+        CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "atomicityMode",
+            "Cache atomicity mode", locAttr.atomicityMode(), rmtAttr.atomicityMode(), true);
 
-            CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "cachePreloadMode",
-                "Cache preload mode", locAttr.cacheRebalanceMode(), rmtAttr.cacheRebalanceMode(), true);
+        CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "cachePreloadMode",
+            "Cache preload mode", locAttr.cacheRebalanceMode(), rmtAttr.cacheRebalanceMode(), true);
 
-            CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "topologyValidator",
-                "Cache topology validator", locAttr.topologyValidatorClassName(), rmtAttr.topologyValidatorClassName(), true);
+        CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "topologyValidator",
+            "Cache topology validator", locAttr.topologyValidatorClassName(), rmtAttr.topologyValidatorClassName(), true);
 
-            ClusterNode rmtNode = ctx.discovery().node(rmt);
+        ClusterNode rmtNode = ctx.discovery().node(rmt);
 
-            if (CU.affinityNode(ctx.discovery().localNode(), locInfo.cacheData().config().getNodeFilter())
-                && rmtNode != null && CU.affinityNode(rmtNode, rmtData.cacheConfiguration().getNodeFilter())) {
-                CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "storeFactory", "Store factory",
-                    locAttr.storeFactoryClassName(), rmtAttr.storeFactoryClassName(), true);
-            }
+        if (CU.affinityNode(ctx.discovery().localNode(), locInfo.cacheData().config().getNodeFilter())
+            && rmtNode != null && CU.affinityNode(rmtNode, rmtData.cacheConfiguration().getNodeFilter())) {
+            CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "storeFactory", "Store factory",
+                locAttr.storeFactoryClassName(), rmtAttr.storeFactoryClassName(), true);
+        }
 
-            CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "cacheAffinity", "Cache affinity",
-                locAttr.cacheAffinityClassName(), rmtAttr.cacheAffinityClassName(), true);
+        CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "cacheAffinity", "Cache affinity",
+            locAttr.cacheAffinityClassName(), rmtAttr.cacheAffinityClassName(), true);
 
-            CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "cacheAffinityMapper",
-                "Cache affinity mapper", locAttr.cacheAffinityMapperClassName(),
-                rmtAttr.cacheAffinityMapperClassName(), true);
+        CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "cacheAffinityMapper",
+            "Cache affinity mapper", locAttr.cacheAffinityMapperClassName(),
+            rmtAttr.cacheAffinityMapperClassName(), true);
 
-            CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "affinityPartitionsCount",
-                "Affinity partitions count", locAttr.affinityPartitionsCount(),
-                rmtAttr.affinityPartitionsCount(), true);
+        CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "affinityPartitionsCount",
+            "Affinity partitions count", locAttr.affinityPartitionsCount(),
+            rmtAttr.affinityPartitionsCount(), true);
 
-            CU.validateKeyConfigiration(rmtAttr.groupName(), rmtAttr.cacheName(), rmt, rmtAttr.configuration().getKeyConfiguration(),
-                locAttr.configuration().getKeyConfiguration(), log, true);
+        CU.validateKeyConfigiration(rmtAttr.groupName(), rmtAttr.cacheName(), rmt, rmtAttr.configuration().getKeyConfiguration(),
+            locAttr.configuration().getKeyConfiguration(), log, true);
 
-            CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "evictionFilter", "Eviction filter",
-                locAttr.evictionFilterClassName(), rmtAttr.evictionFilterClassName(), true);
+        CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "evictionFilter", "Eviction filter",
+            locAttr.evictionFilterClassName(), rmtAttr.evictionFilterClassName(), true);
 
-            CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "evictionPolicy", "Eviction policy",
-                locAttr.evictionPolicyClassName(), rmtAttr.evictionPolicyClassName(), true);
+        CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "evictionPolicy", "Eviction policy",
+            locAttr.evictionPolicyClassName(), rmtAttr.evictionPolicyClassName(), true);
 
-            CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "evictionPolicyFactory", "Eviction policy factory",
-                locAttr.evictionPolicyFactoryClassName(), rmtAttr.evictionPolicyFactoryClassName(), true);
+        CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "evictionPolicyFactory", "Eviction policy factory",
+            locAttr.evictionPolicyFactoryClassName(), rmtAttr.evictionPolicyFactoryClassName(), true);
 
-            CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "transactionManagerLookup",
-                "Transaction manager lookup", locAttr.transactionManagerLookupClassName(),
-                rmtAttr.transactionManagerLookupClassName(), false);
+        CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "transactionManagerLookup",
+            "Transaction manager lookup", locAttr.transactionManagerLookupClassName(),
+            rmtAttr.transactionManagerLookupClassName(), false);
 
-            CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "defaultLockTimeout",
-                "Default lock timeout", locAttr.defaultLockTimeout(), rmtAttr.defaultLockTimeout(), false);
+        CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "defaultLockTimeout",
+            "Default lock timeout", locAttr.defaultLockTimeout(), rmtAttr.defaultLockTimeout(), false);
 
-            CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "preloadBatchSize",
-                "Preload batch size", locAttr.rebalanceBatchSize(), rmtAttr.rebalanceBatchSize(), false);
+        CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "preloadBatchSize",
+            "Preload batch size", locAttr.rebalanceBatchSize(), rmtAttr.rebalanceBatchSize(), false);
 
-            CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "rebalanceDelay",
-                "Rebalance delay", locAttr.rebalanceDelay(), rmtAttr.rebalanceDelay(), false);
+        CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "rebalanceDelay",
+            "Rebalance delay", locAttr.rebalanceDelay(), rmtAttr.rebalanceDelay(), false);
 
-            CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "rebalanceBatchesPrefetchCount",
-                "Rebalance batches prefetch count", locAttr.rebalanceBatchesPrefetchCount(),
-                rmtAttr.rebalanceBatchesPrefetchCount(), false);
+        CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "rebalanceBatchesPrefetchCount",
+            "Rebalance batches prefetch count", locAttr.rebalanceBatchesPrefetchCount(),
+            rmtAttr.rebalanceBatchesPrefetchCount(), false);
 
-            CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "rebalanceOrder",
-                "Rebalance order", locAttr.rebalanceOrder(), rmtAttr.rebalanceOrder(), false);
+        CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "rebalanceOrder",
+            "Rebalance order", locAttr.rebalanceOrder(), rmtAttr.rebalanceOrder(), false);
 
-            CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "rebalanceThrottle",
-                "Rebalance throttle", locAttr.rebalanceThrottle(), rmtAttr.rebalanceThrottle(), false);
+        CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "rebalanceThrottle",
+            "Rebalance throttle", locAttr.rebalanceThrottle(), rmtAttr.rebalanceThrottle(), false);
 
-            CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "rebalanceTimeout",
-                "Rebalance timeout", locAttr.rebalanceTimeout(), rmtAttr.rebalanceTimeout(), false);
+        CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "rebalanceTimeout",
+            "Rebalance timeout", locAttr.rebalanceTimeout(), rmtAttr.rebalanceTimeout(), false);
 
-            CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "writeSynchronizationMode",
-                "Write synchronization mode", locAttr.writeSynchronization(), rmtAttr.writeSynchronization(),
-                true);
+        CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "writeSynchronizationMode",
+            "Write synchronization mode", locAttr.writeSynchronization(), rmtAttr.writeSynchronization(),
+            true);
 
-            CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "writeBehindBatchSize",
-                "Write behind batch size", locAttr.writeBehindBatchSize(), rmtAttr.writeBehindBatchSize(),
-                false);
+        CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "writeBehindBatchSize",
+            "Write behind batch size", locAttr.writeBehindBatchSize(), rmtAttr.writeBehindBatchSize(),
+            false);
 
-            CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "writeBehindCoalescing",
-                "Write behind coalescing", locAttr.writeBehindCoalescing(), rmtAttr.writeBehindCoalescing(),
-                false);
+        CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "writeBehindCoalescing",
+            "Write behind coalescing", locAttr.writeBehindCoalescing(), rmtAttr.writeBehindCoalescing(),
+            false);
 
-            CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "writeBehindEnabled",
-                "Write behind enabled", locAttr.writeBehindEnabled(), rmtAttr.writeBehindEnabled(), false);
+        CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "writeBehindEnabled",
+            "Write behind enabled", locAttr.writeBehindEnabled(), rmtAttr.writeBehindEnabled(), false);
 
-            CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "writeBehindFlushFrequency",
-                "Write behind flush frequency", locAttr.writeBehindFlushFrequency(),
-                rmtAttr.writeBehindFlushFrequency(), false);
+        CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "writeBehindFlushFrequency",
+            "Write behind flush frequency", locAttr.writeBehindFlushFrequency(),
+            rmtAttr.writeBehindFlushFrequency(), false);
 
-            CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "writeBehindFlushSize",
-                "Write behind flush size", locAttr.writeBehindFlushSize(), rmtAttr.writeBehindFlushSize(),
-                false);
+        CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "writeBehindFlushSize",
+            "Write behind flush size", locAttr.writeBehindFlushSize(), rmtAttr.writeBehindFlushSize(),
+            false);
 
-            CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "writeBehindFlushThreadCount",
-                "Write behind flush thread count", locAttr.writeBehindFlushThreadCount(),
-                rmtAttr.writeBehindFlushThreadCount(), false);
+        CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "writeBehindFlushThreadCount",
+            "Write behind flush thread count", locAttr.writeBehindFlushThreadCount(),
+            rmtAttr.writeBehindFlushThreadCount(), false);
 
-            if (locAttr.cacheMode() == PARTITIONED) {
-                CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "nearEvictionPolicy",
-                    "Near eviction policy", locAttr.nearEvictionPolicyClassName(),
-                    rmtAttr.nearEvictionPolicyClassName(), false);
+        if (locAttr.cacheMode() == PARTITIONED) {
+            CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "nearEvictionPolicy",
+                "Near eviction policy", locAttr.nearEvictionPolicyClassName(),
+                rmtAttr.nearEvictionPolicyClassName(), false);
 
-                CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "nearEvictionPolicyFactory",
-                    "Near eviction policy factory", locAttr.nearEvictionPolicyFactoryClassName(),
-                    rmtAttr.nearEvictionPolicyFactoryClassName(), false);
+            CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "nearEvictionPolicyFactory",
+                "Near eviction policy factory", locAttr.nearEvictionPolicyFactoryClassName(),
+                rmtAttr.nearEvictionPolicyFactoryClassName(), false);
 
-                CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "affinityIncludeNeighbors",
-                    "Affinity include neighbors", locAttr.affinityIncludeNeighbors(),
-                    rmtAttr.affinityIncludeNeighbors(), true);
+            CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "affinityIncludeNeighbors",
+                "Affinity include neighbors", locAttr.affinityIncludeNeighbors(),
+                rmtAttr.affinityIncludeNeighbors(), true);
 
-                CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "affinityKeyBackups",
-                    "Affinity key backups", locAttr.affinityKeyBackups(),
-                    rmtAttr.affinityKeyBackups(), true);
+            CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "affinityKeyBackups",
+                "Affinity key backups", locAttr.affinityKeyBackups(),
+                rmtAttr.affinityKeyBackups(), true);
 
-                CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "qryParallelism",
-                    "Query parallelism", locAttr.qryParallelism(), rmtAttr.qryParallelism(), true);
-            }
+            CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "qryParallelism",
+                "Query parallelism", locAttr.qryParallelism(), rmtAttr.qryParallelism(), true);
         }
 
         CU.checkAttributeMismatch(log, rmtAttr.cacheName(), rmt, "isEncryptionEnabled",
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GatewayProtectedCacheProxy.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GatewayProtectedCacheProxy.java
index 862e0f1..bf945a1 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GatewayProtectedCacheProxy.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GatewayProtectedCacheProxy.java
@@ -253,9 +253,6 @@
                 throw new UnsupportedOperationException("Read-repair is incompatible with caches that use readThrough.");
             }
 
-            if (context().isLocal())
-                throw new UnsupportedOperationException("Read-repair is incompatible with local caches.");
-
             if (context().config().getBackups() == 0) {
                 throw new UnsupportedOperationException("Read-repair is suitable only in case " +
                     "at least 1 backup configured for cache.");
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAdapter.java
index 30a6394..1598e0e 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAdapter.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAdapter.java
@@ -770,11 +770,6 @@
 
         final boolean keepBinary = ctx.keepBinary();
 
-        if (ctx.isLocal()) {
-            modes.primary = true;
-            modes.backup = true;
-        }
-
         if (modes.offheap) {
             if (modes.heap && modes.near && ctx.isNear())
                 its.add(ctx.near().nearEntries().iterator());
@@ -831,103 +826,86 @@
 
         CacheObject cacheVal = null;
 
-        if (!ctx.isLocal()) {
-            AffinityTopologyVersion topVer = ctx.affinity().affinityTopologyVersion();
+        AffinityTopologyVersion topVer = ctx.affinity().affinityTopologyVersion();
 
-            int part = ctx.affinity().partition(cacheKey);
+        int part = ctx.affinity().partition(cacheKey);
 
-            boolean nearKey;
+        boolean nearKey;
 
-            if (!(modes.near && modes.primary && modes.backup)) {
-                boolean keyPrimary = ctx.affinity().primaryByPartition(ctx.localNode(), part, topVer);
+        if (!(modes.near && modes.primary && modes.backup)) {
+            boolean keyPrimary = ctx.affinity().primaryByPartition(ctx.localNode(), part, topVer);
 
-                if (keyPrimary) {
-                    if (!modes.primary)
+            if (keyPrimary) {
+                if (!modes.primary)
+                    return null;
+
+                nearKey = false;
+            }
+            else {
+                boolean keyBackup = ctx.affinity().partitionBelongs(ctx.localNode(), part, topVer);
+
+                if (keyBackup) {
+                    if (!modes.backup)
                         return null;
 
                     nearKey = false;
                 }
                 else {
-                    boolean keyBackup = ctx.affinity().partitionBelongs(ctx.localNode(), part, topVer);
+                    if (!modes.near)
+                        return null;
 
-                    if (keyBackup) {
-                        if (!modes.backup)
-                            return null;
+                    nearKey = true;
 
-                        nearKey = false;
-                    }
-                    else {
-                        if (!modes.near)
-                            return null;
-
-                        nearKey = true;
-
-                        // Swap and offheap are disabled for near cache.
-                        modes.offheap = false;
-                    }
-                }
-            }
-            else {
-                nearKey = !ctx.affinity().partitionBelongs(ctx.localNode(), part, topVer);
-
-                if (nearKey) {
                     // Swap and offheap are disabled for near cache.
                     modes.offheap = false;
                 }
             }
-
-            if (nearKey && !ctx.isNear())
-                return null;
-
-            GridCacheEntryEx e;
-            GridCacheContext ctx0;
-
-            while (true) {
-                if (nearKey)
-                    e = peekEx(key);
-                else {
-                    ctx0 = ctx.isNear() ? ctx.near().dht().context() : ctx;
-                    e = modes.offheap ? ctx0.cache().entryEx(key) : ctx0.cache().peekEx(key);
-                }
-
-                if (e != null) {
-                    ctx.shared().database().checkpointReadLock();
-
-                    try {
-                        cacheVal = ctx.mvccEnabled()
-                            ? e.mvccPeek(modes.heap && !modes.offheap)
-                            : e.peek(modes.heap, modes.offheap, topVer, null);
-                    }
-                    catch (GridCacheEntryRemovedException ignore) {
-                        if (log.isDebugEnabled())
-                            log.debug("Got removed entry during 'peek': " + key);
-
-                        continue;
-                    }
-                    finally {
-                        e.touch();
-
-                        ctx.shared().database().checkpointReadUnlock();
-                    }
-                }
-
-                break;
-            }
         }
         else {
-            while (true) {
-                try {
-                    cacheVal = localCachePeek0(cacheKey, modes.heap, modes.offheap);
+            nearKey = !ctx.affinity().partitionBelongs(ctx.localNode(), part, topVer);
 
-                    break;
+            if (nearKey) {
+                // Swap and offheap are disabled for near cache.
+                modes.offheap = false;
+            }
+        }
+
+        if (nearKey && !ctx.isNear())
+            return null;
+
+        GridCacheEntryEx e;
+        GridCacheContext ctx0;
+
+        while (true) {
+            if (nearKey)
+                e = peekEx(key);
+            else {
+                ctx0 = ctx.isNear() ? ctx.near().dht().context() : ctx;
+                e = modes.offheap ? ctx0.cache().entryEx(key) : ctx0.cache().peekEx(key);
+            }
+
+            if (e != null) {
+                ctx.shared().database().checkpointReadLock();
+
+                try {
+                    cacheVal = ctx.mvccEnabled()
+                        ? e.mvccPeek(modes.heap && !modes.offheap)
+                        : e.peek(modes.heap, modes.offheap, topVer, null);
                 }
                 catch (GridCacheEntryRemovedException ignore) {
                     if (log.isDebugEnabled())
                         log.debug("Got removed entry during 'peek': " + key);
 
-                    // continue
+                    continue;
+                }
+                finally {
+                    e.touch();
+
+                    ctx.shared().database().checkpointReadUnlock();
                 }
             }
+
+            break;
         }
 
         Object val = ctx.unwrapBinaryIfNeeded(cacheVal, ctx.keepBinary(), false, null);
@@ -936,35 +914,6 @@
     }
 
     /**
-     * @param key Key.
-     * @param heap Read heap flag.
-     * @param offheap Read offheap flag.
-     * @return Value.
-     * @throws GridCacheEntryRemovedException If entry removed.
-     * @throws IgniteCheckedException If failed.
-     */
-    @Nullable private CacheObject localCachePeek0(KeyCacheObject key,
-        boolean heap,
-        boolean offheap)
-        throws GridCacheEntryRemovedException, IgniteCheckedException {
-        assert ctx.isLocal();
-        assert heap || offheap;
-
-        GridCacheEntryEx e = offheap ? entryEx(key) : peekEx(key);
-
-        if (e != null) {
-            try {
-                return e.peek(heap, offheap, AffinityTopologyVersion.NONE, null);
-            }
-            finally {
-                e.touch();
-            }
-        }
-
-        return null;
-    }
-
-    /**
      * Undeploys and removes all entries for class loader.
      *
      * @param ldr Class loader to undeploy.
@@ -1206,16 +1155,8 @@
 
         ctx.shared().cache().checkReadOnlyState("clear", ctx.config());
 
-        if (isLocal()) {
-            if (keys == null)
-                clearLocally(true, false, false);
-            else
-                clearLocallyAll(keys, true, false, false);
-        }
-        else {
-            executeClearTask(keys, false).get();
-            executeClearTask(keys, true).get();
-        }
+        executeClearTask(keys, false).get();
+        executeClearTask(keys, true).get();
     }
 
     /**
@@ -1228,27 +1169,7 @@
 
         ctx.shared().cache().checkReadOnlyState("clear", ctx.config());
 
-        if (isLocal())
-            return clearLocallyAsync(keys);
-        else
-            return executeClearTask(keys, false).chainCompose(fut -> executeClearTask(keys, true));
-    }
-
-    /**
-     * @param keys Keys to clear.
-     * @return Clear future.
-     */
-    private IgniteInternalFuture<?> clearLocallyAsync(@Nullable final Set<? extends K> keys) {
-        return ctx.closures().callLocalSafe(new GridPlainCallable<Object>() {
-            @Override public Object call() {
-                if (keys == null)
-                    clearLocally(true, false, false);
-                else
-                    clearLocallyAll(keys, true, false, false);
-
-                return null;
-            }
-        }, false);
+        return executeClearTask(keys, false).chainCompose(fut -> executeClearTask(keys, true));
     }
 
     /**
@@ -1364,9 +1285,6 @@
 
     /** {@inheritDoc} */
     @Override public Collection<Integer> lostPartitions() {
-        if (isLocal())
-            return Collections.emptyList();
-
         return ctx.topology().lostPartitions();
     }
 
@@ -3240,8 +3158,6 @@
 
     /** {@inheritDoc} */
     @Override public void removeAll() throws IgniteCheckedException {
-        assert ctx.isLocal();
-
         // We do batch and recreate cursor because removing using a single cursor
         // will cause it to reinitialize on each merged page.
         List<K> keys = new ArrayList<>(Math.min(REMOVE_ALL_KEYS_BATCH, size()));
@@ -4038,25 +3954,16 @@
 
     /** {@inheritDoc} */
     @Override public int size(CachePeekMode[] peekModes) throws IgniteCheckedException {
-        if (isLocal())
-            return localSize(peekModes);
-
         return sizeAsync(peekModes).get();
     }
 
     /** {@inheritDoc} */
     @Override public long sizeLong(CachePeekMode[] peekModes) throws IgniteCheckedException {
-        if (isLocal())
-            return localSizeLong(peekModes);
-
         return sizeLongAsync(peekModes).get();
     }
 
     /** {@inheritDoc} */
     @Override public long sizeLong(int partition, CachePeekMode[] peekModes) throws IgniteCheckedException {
-        if (isLocal())
-            return localSizeLong(partition, peekModes);
-
         return sizeLongAsync(partition, peekModes).get();
     }
 
@@ -5434,28 +5341,12 @@
 
     /** {@inheritDoc} */
     @Override public void preloadPartition(int part) throws IgniteCheckedException {
-        if (isLocal())
-            ctx.offheap().preloadPartition(part);
-        else
-            executePreloadTask(part).get();
+        executePreloadTask(part).get();
     }
 
     /** {@inheritDoc} */
     @Override public IgniteInternalFuture<?> preloadPartitionAsync(int part) throws IgniteCheckedException {
-        if (isLocal()) {
-            return ctx.kernalContext().closure().runLocalSafe(new GridPlainRunnable() {
-                @Override public void run() {
-                    try {
-                        ctx.offheap().preloadPartition(part);
-                    }
-                    catch (IgniteCheckedException e) {
-                        throw new IgniteException(e);
-                    }
-                }
-            });
-        }
-        else
-            return executePreloadTask(part);
+        return executePreloadTask(part);
     }
 
     /** {@inheritDoc} */
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAffinityManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAffinityManager.java
index 855923f..8b55104 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAffinityManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAffinityManager.java
@@ -65,13 +65,6 @@
     }
 
     /** {@inheritDoc} */
-    @Override protected void onKernalStart0() throws IgniteCheckedException {
-        if (cctx.isLocal())
-            // No discovery event needed for local affinity.
-            aff.calculate(LOC_CACHE_TOP_VER, null, null);
-    }
-
-    /** {@inheritDoc} */
     @Override protected void stop0(boolean cancel, boolean destroy) {
         aff = null;
     }
@@ -95,8 +88,6 @@
      * @return Affinity ready future.
      */
     public IgniteInternalFuture<AffinityTopologyVersion> affinityReadyFuture(AffinityTopologyVersion topVer) {
-        assert !cctx.isLocal();
-
         IgniteInternalFuture<AffinityTopologyVersion> fut = aff.readyFuture(topVer);
 
         return fut != null ? fut : new GridFinishedFuture<>(aff.lastVersion());
@@ -110,8 +101,6 @@
      * @return Affinity ready future or {@code null}.
      */
     @Nullable public IgniteInternalFuture<AffinityTopologyVersion> affinityReadyFuturex(AffinityTopologyVersion topVer) {
-        assert !cctx.isLocal();
-
         return aff.readyFuture(topVer);
     }
 
@@ -120,9 +109,6 @@
      * @return Affinity assignments.
      */
     public List<List<ClusterNode>> assignments(AffinityTopologyVersion topVer) {
-        if (cctx.isLocal())
-            topVer = LOC_CACHE_TOP_VER;
-
         GridAffinityAssignmentCache aff0 = aff;
 
         if (aff0 == null)
@@ -135,8 +121,6 @@
      * @return Assignment.
      */
     public List<List<ClusterNode>> idealAssignment() {
-        assert !cctx.isLocal();
-
         return aff.idealAssignmentRaw();
     }
 
@@ -216,9 +200,6 @@
      * @return Affinity nodes.
      */
     public List<ClusterNode> nodesByPartition(int part, AffinityTopologyVersion topVer) {
-        if (cctx.isLocal())
-            topVer = LOC_CACHE_TOP_VER;
-
         GridAffinityAssignmentCache aff0 = aff;
 
         if (aff0 == null)
@@ -244,9 +225,6 @@
      * @return Affinity assignment.
      */
     public AffinityAssignment assignment(AffinityTopologyVersion topVer, AffinityTopologyVersion lastAffChangedTopVer) {
-        if (cctx.isLocal())
-            topVer = lastAffChangedTopVer = LOC_CACHE_TOP_VER;
-
         GridAffinityAssignmentCache aff0 = aff;
 
         if (aff0 == null)
@@ -376,9 +354,6 @@
      * @return Partitions for which given node is primary.
      */
     public Set<Integer> primaryPartitions(UUID nodeId, AffinityTopologyVersion topVer) {
-        if (cctx.isLocal())
-            topVer = LOC_CACHE_TOP_VER;
-
         GridAffinityAssignmentCache aff0 = aff;
 
         if (aff0 == null)
@@ -393,9 +368,6 @@
      * @return Partitions for which given node is backup.
      */
     public Set<Integer> backupPartitions(UUID nodeId, AffinityTopologyVersion topVer) {
-        if (cctx.isLocal())
-            topVer = LOC_CACHE_TOP_VER;
-
         GridAffinityAssignmentCache aff0 = aff;
 
         if (aff0 == null)
@@ -423,8 +395,6 @@
      * @return {@code True} if primary changed or required affinity version not found in history.
      */
     public boolean primaryChanged(int part, AffinityTopologyVersion startVer, AffinityTopologyVersion endVer) {
-        assert !cctx.isLocal() : cctx.name();
-
         GridAffinityAssignmentCache aff0 = aff;
 
         if (aff0 == null)
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAttributes.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAttributes.java
index abb299f..466f6cb 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAttributes.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAttributes.java
@@ -30,8 +30,6 @@
 import org.apache.ignite.configuration.TransactionConfiguration;
 import org.apache.ignite.internal.util.typedef.internal.S;
 import org.jetbrains.annotations.Nullable;
-
-import static org.apache.ignite.cache.CacheMode.LOCAL;
 import static org.apache.ignite.configuration.CacheConfiguration.DFLT_CACHE_ATOMICITY_MODE;
 import static org.apache.ignite.configuration.CacheConfiguration.DFLT_CACHE_MODE;
 
@@ -120,7 +118,7 @@
      * @return {@code True} if near cache is enabled.
      */
     public boolean nearCacheEnabled() {
-        return cacheMode() != LOCAL && ccfg.getNearConfiguration() != null;
+        return ccfg.getNearConfiguration() != null;
     }
 
     /**
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheContext.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheContext.java
index 670b5a6..89f15fe 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheContext.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheContext.java
@@ -78,7 +78,6 @@
 import org.apache.ignite.internal.processors.cache.distributed.near.GridNearTransactionalCache;
 import org.apache.ignite.internal.processors.cache.dr.GridCacheDrManager;
 import org.apache.ignite.internal.processors.cache.jta.CacheJtaManagerAdapter;
-import org.apache.ignite.internal.processors.cache.local.GridLocalCache;
 import org.apache.ignite.internal.processors.cache.persistence.DataRegion;
 import org.apache.ignite.internal.processors.cache.query.GridCacheQueryManager;
 import org.apache.ignite.internal.processors.cache.query.continuous.CacheContinuousQueryManager;
@@ -115,7 +114,6 @@
 import org.apache.ignite.plugin.security.SecurityException;
 import org.apache.ignite.plugin.security.SecurityPermission;
 import org.jetbrains.annotations.Nullable;
-
 import static org.apache.ignite.IgniteSystemProperties.IGNITE_DISABLE_TRIGGERING_CACHE_INTERCEPTOR_ON_CONFLICT;
 import static org.apache.ignite.IgniteSystemProperties.IGNITE_READ_LOAD_BALANCING;
 import static org.apache.ignite.cache.CacheAtomicityMode.ATOMIC;
@@ -645,13 +643,6 @@
     }
 
     /**
-     * @return Local cache.
-     */
-    public GridLocalCache<K, V> local() {
-        return (GridLocalCache<K, V>)cache;
-    }
-
-    /**
      * @return {@code True} if cache is DHT.
      */
     public boolean isDht() {
@@ -680,13 +671,6 @@
     }
 
     /**
-     * @return {@code True} if cache is local.
-     */
-    public boolean isLocal() {
-        return cache != null && cache.isLocal();
-    }
-
-    /**
      * @return {@code True} if cache is replicated cache.
      */
     public boolean isReplicated() {
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheDeploymentManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheDeploymentManager.java
index 083e7df..1d6dab1 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheDeploymentManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheDeploymentManager.java
@@ -223,19 +223,6 @@
                 }
             });
         }
-
-        // Unwind immediately for local and replicate caches.
-        // We go through preloader for proper synchronization.
-        if (ctx.isLocal()) {
-            ctx.preloader().pause();
-
-            try {
-                ctx.group().unwindUndeploys();
-            }
-            finally {
-                ctx.preloader().resume();
-            }
-        }
     }
 
     /**
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheEntryEx.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheEntryEx.java
index 3b380d5..431ba34 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheEntryEx.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheEntryEx.java
@@ -21,9 +21,7 @@
 import java.util.List;
 import java.util.UUID;
 import javax.cache.Cache;
-import javax.cache.expiry.ExpiryPolicy;
 import javax.cache.processor.EntryProcessor;
-import javax.cache.processor.EntryProcessorResult;
 import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.cache.eviction.EvictableEntry;
 import org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion;
@@ -41,7 +39,6 @@
 import org.apache.ignite.internal.processors.cache.version.GridCacheVersionedEntryEx;
 import org.apache.ignite.internal.processors.dr.GridDrType;
 import org.apache.ignite.internal.processors.query.schema.SchemaIndexCacheVisitorClosure;
-import org.apache.ignite.internal.util.lang.GridTuple3;
 import org.apache.ignite.lang.IgniteUuid;
 import org.jetbrains.annotations.Nullable;
 
@@ -570,45 +567,6 @@
     ) throws IgniteCheckedException, GridCacheEntryRemovedException;
 
     /**
-     * Update method for local cache in atomic mode.
-     *
-     * @param ver Cache version.
-     * @param op Operation.
-     * @param writeObj Value. Type depends on operation.
-     * @param invokeArgs Optional arguments for EntryProcessor.
-     * @param writeThrough Write through flag.
-     * @param readThrough Read through flag.
-     * @param retval Return value flag.
-     * @param expiryPlc Expiry policy..
-     * @param evt Event flag.
-     * @param metrics Metrics update flag.
-     * @param filter Optional filter to check.
-     * @param intercept If {@code true} then calls cache interceptor.
-     * @param taskName Task name.
-     * @param transformOp {@code True} if transform operation caused update.
-     * @return Tuple containing success flag, old value and result for invoke operation.
-     * @throws IgniteCheckedException If update failed.
-     * @throws GridCacheEntryRemovedException If entry is obsolete.
-     */
-    public GridTuple3<Boolean, Object, EntryProcessorResult<Object>> innerUpdateLocal(
-        GridCacheVersion ver,
-        GridCacheOperation op,
-        @Nullable Object writeObj,
-        @Nullable Object[] invokeArgs,
-        boolean writeThrough,
-        boolean readThrough,
-        boolean retval,
-        boolean keepBinary,
-        @Nullable ExpiryPolicy expiryPlc,
-        boolean evt,
-        boolean metrics,
-        @Nullable CacheEntryPredicate[] filter,
-        boolean intercept,
-        String taskName,
-        boolean transformOp
-    ) throws IgniteCheckedException, GridCacheEntryRemovedException;
-
-    /**
      * Marks entry as obsolete and, if possible or required, removes it
      * from swap storage.
      *
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMapEntry.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMapEntry.java
index c10fd47..d939635 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMapEntry.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMapEntry.java
@@ -32,7 +32,6 @@
 import javax.cache.Cache;
 import javax.cache.expiry.ExpiryPolicy;
 import javax.cache.processor.EntryProcessor;
-import javax.cache.processor.EntryProcessorResult;
 import org.apache.ignite.IgniteCache;
 import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.IgniteException;
@@ -98,7 +97,6 @@
 import org.apache.ignite.internal.util.tostring.GridToStringInclude;
 import org.apache.ignite.internal.util.typedef.F;
 import org.apache.ignite.internal.util.typedef.T2;
-import org.apache.ignite.internal.util.typedef.T3;
 import org.apache.ignite.internal.util.typedef.internal.CU;
 import org.apache.ignite.internal.util.typedef.internal.S;
 import org.apache.ignite.internal.util.typedef.internal.U;
@@ -109,7 +107,6 @@
 import org.apache.ignite.thread.IgniteThread;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
-
 import static org.apache.ignite.IgniteSystemProperties.getLong;
 import static org.apache.ignite.events.EventType.EVT_CACHE_OBJECT_EXPIRED;
 import static org.apache.ignite.events.EventType.EVT_CACHE_OBJECT_LOCKED;
@@ -1889,361 +1886,6 @@
 
     /** {@inheritDoc} */
     @SuppressWarnings("unchecked")
-    @Override public GridTuple3<Boolean, Object, EntryProcessorResult<Object>> innerUpdateLocal(
-        GridCacheVersion ver,
-        GridCacheOperation op,
-        @Nullable Object writeObj,
-        @Nullable Object[] invokeArgs,
-        boolean writeThrough,
-        boolean readThrough,
-        boolean retval,
-        boolean keepBinary,
-        @Nullable ExpiryPolicy expiryPlc,
-        boolean evt,
-        boolean metrics,
-        @Nullable CacheEntryPredicate[] filter,
-        boolean intercept,
-        String taskName,
-        boolean transformOp
-    ) throws IgniteCheckedException, GridCacheEntryRemovedException {
-        assert cctx.isLocal() && cctx.atomic();
-
-        CacheObject old;
-
-        boolean res = true;
-
-        IgniteBiTuple<Boolean, ?> interceptorRes = null;
-
-        EntryProcessorResult<Object> invokeRes = null;
-
-        lockListenerReadLock();
-        lockEntry();
-
-        try {
-            checkObsolete();
-
-            boolean internal = isInternal() || !context().userCache();
-
-            Map<UUID, CacheContinuousQueryListener> lsnrCol =
-                cctx.continuousQueries().updateListeners(internal, false);
-
-            boolean needVal = retval ||
-                intercept ||
-                op == GridCacheOperation.TRANSFORM ||
-                !F.isEmpty(filter) ||
-                lsnrCol != null;
-
-            // Load and remove from swap if it is new.
-            if (isNew())
-                unswap(null, false);
-
-            old = val;
-
-            if (expireTimeExtras() > 0 && expireTimeExtras() < U.currentTimeMillis()) {
-                if (onExpired(val, null)) {
-                    assert !deletedUnlocked();
-
-                    update(null, CU.TTL_ETERNAL, CU.EXPIRE_TIME_ETERNAL, ver, true);
-
-                    old = null;
-                }
-            }
-
-            boolean readFromStore = false;
-
-            Object old0 = null;
-
-            if (readThrough && needVal && old == null &&
-                (cctx.readThrough() && (op == GridCacheOperation.TRANSFORM || cctx.loadPreviousValue()))) {
-                old0 = readThrough(null, key, false, taskName);
-
-                old = cctx.toCacheObject(old0);
-
-                long ttl = CU.TTL_ETERNAL;
-                long expireTime = CU.EXPIRE_TIME_ETERNAL;
-
-                if (expiryPlc != null && old != null) {
-                    ttl = CU.toTtl(expiryPlc.getExpiryForCreation());
-
-                    if (ttl == CU.TTL_ZERO) {
-                        ttl = CU.TTL_MINIMUM;
-                        expireTime = CU.expireTimeInPast();
-                    }
-                    else if (ttl == CU.TTL_NOT_CHANGED)
-                        ttl = CU.TTL_ETERNAL;
-                    else
-                        expireTime = CU.toExpireTime(ttl);
-                }
-
-                // Detach value before index update.
-                old = cctx.kernalContext().cacheObjects().prepareForCache(old, cctx);
-
-                if (old != null)
-                    storeValue(old, expireTime, ver);
-                else
-                    removeValue();
-
-                update(old, expireTime, ttl, ver, true);
-            }
-
-            // Apply metrics.
-            if (metrics && cctx.statisticsEnabled() && needVal)
-                cctx.cache().metrics0().onRead(old != null);
-
-            // Check filter inside of synchronization.
-            if (!F.isEmpty(filter)) {
-                boolean pass = cctx.isAllLocked(this, filter);
-
-                if (!pass) {
-                    if (expiryPlc != null && !readFromStore && !cctx.putIfAbsentFilter(filter) && hasValueUnlocked())
-                        updateTtlUnlocked(expiryPlc);
-
-                    Object val = retval ?
-                        cctx.cacheObjectContext().unwrapBinaryIfNeeded(CU.value(old, cctx, false), keepBinary, false, null)
-                        : null;
-
-                    return new T3<>(false, val, null);
-                }
-            }
-
-            String transformCloClsName = null;
-
-            CacheObject updated;
-
-            Object key0 = null;
-            Object updated0 = null;
-
-            // Calculate new value.
-            if (op == GridCacheOperation.TRANSFORM) {
-                transformCloClsName = EntryProcessorResourceInjectorProxy.unwrap(writeObj).getClass().getName();
-
-                EntryProcessor<Object, Object, ?> entryProcessor = (EntryProcessor<Object, Object, ?>)writeObj;
-
-                assert entryProcessor != null;
-
-                CacheInvokeEntry<Object, Object> entry = new CacheInvokeEntry<>(key, old, version(), keepBinary, this);
-
-                IgniteThread.onEntryProcessorEntered(false);
-
-                try {
-                    Object computed = entryProcessor.process(entry, invokeArgs);
-
-                    transformOp = true;
-
-                    if (entry.modified()) {
-                        updated0 = cctx.unwrapTemporary(entry.getValue());
-
-                        updated = cctx.toCacheObject(updated0);
-
-                        cctx.validateKeyAndValue(key, updated);
-                    }
-                    else
-                        updated = old;
-
-                    key0 = entry.key();
-
-                    invokeRes = computed != null ? CacheInvokeResult.fromResult(cctx.unwrapTemporary(computed)) : null;
-                }
-                catch (Exception e) {
-                    updated = old;
-
-                    invokeRes = CacheInvokeResult.fromError(e);
-                }
-                finally {
-                    IgniteThread.onEntryProcessorLeft();
-                }
-
-                if (!entry.modified()) {
-                    if (expiryPlc != null && !readFromStore && hasValueUnlocked())
-                        updateTtlUnlocked(expiryPlc);
-
-                    updateMetrics(READ, metrics, transformOp, old != null);
-
-                    return new GridTuple3<>(false, null, invokeRes);
-                }
-            }
-            else
-                updated = (CacheObject)writeObj;
-
-            op = updated == null ? DELETE : UPDATE;
-
-            if (intercept) {
-                CacheLazyEntry e;
-
-                if (op == UPDATE) {
-                    updated0 = value(updated0, updated, keepBinary, false);
-
-                    e = new CacheLazyEntry(cctx, key, key0, old, old0, keepBinary);
-
-                    Object interceptorVal = cctx.config().getInterceptor().onBeforePut(e, updated0);
-
-                    if (interceptorVal == null)
-                        return new GridTuple3<>(false, cctx.unwrapTemporary(value(old0, old, keepBinary, false)), invokeRes);
-                    else {
-                        updated0 = cctx.unwrapTemporary(interceptorVal);
-
-                        updated = cctx.toCacheObject(updated0);
-                    }
-                }
-                else {
-                    e = new CacheLazyEntry(cctx, key, key0, old, old0, keepBinary);
-
-                    interceptorRes = cctx.config().getInterceptor().onBeforeRemove(e);
-
-                    if (cctx.cancelRemove(interceptorRes))
-                        return new GridTuple3<>(false, cctx.unwrapTemporary(interceptorRes.get2()), invokeRes);
-                }
-
-                key0 = e.key();
-                old0 = e.value();
-            }
-
-            boolean hadVal = hasValueUnlocked();
-
-            long ttl = CU.TTL_ETERNAL;
-            long expireTime = CU.EXPIRE_TIME_ETERNAL;
-
-            if (op == UPDATE) {
-                if (expiryPlc != null) {
-                    ttl = CU.toTtl(hadVal ? expiryPlc.getExpiryForUpdate() : expiryPlc.getExpiryForCreation());
-
-                    if (ttl == CU.TTL_NOT_CHANGED) {
-                        ttl = ttlExtras();
-                        expireTime = expireTimeExtras();
-                    }
-                    else if (ttl != CU.TTL_ZERO)
-                        expireTime = CU.toExpireTime(ttl);
-                }
-                else {
-                    ttl = ttlExtras();
-                    expireTime = expireTimeExtras();
-                }
-            }
-
-            if (ttl == CU.TTL_ZERO) {
-                op = DELETE;
-
-                //If time expired no transformation needed.
-                transformOp = false;
-            }
-
-            // Try write-through.
-            if (op == UPDATE) {
-                // Detach value before index update.
-                updated = cctx.kernalContext().cacheObjects().prepareForCache(updated, cctx);
-
-                if (writeThrough)
-                    // Must persist inside synchronization in non-tx mode.
-                    cctx.store().put(null, key, updated, ver);
-
-                storeValue(updated, expireTime, ver);
-
-                assert ttl != CU.TTL_ZERO;
-
-                update(updated, expireTime, ttl, ver, true);
-
-                logUpdate(op, updated, ver, expireTime, 0, true);
-
-                if (evt) {
-                    CacheObject evtOld = null;
-
-                    if (transformCloClsName != null && cctx.events().isRecordable(EVT_CACHE_OBJECT_READ)) {
-                        evtOld = cctx.unwrapTemporary(old);
-
-                        cctx.events().addEvent(partition(), key, cctx.localNodeId(), null, null,
-                            (GridCacheVersion)null, EVT_CACHE_OBJECT_READ, evtOld, evtOld != null || hadVal, evtOld,
-                            evtOld != null || hadVal, transformCloClsName, taskName, keepBinary);
-                    }
-
-                    if (cctx.events().isRecordable(EVT_CACHE_OBJECT_PUT)) {
-                        if (evtOld == null)
-                            evtOld = cctx.unwrapTemporary(old);
-
-                        cctx.events().addEvent(partition(), key, cctx.localNodeId(), null, null,
-                            (GridCacheVersion)null, EVT_CACHE_OBJECT_PUT, updated, updated != null, evtOld,
-                            evtOld != null || hadVal, null, taskName, keepBinary);
-                    }
-                }
-            }
-            else {
-                if (writeThrough)
-                    // Must persist inside synchronization in non-tx mode.
-                    cctx.store().remove(null, key);
-
-                removeValue();
-
-                update(null, CU.TTL_ETERNAL, CU.EXPIRE_TIME_ETERNAL, ver, true);
-
-                logUpdate(op, null, ver, CU.EXPIRE_TIME_ETERNAL, 0, true);
-
-                if (evt) {
-                    CacheObject evtOld = null;
-
-                    if (transformCloClsName != null && cctx.events().isRecordable(EVT_CACHE_OBJECT_READ))
-                        cctx.events().addEvent(partition(), key, cctx.localNodeId(), null, null,
-                            (GridCacheVersion)null, EVT_CACHE_OBJECT_READ, evtOld, evtOld != null || hadVal, evtOld,
-                            evtOld != null || hadVal, transformCloClsName, taskName, keepBinary);
-
-                    if (cctx.events().isRecordable(EVT_CACHE_OBJECT_REMOVED)) {
-                        if (evtOld == null)
-                            evtOld = cctx.unwrapTemporary(old);
-
-                        cctx.events().addEvent(partition(), key, cctx.localNodeId(), null, null, (GridCacheVersion)null,
-                            EVT_CACHE_OBJECT_REMOVED, null, false, evtOld, evtOld != null || hadVal, null,
-                            taskName, keepBinary);
-                    }
-                }
-
-                res = hadVal;
-            }
-
-            if (res)
-                updateMetrics(op, metrics, transformOp, old != null);
-            else if (op == DELETE && transformOp)
-                cctx.cache().metrics0().onInvokeRemove(old != null);
-
-            if (lsnrCol != null) {
-                long updateCntr = nextPartitionCounter(AffinityTopologyVersion.NONE, true, false, null);
-
-                cctx.continuousQueries().onEntryUpdated(
-                    lsnrCol,
-                    key,
-                    val,
-                    old,
-                    internal,
-                    partition(),
-                    true,
-                    false,
-                    updateCntr,
-                    null,
-                    AffinityTopologyVersion.NONE);
-
-                onUpdateFinished(updateCntr);
-            }
-
-            if (intercept) {
-                if (op == UPDATE)
-                    cctx.config().getInterceptor().onAfterPut(new CacheLazyEntry(cctx, key, key0, updated, updated0, keepBinary, 0L));
-                else
-                    cctx.config().getInterceptor().onAfterRemove(new CacheLazyEntry(cctx, key, key0, old, old0, keepBinary, 0L));
-            }
-
-            updatePlatformCache(op == UPDATE ? updated : null, cctx.affinity().affinityTopologyVersion());
-        }
-        finally {
-            unlockEntry();
-            unlockListenerReadLock();
-        }
-
-        return new GridTuple3<>(res,
-            cctx.unwrapTemporary(interceptorRes != null ?
-                interceptorRes.get2() :
-                cctx.cacheObjectContext().unwrapBinaryIfNeeded(old, keepBinary, false, null)),
-            invokeRes);
-    }
-
-    /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public GridCacheUpdateAtomicResult innerUpdate(
         final GridCacheVersion newVer,
         final UUID evtNodeId,
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 da1ccc2..6a35091 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
@@ -781,7 +781,7 @@
      * @return {@code True} if lock had been removed.
      */
     public boolean isRemoved(GridCacheContext cacheCtx, GridCacheVersion ver) {
-        return !cacheCtx.isNear() && !cacheCtx.isLocal() && ver != null && rmvLocks.contains(ver);
+        return !cacheCtx.isNear() && ver != null && rmvLocks.contains(ver);
     }
 
     /**
@@ -790,7 +790,7 @@
      * @return {@code True} if added.
      */
     public boolean addRemoved(GridCacheContext cacheCtx, GridCacheVersion ver) {
-        if (cacheCtx.isNear() || cacheCtx.isLocal())
+        if (cacheCtx.isNear())
             return true;
 
         boolean ret = rmvLocks.add(ver);
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCachePartitionExchangeManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCachePartitionExchangeManager.java
index f453866..63d5e52 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCachePartitionExchangeManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCachePartitionExchangeManager.java
@@ -1378,12 +1378,10 @@
         if (oldest.id().equals(cctx.localNodeId())) {
             // Check rebalance state & send CacheAffinityChangeMessage if need.
             for (CacheGroupContext grp : cctx.cache().cacheGroups()) {
-                if (!grp.isLocal()) {
-                    GridDhtPartitionTopology top = grp.topology();
+                GridDhtPartitionTopology top = grp.topology();
 
-                    if (top != null)
-                        cctx.affinity().checkRebalanceState(top, grp.groupId());
-                }
+                if (top != null)
+                    cctx.affinity().checkRebalanceState(top, grp.groupId());
             }
 
             GridDhtPartitionsExchangeFuture lastFut = lastInitializedFut;
@@ -1541,39 +1539,37 @@
         Map<Integer, Map<Integer, Long>> partsSizes = new HashMap<>();
 
         for (CacheGroupContext grp : grps) {
-            if (!grp.isLocal()) {
-                if (exchId != null) {
-                    AffinityTopologyVersion startTopVer = grp.localStartVersion();
+            if (exchId != null) {
+                AffinityTopologyVersion startTopVer = grp.localStartVersion();
 
-                    if (startTopVer.compareTo(exchId.topologyVersion()) > 0)
-                        continue;
+                if (startTopVer.compareTo(exchId.topologyVersion()) > 0)
+                    continue;
+            }
+
+            GridAffinityAssignmentCache affCache = grp.affinity();
+
+            GridDhtPartitionFullMap locMap = grp.topology().partitionMap(true);
+
+            if (locMap != null)
+                addFullPartitionsMap(m, dupData, compress, grp.groupId(), locMap, affCache.similarAffinityKey());
+
+            Map<Integer, Long> partSizesMap = grp.topology().globalPartSizes();
+
+            if (!partSizesMap.isEmpty())
+                partsSizes.put(grp.groupId(), partSizesMap);
+
+            if (exchId != null) {
+                CachePartitionFullCountersMap cntrsMap = grp.topology().fullUpdateCounters();
+
+                if (newCntrMap)
+                    m.addPartitionUpdateCounters(grp.groupId(), cntrsMap);
+                else {
+                    m.addPartitionUpdateCounters(grp.groupId(),
+                        CachePartitionFullCountersMap.toCountersMap(cntrsMap));
                 }
 
-                GridAffinityAssignmentCache affCache = grp.affinity();
-
-                GridDhtPartitionFullMap locMap = grp.topology().partitionMap(true);
-
-                if (locMap != null)
-                    addFullPartitionsMap(m, dupData, compress, grp.groupId(), locMap, affCache.similarAffinityKey());
-
-                Map<Integer, Long> partSizesMap = grp.topology().globalPartSizes();
-
-                if (!partSizesMap.isEmpty())
-                    partsSizes.put(grp.groupId(), partSizesMap);
-
-                if (exchId != null) {
-                    CachePartitionFullCountersMap cntrsMap = grp.topology().fullUpdateCounters();
-
-                    if (newCntrMap)
-                        m.addPartitionUpdateCounters(grp.groupId(), cntrsMap);
-                    else {
-                        m.addPartitionUpdateCounters(grp.groupId(),
-                            CachePartitionFullCountersMap.toCountersMap(cntrsMap));
-                    }
-
-                    // Lost partitions can be skipped on node left or activation.
-                    m.addLostPartitions(grp.groupId(), grp.topology().lostPartitions());
-                }
+                // Lost partitions can be skipped on node left or activation.
+                m.addLostPartitions(grp.groupId(), grp.topology().lostPartitions());
             }
         }
 
@@ -1728,7 +1724,7 @@
         Map<Object, T2<Integer, GridPartitionStateMap>> dupData = new HashMap<>();
 
         for (CacheGroupContext grp : grps) {
-            if (!grp.isLocal() && (exchActions == null || !exchActions.cacheGroupStopping(grp.groupId()))) {
+            if (exchActions == null || !exchActions.cacheGroupStopping(grp.groupId())) {
                 GridDhtPartitionMap locMap = grp.topology().localPartitionMap();
 
                 addPartitionMap(m,
@@ -1957,12 +1953,7 @@
 
                     CacheGroupContext grp = cctx.cache().cacheGroup(grpId);
 
-                    GridDhtPartitionTopology top = null;
-
-                    if (grp == null)
-                        top = clientTops.get(grpId);
-                    else if (!grp.isLocal())
-                        top = grp.topology();
+                    GridDhtPartitionTopology top = grp == null ? clientTops.get(grpId) : grp.topology();
 
                     if (top != null) {
                         updated |= top.update(null,
@@ -1986,7 +1977,7 @@
                 boolean hasMovingParts = false;
 
                 for (CacheGroupContext grp : cctx.cache().cacheGroups()) {
-                    if (!grp.isLocal() && grp.topology().hasMovingPartitions()) {
+                    if (grp.topology().hasMovingPartitions()) {
                         hasMovingParts = true;
 
                         break;
@@ -2028,12 +2019,7 @@
                     if (grp != null && !grp.topology().initialized())
                         continue;
 
-                    GridDhtPartitionTopology top = null;
-
-                    if (grp == null)
-                        top = clientTops.get(grpId);
-                    else if (!grp.isLocal())
-                        top = grp.topology();
+                    GridDhtPartitionTopology top = grp == null ? clientTops.get(grpId) : grp.topology();
 
                     if (top != null) {
                         updated |= top.update(null, entry.getValue(), false);
@@ -2203,12 +2189,10 @@
      */
     public void checkRebalanceState() {
         for (CacheGroupContext grp : cctx.cache().cacheGroups()) {
-            if (!grp.isLocal()) {
-                GridDhtPartitionTopology top = grp.topology();
+            GridDhtPartitionTopology top = grp.topology();
 
-                if (top != null)
-                    cctx.affinity().checkRebalanceState(top, grp.groupId());
-            }
+            if (top != null)
+                cctx.affinity().checkRebalanceState(top, grp.groupId());
         }
     }
 
@@ -2601,9 +2585,6 @@
         int affDumpCnt = 0;
 
         for (CacheGroupContext grp : cctx.cache().cacheGroups()) {
-            if (grp.isLocal())
-                continue;
-
             GridCachePreloader preloader = grp.preloader();
 
             if (preloader != null)
@@ -3240,9 +3221,6 @@
                     boolean preloadFinished = true;
 
                     for (CacheGroupContext grp : cctx.cache().cacheGroups()) {
-                        if (grp.isLocal())
-                            continue;
-
                         preloadFinished &= grp.preloader() != null && grp.preloader().syncFuture().isDone();
 
                         if (!preloadFinished)
@@ -3456,12 +3434,8 @@
                             // same event.
                             boolean changed = false;
 
-                            for (CacheGroupContext grp : cctx.cache().cacheGroups()) {
-                                if (grp.isLocal())
-                                    continue;
-
+                            for (CacheGroupContext grp : cctx.cache().cacheGroups())
                                 changed |= grp.topology().afterExchange(exchFut);
-                            }
 
                             if (!cctx.kernalContext().clientNode() && changed) {
                                 if (log.isDebugEnabled())
@@ -3533,7 +3507,6 @@
                             }
                             else {
                                 resVer = resVer == null ? assignsSet.stream()
-                                    .filter(g -> !g.isLocal())
                                     .map(g -> g.topology().readyTopologyVersion())
                                     .filter(Objects::nonNull)
                                     .findFirst()
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 98c0011..d3354d7 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
@@ -58,8 +58,6 @@
 import org.apache.ignite.cache.CacheExistsException;
 import org.apache.ignite.cache.CacheMode;
 import org.apache.ignite.cache.QueryEntity;
-import org.apache.ignite.cache.affinity.AffinityFunction;
-import org.apache.ignite.cache.affinity.AffinityFunctionContext;
 import org.apache.ignite.cache.store.CacheStore;
 import org.apache.ignite.cache.store.CacheStoreSessionListener;
 import org.apache.ignite.cluster.ClusterNode;
@@ -110,8 +108,6 @@
 import org.apache.ignite.internal.processors.cache.distributed.near.GridNearTransactionalCache;
 import org.apache.ignite.internal.processors.cache.dr.GridCacheDrManager;
 import org.apache.ignite.internal.processors.cache.jta.CacheJtaManagerAdapter;
-import org.apache.ignite.internal.processors.cache.local.GridLocalCache;
-import org.apache.ignite.internal.processors.cache.local.atomic.GridLocalAtomicCache;
 import org.apache.ignite.internal.processors.cache.mvcc.DeadlockDetectionManager;
 import org.apache.ignite.internal.processors.cache.mvcc.MvccCachingManager;
 import org.apache.ignite.internal.processors.cache.persistence.DataRegion;
@@ -134,7 +130,6 @@
 import org.apache.ignite.internal.processors.cache.persistence.tree.reuse.ReuseList;
 import org.apache.ignite.internal.processors.cache.persistence.wal.FileWriteAheadLogManager;
 import org.apache.ignite.internal.processors.cache.query.GridCacheDistributedQueryManager;
-import org.apache.ignite.internal.processors.cache.query.GridCacheLocalQueryManager;
 import org.apache.ignite.internal.processors.cache.query.GridCacheQueryManager;
 import org.apache.ignite.internal.processors.cache.query.continuous.CacheContinuousQueryManager;
 import org.apache.ignite.internal.processors.cache.store.CacheStoreManager;
@@ -200,7 +195,6 @@
 import org.apache.ignite.spi.systemview.view.PartitionStateView;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
-
 import static java.lang.String.format;
 import static java.util.Arrays.asList;
 import static java.util.Objects.isNull;
@@ -214,7 +208,6 @@
 import static org.apache.ignite.IgniteSystemProperties.getBoolean;
 import static org.apache.ignite.cache.CacheAtomicityMode.ATOMIC;
 import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL_SNAPSHOT;
-import static org.apache.ignite.cache.CacheMode.LOCAL;
 import static org.apache.ignite.cache.CacheMode.PARTITIONED;
 import static org.apache.ignite.cache.CacheMode.REPLICATED;
 import static org.apache.ignite.cache.CacheRebalanceMode.SYNC;
@@ -499,7 +492,7 @@
      */
     @SuppressWarnings("IfMayBeConditional")
     private Collection<GridCacheManager> dhtExcludes(GridCacheContext ctx) {
-        if (ctx.config().getCacheMode() == LOCAL || !isNearEnabled(ctx))
+        if (!isNearEnabled(ctx))
             return Collections.emptyList();
         else
             return F.asList(ctx.queries(), ctx.continuousQueries(), ctx.store());
@@ -1299,9 +1292,7 @@
         CacheEvictionManager evictMgr = (nearEnabled || cfg.isOnheapCacheEnabled())
             ? new GridCacheEvictionManager()
             : new CacheOffheapEvictionManager();
-        GridCacheQueryManager qryMgr = cfg.getCacheMode() == LOCAL
-            ? new GridCacheLocalQueryManager()
-            : new GridCacheDistributedQueryManager();
+        GridCacheQueryManager qryMgr = new GridCacheDistributedQueryManager();
         CacheContinuousQueryManager contQryMgr = new CacheContinuousQueryManager();
         CacheDataStructuresManager dataStructuresMgr = new CacheDataStructuresManager();
         GridCacheTtlManager ttlMgr = new GridCacheTtlManager();
@@ -1355,27 +1346,6 @@
         GridCacheAdapter cache = null;
 
         switch (cfg.getCacheMode()) {
-            case LOCAL: {
-                switch (cfg.getAtomicityMode()) {
-                    case TRANSACTIONAL:
-                    case TRANSACTIONAL_SNAPSHOT: {
-                        cache = new GridLocalCache(cacheCtx);
-
-                        break;
-                    }
-                    case ATOMIC: {
-                        cache = new GridLocalAtomicCache(cacheCtx);
-
-                        break;
-                    }
-
-                    default: {
-                        assert false : "Invalid cache atomicity mode: " + cfg.getAtomicityMode();
-                    }
-                }
-
-                break;
-            }
             case PARTITIONED:
             case REPLICATED: {
                 if (nearEnabled) {
@@ -1439,7 +1409,7 @@
          * Create DHT cache.
          * ================
          */
-        if (cfg.getCacheMode() != LOCAL && nearEnabled) {
+        if (nearEnabled) {
             /*
              * Specifically don't create the following managers
              * here and reuse the one from Near cache:
@@ -1620,10 +1590,9 @@
      * started.
      *
      * @param start Start cache.
-     * @param inclLoc Include local caches.
      * @return Cache or {@code null} if there is no suitable cache.
      */
-    public IgniteCacheProxy<?, ?> getOrStartPublicCache(boolean start, boolean inclLoc) throws IgniteCheckedException {
+    public IgniteCacheProxy<?, ?> getOrStartPublicCache(boolean start) throws IgniteCheckedException {
         // Try to find started cache first.
         for (Map.Entry<String, GridCacheAdapter<?, ?>> e : caches.entrySet()) {
             if (!e.getValue().context().userCache())
@@ -1633,15 +1602,14 @@
 
             String cacheName = ccfg.getName();
 
-            if ((inclLoc || ccfg.getCacheMode() != LOCAL))
-                return publicJCache(cacheName);
+            return publicJCache(cacheName);
         }
 
         if (start) {
             for (Map.Entry<String, DynamicCacheDescriptor> e : cachesInfo.registeredCaches().entrySet()) {
                 DynamicCacheDescriptor desc = e.getValue();
 
-                if (!desc.cacheType().userCache() || desc.cacheConfiguration().getCacheMode() == LOCAL)
+                if (!desc.cacheType().userCache())
                     continue;
 
                 CacheConfiguration ccfg = desc.cacheConfiguration();
@@ -2014,8 +1982,7 @@
         AffinityTopologyVersion exchTopVer,
         boolean disabledAfterStart
     ) throws IgniteCheckedException {
-        desc = enricher().enrich(desc,
-            desc.cacheConfiguration().getCacheMode() == LOCAL || isLocalAffinity(desc.cacheConfiguration()));
+        desc = enricher().enrich(desc, isLocalAffinity(desc.cacheConfiguration()));
 
         CacheConfiguration startCfg = desc.cacheConfiguration();
 
@@ -2153,9 +2120,6 @@
         for (GridCacheAdapter cacheAdapter : caches.values()) {
             GridCacheContext cacheContext = cacheAdapter.context();
 
-            if (cacheContext.isLocal())
-                continue;
-
             if (cacheContext.isRecoveryMode()) {
                 assert !isLocalAffinity(cacheContext.config())
                     : "Cache " + cacheAdapter.context() + " is still in recovery mode after start, but not activated.";
@@ -2178,12 +2142,6 @@
         @Nullable NearCacheConfiguration reqNearCfg,
         CacheConfiguration ccfg
     ) {
-        if (ccfg.getCacheMode() == LOCAL) {
-            ccfg.setNearConfiguration(null);
-
-            return true;
-        }
-
         if (isLocalAffinity(desc.cacheConfiguration()))
             return true;
 
@@ -2279,7 +2237,7 @@
 
         cacheCtx.initConflictResolver();
 
-        if (cfg.getCacheMode() != LOCAL && GridCacheUtils.isNearEnabled(cfg)) {
+        if (GridCacheUtils.isNearEnabled(cfg)) {
             GridCacheContext<?, ?> dhtCtx = cacheCtx.near().dht().context();
 
             // Start DHT managers.
@@ -2528,7 +2486,7 @@
         boolean needToStart = (dataRegion != null)
             && (cacheType != CacheType.USER
                 || (sharedCtx.isLazyMemoryAllocation(dataRegion)
-                    && (!cacheObjCtx.kernalContext().clientNode() || cfg.getCacheMode() == LOCAL)));
+                    && !cacheObjCtx.kernalContext().clientNode()));
 
         if (needToStart)
             dataRegion.pageMemory().start();
@@ -4017,9 +3975,6 @@
         sharedCtx.tm().checkEmptyTransactions(
             () -> format(CHECK_EMPTY_TRANSACTIONS_ERROR_MSG_FORMAT, cacheName, "dynamicCloseCache"));
 
-        if (proxy.context().isLocal())
-            return dynamicDestroyCache(cacheName, false, true, false, null);
-
         return startClientCacheChange(null, Collections.singleton(cacheName));
     }
 
@@ -5260,8 +5215,7 @@
         for (IgniteInternalCache cache : caches) {
             cache.context().statisticsEnabled(enabled);
 
-            if (!cache.context().isLocal())
-                globalCaches.add(cache.name());
+            globalCaches.add(cache.name());
         }
 
         if (globalCaches.isEmpty())
@@ -5288,10 +5242,8 @@
 
         Collection<String> globalCaches = new HashSet<>(U.capacity(caches.size()));
 
-        for (IgniteInternalCache cache : caches) {
-            if (!cache.context().isLocal())
-                globalCaches.add(cache.name());
-        }
+        for (IgniteInternalCache cache : caches)
+            globalCaches.add(cache.name());
 
         if (globalCaches.isEmpty())
             return;
@@ -5921,54 +5873,6 @@
     }
 
     /**
-     * The reason why this class is not removed is backward compatibility
-     * in the case of using local caches with native persistence.
-     */
-    @Deprecated
-    private static class LocalAffinityFunction implements AffinityFunction {
-        /** */
-        private static final long serialVersionUID = 0L;
-
-        /** */
-        private static final org.apache.ignite.internal.processors.affinity.LocalAffinityFunction DELEGATE =
-            new org.apache.ignite.internal.processors.affinity.LocalAffinityFunction();
-
-        /**
-         * Should not be directly used.
-         */
-        LocalAffinityFunction() throws IgniteCheckedException {
-            throw new IgniteCheckedException("This class should not be directly instantiated. Please use "
-                + org.apache.ignite.internal.processors.affinity.LocalAffinityFunction.class.getCanonicalName()
-                + " instead.");
-        }
-
-        /** {@inheritDoc} */
-        @Override public List<List<ClusterNode>> assignPartitions(AffinityFunctionContext affCtx) {
-            return DELEGATE.assignPartitions(affCtx);
-        }
-
-        /** {@inheritDoc} */
-        @Override public void reset() {
-            DELEGATE.reset();
-        }
-
-        /** {@inheritDoc} */
-        @Override public int partitions() {
-            return DELEGATE.partitions();
-        }
-
-        /** {@inheritDoc} */
-        @Override public int partition(Object key) {
-            return DELEGATE.partition(key);
-        }
-
-        /** {@inheritDoc} */
-        @Override public void removeNode(UUID nodeId) {
-            DELEGATE.removeNode(nodeId);
-        }
-    }
-
-    /**
      * Creation of a string representation of the top (descending) partitions, the processing of which took the most time.
      *
      * @param top Top (ascending) processed partitions.
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheTtlManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheTtlManager.java
index d2ea106..c9be519 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheTtlManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheTtlManager.java
@@ -110,7 +110,7 @@
 
         cctx.shared().ttl().register(this);
 
-        pendingEntries = (!cctx.isLocal() && cctx.config().getNearConfiguration() != null) ? new GridConcurrentSkipListSetEx() : null;
+        pendingEntries = (cctx.config().getNearConfiguration() != null) ? new GridConcurrentSkipListSetEx() : null;
     }
 
     /**
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheUtils.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheUtils.java
index 96123a3..a248033 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheUtils.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheUtils.java
@@ -68,7 +68,6 @@
 import org.apache.ignite.internal.cluster.ClusterTopologyCheckedException;
 import org.apache.ignite.internal.cluster.ClusterTopologyServerNotFoundException;
 import org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion;
-import org.apache.ignite.internal.processors.affinity.LocalAffinityFunction;
 import org.apache.ignite.internal.processors.cache.distributed.GridDistributedLockCancelledException;
 import org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtCacheAdapter;
 import org.apache.ignite.internal.processors.cache.distributed.dht.topology.GridDhtInvalidPartitionException;
@@ -116,10 +115,8 @@
 import org.apache.ignite.transactions.TransactionRollbackException;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
-
 import static java.util.Objects.nonNull;
 import static org.apache.ignite.IgniteSystemProperties.IGNITE_SKIP_CONFIGURATION_CONSISTENCY_CHECK;
-import static org.apache.ignite.cache.CacheMode.LOCAL;
 import static org.apache.ignite.cache.CacheMode.PARTITIONED;
 import static org.apache.ignite.cache.CacheMode.REPLICATED;
 import static org.apache.ignite.cache.CacheRebalanceMode.ASYNC;
@@ -496,9 +493,6 @@
      */
     @SuppressWarnings("SimplifiableIfStatement")
     public static boolean isNearEnabled(CacheConfiguration cfg) {
-        if (cfg.getCacheMode() == LOCAL)
-            return false;
-
         return cfg.getNearConfiguration() != null;
     }
 
@@ -1727,23 +1721,13 @@
 
                 cfg.setAffinity(aff);
             }
-            else if (cfg.getCacheMode() == REPLICATED) {
+            else {
                 RendezvousAffinityFunction aff = new RendezvousAffinityFunction(false, 512);
 
                 cfg.setAffinity(aff);
 
                 cfg.setBackups(Integer.MAX_VALUE);
             }
-            else
-                cfg.setAffinity(new LocalAffinityFunction());
-        }
-        else {
-            if (cfg.getCacheMode() == LOCAL && !(cfg.getAffinity() instanceof LocalAffinityFunction)) {
-                cfg.setAffinity(new LocalAffinityFunction());
-
-                U.warn(log, "AffinityFunction configuration parameter will be ignored for local cache" +
-                    " [cacheName=" + U.maskName(cfg.getName()) + ']');
-            }
         }
 
         validateKeyConfigiration(cfg.getGroupName(), cfg.getName(), cfg.getKeyConfiguration(), log, true);
@@ -2161,7 +2145,7 @@
             if (cctx == null)
                 throw new CacheException("Failed to find cache.");
 
-            if (!cctx.isLocal() && !cctx.isReplicated())
+            if (!cctx.isReplicated())
                 return cctx;
         }
 
@@ -2180,7 +2164,7 @@
             if (cctx == null)
                 throw new CacheException("Failed to find cache.");
 
-            if (!cctx.isLocal() && !cctx.isReplicated())
+            if (!cctx.isReplicated())
                 return cctx;
         }
 
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheOffheapManagerImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheOffheapManagerImpl.java
index 33f1852..e6f7878 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheOffheapManagerImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheOffheapManagerImpl.java
@@ -121,7 +121,6 @@
 import org.apache.ignite.lang.IgnitePredicate;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
-
 import static java.lang.Boolean.TRUE;
 import static org.apache.ignite.internal.pagemem.PageIdAllocator.FLAG_IDX;
 import static org.apache.ignite.internal.pagemem.PageIdAllocator.INDEX_PARTITION;
@@ -195,9 +194,6 @@
 
             try {
                 initDataStructures();
-
-                if (grp.isLocal())
-                    locCacheDataStore = createCacheDataStore(0);
             }
             finally {
                 ctx.database().checkpointReadUnlock();
@@ -320,17 +316,11 @@
      * @return Data store.
      */
     @Nullable private CacheDataStore dataStore(GridCacheContext<?, ?> cctx, KeyCacheObject key) {
-        if (grp.isLocal())
-            return locCacheDataStore;
-
         return dataStore(cctx.affinity().partition(key), false);
     }
 
     /** {@inheritDoc} */
     @Override public CacheDataStore dataStore(@Nullable GridDhtLocalPartition part) {
-        if (grp.isLocal())
-            return locCacheDataStore;
-
         assert part != null;
 
         return part.dataStore();
@@ -342,9 +332,6 @@
      * @return Related partition cache data store or {@code null} if partition haven't been initialized.
      */
     @Nullable private CacheDataStore dataStore(int partId, boolean includeRenting) {
-        if (grp.isLocal())
-            return locCacheDataStore;
-
         GridDhtLocalPartition part = grp.topology().localPartition(partId, AffinityTopologyVersion.NONE, false, includeRenting);
 
         return part == null ? null : part.dataStore();
@@ -372,21 +359,14 @@
         boolean backup,
         AffinityTopologyVersion topVer
     ) throws IgniteCheckedException {
-        if (grp.isLocal())
-            if (primary)
-                return cacheEntriesCount(cacheId, 0);
-            else
-                return 0L;
-        else {
-            long cnt = 0;
+        long cnt = 0;
 
-            Iterator<CacheDataStore> it = cacheData(primary, backup, topVer);
+        Iterator<CacheDataStore> it = cacheData(primary, backup, topVer);
 
-            while (it.hasNext())
-                cnt += it.next().cacheSize(cacheId);
+        while (it.hasNext())
+            cnt += it.next().cacheSize(cacheId);
 
-            return cnt;
-        }
+        return cnt;
     }
 
     /** {@inheritDoc} */
@@ -408,8 +388,7 @@
     private Iterable<CacheDataStore> cacheDataStores(
         IgnitePredicate<GridDhtLocalPartition> filter
     ) {
-        return grp.isLocal() ? Collections.singletonList(locCacheDataStore) :
-            F.iterator(grp.topology().currentLocalPartitions(), GridDhtLocalPartition::dataStore, true,
+        return F.iterator(grp.topology().currentLocalPartitions(), GridDhtLocalPartition::dataStore, true,
                 filter, p -> !p.dataStore().destroyed());
     }
 
@@ -422,9 +401,6 @@
     private Iterator<CacheDataStore> cacheData(boolean primary, boolean backup, AffinityTopologyVersion topVer) {
         assert primary || backup;
 
-        if (grp.isLocal())
-            return singletonIterator(locCacheDataStore);
-
         IgnitePredicate<GridDhtLocalPartition> filter;
 
         if (primary && backup)
@@ -628,7 +604,7 @@
         throws IgniteCheckedException {
         KeyCacheObject key = entry.key();
 
-        assert grp.isLocal() || entry.localPartition() != null : entry;
+        assert entry.localPartition() != null : entry;
 
         return dataStore(entry.localPartition()).find(entry.context(), key);
     }
@@ -696,9 +672,7 @@
     @Override public void clearCache(GridCacheContext cctx, boolean readers) {
         GridCacheVersion obsoleteVer = null;
 
-        try (GridCloseableIterator<CacheDataRow> it = grp.isLocal() ?
-            iterator(cctx.cacheId(), cacheDataStores().iterator(), null, null) :
-            evictionSafeIterator(cctx.cacheId(), cacheDataStores().iterator())) {
+        try (GridCloseableIterator<CacheDataRow> it = evictionSafeIterator(cctx.cacheId(), cacheDataStores().iterator())) {
             while (it.hasNext()) {
                 cctx.shared().database().checkpointReadLock();
 
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheProxyImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheProxyImpl.java
index 684300a..007552b 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheProxyImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheProxyImpl.java
@@ -380,16 +380,10 @@
 
         try {
             if (isAsync()) {
-                if (ctx.cache().isLocal())
-                    setFuture(ctx.cache().localLoadCacheAsync(p, args));
-                else
-                    setFuture(ctx.cache().globalLoadCacheAsync(p, args));
+                setFuture(ctx.cache().globalLoadCacheAsync(p, args));
             }
             else {
-                if (ctx.cache().isLocal())
-                    ctx.cache().localLoadCache(p, args);
-                else
-                    ctx.cache().globalLoadCache(p, args);
+                ctx.cache().globalLoadCache(p, args);
             }
         }
         catch (IgniteCheckedException | IgniteException e) {
@@ -403,9 +397,6 @@
         GridCacheContext<K, V> ctx = getContextSafe();
 
         try {
-            if (ctx.cache().isLocal())
-                return (IgniteFuture<Void>)createFuture(ctx.cache().localLoadCacheAsync(p, args));
-
             return (IgniteFuture<Void>)createFuture(ctx.cache().globalLoadCacheAsync(p, args));
         }
         catch (IgniteCheckedException | IgniteException e) {
@@ -647,10 +638,7 @@
     private ClusterGroup projection(boolean loc) {
         GridCacheContext<K, V> ctx = getContextSafe();
 
-        if (loc || ctx.isLocal())
-            return ctx.kernalContext().grid().cluster().forLocal();
-
-        return null;
+        return loc ? ctx.kernalContext().grid().cluster().forLocal() : null;
     }
 
     /**
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteInternalCache.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteInternalCache.java
index de7d9a3..4ab8963 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteInternalCache.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteInternalCache.java
@@ -1447,8 +1447,7 @@
     public int nearSize();
 
     /**
-     * Gets the number of all primary entries cached on this node. For {@link CacheMode#LOCAL} non-distributed
-     * cache mode, this method is identical to {@link #size()}.
+     * Gets the number of all primary entries cached on this node.
      * <p>
      * For {@link CacheMode#PARTITIONED} and {@link CacheMode#REPLICATED} modes, this method will
      * return number of primary entries cached on this node (excluding any backups). The complexity of
@@ -1461,8 +1460,7 @@
     public int primarySize();
 
     /**
-     * Gets the number of all primary entries cached on this node as a long value. For {@link CacheMode#LOCAL}
-     * non-distributed cache mode, this method is identical to {@link #size()}.
+     * Gets the number of all primary entries cached on this node as a long value.
      * <p>
      * For {@link CacheMode#PARTITIONED} and {@link CacheMode#REPLICATED} modes, this method will
      * return number of primary entries cached on this node (excluding any backups). The complexity of
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/ValidationOnNodeJoinUtils.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/ValidationOnNodeJoinUtils.java
index 4e8f05f..1506dcf 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/ValidationOnNodeJoinUtils.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/ValidationOnNodeJoinUtils.java
@@ -51,7 +51,6 @@
 import org.apache.ignite.internal.IgniteNodeAttributes;
 import org.apache.ignite.internal.binary.BinaryMarshaller;
 import org.apache.ignite.internal.cluster.DetachedClusterNode;
-import org.apache.ignite.internal.processors.affinity.LocalAffinityFunction;
 import org.apache.ignite.internal.processors.cache.persistence.DataRegion;
 import org.apache.ignite.internal.processors.datastructures.DataStructuresProcessor;
 import org.apache.ignite.internal.processors.query.QuerySchemaPatch;
@@ -71,11 +70,9 @@
 import org.apache.ignite.spi.indexing.IndexingSpi;
 import org.apache.ignite.spi.indexing.noop.NoopIndexingSpi;
 import org.jetbrains.annotations.Nullable;
-
 import static org.apache.ignite.IgniteSystemProperties.IGNITE_SKIP_CONFIGURATION_CONSISTENCY_CHECK;
 import static org.apache.ignite.cache.CacheAtomicityMode.ATOMIC;
 import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL_SNAPSHOT;
-import static org.apache.ignite.cache.CacheMode.LOCAL;
 import static org.apache.ignite.cache.CacheMode.PARTITIONED;
 import static org.apache.ignite.cache.CacheMode.REPLICATED;
 import static org.apache.ignite.cache.CacheRebalanceMode.NONE;
@@ -262,10 +259,6 @@
             throw new IgniteCheckedException("DataRegion for client caches must be explicitly configured " +
                 "on client node startup. Use DataStorageConfiguration to configure DataRegion.");
 
-        if (cc.getCacheMode() == LOCAL && !cc.getAffinity().getClass().equals(LocalAffinityFunction.class))
-            U.warn(log, "AffinityFunction configuration parameter will be ignored for local cache [cacheName=" +
-                U.maskName(cc.getName()) + ']');
-
         if (cc.getAffinity().partitions() > CacheConfiguration.MAX_PARTITIONS_COUNT)
             throw new IgniteCheckedException("Cannot have more than " + CacheConfiguration.MAX_PARTITIONS_COUNT +
                 " partitions [cacheName=" + cc.getName() + ", partitions=" + cc.getAffinity().partitions() + ']');
@@ -298,9 +291,6 @@
                 ", affFunction=" + cc.getAffinity() + ", cacheName=" + cc.getName() + ']');
 
         if (cc.getAtomicityMode() == TRANSACTIONAL_SNAPSHOT) {
-            apply(assertParam, cc.getCacheMode() != LOCAL,
-                "LOCAL cache mode cannot be used with TRANSACTIONAL_SNAPSHOT atomicity mode");
-
             apply(assertParam, cc.getNearConfiguration() == null,
                 "near cache cannot be used with TRANSACTIONAL_SNAPSHOT atomicity mode");
 
@@ -571,13 +561,8 @@
      * @return {@code true} if cache is starting on client node and this node is affinity node for the cache.
      */
     private static boolean storesLocallyOnClient(IgniteConfiguration c, CacheConfiguration cc, GridKernalContext ctx) {
-        if (c.isClientMode() && c.getDataStorageConfiguration() == null) {
-            if (cc.getCacheMode() == LOCAL)
-                return true;
-
+        if (c.isClientMode() && c.getDataStorageConfiguration() == null)
             return ctx.discovery().cacheAffinityNode(ctx.discovery().localNode(), cc.getName());
-
-        }
         else
             return false;
     }
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/WalStateManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/WalStateManager.java
index 4ecd871..9588626 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/WalStateManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/WalStateManager.java
@@ -30,7 +30,6 @@
 import org.apache.ignite.IgniteException;
 import org.apache.ignite.IgniteLogger;
 import org.apache.ignite.IgniteSystemProperties;
-import org.apache.ignite.cache.CacheMode;
 import org.apache.ignite.cluster.ClusterNode;
 import org.apache.ignite.configuration.IgniteConfiguration;
 import org.apache.ignite.internal.GridKernalContext;
@@ -62,7 +61,6 @@
 import org.apache.ignite.thread.IgniteThread;
 import org.apache.ignite.thread.OomExceptionHandler;
 import org.jetbrains.annotations.Nullable;
-
 import static org.apache.ignite.IgniteSystemProperties.IGNITE_DISABLE_WAL_DURING_REBALANCING;
 import static org.apache.ignite.IgniteSystemProperties.IGNITE_PENDING_TX_TRACKER_ENABLED;
 import static org.apache.ignite.internal.GridTopic.TOPIC_WAL;
@@ -379,9 +377,6 @@
                     "provided [group=" + grpDesc.groupName() + ", missingCaches=" + grpCaches + ']');
             }
 
-            if (grpDesc.config().getCacheMode() == CacheMode.LOCAL)
-                return errorFuture("WAL mode cannot be changed for LOCAL cache(s): " + cacheNames);
-
             // WAL mode change makes sense only for persistent groups.
             if (!grpDesc.persistenceEnabled())
                 return errorFuture("Cannot change WAL mode because persistence is not enabled for cache(s) [" +
@@ -437,7 +432,7 @@
         Collection<CacheGroupContext> grpContexts = cctx.cache().cacheGroups();
 
         for (CacheGroupContext grp : grpContexts) {
-            if (grp.isLocal() || !grp.affinityNode() || !(grp.persistenceEnabled() || grp.cdcEnabled())
+            if (!grp.affinityNode() || !(grp.persistenceEnabled() || grp.cdcEnabled())
                 || !grp.localWalEnabled() || !grp.rebalanceEnabled() || !grp.shared().isRebalanceEnabled())
                 continue;
 
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/affinity/GridCacheAffinityImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/affinity/GridCacheAffinityImpl.java
index 1cdeb3f..17554ee 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/affinity/GridCacheAffinityImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/affinity/GridCacheAffinityImpl.java
@@ -188,12 +188,7 @@
 
         AffinityTopologyVersion topVer = topologyVersion();
 
-        int nodesCnt;
-
-        if (!cctx.isLocal())
-            nodesCnt = cctx.discovery().cacheGroupAffinityNodes(cctx.groupId(), topVer).size();
-        else
-            nodesCnt = 1;
+        int nodesCnt = cctx.discovery().cacheGroupAffinityNodes(cctx.groupId(), topVer).size();
 
         // Must return empty map if no alive nodes present or keys is empty.
         Map<ClusterNode, Collection<K>> res = new HashMap<>(nodesCnt, 1.0f);
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/datastructures/CacheDataStructuresManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/datastructures/CacheDataStructuresManager.java
index abf7881..daca768 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/datastructures/CacheDataStructuresManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/datastructures/CacheDataStructuresManager.java
@@ -321,7 +321,7 @@
                         }
                     },
                     new QueueHeaderPredicate(),
-                    cctx.isLocal() || (cctx.isReplicated() && cctx.affinityNode()),
+                    cctx.isReplicated() && cctx.affinityNode(),
                     true,
                     false,
                     false);
@@ -430,15 +430,11 @@
      * @throws IgniteCheckedException If failed.
      */
     private void removeSetData(IgniteUuid setId, AffinityTopologyVersion topVer) throws IgniteCheckedException {
-        boolean loc = cctx.isLocal();
-
         GridCacheAffinityManager aff = cctx.affinity();
 
-        if (!loc) {
-            aff.affinityReadyFuture(topVer).get();
+        aff.affinityReadyFuture(topVer).get();
 
-            cctx.preloader().syncFuture().get();
-        }
+        cctx.preloader().syncFuture().get();
 
         IgniteInternalCache<?, ?> cache = cctx.cache();
 
@@ -473,74 +469,67 @@
     public void removeSetData(IgniteUuid id, boolean separated) throws IgniteCheckedException {
         assert id != null;
 
-        if (!cctx.isLocal()) {
-            while (true) {
-                AffinityTopologyVersion topVer = cctx.topologyVersionFuture().get();
+        while (true) {
+            AffinityTopologyVersion topVer = cctx.topologyVersionFuture().get();
 
-                Collection<ClusterNode> nodes = F.view(cctx.discovery().nodes(topVer), node -> !node.isDaemon());
+            Collection<ClusterNode> nodes = F.view(cctx.discovery().nodes(topVer), node -> !node.isDaemon());
 
-                try {
-                    cctx.closures().callAsyncNoFailover(BROADCAST,
-                        new BlockSetCallable(cctx.name(), id),
-                        nodes,
-                        true,
-                        0, false).get();
+            try {
+                cctx.closures().callAsyncNoFailover(BROADCAST,
+                    new BlockSetCallable(cctx.name(), id),
+                    nodes,
+                    true,
+                    0, false).get();
 
-                    // Separated cache will be destroyed after the set is blocked.
-                    if (separated)
-                        break;
-                }
-                catch (IgniteCheckedException e) {
-                    if (e.hasCause(ClusterTopologyCheckedException.class)) {
-                        if (log.isDebugEnabled())
-                            log.debug("RemoveSetData job failed, will retry: " + e);
-
-                        continue;
-                    }
-                    else if (!pingNodes(nodes)) {
-                        if (log.isDebugEnabled())
-                            log.debug("RemoveSetData job failed and set data node left, will retry: " + e);
-
-                        continue;
-                    }
-                    else
-                        throw e;
-                }
-
-                Collection<ClusterNode> affNodes = CU.affinityNodes(cctx, topVer);
-
-                try {
-                    cctx.closures().callAsyncNoFailover(BROADCAST,
-                        new RemoveSetDataCallable(cctx.name(), id, topVer),
-                        affNodes,
-                        true,
-                        0, false).get();
-                }
-                catch (IgniteCheckedException e) {
-                    if (e.hasCause(ClusterTopologyCheckedException.class)) {
-                        if (log.isDebugEnabled())
-                            log.debug("RemoveSetData job failed, will retry: " + e);
-
-                        continue;
-                    }
-                    else if (!pingNodes(affNodes)) {
-                        if (log.isDebugEnabled())
-                            log.debug("RemoveSetData job failed and set data node left, will retry: " + e);
-
-                        continue;
-                    }
-                    else
-                        throw e;
-                }
-
-                if (topVer.equals(cctx.topologyVersionFuture().get()))
+                // Separated cache will be destroyed after the set is blocked.
+                if (separated)
                     break;
             }
-        }
-        else {
-            blockSet(id);
+            catch (IgniteCheckedException e) {
+                if (e.hasCause(ClusterTopologyCheckedException.class)) {
+                    if (log.isDebugEnabled())
+                        log.debug("RemoveSetData job failed, will retry: " + e);
 
-            cctx.dataStructures().removeSetData(id, AffinityTopologyVersion.ZERO);
+                    continue;
+                }
+                else if (!pingNodes(nodes)) {
+                    if (log.isDebugEnabled())
+                        log.debug("RemoveSetData job failed and set data node left, will retry: " + e);
+
+                    continue;
+                }
+                else
+                    throw e;
+            }
+
+            Collection<ClusterNode> affNodes = CU.affinityNodes(cctx, topVer);
+
+            try {
+                cctx.closures().callAsyncNoFailover(BROADCAST,
+                    new RemoveSetDataCallable(cctx.name(), id, topVer),
+                    affNodes,
+                    true,
+                    0, false).get();
+            }
+            catch (IgniteCheckedException e) {
+                if (e.hasCause(ClusterTopologyCheckedException.class)) {
+                    if (log.isDebugEnabled())
+                        log.debug("RemoveSetData job failed, will retry: " + e);
+
+                    continue;
+                }
+                else if (!pingNodes(affNodes)) {
+                    if (log.isDebugEnabled())
+                        log.debug("RemoveSetData job failed and set data node left, will retry: " + e);
+
+                    continue;
+                }
+                else
+                    throw e;
+            }
+
+            if (topVer.equals(cctx.topologyVersionFuture().get()))
+                break;
         }
     }
 
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTopologyFutureAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTopologyFutureAdapter.java
index 1f248a4..262c107 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTopologyFutureAdapter.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTopologyFutureAdapter.java
@@ -56,8 +56,7 @@
      * @return Validation result.
      */
     protected final CacheGroupValidation validateCacheGroup(CacheGroupContext grp, Collection<ClusterNode> topNodes) {
-        Collection<Integer> lostParts = grp.isLocal() ?
-            Collections.<Integer>emptyList() : grp.topology().lostPartitions();
+        Collection<Integer> lostParts = grp.topology().lostPartitions();
 
         boolean valid = true;
 
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxPrepareFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxPrepareFuture.java
index 6667af4..e5008e6 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxPrepareFuture.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxPrepareFuture.java
@@ -529,8 +529,7 @@
                 }
 
                 // Send old value in case if rebalancing is not finished.
-                final boolean sndOldVal = !cacheCtx.isLocal() &&
-                    !cacheCtx.topology().rebalanceFinished(tx.topologyVersion());
+                final boolean sndOldVal = !cacheCtx.topology().rebalanceFinished(tx.topologyVersion());
 
                 if (sndOldVal) {
                     if (oldVal == null && !readOld) {
@@ -666,9 +665,6 @@
         for (IgniteTxEntry txEntry : checkEntries) {
             GridCacheContext cacheCtx = txEntry.context();
 
-            if (cacheCtx.isLocal())
-                continue;
-
             GridDistributedCacheEntry entry = (GridDistributedCacheEntry)txEntry.cached();
 
             if (entry == null) {
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxQueryEnlistFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxQueryEnlistFuture.java
index 4d56344..f475efa 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxQueryEnlistFuture.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxQueryEnlistFuture.java
@@ -145,7 +145,7 @@
      */
     @SuppressWarnings("ForLoopReplaceableByForEach")
     private void checkPartitions(int[] parts) throws ClusterTopologyCheckedException {
-        if (cctx.isLocal() || !cctx.rebalanceEnabled())
+        if (!cctx.rebalanceEnabled())
             return;
 
         GridDhtPartitionTopology top = cctx.topology();
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPartitionsExchangeFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPartitionsExchangeFuture.java
index 05ea509..8909617 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPartitionsExchangeFuture.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPartitionsExchangeFuture.java
@@ -47,7 +47,6 @@
 import org.apache.ignite.IgniteException;
 import org.apache.ignite.IgniteLogger;
 import org.apache.ignite.IgniteSystemProperties;
-import org.apache.ignite.cache.CacheMode;
 import org.apache.ignite.cache.CacheRebalanceMode;
 import org.apache.ignite.cluster.ClusterNode;
 import org.apache.ignite.cluster.ClusterState;
@@ -130,7 +129,6 @@
 import org.apache.ignite.lang.IgniteProductVersion;
 import org.apache.ignite.lang.IgniteRunnable;
 import org.jetbrains.annotations.Nullable;
-
 import static java.util.Collections.emptySet;
 import static java.util.stream.Stream.concat;
 import static org.apache.ignite.IgniteSystemProperties.IGNITE_LONG_OPERATIONS_DUMP_TIMEOUT_LIMIT;
@@ -1222,9 +1220,6 @@
         try {
             if (crd != null) {
                 for (CacheGroupContext grp : cctx.cache().cacheGroups()) {
-                    if (grp.isLocal())
-                        continue;
-
                     grp.topology().beforeExchange(this, !centralizedAff && !forceAffReassignment, false);
 
                     cctx.exchange().exchangerUpdateHeartbeat();
@@ -1244,9 +1239,6 @@
      */
     private void updateTopologies(boolean crd) throws IgniteCheckedException {
         for (CacheGroupContext grp : cctx.cache().cacheGroups()) {
-            if (grp.isLocal())
-                continue;
-
             GridClientPartitionTopology clientTop = cctx.exchange().clearClientTopology(grp.groupId());
 
             long updSeq = clientTop == null ? -1 : clientTop.lastUpdateSequence();
@@ -1636,9 +1628,6 @@
         assert !cctx.kernalContext().clientNode();
 
         for (CacheGroupContext grp : cctx.cache().cacheGroups()) {
-            if (grp.isLocal())
-                continue;
-
             cctx.exchange().exchangerBlockingSectionBegin();
 
             try {
@@ -1685,7 +1674,7 @@
         boolean topChanged = firstDiscoEvt.type() != EVT_DISCOVERY_CUSTOM_EVT || affChangeMsg != null;
 
         for (GridCacheContext cacheCtx : cctx.cacheContexts()) {
-            if (cacheCtx.isLocal() || cacheStopping(cacheCtx.cacheId()))
+            if (cacheStopping(cacheCtx.cacheId()))
                 continue;
 
             if (topChanged) {
@@ -1718,7 +1707,7 @@
         // Pre-create missing partitions using current affinity.
         if (!exchCtx.mergeExchanges() && !exchCtx.exchangeFreeSwitch()) {
             for (CacheGroupContext grp : cctx.cache().cacheGroups()) {
-                if (grp.isLocal() || cacheGroupStopping(grp.groupId()))
+                if (cacheGroupStopping(grp.groupId()))
                     continue;
 
                 // It is possible affinity is not initialized yet if node joins to cluster.
@@ -1780,9 +1769,6 @@
                     cctx.kernalContext().pools().getSystemExecutorService(),
                     cctx.affinity().cacheGroups().values(),
                     desc -> {
-                        if (desc.config().getCacheMode() == CacheMode.LOCAL)
-                            return null;
-
                         CacheGroupContext grp = cctx.cache().cacheGroup(desc.groupId());
 
                         GridDhtPartitionTopology top = grp != null ? grp.topology() :
@@ -2094,9 +2080,6 @@
      */
     private void onLeft() {
         for (CacheGroupContext grp : cctx.cache().cacheGroups()) {
-            if (grp.isLocal())
-                continue;
-
             grp.preloader().pause();
 
             try {
@@ -2138,7 +2121,7 @@
 
     /**
      * @param grpId Cache group ID to check.
-     * @return {@code True} if cache group us stopping by this exchange.
+     * @return {@code True} if cache group is stopping by this exchange.
      */
     private boolean cacheGroupStopping(int grpId) {
         return exchActions != null && exchActions.cacheGroupStopping(grpId);
@@ -2460,7 +2443,7 @@
                 !cctx.kernalContext().clientNode() &&
                 (serverNodeDiscoveryEvent() || affChangeMsg != null)) {
                 for (GridCacheContext cacheCtx : cctx.cacheContexts()) {
-                    if (!cacheCtx.affinityNode() || cacheCtx.isLocal())
+                    if (!cacheCtx.affinityNode())
                         continue;
 
                     cacheCtx.continuousQueries().flushOnExchangeDone(res);
@@ -2474,9 +2457,6 @@
                     Collection<CacheGroupContext> grpToRefresh = U.newHashSet(cctx.cache().cacheGroups().size());
 
                     for (CacheGroupContext grp : cctx.cache().cacheGroups()) {
-                        if (grp.isLocal())
-                            continue;
-
                         try {
                             if (grp.topology().initPartitionsWhenAffinityReady(res, this))
                                 grpToRefresh.add(grp);
@@ -2554,10 +2534,8 @@
 
                 cleanIdxRebuildFutures = false;
 
-                for (CacheGroupContext grp : cctx.cache().cacheGroups()) {
-                    if (!grp.isLocal())
-                        grp.topology().onExchangeDone(this, grp.affinity().readyAffinity(res), false);
-                }
+                for (CacheGroupContext grp : cctx.cache().cacheGroups())
+                    grp.topology().onExchangeDone(this, grp.affinity().readyAffinity(res), false);
 
                 if (changedAffinity())
                     cctx.walState().disableGroupDurabilityForPreloading(this);
@@ -3664,9 +3642,6 @@
                 cctx.kernalContext().pools().getSystemExecutorService(),
                 cctx.affinity().cacheGroups().values(),
                 desc -> {
-                    if (desc.config().getCacheMode() == CacheMode.LOCAL)
-                        return null;
-
                     CacheGroupContext grp = cctx.cache().cacheGroup(desc.groupId());
 
                     GridDhtPartitionTopology top = grp != null ? grp.topology() :
@@ -3696,9 +3671,6 @@
                 cctx.kernalContext().pools().getSystemExecutorService(),
                 cctx.affinity().caches().values(),
                 desc -> {
-                    if (desc.cacheConfiguration().getCacheMode() == CacheMode.LOCAL)
-                        return null;
-
                     if (cacheNames.contains(desc.cacheName())) {
                         CacheGroupContext grp = cctx.cache().cacheGroup(desc.groupId());
 
@@ -3798,9 +3770,6 @@
 
             if (!exchCtx.mergeExchanges() && !crd.equals(events().discoveryCache().serverNodes().get(0))) {
                 for (CacheGroupContext grp : cctx.cache().cacheGroups()) {
-                    if (grp.isLocal())
-                        continue;
-
                     // It is possible affinity is not initialized.
                     // For example, dynamic cache start failed.
                     if (grp.affinity().lastVersion().topologyVersion() > 0)
@@ -3892,9 +3861,6 @@
                     cctx.kernalContext().pools().getSystemExecutorService(),
                     cctx.affinity().cacheGroups().values(),
                     desc -> {
-                        if (desc.config().getCacheMode() == CacheMode.LOCAL)
-                            return null;
-
                         CacheGroupContext grp = cctx.cache().cacheGroup(desc.groupId());
 
                         GridDhtPartitionTopology top = grp != null ? grp.topology() :
@@ -3971,10 +3937,8 @@
                 timeBag.finishGlobalStage("Ideal affinity diff calculation (enforced)");
             }
 
-            for (CacheGroupContext grpCtx : cctx.cache().cacheGroups()) {
-                if (!grpCtx.isLocal())
-                    grpCtx.topology().applyUpdateCounters();
-            }
+            for (CacheGroupContext grpCtx : cctx.cache().cacheGroups())
+                grpCtx.topology().applyUpdateCounters();
 
             timeBag.finishGlobalStage("Apply update counters");
 
@@ -4180,20 +4144,16 @@
      *
      * @return Collection of non local cache group descriptors.
      */
-    private List<CacheGroupDescriptor> nonLocalCacheGroupDescriptors() {
-        return cctx.affinity().cacheGroups().values().stream()
-            .filter(grpDesc -> grpDesc.config().getCacheMode() != CacheMode.LOCAL)
-            .collect(Collectors.toList());
+    private List<CacheGroupDescriptor> cacheGroupDescriptors() {
+        return new ArrayList<>(cctx.affinity().cacheGroups().values());
     }
 
     /**
-     * Collects non local cache groups.
-     *
-     * @return Collection of non local cache groups.
+     * @return Collection of cache groups that are not being stopped by this exchange.
      */
-    private List<CacheGroupContext> nonLocalCacheGroups() {
+    private List<CacheGroupContext> nonStoppingCacheGroups() {
         return cctx.cache().cacheGroups().stream()
-            .filter(grp -> !grp.isLocal() && !cacheGroupStopping(grp.groupId()))
+            .filter(grp -> !cacheGroupStopping(grp.groupId()))
             .collect(Collectors.toList());
     }
 
@@ -4204,7 +4164,7 @@
         try {
             U.doInParallel(
                 cctx.kernalContext().pools().getSystemExecutorService(),
-                nonLocalCacheGroupDescriptors(),
+                cacheGroupDescriptors(),
                 grpDesc -> {
                     CacheGroupContext grpCtx = cctx.cache().cacheGroup(grpDesc.groupId());
 
@@ -4260,7 +4220,7 @@
         try {
             U.doInParallel(
                 cctx.kernalContext().pools().getSystemExecutorService(),
-                nonLocalCacheGroupDescriptors(),
+                cacheGroupDescriptors(),
                 grpDesc -> {
                     CacheGroupContext grpCtx = cctx.cache().cacheGroup(grpDesc.groupId());
 
@@ -4362,7 +4322,7 @@
             U.<CacheGroupContext, Void>doInParallelUninterruptibly(
                 parallelismLvl,
                 cctx.kernalContext().pools().getSystemExecutorService(),
-                nonLocalCacheGroups(),
+                nonStoppingCacheGroups(),
                 grp -> {
                     Set<Integer> parts;
 
@@ -4765,7 +4725,7 @@
                         cctx.affinity().onServerJoinWithExchangeMergeProtocol(this, false);
 
                     for (CacheGroupContext grp : cctx.cache().cacheGroups()) {
-                        if (grp.isLocal() || cacheGroupStopping(grp.groupId()))
+                        if (cacheGroupStopping(grp.groupId()))
                             continue;
 
                         grp.topology().beforeExchange(this, true, false);
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/topology/PartitionDefferedDeleteQueueCleanupTask.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/topology/PartitionDefferedDeleteQueueCleanupTask.java
index f69fd46..83c1c6f 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/topology/PartitionDefferedDeleteQueueCleanupTask.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/topology/PartitionDefferedDeleteQueueCleanupTask.java
@@ -72,7 +72,7 @@
             @Override public void run() {
                 try {
                     for (CacheGroupContext grp : cctx.cache().cacheGroups()) {
-                        if (!grp.isLocal() && grp.affinityNode()) {
+                        if (grp.affinityNode()) {
                             GridDhtPartitionTopology top = null;
 
                             try {
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearOptimisticSerializableTxPrepareFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearOptimisticSerializableTxPrepareFuture.java
index bbda303..69fb67a 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearOptimisticSerializableTxPrepareFuture.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearOptimisticSerializableTxPrepareFuture.java
@@ -40,7 +40,6 @@
 import org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtTxMapping;
 import org.apache.ignite.internal.processors.cache.transactions.IgniteInternalTx;
 import org.apache.ignite.internal.processors.cache.transactions.IgniteTxEntry;
-import org.apache.ignite.internal.processors.cache.version.GridCacheVersion;
 import org.apache.ignite.internal.processors.tracing.MTC;
 import org.apache.ignite.internal.transactions.IgniteTxOptimisticCheckedException;
 import org.apache.ignite.internal.transactions.IgniteTxRollbackCheckedException;
@@ -59,7 +58,6 @@
 import org.apache.ignite.lang.IgniteBiInClosure;
 import org.apache.ignite.lang.IgniteReducer;
 import org.jetbrains.annotations.Nullable;
-
 import static org.apache.ignite.internal.processors.cache.GridCacheOperation.TRANSFORM;
 import static org.apache.ignite.internal.processors.tracing.MTC.TraceSurroundings;
 import static org.apache.ignite.transactions.TransactionState.PREPARED;
@@ -97,42 +95,10 @@
         if (log.isDebugEnabled())
             log.debug("Transaction future received owner changed callback: " + entry);
 
-        if ((entry.context().isNear() || entry.context().isLocal()) && owner != null) {
+        if (entry.context().isNear() && owner != null) {
             IgniteTxEntry txEntry = tx.entry(entry.txKey());
 
             if (txEntry != null) {
-                if (entry.context().isLocal()) {
-                    GridCacheVersion serReadVer = txEntry.entryReadVersion();
-
-                    if (serReadVer != null) {
-                        GridCacheContext ctx = entry.context();
-
-                        while (true) {
-                            try {
-                                if (!entry.checkSerializableReadVersion(serReadVer)) {
-                                    Object key = entry.key().value(ctx.cacheObjectContext(), false);
-
-                                    IgniteTxOptimisticCheckedException err0 =
-                                        new IgniteTxOptimisticCheckedException(S.toString(
-                                            "Failed to prepare transaction, read/write conflict",
-                                            "key", key, true,
-                                            "cache", ctx.name(), false));
-
-                                    ERR_UPD.compareAndSet(this, null, err0);
-                                }
-
-                                break;
-                            }
-                            catch (GridCacheEntryRemovedException ignored) {
-                                entry = ctx.cache().entryEx(entry.key(), tx.topologyVersion());
-
-                                txEntry.cached(entry);
-                            }
-                        }
-
-                    }
-                }
-
                 if (keyLockFut != null)
                     keyLockFut.onKeyLocked(entry.txKey());
 
@@ -625,9 +591,7 @@
     ) {
         GridCacheContext cacheCtx = entry.context();
 
-        List<ClusterNode> nodes = cacheCtx.isLocal() ?
-            cacheCtx.affinity().nodesByKey(entry.key(), topVer) :
-            cacheCtx.topology().nodes(cacheCtx.affinity().partition(entry.key()), topVer);
+        List<ClusterNode> nodes = cacheCtx.topology().nodes(cacheCtx.affinity().partition(entry.key()), topVer);
 
         if (F.isEmpty(nodes)) {
             onDone(new ClusterTopologyServerNotFoundException("Failed to map keys to nodes " +
@@ -652,12 +616,10 @@
         // Must re-initialize cached entry while holding topology lock.
         if (cacheCtx.isNear())
             entry.cached(cacheCtx.nearTx().entryExx(entry.key(), topVer));
-        else if (!cacheCtx.isLocal())
-            entry.cached(cacheCtx.colocated().entryExx(entry.key(), topVer, true));
         else
-            entry.cached(cacheCtx.local().entryEx(entry.key(), topVer));
+            entry.cached(cacheCtx.colocated().entryExx(entry.key(), topVer, true));
 
-        if (!remap && (cacheCtx.isNear() || cacheCtx.isLocal())) {
+        if (!remap && cacheCtx.isNear()) {
             if (entry.explicitVersion() == null) {
                 if (keyLockFut == null) {
                     keyLockFut = new KeyLockFuture();
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearOptimisticTxPrepareFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearOptimisticTxPrepareFuture.java
index a066264..bfa1c7f 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearOptimisticTxPrepareFuture.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearOptimisticTxPrepareFuture.java
@@ -102,7 +102,7 @@
         if (tx.remainingTime() == -1)
             return false;
 
-        if ((entry.context().isNear() || entry.context().isLocal()) &&
+        if (entry.context().isNear() &&
             owner != null && tx.hasWriteKey(entry.txKey())) {
             if (keyLockFut != null)
                 keyLockFut.onKeyLocked(entry.txKey());
@@ -436,7 +436,7 @@
 
                 ClusterNode primary = updated.primary();
 
-                assert !primary.isLocal() || !cctx.kernalContext().clientNode() || write.context().isLocal();
+                assert !primary.isLocal() || !cctx.kernalContext().clientNode();
 
                 // Minor optimization to not create MappingKey: on client node can not have mapping for local node.
                 Object key = cctx.kernalContext().clientNode() ? primary.id() :
@@ -633,9 +633,7 @@
         if (cached0.isDht())
             nodes = cacheCtx.topology().nodes(cached0.partition(), topVer);
         else
-            nodes = cacheCtx.isLocal() ?
-                cacheCtx.affinity().nodesByKey(entry.key(), topVer) :
-                cacheCtx.topology().nodes(cacheCtx.affinity().partition(entry.key()), topVer);
+            nodes = cacheCtx.topology().nodes(cacheCtx.affinity().partition(entry.key()), topVer);
 
         if (F.isEmpty(nodes)) {
             ClusterTopologyServerNotFoundException e = new ClusterTopologyServerNotFoundException("Failed to map " +
@@ -662,12 +660,10 @@
         // Must re-initialize cached entry while holding topology lock.
         if (cacheCtx.isNear())
             entry.cached(cacheCtx.nearTx().entryExx(entry.key(), topVer));
-        else if (!cacheCtx.isLocal())
-            entry.cached(cacheCtx.colocated().entryExx(entry.key(), topVer, true));
         else
-            entry.cached(cacheCtx.local().entryEx(entry.key(), topVer));
+            entry.cached(cacheCtx.colocated().entryExx(entry.key(), topVer, true));
 
-        if (cacheCtx.isNear() || cacheCtx.isLocal()) {
+        if (cacheCtx.isNear()) {
             if (entry.explicitVersion() == null && !remap) {
                 if (keyLockFut == null) {
                     keyLockFut = new KeyLockFuture();
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearOptimisticTxPrepareFutureAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearOptimisticTxPrepareFutureAdapter.java
index c0fbfc2..565247e 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearOptimisticTxPrepareFutureAdapter.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearOptimisticTxPrepareFutureAdapter.java
@@ -66,7 +66,7 @@
         if (tx.timeout() > 0) {
             // Init keyLockFut to make sure it is created when {@link #onNearTxLocalTimeout} is called.
             for (IgniteTxEntry e : tx.writeEntries()) {
-                if (e.context().isNear() || e.context().isLocal()) {
+                if (e.context().isNear()) {
                     keyLockFut = new KeyLockFuture();
                     break;
                 }
@@ -74,7 +74,7 @@
 
             if (tx.serializable() && keyLockFut == null) {
                 for (IgniteTxEntry e : tx.readEntries()) {
-                    if (e.context().isNear() || e.context().isLocal()) {
+                    if (e.context().isNear()) {
                         keyLockFut = new KeyLockFuture();
                         break;
                     }
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearPessimisticTxPrepareFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearPessimisticTxPrepareFuture.java
index 9f40222..336c3ec 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearPessimisticTxPrepareFuture.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearPessimisticTxPrepareFuture.java
@@ -323,13 +323,8 @@
 
                 List<ClusterNode> nodes;
 
-                if (!cacheCtx.isLocal()) {
-                    GridDhtPartitionTopology top = cacheCtx.topology();
-
-                    nodes = top.nodes(cacheCtx.affinity().partition(txEntry.key()), topVer);
-                }
-                else
-                    nodes = cacheCtx.affinity().nodesByKey(txEntry.key(), topVer);
+                GridDhtPartitionTopology top = cacheCtx.topology();
+                nodes = top.nodes(cacheCtx.affinity().partition(txEntry.key()), topVer);
 
                 if (F.isEmpty(nodes)) {
                     onDone(new ClusterTopologyServerNotFoundException("Failed to map keys to nodes (partition " +
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 102f285..659daa6 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
@@ -102,7 +102,6 @@
 import org.apache.ignite.internal.util.typedef.C1;
 import org.apache.ignite.internal.util.typedef.C2;
 import org.apache.ignite.internal.util.typedef.CI1;
-import org.apache.ignite.internal.util.typedef.CI2;
 import org.apache.ignite.internal.util.typedef.CX1;
 import org.apache.ignite.internal.util.typedef.F;
 import org.apache.ignite.internal.util.typedef.internal.CU;
@@ -118,7 +117,6 @@
 import org.apache.ignite.transactions.TransactionIsolation;
 import org.apache.ignite.transactions.TransactionState;
 import org.jetbrains.annotations.Nullable;
-
 import static org.apache.ignite.cache.CacheWriteSynchronizationMode.FULL_SYNC;
 import static org.apache.ignite.events.EventType.EVT_CACHE_OBJECT_READ;
 import static org.apache.ignite.internal.processors.cache.GridCacheOperation.CREATE;
@@ -127,7 +125,6 @@
 import static org.apache.ignite.internal.processors.cache.GridCacheOperation.READ;
 import static org.apache.ignite.internal.processors.cache.GridCacheOperation.TRANSFORM;
 import static org.apache.ignite.internal.processors.cache.GridCacheOperation.UPDATE;
-import static org.apache.ignite.internal.processors.cache.transactions.IgniteTxEntry.SER_READ_EMPTY_ENTRY_VER;
 import static org.apache.ignite.internal.processors.cache.transactions.IgniteTxEntry.SER_READ_NOT_EMPTY_VER;
 import static org.apache.ignite.internal.processors.tracing.MTC.TraceSurroundings;
 import static org.apache.ignite.internal.processors.tracing.SpanType.TX_NEAR_ENLIST_READ;
@@ -2436,26 +2433,6 @@
                             }
                         }
 
-                        if (!missed.isEmpty() && cacheCtx.isLocal()) {
-                            AffinityTopologyVersion topVer = topologyVersionSnapshot();
-
-                            if (topVer == null)
-                                topVer = entryTopVer;
-
-                            return checkMissed(cacheCtx,
-                                topVer != null ? topVer : topologyVersion(),
-                                retMap,
-                                missed,
-                                deserializeBinary,
-                                skipVals,
-                                keepCacheObjects,
-                                skipStore,
-                                recovery,
-                                readRepairStrategy,
-                                needVer,
-                                expiryPlc0);
-                        }
-
                         if (readRepairStrategy != null) { // Checking and repairing each locked entry (if necessary).
                             // Providing the guarantee that all copies are updated when read repair operation is finished.
                             syncMode(FULL_SYNC);
@@ -3192,7 +3169,8 @@
                     }
                 });
         }
-        else if (cacheCtx.isColocated()) {
+        // cacheCtx.isColocated() == true
+        else {
             if (readRepairStrategy != null) {
                 return new GridNearReadRepairCheckOnlyFuture(
                     topVer,
@@ -3298,169 +3276,6 @@
                 });
             }
         }
-        else {
-            assert cacheCtx.isLocal();
-
-            return localCacheLoadMissing(cacheCtx,
-                topVer,
-                readThrough,
-                async,
-                keys,
-                skipVals,
-                needVer,
-                keepBinary,
-                recovery,
-                expiryPlc,
-                c);
-        }
-    }
-
-    /**
-     * @param cacheCtx Cache context.
-     * @param readThrough Read through flag.
-     * @param async if {@code True}, then loading will happen in a separate thread.
-     * @param keys Keys.
-     * @param skipVals Skip values flag.
-     * @param needVer If {@code true} version is required for loaded values.
-     * @param c Closure to be applied for loaded values.
-     * @param expiryPlc Expiry policy.
-     * @return Future with {@code True} value if loading took place.
-     */
-    private IgniteInternalFuture<Void> localCacheLoadMissing(
-        final GridCacheContext cacheCtx,
-        final AffinityTopologyVersion topVer,
-        final boolean readThrough,
-        boolean async,
-        final Collection<KeyCacheObject> keys,
-        boolean skipVals,
-        boolean needVer,
-        boolean keepBinary,
-        boolean recovery,
-        final ExpiryPolicy expiryPlc,
-        final GridInClosure3<KeyCacheObject, Object, GridCacheVersion> c
-    ) {
-        assert cacheCtx.isLocal() : cacheCtx.name();
-
-        if (!readThrough || !cacheCtx.readThrough()) {
-            for (KeyCacheObject key : keys)
-                c.apply(key, null, SER_READ_EMPTY_ENTRY_VER);
-
-            return new GridFinishedFuture<>();
-        }
-
-        try {
-            IgniteCacheExpiryPolicy expiryPlc0 = optimistic() ?
-                accessPolicy(cacheCtx, keys) :
-                cacheCtx.cache().expiryPolicy(expiryPlc);
-
-            Map<KeyCacheObject, GridCacheVersion> misses = null;
-
-            for (KeyCacheObject key : keys) {
-                while (true) {
-                    IgniteTxEntry txEntry = entry(cacheCtx.txKey(key));
-
-                    GridCacheEntryEx entry = txEntry == null ? cacheCtx.cache().entryEx(key) :
-                        txEntry.cached();
-
-                    if (entry == null)
-                        continue;
-
-                    try {
-                        EntryGetResult res = entry.innerGetVersioned(
-                            null,
-                            this,
-                            /*update-metrics*/!skipVals,
-                            /*event*/!skipVals,
-                            null,
-                            resolveTaskName(),
-                            expiryPlc0,
-                            txEntry == null ? keepBinary : txEntry.keepBinary(),
-                            null);
-
-                        if (res == null) {
-                            if (misses == null)
-                                misses = new LinkedHashMap<>();
-
-                            misses.put(key, entry.version());
-                        }
-                        else
-                            c.apply(key, skipVals ? true : res.value(), res.version());
-
-                        break;
-                    }
-                    catch (GridCacheEntryRemovedException ignore) {
-                        if (log.isDebugEnabled())
-                            log.debug("Got removed entry, will retry: " + key);
-
-                        if (txEntry != null)
-                            txEntry.cached(cacheCtx.cache().entryEx(key, topologyVersion()));
-                    }
-                }
-            }
-
-            if (misses != null) {
-                final Map<KeyCacheObject, GridCacheVersion> misses0 = misses;
-
-                cacheCtx.store().loadAll(this, misses.keySet(), new CI2<KeyCacheObject, Object>() {
-                    @Override public void apply(KeyCacheObject key, Object val) {
-                        GridCacheVersion ver = misses0.remove(key);
-
-                        assert ver != null : key;
-
-                        if (val != null) {
-                            CacheObject cacheVal = cacheCtx.toCacheObject(val);
-
-                            while (true) {
-                                GridCacheEntryEx entry = cacheCtx.cache().entryEx(key, topVer);
-
-                                try {
-                                    cacheCtx.shared().database().ensureFreeSpace(cacheCtx.dataRegion());
-
-                                    EntryGetResult verVal = entry.versionedValue(cacheVal,
-                                        ver,
-                                        null,
-                                        null,
-                                        null);
-
-                                    if (log.isDebugEnabled()) {
-                                        log.debug("Set value loaded from store into entry [" +
-                                            "oldVer=" + ver +
-                                            ", newVer=" + verVal.version() +
-                                            ", entry=" + entry + ']');
-                                    }
-
-                                    ver = verVal.version();
-
-                                    break;
-                                }
-                                catch (GridCacheEntryRemovedException ignore) {
-                                    if (log.isDebugEnabled())
-                                        log.debug("Got removed entry, (will retry): " + entry);
-                                }
-                                catch (IgniteCheckedException e) {
-                                    // Wrap errors (will be unwrapped).
-                                    throw new GridClosureException(e);
-                                }
-                            }
-                        }
-                        else
-                            ver = SER_READ_EMPTY_ENTRY_VER;
-
-                        c.apply(key, val, ver);
-                    }
-                });
-
-                for (KeyCacheObject key : misses0.keySet())
-                    c.apply(key, null, SER_READ_EMPTY_ENTRY_VER);
-            }
-
-            return new GridFinishedFuture<>();
-        }
-        catch (IgniteCheckedException e) {
-            setRollbackOnly();
-
-            return new GridFinishedFuture<>(e);
-        }
     }
 
     /**
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/local/GridLocalCache.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/local/GridLocalCache.java
deleted file mode 100644
index 7e91fbc..0000000
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/local/GridLocalCache.java
+++ /dev/null
@@ -1,263 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache.local;
-
-import java.io.Externalizable;
-import java.util.Collection;
-import org.apache.ignite.IgniteCheckedException;
-import org.apache.ignite.cache.CachePeekMode;
-import org.apache.ignite.internal.IgniteInternalFuture;
-import org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion;
-import org.apache.ignite.internal.processors.cache.CacheEntryPredicate;
-import org.apache.ignite.internal.processors.cache.GridCacheAdapter;
-import org.apache.ignite.internal.processors.cache.GridCacheContext;
-import org.apache.ignite.internal.processors.cache.GridCacheEntryEx;
-import org.apache.ignite.internal.processors.cache.GridCacheLocalConcurrentMap;
-import org.apache.ignite.internal.processors.cache.GridCacheMapEntry;
-import org.apache.ignite.internal.processors.cache.GridCacheMapEntryFactory;
-import org.apache.ignite.internal.processors.cache.GridCachePreloader;
-import org.apache.ignite.internal.processors.cache.GridCachePreloaderAdapter;
-import org.apache.ignite.internal.processors.cache.KeyCacheObject;
-import org.apache.ignite.internal.processors.cache.transactions.IgniteTxLocalEx;
-import org.apache.ignite.internal.processors.cache.version.GridCacheVersion;
-import org.apache.ignite.internal.util.future.GridFinishedFuture;
-import org.apache.ignite.internal.util.lang.GridPlainCallable;
-import org.apache.ignite.internal.util.typedef.F;
-import org.apache.ignite.internal.util.typedef.internal.CU;
-import org.apache.ignite.transactions.TransactionIsolation;
-import org.jetbrains.annotations.Nullable;
-
-/**
- * Local cache implementation.
- */
-public class GridLocalCache<K, V> extends GridCacheAdapter<K, V> {
-    /** */
-    private static final long serialVersionUID = 0L;
-
-    /** */
-    private GridCachePreloader preldr;
-
-    /**
-     * Empty constructor required by {@link Externalizable}.
-     */
-    public GridLocalCache() {
-        // No-op.
-    }
-
-    /**
-     * @param ctx Cache registry.
-     */
-    public GridLocalCache(GridCacheContext<K, V> ctx) {
-        super(ctx);
-
-        preldr = new GridCachePreloaderAdapter(ctx.group());
-    }
-
-    /** {@inheritDoc} */
-    @Override public void start() throws IgniteCheckedException {
-        if (map == null)
-            map = new GridCacheLocalConcurrentMap(ctx, entryFactory(), DFLT_START_CACHE_SIZE);
-    }
-
-    /** {@inheritDoc} */
-    @Override public boolean isLocal() {
-        return true;
-    }
-
-    /** {@inheritDoc} */
-    @Override public GridCachePreloader preloader() {
-        return preldr;
-    }
-
-    /**
-     * @return Entry factory.
-     */
-    private GridCacheMapEntryFactory entryFactory() {
-        return new GridCacheMapEntryFactory() {
-            @Override public GridCacheMapEntry create(
-                GridCacheContext ctx,
-                AffinityTopologyVersion topVer,
-                KeyCacheObject key
-            ) {
-                return new GridLocalCacheEntry(ctx, key);
-            }
-        };
-    }
-
-    /**
-     * @param key Key of entry.
-     * @return Cache entry.
-     */
-    @Nullable private GridLocalCacheEntry peekExx(KeyCacheObject key) {
-        return (GridLocalCacheEntry)peekEx(key);
-    }
-
-    /**
-     * @param key Key of entry.
-     * @return Cache entry.
-     */
-    GridLocalCacheEntry entryExx(KeyCacheObject key) {
-        return (GridLocalCacheEntry)entryEx(key);
-    }
-
-    /** {@inheritDoc} */
-    @Override public IgniteInternalFuture<Boolean> txLockAsync(Collection<KeyCacheObject> keys,
-        long timeout,
-        IgniteTxLocalEx tx,
-        boolean isRead,
-        boolean retval,
-        TransactionIsolation isolation,
-        boolean invalidate,
-        long createTtl,
-        long accessTtl) {
-        return lockAllAsync(keys, timeout, tx, CU.empty0());
-    }
-
-    /** {@inheritDoc} */
-    @Override public IgniteInternalFuture<Boolean> lockAllAsync(Collection<? extends K> keys, long timeout) {
-        IgniteTxLocalEx tx = ctx.tm().localTx();
-
-        return lockAllAsync(ctx.cacheKeysView(keys), timeout, tx, CU.empty0());
-    }
-
-    /**
-     * @param keys Keys.
-     * @param timeout Timeout.
-     * @param tx Transaction.
-     * @param filter Filter.
-     * @return Future.
-     */
-    public IgniteInternalFuture<Boolean> lockAllAsync(Collection<KeyCacheObject> keys,
-        long timeout,
-        @Nullable IgniteTxLocalEx tx,
-        CacheEntryPredicate[] filter) {
-        if (F.isEmpty(keys))
-            return new GridFinishedFuture<>(true);
-
-        GridLocalLockFuture<K, V> fut = new GridLocalLockFuture<>(ctx, keys, tx, this, timeout, filter);
-
-        try {
-            if (!fut.addEntries(keys))
-                return fut;
-
-            if (!ctx.mvcc().addFuture(fut))
-                fut.onError(new IgniteCheckedException("Duplicate future ID (internal error): " + fut));
-
-            // Must have future added prior to checking locks.
-            fut.checkLocks();
-
-            return fut;
-        }
-        catch (IgniteCheckedException e) {
-            fut.onError(e);
-
-            return fut;
-        }
-    }
-
-    /** {@inheritDoc} */
-    @Override public void unlockAll(
-        Collection<? extends K> keys
-    ) throws IgniteCheckedException {
-        AffinityTopologyVersion topVer = ctx.affinity().affinityTopologyVersion();
-
-        for (K key : keys) {
-            GridLocalCacheEntry entry = peekExx(ctx.toCacheKeyObject(key));
-
-            if (entry != null && ctx.isAll(entry, CU.empty0())) {
-                entry.releaseLocal();
-
-                entry.touch();
-            }
-        }
-    }
-
-    /** {@inheritDoc} */
-    @Override public IgniteInternalFuture<?> removeAllAsync() {
-        return ctx.closures().callLocalSafe(new GridPlainCallable<Void>() {
-            @Override public Void call() throws Exception {
-                removeAll();
-
-                return null;
-            }
-        });
-    }
-
-    /** {@inheritDoc} */
-    @Override public void onDeferredDelete(GridCacheEntryEx entry, GridCacheVersion ver) {
-        assert false : "Should not be called";
-    }
-
-    /**
-     * @param fut Clears future from cache.
-     */
-    void onFutureDone(GridLocalLockFuture fut) {
-        if (ctx.mvcc().removeVersionedFuture(fut)) {
-            if (log().isDebugEnabled())
-                log().debug("Explicitly removed future from map of futures: " + fut);
-        }
-    }
-
-    /** {@inheritDoc} */
-    @Override public long localSizeLong(CachePeekMode[] peekModes) throws IgniteCheckedException {
-        PeekModes modes = parsePeekModes(peekModes, true);
-
-        modes.primary = true;
-        modes.backup = true;
-
-        if (modes.offheap)
-            return ctx.offheap().cacheEntriesCount(ctx.cacheId());
-        else if (modes.heap)
-            return size();
-        else
-            return 0;
-    }
-
-    /** {@inheritDoc} */
-    @Override public long localSizeLong(int part, CachePeekMode[] peekModes) throws IgniteCheckedException {
-        return localSizeLong(peekModes);
-    }
-
-    /** {@inheritDoc} */
-    @Override public void preloadPartition(int part) throws IgniteCheckedException {
-        ctx.offheap().preloadPartition(part);
-    }
-
-    /** {@inheritDoc} */
-    @Override public IgniteInternalFuture<?> preloadPartitionAsync(int part) throws IgniteCheckedException {
-        return ctx.closures().callLocalSafe(new GridPlainCallable<Void>() {
-            @Override public Void call() throws Exception {
-                preloadPartition(part);
-
-                return null;
-            }
-        });
-    }
-
-    /** {@inheritDoc} */
-    @Override public boolean localPreloadPartition(int part) throws IgniteCheckedException {
-        ctx.offheap().preloadPartition(part);
-
-        return true;
-    }
-
-    /** {@inheritDoc} */
-    @Override public GridCacheVersion nextVersion() {
-        return ctx.versions().next(ctx.shared().kernalContext().discovery().topologyVersion());
-    }
-}
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/local/GridLocalCacheEntry.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/local/GridLocalCacheEntry.java
deleted file mode 100644
index f716759..0000000
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/local/GridLocalCacheEntry.java
+++ /dev/null
@@ -1,382 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache.local;
-
-import org.apache.ignite.internal.processors.cache.CacheLockCandidates;
-import org.apache.ignite.internal.processors.cache.CacheObject;
-import org.apache.ignite.internal.processors.cache.GridCacheContext;
-import org.apache.ignite.internal.processors.cache.GridCacheEntryRemovedException;
-import org.apache.ignite.internal.processors.cache.GridCacheMapEntry;
-import org.apache.ignite.internal.processors.cache.GridCacheMvcc;
-import org.apache.ignite.internal.processors.cache.GridCacheMvccCandidate;
-import org.apache.ignite.internal.processors.cache.KeyCacheObject;
-import org.apache.ignite.internal.processors.cache.transactions.IgniteInternalTx;
-import org.apache.ignite.internal.processors.cache.version.GridCacheVersion;
-import org.apache.ignite.internal.util.typedef.internal.S;
-import org.jetbrains.annotations.Nullable;
-
-/**
- * Cache entry for local caches.
- */
-@SuppressWarnings({"TooBroadScope"})
-public class GridLocalCacheEntry extends GridCacheMapEntry {
-    /**
-     * @param ctx  Cache registry.
-     * @param key  Cache key.
-     */
-    GridLocalCacheEntry(
-        GridCacheContext ctx,
-        KeyCacheObject key
-    ) {
-        super(ctx, key);
-    }
-
-    /** {@inheritDoc} */
-    @Override public boolean isLocal() {
-        return true;
-    }
-
-    /**
-     * Add local candidate.
-     *
-     * @param threadId Owning thread ID.
-     * @param ver Lock version.
-     * @param serOrder Version for serializable transactions ordering.
-     * @param serReadVer Optional read entry version for optimistic serializable transaction.
-     * @param timeout Timeout to acquire lock.
-     * @param reenter Reentry flag.
-     * @param tx Transaction flag.
-     * @param implicitSingle Implicit transaction flag.
-     * @param read Read lock flag.
-     * @return New candidate.
-     * @throws GridCacheEntryRemovedException If entry has been removed.
-     */
-    @Nullable GridCacheMvccCandidate addLocal(
-        long threadId,
-        GridCacheVersion ver,
-        @Nullable GridCacheVersion serOrder,
-        @Nullable GridCacheVersion serReadVer,
-        long timeout,
-        boolean reenter,
-        boolean tx,
-        boolean implicitSingle,
-        boolean read
-    ) throws GridCacheEntryRemovedException {
-        assert serReadVer == null || serOrder != null;
-
-        CacheObject val;
-        GridCacheMvccCandidate cand;
-        CacheLockCandidates prev;
-        CacheLockCandidates owner = null;
-
-        lockEntry();
-
-        try {
-            checkObsolete();
-
-            if (serReadVer != null) {
-                if (!checkSerializableReadVersion(serReadVer))
-                    return null;
-            }
-
-            GridCacheMvcc mvcc = mvccExtras();
-
-            if (mvcc == null) {
-                mvcc = new GridCacheMvcc(cctx);
-
-                mvccExtras(mvcc);
-            }
-
-            prev = mvcc.localOwners();
-
-            cand = mvcc.addLocal(
-                this,
-                /*nearNodeId*/null,
-                /*nearVer*/null,
-                threadId,
-                ver,
-                timeout,
-                serOrder,
-                reenter,
-                tx,
-                implicitSingle,
-                /*dht-local*/false,
-                read
-            );
-
-            if (mvcc.isEmpty())
-                mvccExtras(null);
-            else
-                owner = mvcc.localOwners();
-
-            val = this.val;
-        }
-        finally {
-            unlockEntry();
-        }
-
-        if (cand != null && !cand.reentry())
-            cctx.mvcc().addNext(cctx, cand);
-
-        checkOwnerChanged(prev, owner, val);
-
-        return cand;
-    }
-
-    /**
-     * @param cand Candidate.
-     */
-    void readyLocal(GridCacheMvccCandidate cand) {
-        CacheObject val;
-        CacheLockCandidates prev = null;
-        CacheLockCandidates owner = null;
-
-        lockEntry();
-
-        try {
-            GridCacheMvcc mvcc = mvccExtras();
-
-            if (mvcc != null) {
-                prev = mvcc.localOwners();
-
-                owner = mvcc.readyLocal(cand);
-
-                if (mvcc.isEmpty())
-                    mvccExtras(null);
-            }
-
-            val = this.val;
-        }
-        finally {
-            unlockEntry();
-        }
-
-        checkOwnerChanged(prev, owner, val);
-    }
-
-    /** {@inheritDoc} */
-    @Override public boolean tmLock(IgniteInternalTx tx,
-        long timeout,
-        @Nullable GridCacheVersion serOrder,
-        GridCacheVersion serReadVer,
-        boolean read)
-        throws GridCacheEntryRemovedException {
-        GridCacheMvccCandidate cand = addLocal(
-            tx.threadId(),
-            tx.xidVersion(),
-            serOrder,
-            serReadVer,
-            timeout,
-            /*reenter*/false,
-            /*tx*/true,
-            tx.implicitSingle(),
-            read
-        );
-
-        if (cand != null) {
-            readyLocal(cand);
-
-            return true;
-        }
-
-        return false;
-    }
-
-    /**
-     * Rechecks if lock should be reassigned.
-     *
-     * @param ver Thread chain version.
-     *
-     * @return {@code True} if thread chain processing must be stopped.
-     */
-    public boolean recheck(GridCacheVersion ver) {
-        CacheObject val;
-        CacheLockCandidates prev = null;
-        CacheLockCandidates owner = null;
-
-        lockEntry();
-
-        try {
-            GridCacheMvcc mvcc = mvccExtras();
-
-            if (mvcc != null) {
-                prev = mvcc.allOwners();
-
-                owner = mvcc.recheck();
-
-                if (mvcc.isEmpty())
-                    mvccExtras(null);
-            }
-
-            val = this.val;
-        }
-        finally {
-            unlockEntry();
-        }
-
-        boolean lockedByThreadChainVer = owner != null && owner.hasCandidate(ver);
-
-        // If locked by the thread chain version no need to do recursive thread chain scans for the same chain.
-        // This call must be made outside of synchronization.
-        checkOwnerChanged(prev, owner, val, lockedByThreadChainVer);
-
-        return !lockedByThreadChainVer;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected void checkThreadChain(GridCacheMvccCandidate owner) {
-        assert !lockedByCurrentThread();
-
-        assert owner != null;
-        assert owner.owner() || owner.used() : "Neither owner or used flags are set on ready local candidate: " +
-            owner;
-
-        if (owner.next() != null) {
-            for (GridCacheMvccCandidate cand = owner.next(); cand != null; cand = cand.next()) {
-                assert cand.local();
-
-                // Allow next lock in the thread to proceed.
-                if (!cand.used()) {
-                    GridCacheContext cctx0 = cand.parent().context();
-
-                    GridLocalCacheEntry e = (GridLocalCacheEntry)cctx0.cache().peekEx(cand.parent().key());
-
-                    // At this point candidate may have been removed and entry destroyed, so we check for null.
-                    if (e == null || e.recheck(owner.version()))
-                        break;
-                }
-            }
-        }
-    }
-
-    /**
-     * Releases local lock.
-     */
-    void releaseLocal() {
-        releaseLocal(Thread.currentThread().getId());
-    }
-
-    /**
-     * Releases local lock.
-     *
-     * @param threadId Thread ID.
-     */
-    private void releaseLocal(long threadId) {
-        CacheObject val;
-        CacheLockCandidates prev = null;
-        CacheLockCandidates owner = null;
-
-        lockEntry();
-
-        try {
-            GridCacheMvcc mvcc = mvccExtras();
-
-            if (mvcc != null) {
-                prev = mvcc.localOwners();
-
-                mvcc.releaseLocal(threadId);
-
-                if (mvcc.isEmpty())
-                    mvccExtras(null);
-                else
-                    owner = mvcc.allOwners();
-            }
-
-            val = this.val;
-        }
-        finally {
-            unlockEntry();
-        }
-
-        if (prev != null) {
-            for (int i = 0; i < prev.size(); i++) {
-                GridCacheMvccCandidate cand = prev.candidate(i);
-
-                boolean unlocked = owner == null || !owner.hasCandidate(cand.version());
-
-                if (unlocked)
-                    checkThreadChain(cand);
-            }
-        }
-
-        checkOwnerChanged(prev, owner, val);
-    }
-
-    /** {@inheritDoc} */
-    @Override public boolean removeLock(GridCacheVersion ver) throws GridCacheEntryRemovedException {
-        CacheObject val;
-        CacheLockCandidates prev = null;
-        CacheLockCandidates owner = null;
-
-        GridCacheMvccCandidate doomed;
-
-        GridCacheVersion deferredDelVer;
-
-        lockEntry();
-
-        try {
-            GridCacheVersion obsoleteVer = obsoleteVersionExtras();
-
-            if (obsoleteVer != null && !obsoleteVer.equals(ver))
-                checkObsolete();
-
-            GridCacheMvcc mvcc = mvccExtras();
-
-            doomed = mvcc == null ? null : mvcc.candidate(ver);
-
-            if (doomed != null) {
-                prev = mvcc.allOwners();
-
-                mvcc.remove(ver);
-
-                if (mvcc.isEmpty())
-                    mvccExtras(null);
-                else
-                    owner = mvcc.allOwners();
-            }
-
-            val = this.val;
-
-            deferredDelVer = this.ver;
-        }
-        finally {
-            unlockEntry();
-        }
-
-        if (val == null) {
-            boolean deferred = cctx.deferredDelete() && !detached() && !isInternal();
-
-            if (deferred) {
-                if (deferredDelVer != null)
-                    cctx.onDeferredDelete(this, deferredDelVer);
-            }
-        }
-
-        if (doomed != null)
-            checkThreadChain(doomed);
-
-        checkOwnerChanged(prev, owner, val);
-
-        return doomed != null;
-    }
-
-    /** {@inheritDoc} */
-    @Override public String toString() {
-        return toStringWithTryLock(() -> S.toString(GridLocalCacheEntry.class, this, super.toString()));
-    }
-}
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/local/GridLocalLockCallback.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/local/GridLocalLockCallback.java
deleted file mode 100644
index 47b864c..0000000
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/local/GridLocalLockCallback.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache.local;
-
-import org.apache.ignite.internal.processors.cache.GridCacheMvccCandidate;
-
-/**
- * @param <K> Key type.
- * @param <V> Value type.
- */
-interface GridLocalLockCallback {
-    /**
-     * Called when entry lock ownership changes. This call
-     * happens outside of synchronization so external callbacks
-     * can be made from this call.
-     *
-     * @param entry Entry whose owner has changed.
-     * @param prev Previous candidate.
-     * @param owner Current candidate.
-     */
-    public void onOwnerChanged(GridLocalCacheEntry entry,
-        GridCacheMvccCandidate prev,
-        GridCacheMvccCandidate owner);
-}
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/local/GridLocalLockFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/local/GridLocalLockFuture.java
deleted file mode 100644
index 372ebea..0000000
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/local/GridLocalLockFuture.java
+++ /dev/null
@@ -1,556 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache.local;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-import java.util.UUID;
-import java.util.concurrent.atomic.AtomicReference;
-import java.util.concurrent.atomic.AtomicReferenceFieldUpdater;
-import org.apache.ignite.IgniteCheckedException;
-import org.apache.ignite.IgniteLogger;
-import org.apache.ignite.internal.IgniteInternalFuture;
-import org.apache.ignite.internal.processors.cache.CacheEntryPredicate;
-import org.apache.ignite.internal.processors.cache.GridCacheContext;
-import org.apache.ignite.internal.processors.cache.GridCacheEntryEx;
-import org.apache.ignite.internal.processors.cache.GridCacheEntryRemovedException;
-import org.apache.ignite.internal.processors.cache.GridCacheFutureAdapter;
-import org.apache.ignite.internal.processors.cache.GridCacheMvccCandidate;
-import org.apache.ignite.internal.processors.cache.GridCacheVersionedFuture;
-import org.apache.ignite.internal.processors.cache.KeyCacheObject;
-import org.apache.ignite.internal.processors.cache.distributed.near.GridNearTxLocal;
-import org.apache.ignite.internal.processors.cache.transactions.IgniteTxKey;
-import org.apache.ignite.internal.processors.cache.transactions.IgniteTxLocalEx;
-import org.apache.ignite.internal.processors.cache.transactions.TxDeadlock;
-import org.apache.ignite.internal.processors.cache.version.GridCacheVersion;
-import org.apache.ignite.internal.processors.timeout.GridTimeoutObjectAdapter;
-import org.apache.ignite.internal.transactions.IgniteTxTimeoutCheckedException;
-import org.apache.ignite.internal.util.tostring.GridToStringExclude;
-import org.apache.ignite.internal.util.tostring.GridToStringInclude;
-import org.apache.ignite.internal.util.typedef.internal.CU;
-import org.apache.ignite.internal.util.typedef.internal.S;
-import org.apache.ignite.internal.util.typedef.internal.U;
-import org.apache.ignite.lang.IgniteInClosure;
-import org.apache.ignite.lang.IgniteUuid;
-import org.apache.ignite.transactions.TransactionDeadlockException;
-import org.jetbrains.annotations.Nullable;
-
-/**
- * Cache lock future.
- */
-public final class GridLocalLockFuture<K, V> extends GridCacheFutureAdapter<Boolean>
-    implements GridCacheVersionedFuture<Boolean> {
-    /** Logger reference. */
-    private static final AtomicReference<IgniteLogger> logRef = new AtomicReference<>();
-
-    /** Error updater. */
-    private static final AtomicReferenceFieldUpdater<GridLocalLockFuture, Throwable> ERR_UPD =
-        AtomicReferenceFieldUpdater.newUpdater(GridLocalLockFuture.class, Throwable.class, "err");
-
-    /** Logger. */
-    private static IgniteLogger log;
-
-    /** Cache registry. */
-    @GridToStringExclude
-    private GridCacheContext<K, V> cctx;
-
-    /** Underlying cache. */
-    @GridToStringExclude
-    private GridLocalCache<K, V> cache;
-
-    /** Lock owner thread. */
-    @GridToStringInclude
-    private long threadId;
-
-    /**
-     * Keys locked so far.
-     *
-     * Thread created this object iterates over entries and tries to lock each of them.
-     * If it finds some entry already locked by another thread it registers callback which will be executed
-     * by the thread owning the lock.
-     *
-     * Thus access to this collection must be synchronized except cases
-     * when this object is yet local to the thread created it.
-     */
-    @GridToStringExclude
-    private List<GridLocalCacheEntry> entries;
-
-    /** Future ID. */
-    private IgniteUuid futId;
-
-    /** Lock version. */
-    private GridCacheVersion lockVer;
-
-    /** Error. */
-    private volatile Throwable err;
-
-    /** Timeout object. */
-    @GridToStringExclude
-    private LockTimeoutObject timeoutObj;
-
-    /** Lock timeout. */
-    private final long timeout;
-
-    /** Filter. */
-    private CacheEntryPredicate[] filter;
-
-    /** Transaction. */
-    private IgniteTxLocalEx tx;
-
-    /** Trackable flag. */
-    private boolean trackable = true;
-
-    /**
-     * @param cctx Registry.
-     * @param keys Keys to lock.
-     * @param tx Transaction.
-     * @param cache Underlying cache.
-     * @param timeout Lock acquisition timeout.
-     * @param filter Filter.
-     */
-    GridLocalLockFuture(
-        GridCacheContext<K, V> cctx,
-        Collection<KeyCacheObject> keys,
-        IgniteTxLocalEx tx,
-        GridLocalCache<K, V> cache,
-        long timeout,
-        CacheEntryPredicate[] filter) {
-        assert keys != null;
-        assert cache != null;
-        assert (tx != null && timeout >= 0) || tx == null;
-
-        this.cctx = cctx;
-        this.cache = cache;
-        this.timeout = timeout;
-        this.filter = filter;
-        this.tx = tx;
-
-        ignoreInterrupts();
-
-        threadId = tx == null ? Thread.currentThread().getId() : tx.threadId();
-
-        lockVer = tx != null ? tx.xidVersion() : cctx.cache().nextVersion();
-
-        futId = IgniteUuid.randomUuid();
-
-        entries = new ArrayList<>(keys.size());
-
-        if (log == null)
-            log = U.logger(cctx.kernalContext(), logRef, GridLocalLockFuture.class);
-
-        if (tx != null && tx instanceof GridNearTxLocal && !((GridNearTxLocal)tx).updateLockFuture(null, this)) {
-            GridNearTxLocal tx0 = (GridNearTxLocal)tx;
-
-            onError(tx0.timedOut() ? tx0.timeoutException() : tx0.rollbackException());
-        }
-    }
-
-    /**
-     * @param keys Keys.
-     * @return {@code False} in case of error.
-     * @throws IgniteCheckedException If failed.
-     */
-    public boolean addEntries(Collection<KeyCacheObject> keys) throws IgniteCheckedException {
-        for (KeyCacheObject key : keys) {
-            while (true) {
-                GridLocalCacheEntry entry = null;
-
-                try {
-                    entry = cache.entryExx(key);
-
-                    entry.unswap(false);
-
-                    if (!cctx.isAll(entry, filter)) {
-                        onFailed();
-
-                        return false;
-                    }
-
-                    // Removed exception may be thrown here.
-                    GridCacheMvccCandidate cand = addEntry(entry);
-
-                    if (cand == null && isDone())
-                        return false;
-
-                    break;
-                }
-                catch (GridCacheEntryRemovedException ignored) {
-                    if (log.isDebugEnabled())
-                        log.debug("Got removed entry in lockAsync(..) method (will retry): " + entry);
-                }
-            }
-        }
-
-        if (timeout > 0) {
-            timeoutObj = new LockTimeoutObject();
-
-            cctx.time().addTimeoutObject(timeoutObj);
-        }
-
-        return true;
-    }
-
-    /** {@inheritDoc} */
-    @Override public IgniteUuid futureId() {
-        return futId;
-    }
-
-    /** {@inheritDoc} */
-    @Override public GridCacheVersion version() {
-        return lockVer;
-    }
-
-    /** {@inheritDoc} */
-    @Override public boolean onNodeLeft(UUID nodeId) {
-        return false;
-    }
-
-    /** {@inheritDoc} */
-    @Override public boolean trackable() {
-        return trackable;
-    }
-
-    /** {@inheritDoc} */
-    @Override public void markNotTrackable() {
-        trackable = false;
-    }
-
-    /**
-     * @return Entries.
-     */
-    private List<GridLocalCacheEntry> entries() {
-        return entries;
-    }
-
-    /**
-     * @return {@code True} if transaction is not {@code null}.
-     */
-    private boolean inTx() {
-        return tx != null;
-    }
-
-    /**
-     * @return {@code True} if implicit transaction.
-     */
-    private boolean implicitSingle() {
-        return tx != null && tx.implicitSingle();
-    }
-
-    /**
-     * @param cached Entry.
-     * @return {@code True} if locked.
-     * @throws GridCacheEntryRemovedException If removed.
-     */
-    private boolean locked(GridCacheEntryEx cached) throws GridCacheEntryRemovedException {
-        // Reentry-aware check.
-        return (cached.lockedLocally(lockVer) || (cached.lockedByThread(threadId))) &&
-            filter(cached); // If filter failed, lock is failed.
-    }
-
-    /**
-     * Adds entry to future.
-     *
-     * @param entry Entry to add.
-     * @return Lock candidate.
-     * @throws GridCacheEntryRemovedException If entry was removed.
-     */
-    @Nullable private GridCacheMvccCandidate addEntry(GridLocalCacheEntry entry)
-        throws GridCacheEntryRemovedException {
-        // Add local lock first, as it may throw GridCacheEntryRemovedException.
-        GridCacheMvccCandidate c = entry.addLocal(
-            threadId,
-            lockVer,
-            null,
-            null,
-            timeout,
-            !inTx(),
-            inTx(),
-            implicitSingle(),
-            false
-        );
-
-        entries.add(entry);
-
-        if (c == null && timeout < 0) {
-            if (log.isDebugEnabled())
-                log.debug("Failed to acquire lock with negative timeout: " + entry);
-
-            onFailed();
-
-            return null;
-        }
-
-        if (c != null) {
-            // Immediately set lock to ready.
-            entry.readyLocal(c);
-        }
-
-        return c;
-    }
-
-    /**
-     * Undoes all locks.
-     */
-    private void undoLocks() {
-        Collection<GridLocalCacheEntry> entriesCp = entriesCopy();
-
-        for (GridLocalCacheEntry e : entriesCp) {
-            try {
-                e.removeLock(lockVer);
-            }
-            catch (GridCacheEntryRemovedException ignore) {
-                if (log.isDebugEnabled())
-                    log.debug("Got removed entry while undoing locks: " + e);
-            }
-        }
-    }
-
-    /**
-     * Need of synchronization here is explained in the field's {@link GridLocalLockFuture#entries} comment.
-     *
-     * @return Copy of entries collection.
-     */
-    private synchronized Collection<GridLocalCacheEntry> entriesCopy() {
-        return new ArrayList<>(entries());
-    }
-
-    /**
-     *
-     */
-    void onFailed() {
-        undoLocks();
-
-        onComplete(false);
-    }
-
-    /**
-     * @param t Error.
-     */
-    void onError(Throwable t) {
-        if (ERR_UPD.compareAndSet(this, null, t))
-            onFailed();
-    }
-
-    /**
-     * @param cached Entry to check.
-     * @return {@code True} if filter passed.
-     */
-    private boolean filter(GridCacheEntryEx cached) {
-        try {
-            if (!cctx.isAll(cached, filter)) {
-                if (log.isDebugEnabled())
-                    log.debug("Filter didn't pass for entry (will fail lock): " + cached);
-
-                onFailed();
-
-                return false;
-            }
-
-            return true;
-        }
-        catch (IgniteCheckedException e) {
-            onError(e);
-
-            return false;
-        }
-    }
-
-    /**
-     * Explicitly check if lock was acquired.
-     */
-    void checkLocks() {
-        if (!isDone()) {
-            for (int i = 0; i < entries.size(); i++) {
-                while (true) {
-                    GridCacheEntryEx cached = entries.get(i);
-
-                    try {
-                        if (!locked(cached))
-                            return;
-
-                        break;
-                    }
-                    // Possible in concurrent cases, when owner is changed after locks
-                    // have been released or cancelled.
-                    catch (GridCacheEntryRemovedException ignore) {
-                        if (log.isDebugEnabled())
-                            log.debug("Got removed entry in onOwnerChanged method (will retry): " + cached);
-
-                        // Replace old entry with new one.
-                        entries.add(i, (GridLocalCacheEntry)cache.entryEx(cached.key()));
-                    }
-                }
-            }
-
-            if (log.isDebugEnabled())
-                log.debug("Local lock acquired for entries: " + entries);
-
-            onComplete(true);
-        }
-    }
-
-    /** {@inheritDoc} */
-    @Override public boolean onOwnerChanged(GridCacheEntryEx entry, GridCacheMvccCandidate owner) {
-        if (!isDone()) {
-            for (int i = 0; i < entries.size(); i++) {
-                while (true) {
-                    GridCacheEntryEx cached = entries.get(i);
-
-                    try {
-                        if (!locked(cached))
-                            return true;
-
-                        break;
-                    }
-                    // Possible in concurrent cases, when owner is changed after locks
-                    // have been released or cancelled.
-                    catch (GridCacheEntryRemovedException ignore) {
-                        if (log.isDebugEnabled())
-                            log.debug("Got removed entry in onOwnerChanged method (will retry): " + cached);
-
-                        // Replace old entry with new one.
-                        entries.add(i, (GridLocalCacheEntry)cache.entryEx(cached.key()));
-                    }
-                }
-            }
-
-            if (log.isDebugEnabled())
-                log.debug("Local lock acquired for entries: " + entries);
-
-            onComplete(true);
-        }
-
-        return false;
-    }
-
-    /** {@inheritDoc} */
-    @Override public boolean cancel() {
-        if (onCancelled()) {
-            // Remove all locks.
-            undoLocks();
-
-            onComplete(false);
-        }
-
-        return isCancelled();
-    }
-
-    /**
-     * Completeness callback.
-     *
-     * @param success If {@code true}, then lock has been acquired.
-     */
-    private void onComplete(boolean success) {
-        if (!success)
-            undoLocks();
-
-        if (tx != null && success)
-            ((GridNearTxLocal)tx).clearLockFuture(this);
-
-        if (onDone(success, err)) {
-            if (log.isDebugEnabled())
-                log.debug("Completing future: " + this);
-
-            cache.onFutureDone(this);
-
-            if (timeoutObj != null)
-                cctx.time().removeTimeoutObject(timeoutObj);
-        }
-    }
-
-    /** {@inheritDoc} */
-    @Override public String toString() {
-        return S.toString(GridLocalLockFuture.class, this);
-    }
-
-    /**
-     * Lock request timeout object.
-     */
-    private class LockTimeoutObject extends GridTimeoutObjectAdapter {
-        /**
-         * Default constructor.
-         */
-        LockTimeoutObject() {
-            super(timeout);
-        }
-
-        /** {@inheritDoc} */
-        @SuppressWarnings({"ForLoopReplaceableByForEach"})
-        @Override public void onTimeout() {
-            if (log.isDebugEnabled())
-                log.debug("Timed out waiting for lock response: " + this);
-
-            if (inTx()) {
-                if (cctx.tm().deadlockDetectionEnabled()) {
-                    Set<IgniteTxKey> keys = new HashSet<>();
-
-                    List<GridLocalCacheEntry> entries = entries();
-
-                    for (int i = 0; i < entries.size(); i++) {
-                        GridLocalCacheEntry e = entries.get(i);
-
-                        List<GridCacheMvccCandidate> mvcc = e.mvccAllLocal();
-
-                        if (mvcc == null)
-                            continue;
-
-                        GridCacheMvccCandidate cand = mvcc.get(0);
-
-                        if (cand.owner() && cand.tx() && !cand.version().equals(tx.xidVersion()))
-                            keys.add(e.txKey());
-                    }
-
-                    IgniteInternalFuture<TxDeadlock> fut = cctx.tm().detectDeadlock(tx, keys);
-
-                    fut.listen(new IgniteInClosure<IgniteInternalFuture<TxDeadlock>>() {
-                        @Override public void apply(IgniteInternalFuture<TxDeadlock> fut) {
-                            try {
-                                TxDeadlock deadlock = fut.get();
-
-                                err = new IgniteTxTimeoutCheckedException("Failed to acquire lock within provided " +
-                                    "timeout for transaction [timeout=" + tx.timeout() + ", tx=" + CU.txString(tx) + ']',
-                                    deadlock != null ? new TransactionDeadlockException(deadlock.toString(cctx.shared())) :
-                                        null);
-                            }
-                            catch (IgniteCheckedException e) {
-                                err = e;
-
-                                U.warn(log, "Failed to detect deadlock.", e);
-                            }
-
-                            onComplete(false);
-                        }
-                    });
-                }
-                else
-                    err = new IgniteTxTimeoutCheckedException("Failed to acquire lock within provided " +
-                        "timeout for transaction [timeout=" + tx.timeout() + ", tx=" + CU.txString(tx) + ']');
-            }
-            else
-                onComplete(false);
-        }
-
-        /** {@inheritDoc} */
-        @Override public String toString() {
-            return S.toString(LockTimeoutObject.class, this);
-        }
-    }
-}
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/local/atomic/GridLocalAtomicCache.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/local/atomic/GridLocalAtomicCache.java
deleted file mode 100644
index bbe7a8f..0000000
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/local/atomic/GridLocalAtomicCache.java
+++ /dev/null
@@ -1,1580 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache.local.atomic;
-
-import java.io.Externalizable;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.Callable;
-import javax.cache.expiry.ExpiryPolicy;
-import javax.cache.processor.EntryProcessor;
-import javax.cache.processor.EntryProcessorException;
-import javax.cache.processor.EntryProcessorResult;
-import org.apache.ignite.IgniteCheckedException;
-import org.apache.ignite.cache.ReadRepairStrategy;
-import org.apache.ignite.internal.IgniteInternalFuture;
-import org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion;
-import org.apache.ignite.internal.processors.cache.CacheEntryPredicate;
-import org.apache.ignite.internal.processors.cache.CacheInvokeEntry;
-import org.apache.ignite.internal.processors.cache.CacheInvokeResult;
-import org.apache.ignite.internal.processors.cache.CacheLazyEntry;
-import org.apache.ignite.internal.processors.cache.CacheObject;
-import org.apache.ignite.internal.processors.cache.CacheOperationContext;
-import org.apache.ignite.internal.processors.cache.CachePartialUpdateCheckedException;
-import org.apache.ignite.internal.processors.cache.CacheStorePartialUpdateException;
-import org.apache.ignite.internal.processors.cache.EntryGetResult;
-import org.apache.ignite.internal.processors.cache.GridCacheContext;
-import org.apache.ignite.internal.processors.cache.GridCacheEntryEx;
-import org.apache.ignite.internal.processors.cache.GridCacheEntryRemovedException;
-import org.apache.ignite.internal.processors.cache.GridCacheOperation;
-import org.apache.ignite.internal.processors.cache.GridCachePreloader;
-import org.apache.ignite.internal.processors.cache.GridCachePreloaderAdapter;
-import org.apache.ignite.internal.processors.cache.GridCacheReturn;
-import org.apache.ignite.internal.processors.cache.IgniteCacheExpiryPolicy;
-import org.apache.ignite.internal.processors.cache.KeyCacheObject;
-import org.apache.ignite.internal.processors.cache.LockedEntriesInfo;
-import org.apache.ignite.internal.processors.cache.local.GridLocalCache;
-import org.apache.ignite.internal.processors.cache.persistence.CacheDataRow;
-import org.apache.ignite.internal.processors.cache.transactions.IgniteTxLocalEx;
-import org.apache.ignite.internal.processors.cache.version.GridCacheVersion;
-import org.apache.ignite.internal.processors.resource.GridResourceIoc;
-import org.apache.ignite.internal.util.F0;
-import org.apache.ignite.internal.util.future.GridFinishedFuture;
-import org.apache.ignite.internal.util.lang.GridPlainCallable;
-import org.apache.ignite.internal.util.lang.GridTuple3;
-import org.apache.ignite.internal.util.typedef.C1;
-import org.apache.ignite.internal.util.typedef.CI1;
-import org.apache.ignite.internal.util.typedef.CX1;
-import org.apache.ignite.internal.util.typedef.F;
-import org.apache.ignite.internal.util.typedef.T2;
-import org.apache.ignite.internal.util.typedef.internal.A;
-import org.apache.ignite.internal.util.typedef.internal.CU;
-import org.apache.ignite.internal.util.typedef.internal.U;
-import org.apache.ignite.lang.IgniteBiTuple;
-import org.apache.ignite.plugin.security.SecurityPermission;
-import org.apache.ignite.thread.IgniteThread;
-import org.apache.ignite.transactions.TransactionIsolation;
-import org.jetbrains.annotations.Nullable;
-
-import static org.apache.ignite.internal.processors.cache.GridCacheOperation.DELETE;
-import static org.apache.ignite.internal.processors.cache.GridCacheOperation.TRANSFORM;
-import static org.apache.ignite.internal.processors.cache.GridCacheOperation.UPDATE;
-
-/**
- * Non-transactional local cache.
- */
-public class GridLocalAtomicCache<K, V> extends GridLocalCache<K, V> {
-    /** */
-    private static final long serialVersionUID = 0L;
-
-    /** */
-    private GridCachePreloader preldr;
-
-    /** Locked entries info for each thread. */
-    private final LockedEntriesInfo lockedEntriesInfo = new LockedEntriesInfo();
-
-    /**
-     * Empty constructor required by {@link Externalizable}.
-     */
-    public GridLocalAtomicCache() {
-        // No-op.
-    }
-
-    /**
-     * @param ctx Cache context.
-     */
-    public GridLocalAtomicCache(GridCacheContext<K, V> ctx) {
-        super(ctx);
-
-        preldr = new GridCachePreloaderAdapter(ctx.group());
-    }
-
-    /** {@inheritDoc} */
-    @Override protected void checkJta() throws IgniteCheckedException {
-        // No-op.
-    }
-
-    /** {@inheritDoc} */
-    @Override public boolean isLocal() {
-        return true;
-    }
-
-    /** {@inheritDoc} */
-    @Override public GridCachePreloader preloader() {
-        return preldr;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected V getAndPut0(K key, V val, @Nullable CacheEntryPredicate filter) throws IgniteCheckedException {
-        CacheOperationContext opCtx = ctx.operationContextPerCall();
-
-        return (V)updateAllInternal(UPDATE,
-            Collections.singleton(key),
-            Collections.singleton(val),
-            null,
-            expiryPerCall(),
-            true,
-            false,
-            filter,
-            ctx.writeThrough(),
-            ctx.readThrough(),
-            opCtx != null && opCtx.isKeepBinary());
-    }
-
-    /** {@inheritDoc} */
-    @Override protected boolean put0(K key, V val, CacheEntryPredicate filter) throws IgniteCheckedException {
-        CacheOperationContext opCtx = ctx.operationContextPerCall();
-
-        Boolean res = (Boolean)updateAllInternal(UPDATE,
-            Collections.singleton(key),
-            Collections.singleton(val),
-            null,
-            expiryPerCall(),
-            false,
-            false,
-            filter,
-            ctx.writeThrough(),
-            ctx.readThrough(),
-            opCtx != null && opCtx.isKeepBinary());
-
-        assert res != null;
-
-        return res;
-    }
-
-    /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
-    @Override public IgniteInternalFuture<V> getAndPutAsync0(K key, V val, @Nullable CacheEntryPredicate filter) {
-        return updateAllAsync0(F0.asMap(key, val),
-            null,
-            null,
-            true,
-            false,
-            filter);
-    }
-
-    /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
-    @Override public IgniteInternalFuture<Boolean> putAsync0(K key, V val, @Nullable CacheEntryPredicate filter) {
-        return updateAllAsync0(F0.asMap(key, val),
-            null,
-            null,
-            false,
-            false,
-            filter);
-    }
-
-    /** {@inheritDoc} */
-    @Override protected void putAll0(Map<? extends K, ? extends V> m) throws IgniteCheckedException {
-        CacheOperationContext opCtx = ctx.operationContextPerCall();
-
-        updateAllInternal(UPDATE,
-            m.keySet(),
-            m.values(),
-            null,
-            expiryPerCall(),
-            false,
-            false,
-            null,
-            ctx.writeThrough(),
-            ctx.readThrough(),
-            opCtx != null && opCtx.isKeepBinary());
-    }
-
-    /** {@inheritDoc} */
-    @Override public IgniteInternalFuture<?> putAllAsync0(Map<? extends K, ? extends V> m) {
-        return updateAllAsync0(m,
-            null,
-            null,
-            false,
-            false,
-            null).chain(RET2NULL);
-    }
-
-    /** {@inheritDoc} */
-    @Override protected V getAndRemove0(K key) throws IgniteCheckedException {
-        CacheOperationContext opCtx = ctx.operationContextPerCall();
-
-        return (V)updateAllInternal(DELETE,
-            Collections.singleton(key),
-            null,
-            null,
-            expiryPerCall(),
-            true,
-            false,
-            null,
-            ctx.writeThrough(),
-            ctx.readThrough(),
-            opCtx != null && opCtx.isKeepBinary());
-    }
-
-    /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
-    @Override public IgniteInternalFuture<V> getAndRemoveAsync0(K key) {
-        return removeAllAsync0(Collections.singletonList(key), true, false, null);
-    }
-
-    /** {@inheritDoc} */
-    @Override public void removeAll0(Collection<? extends K> keys) throws IgniteCheckedException {
-        CacheOperationContext opCtx = ctx.operationContextPerCall();
-
-        updateAllInternal(DELETE,
-            keys,
-            null,
-            null,
-            expiryPerCall(),
-            false,
-            false,
-            null,
-            ctx.writeThrough(),
-            ctx.readThrough(),
-            opCtx != null && opCtx.isKeepBinary());
-    }
-
-    /** {@inheritDoc} */
-    @Override public IgniteInternalFuture<Object> removeAllAsync0(Collection<? extends K> keys) {
-        return removeAllAsync0(keys, false, false, null).chain(RET2NULL);
-    }
-
-    /** {@inheritDoc} */
-    @Override public boolean remove0(K key, final CacheEntryPredicate filter) throws IgniteCheckedException {
-        CacheOperationContext opCtx = ctx.operationContextPerCall();
-
-        Boolean rmv = (Boolean)updateAllInternal(DELETE,
-            Collections.singleton(key),
-            null,
-            null,
-            expiryPerCall(),
-            false,
-            false,
-            filter,
-            ctx.writeThrough(),
-            ctx.readThrough(),
-            opCtx != null && opCtx.isKeepBinary());
-
-        assert rmv != null;
-
-        return rmv;
-    }
-
-    /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
-    @Override public IgniteInternalFuture<Boolean> removeAsync0(K key, @Nullable CacheEntryPredicate filter) {
-        return removeAllAsync0(Collections.singletonList(key), false, false, filter);
-    }
-
-    /** {@inheritDoc} */
-    @Override public IgniteInternalFuture<?> removeAllAsync() {
-        return ctx.closures().callLocalSafe(new GridPlainCallable<Void>() {
-            @Override public Void call() throws Exception {
-                removeAll();
-
-                return null;
-            }
-        });
-    }
-
-    /** {@inheritDoc} */
-    @Override protected V get(
-        final K key,
-        String taskName,
-        boolean deserializeBinary,
-        boolean needVer) throws IgniteCheckedException {
-        Map<K, V> m = getAllInternal(Collections.singleton(key),
-            ctx.readThrough(),
-            taskName,
-            deserializeBinary,
-            false,
-            needVer);
-
-        assert m.isEmpty() || m.size() == 1 : m.size();
-
-        return F.firstValue(m);
-    }
-
-    /** {@inheritDoc} */
-    @Override public final Map<K, V> getAll(
-        Collection<? extends K> keys,
-        boolean deserializeBinary,
-        boolean needVer,
-        boolean recovery,
-        ReadRepairStrategy readRepairStrategy) throws IgniteCheckedException {
-        A.notNull(keys, "keys");
-
-        String taskName = ctx.kernalContext().job().currentTaskName();
-
-        return getAllInternal(keys,
-            ctx.readThrough(),
-            taskName,
-            deserializeBinary,
-            false,
-            needVer);
-    }
-
-    /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
-    @Override public IgniteInternalFuture<Map<K, V>> getAllAsync(
-        @Nullable final Collection<? extends K> keys,
-        final boolean forcePrimary,
-        boolean skipTx,
-        final String taskName,
-        final boolean deserializeBinary,
-        boolean recovery,
-        ReadRepairStrategy readRepairStrategy,
-        final boolean skipVals,
-        final boolean needVer
-    ) {
-        A.notNull(keys, "keys");
-
-        final boolean storeEnabled = ctx.readThrough();
-
-        return asyncOp(new GridPlainCallable<Map<K, V>>() {
-            @Override public Map<K, V> call() throws Exception {
-                return getAllInternal(keys, storeEnabled, taskName, deserializeBinary, skipVals, needVer);
-            }
-        });
-    }
-
-    /**
-     * Entry point to all public API get methods.
-     *
-     * @param keys Keys to remove.
-     * @param storeEnabled Store enabled flag.
-     * @param taskName Task name.
-     * @param deserializeBinary Deserialize binary .
-     * @param skipVals Skip value flag.
-     * @param needVer Need version.
-     * @return Key-value map.
-     * @throws IgniteCheckedException If failed.
-     */
-    @SuppressWarnings("ConstantConditions")
-    private Map<K, V> getAllInternal(@Nullable Collection<? extends K> keys,
-        boolean storeEnabled,
-        String taskName,
-        boolean deserializeBinary,
-        boolean skipVals,
-        boolean needVer
-    ) throws IgniteCheckedException {
-        ctx.checkSecurity(SecurityPermission.CACHE_READ);
-
-        if (F.isEmpty(keys))
-            return Collections.emptyMap();
-
-        CacheOperationContext opCtx = ctx.operationContextPerCall();
-
-        Map<K, V> vals = U.newHashMap(keys.size());
-
-        warnIfUnordered(keys, BulkOperation.GET);
-
-        final IgniteCacheExpiryPolicy expiry = expiryPolicy(opCtx != null ? opCtx.expiry() : null);
-
-        boolean success = true;
-        boolean readNoEntry = ctx.readNoEntry(expiry, false);
-        final boolean evt = !skipVals;
-
-        ctx.shared().database().checkpointReadLock();
-
-        try {
-            for (K key : keys) {
-                if (key == null)
-                    throw new NullPointerException("Null key.");
-
-                KeyCacheObject cacheKey = ctx.toCacheKeyObject(key);
-
-                boolean skipEntry = readNoEntry;
-
-                if (readNoEntry) {
-                    CacheDataRow row = ctx.offheap().read(ctx, cacheKey);
-
-                    if (row != null) {
-                        long expireTime = row.expireTime();
-
-                        if (expireTime == 0 || expireTime > U.currentTimeMillis()) {
-                            ctx.addResult(vals,
-                                cacheKey,
-                                row.value(),
-                                skipVals,
-                                false,
-                                deserializeBinary,
-                                true,
-                                null,
-                                row.version(),
-                                0,
-                                0,
-                                needVer,
-                                null);
-
-                            if (ctx.statisticsEnabled() && !skipVals)
-                                metrics0().onRead(true);
-
-                            if (evt) {
-                                ctx.events().readEvent(cacheKey,
-                                    null,
-                                    null,
-                                    row.value(),
-                                    taskName,
-                                    !deserializeBinary);
-                            }
-                        }
-                        else
-                            skipEntry = false;
-                    }
-                    else
-                        success = false;
-                }
-
-                if (!skipEntry) {
-                    GridCacheEntryEx entry = null;
-
-                    while (true) {
-                        try {
-                            entry = entryEx(cacheKey);
-
-                            if (entry != null) {
-                                CacheObject v;
-
-                                if (needVer) {
-                                    EntryGetResult res = entry.innerGetVersioned(
-                                        null,
-                                        null,
-                                        /*update-metrics*/false,
-                                        /*event*/evt,
-                                        null,
-                                        taskName,
-                                        expiry,
-                                        !deserializeBinary,
-                                        null);
-
-                                    if (res != null) {
-                                        ctx.addResult(
-                                            vals,
-                                            cacheKey,
-                                            res,
-                                            skipVals,
-                                            false,
-                                            deserializeBinary,
-                                            true,
-                                            needVer);
-                                    }
-                                    else
-                                        success = false;
-                                }
-                                else {
-                                    v = entry.innerGet(
-                                        null,
-                                        null,
-                                        /*read-through*/false,
-                                        /*update-metrics*/true,
-                                        /*event*/evt,
-                                        null,
-                                        taskName,
-                                        expiry,
-                                        !deserializeBinary);
-
-                                    if (v != null) {
-                                        ctx.addResult(vals,
-                                            cacheKey,
-                                            v,
-                                            skipVals,
-                                            false,
-                                            deserializeBinary,
-                                            true,
-                                            null,
-                                            0,
-                                            0,
-                                            null);
-                                    }
-                                    else
-                                        success = false;
-                                }
-                            }
-
-                            break; // While.
-                        }
-                        catch (GridCacheEntryRemovedException ignored) {
-                            // No-op, retry.
-                        }
-                        finally {
-                            if (entry != null)
-                                entry.touch();
-                        }
-
-                        if (!success && storeEnabled)
-                            break;
-                    }
-                }
-                if (!success) {
-                    if (!storeEnabled && ctx.statisticsEnabled() && !skipVals)
-                        metrics0().onRead(false);
-                }
-            }
-        }
-        finally {
-            ctx.shared().database().checkpointReadUnlock();
-        }
-
-        if (success || !storeEnabled)
-            return vals;
-
-        return getAllAsync(
-            keys,
-            null,
-            opCtx == null || !opCtx.skipStore(),
-            false,
-            taskName,
-            deserializeBinary,
-            opCtx != null && opCtx.recovery(),
-            null,
-            /*force primary*/false,
-            expiry,
-            skipVals,
-            needVer).get();
-    }
-
-    /** {@inheritDoc} */
-    @Override public <T> EntryProcessorResult<T> invoke(K key,
-        EntryProcessor<K, V, T> entryProcessor,
-        Object... args) throws IgniteCheckedException {
-        return invokeAsync(key, entryProcessor, args).get();
-    }
-
-    /** {@inheritDoc} */
-    @Override public <T> Map<K, EntryProcessorResult<T>> invokeAll(Set<? extends K> keys,
-        final EntryProcessor<K, V, T> entryProcessor,
-        Object... args) throws IgniteCheckedException {
-        A.notNull(keys, "keys", entryProcessor, "entryProcessor");
-
-        warnIfUnordered(keys, BulkOperation.INVOKE);
-
-        final boolean statsEnabled = ctx.statisticsEnabled();
-
-        final long start = statsEnabled ? System.nanoTime() : 0L;
-
-        Map<? extends K, EntryProcessor> invokeMap = F.viewAsMap(keys, new C1<K, EntryProcessor>() {
-            @Override public EntryProcessor apply(K k) {
-                return entryProcessor;
-            }
-        });
-
-        CacheOperationContext opCtx = ctx.operationContextPerCall();
-
-        final boolean keepBinary = opCtx != null && opCtx.isKeepBinary();
-
-        Map<K, EntryProcessorResult<T>> entryProcessorRes = (Map<K, EntryProcessorResult<T>>)updateAllInternal(
-                TRANSFORM,
-                invokeMap.keySet(),
-                invokeMap.values(),
-                args,
-                expiryPerCall(),
-                false,
-                false,
-                null,
-                ctx.writeThrough(),
-                ctx.readThrough(),
-                keepBinary);
-
-        if (statsEnabled)
-            metrics0().addInvokeTimeNanos(System.nanoTime() - start);
-
-        return entryProcessorRes;
-    }
-
-    /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
-    @Override public <T> IgniteInternalFuture<EntryProcessorResult<T>> invokeAsync(K key,
-        EntryProcessor<K, V, T> entryProcessor,
-        Object... args) throws EntryProcessorException {
-        A.notNull(key, "key", entryProcessor, "entryProcessor");
-
-        final boolean statsEnabled = ctx.statisticsEnabled();
-
-        final long start = statsEnabled ? System.nanoTime() : 0L;
-
-        Map<? extends K, EntryProcessor> invokeMap =
-            Collections.singletonMap(key, (EntryProcessor)entryProcessor);
-
-        IgniteInternalFuture<Map<K, EntryProcessorResult<T>>> fut = updateAllAsync0(null,
-            invokeMap,
-            args,
-            false,
-            false,
-            null);
-
-        return fut.chain(new CX1<IgniteInternalFuture<Map<K, EntryProcessorResult<T>>>, EntryProcessorResult<T>>() {
-            @Override public EntryProcessorResult<T> applyx(IgniteInternalFuture<Map<K, EntryProcessorResult<T>>> fut)
-                throws IgniteCheckedException {
-                Map<K, EntryProcessorResult<T>> resMap = fut.get();
-
-                if (statsEnabled)
-                    metrics0().addInvokeTimeNanos(System.nanoTime() - start);
-
-                if (resMap != null) {
-                    assert resMap.isEmpty() || resMap.size() == 1 : resMap.size();
-
-                    return resMap.isEmpty() ? new CacheInvokeResult<>() : resMap.values().iterator().next();
-                }
-
-                return new CacheInvokeResult<>();
-            }
-        });
-    }
-
-    /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
-    @Override public <T> IgniteInternalFuture<Map<K, EntryProcessorResult<T>>> invokeAllAsync(
-        Set<? extends K> keys,
-        final EntryProcessor<K, V, T> entryProcessor,
-        Object... args) {
-        A.notNull(keys, "keys", entryProcessor, "entryProcessor");
-
-        warnIfUnordered(keys, BulkOperation.INVOKE);
-
-        final boolean statsEnabled = ctx.statisticsEnabled();
-
-        final long start = statsEnabled ? System.nanoTime() : 0L;
-
-        Map<? extends K, EntryProcessor> invokeMap = F.viewAsMap(keys, new C1<K, EntryProcessor>() {
-            @Override public EntryProcessor apply(K k) {
-                return entryProcessor;
-            }
-        });
-
-        IgniteInternalFuture fut = updateAllAsync0(null,
-            invokeMap,
-            args,
-            true,
-            false,
-            null);
-
-        if (statsEnabled)
-            fut.listen(new InvokeAllTimeStatClosure(metrics0(), start));
-
-        return fut;
-    }
-
-    /** {@inheritDoc} */
-    @Override public <T> Map<K, EntryProcessorResult<T>> invokeAll(
-        Map<? extends K, ? extends EntryProcessor<K, V, T>> map,
-        Object... args) throws IgniteCheckedException {
-        A.notNull(map, "map");
-
-        warnIfUnordered(map, BulkOperation.INVOKE);
-
-        final boolean statsEnabled = ctx.statisticsEnabled();
-
-        final long start = statsEnabled ? System.nanoTime() : 0L;
-
-        CacheOperationContext opCtx = ctx.operationContextPerCall();
-
-        Map<K, EntryProcessorResult<T>> entryProcessorResult = (Map<K, EntryProcessorResult<T>>)updateAllInternal(
-                TRANSFORM,
-                map.keySet(),
-                map.values(),
-                args,
-                expiryPerCall(),
-                false,
-                false,
-                null,
-                ctx.writeThrough(),
-                ctx.readThrough(),
-                opCtx != null && opCtx.isKeepBinary());
-
-        if (statsEnabled)
-            metrics0().addInvokeTimeNanos(System.nanoTime() - start);
-
-        return entryProcessorResult;
-    }
-
-    /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
-    @Override public <T> IgniteInternalFuture<Map<K, EntryProcessorResult<T>>> invokeAllAsync(
-        Map<? extends K, ? extends EntryProcessor<K, V, T>> map,
-        Object... args) {
-        A.notNull(map, "map");
-
-        warnIfUnordered(map, BulkOperation.INVOKE);
-
-        final boolean statsEnabled = ctx.statisticsEnabled();
-
-        final long start = statsEnabled ? System.nanoTime() : 0L;
-
-        IgniteInternalFuture fut = updateAllAsync0(null,
-            map,
-            args,
-            true,
-            false,
-            null);
-
-        if (statsEnabled)
-            fut.listen(new InvokeAllTimeStatClosure(metrics0(), start));
-
-        return fut;
-    }
-
-    /**
-     * Entry point for public API update methods.
-     *
-     * @param map Put map. Either {@code map} or {@code invokeMap} should be passed.
-     * @param invokeMap Transform map. Either {@code map} or {@code invokeMap} should be passed.
-     * @param invokeArgs Optional arguments for EntryProcessor.
-     * @param retval Return value required flag.
-     * @param rawRetval Return {@code GridCacheReturn} instance.
-     * @param filter Cache entry filter for atomic updates.
-     * @return Completion future.
-     */
-    private IgniteInternalFuture updateAllAsync0(
-        @Nullable final Map<? extends K, ? extends V> map,
-        @Nullable final Map<? extends K, ? extends EntryProcessor> invokeMap,
-        @Nullable final Object[] invokeArgs,
-        final boolean retval,
-        final boolean rawRetval,
-        @Nullable final CacheEntryPredicate filter
-    ) {
-        final GridCacheOperation op = invokeMap != null ? TRANSFORM : UPDATE;
-
-        final Collection<? extends K> keys =
-            map != null ? map.keySet() : invokeMap != null ? invokeMap.keySet() : null;
-
-        final Collection<?> vals = map != null ? map.values() : invokeMap != null ? invokeMap.values() : null;
-
-        final boolean writeThrough = ctx.writeThrough();
-
-        final boolean readThrough = ctx.readThrough();
-
-        CacheOperationContext opCtx = ctx.operationContextPerCall();
-
-        final ExpiryPolicy expiry = expiryPerCall();
-
-        final boolean keepBinary = opCtx != null && opCtx.isKeepBinary();
-
-        return asyncOp(new GridPlainCallable<Object>() {
-            @Override public Object call() throws Exception {
-                return updateAllInternal(op,
-                    keys,
-                    vals,
-                    invokeArgs,
-                    expiry,
-                    retval,
-                    rawRetval,
-                    filter,
-                    writeThrough,
-                    readThrough,
-                    keepBinary);
-            }
-        });
-    }
-
-    /**
-     * Entry point for public API remove methods.
-     *
-     * @param keys Keys to remove.
-     * @param retval Return value required flag.
-     * @param rawRetval Return {@code GridCacheReturn} instance.
-     * @param filter Cache entry filter.
-     * @return Completion future.
-     */
-    private IgniteInternalFuture removeAllAsync0(
-        @Nullable final Collection<? extends K> keys,
-        final boolean retval,
-        final boolean rawRetval,
-        @Nullable final CacheEntryPredicate filter
-    ) {
-        final boolean writeThrough = ctx.writeThrough();
-
-        final boolean readThrough = ctx.readThrough();
-
-        final ExpiryPolicy expiryPlc = expiryPerCall();
-
-        CacheOperationContext opCtx = ctx.operationContextPerCall();
-
-        final boolean keepBinary = opCtx != null && opCtx.isKeepBinary();
-
-        return asyncOp(new GridPlainCallable<Object>() {
-            @Override public Object call() throws Exception {
-                return updateAllInternal(DELETE,
-                    keys,
-                    null,
-                    null,
-                    expiryPlc,
-                    retval,
-                    rawRetval,
-                    filter,
-                    writeThrough,
-                    readThrough,
-                    keepBinary);
-            }
-        });
-    }
-
-    /**
-     * Entry point for all public update methods (put, remove, invoke).
-     *
-     * @param op Operation.
-     * @param keys Keys.
-     * @param vals Values.
-     * @param invokeArgs Optional arguments for EntryProcessor.
-     * @param expiryPlc Expiry policy.
-     * @param retval Return value required flag.
-     * @param rawRetval Return {@code GridCacheReturn} instance.
-     * @param filter Cache entry filter.
-     * @param writeThrough Write through.
-     * @param readThrough Read through.
-     * @return Update result.
-     * @throws IgniteCheckedException If failed.
-     */
-    @SuppressWarnings("unchecked")
-    private Object updateAllInternal(GridCacheOperation op,
-        Collection<? extends K> keys,
-        @Nullable Iterable<?> vals,
-        @Nullable Object[] invokeArgs,
-        @Nullable ExpiryPolicy expiryPlc,
-        boolean retval,
-        boolean rawRetval,
-        CacheEntryPredicate filter,
-        boolean writeThrough,
-        boolean readThrough,
-        boolean keepBinary
-    ) throws IgniteCheckedException {
-        if (op == DELETE)
-            ctx.checkSecurity(SecurityPermission.CACHE_REMOVE);
-        else
-            ctx.checkSecurity(SecurityPermission.CACHE_PUT);
-
-        String taskName = ctx.kernalContext().job().currentTaskName();
-
-        GridCacheVersion ver = nextVersion();
-
-        CacheEntryPredicate[] filters = CU.filterArray(filter);
-
-        IgniteBiTuple<Boolean, ?> res = null;
-
-        CachePartialUpdateCheckedException err = null;
-
-        ctx.shared().database().checkpointReadLock();
-
-        try {
-            ctx.shared().database().ensureFreeSpace(ctx.dataRegion());
-
-            if (writeThrough && keys.size() > 1) {
-                return updateWithBatch(op,
-                    keys,
-                    vals,
-                    invokeArgs,
-                    expiryPlc,
-                    ver,
-                    filters,
-                    keepBinary,
-                    taskName);
-            }
-
-            Iterator<?> valsIter = vals != null ? vals.iterator() : null;
-
-            boolean intercept = ctx.config().getInterceptor() != null;
-
-            for (K key : keys) {
-                if (key == null)
-                    throw new NullPointerException("Null key.");
-
-                Object val = valsIter != null ? valsIter.next() : null;
-
-                if (val == null && op != DELETE)
-                    throw new NullPointerException("Null value.");
-
-                KeyCacheObject cacheKey = ctx.toCacheKeyObject(key);
-
-                if (op == UPDATE) {
-                    val = ctx.toCacheObject(val);
-
-                    ctx.validateKeyAndValue(cacheKey, (CacheObject)val);
-                }
-                else if (op == TRANSFORM)
-                    ctx.kernalContext().resource().inject(val, GridResourceIoc.AnnotationSet.ENTRY_PROCESSOR, ctx.name());
-
-                while (true) {
-                    GridCacheEntryEx entry = null;
-
-                    try {
-                        entry = entryEx(cacheKey);
-
-                        GridTuple3<Boolean, Object, EntryProcessorResult<Object>> t = entry.innerUpdateLocal(
-                            ver,
-                            val == null ? DELETE : op,
-                            val,
-                            invokeArgs,
-                            writeThrough,
-                            readThrough,
-                            retval,
-                            keepBinary,
-                            expiryPlc,
-                            true,
-                            true,
-                            filters,
-                            intercept,
-                            taskName,
-                            false);
-
-                        if (op == TRANSFORM) {
-                            if (t.get3() != null) {
-                                Map<K, EntryProcessorResult> computedMap;
-
-                                if (res == null) {
-                                    computedMap = U.newHashMap(keys.size());
-
-                                    res = new IgniteBiTuple<>(true, computedMap);
-                                }
-                                else
-                                    computedMap = (Map<K, EntryProcessorResult>)res.get2();
-
-                                computedMap.put(key, t.get3());
-                            }
-                        }
-                        else if (res == null)
-                            res = new T2(t.get1(), t.get2());
-
-                        break; // While.
-                    }
-                    catch (GridCacheEntryRemovedException ignored) {
-                        if (log.isDebugEnabled())
-                            log.debug("Got removed entry while updating (will retry): " + key);
-
-                        entry = null;
-                    }
-                    catch (IgniteCheckedException e) {
-                        if (err == null)
-                            err = partialUpdateException();
-
-                        err.add(F.asList(key), e);
-
-                        U.error(log, "Failed to update key : " + key, e);
-
-                        break;
-                    }
-                    finally {
-                        if (entry != null)
-                            entry.touch();
-                    }
-                }
-            }
-        }
-        finally {
-            ctx.shared().database().checkpointReadUnlock();
-        }
-
-        if (err != null)
-            throw err;
-
-        Object ret = res == null ? null : rawRetval ? new GridCacheReturn(
-            ctx,
-            true,
-            keepBinary,
-            U.deploymentClassLoader(ctx.kernalContext(), U.contextDeploymentClassLoaderId(ctx.kernalContext())),
-            res.get2(),
-            res.get1()
-        ) : (retval || op == TRANSFORM) ? res.get2() : res.get1();
-
-        if (op == TRANSFORM && ret == null)
-            ret = Collections.emptyMap();
-
-        return ret;
-    }
-
-    /**
-     * Updates entries using batched write-through.
-     *
-     * @param op Operation.
-     * @param keys Keys.
-     * @param vals Values.
-     * @param invokeArgs Optional arguments for EntryProcessor.
-     * @param expiryPlc Expiry policy.
-     * @param ver Cache version.
-     * @param filter Optional filter.
-     * @param taskName Task name.
-     * @return Results map for invoke operation.
-     * @throws CachePartialUpdateCheckedException If update failed.
-     */
-    @SuppressWarnings({"ForLoopReplaceableByForEach", "unchecked"})
-    private Map<K, EntryProcessorResult> updateWithBatch(
-        GridCacheOperation op,
-        Collection<? extends K> keys,
-        @Nullable Iterable<?> vals,
-        @Nullable Object[] invokeArgs,
-        @Nullable ExpiryPolicy expiryPlc,
-        GridCacheVersion ver,
-        @Nullable CacheEntryPredicate[] filter,
-        boolean keepBinary,
-        String taskName
-    ) throws IgniteCheckedException {
-        List<GridCacheEntryEx> locked = lockEntries(keys);
-
-        try {
-            int size = locked.size();
-
-            Map<KeyCacheObject, CacheObject> putMap = null;
-
-            Collection<KeyCacheObject> rmvKeys = null;
-
-            List<CacheObject> writeVals = null;
-
-            Map<K, EntryProcessorResult> invokeResMap =
-                op == TRANSFORM ? U.<K, EntryProcessorResult>newHashMap(size) : null;
-
-            List<GridCacheEntryEx> filtered = new ArrayList<>(size);
-
-            CachePartialUpdateCheckedException err = null;
-
-            Iterator<?> valsIter = vals != null ? vals.iterator() : null;
-
-            boolean intercept = ctx.config().getInterceptor() != null;
-
-            for (int i = 0; i < size; i++) {
-                GridCacheEntryEx entry = locked.get(i);
-
-                Object val = valsIter != null ? valsIter.next() : null;
-
-                if (val == null && op != DELETE)
-                    throw new NullPointerException("Null value.");
-
-                try {
-                    try {
-                        if (!ctx.isAllLocked(entry, filter)) {
-                            if (log.isDebugEnabled())
-                                log.debug("Entry did not pass the filter (will skip write) [entry=" + entry +
-                                    ", filter=" + Arrays.toString(filter) + ']');
-
-                            continue;
-                        }
-                    }
-                    catch (IgniteCheckedException e) {
-                        if (err == null)
-                            err = partialUpdateException();
-
-                        err.add(F.asList(entry.key()), e);
-
-                        continue;
-                    }
-
-                    if (op == TRANSFORM) {
-                        ctx.kernalContext().resource().inject(val,
-                            GridResourceIoc.AnnotationSet.ENTRY_PROCESSOR,
-                            ctx.name());
-
-                        EntryProcessor<Object, Object, Object> entryProcessor =
-                            (EntryProcessor<Object, Object, Object>)val;
-
-                        CacheObject old = entry.innerGet(
-                            null,
-                            null,
-                            /*read-through*/true,
-                            /*update-metrics*/true,
-                            /*event*/true,
-                            entryProcessor,
-                            taskName,
-                            null,
-                            keepBinary);
-
-                        Object oldVal = null;
-
-                        CacheInvokeEntry<Object, Object> invokeEntry = new CacheInvokeEntry<>(entry.key(), old,
-                            entry.version(), keepBinary, entry);
-
-                        CacheObject updated;
-                        Object updatedVal = null;
-                        CacheInvokeResult invokeRes = null;
-
-                        boolean validation = false;
-
-                        IgniteThread.onEntryProcessorEntered(false);
-
-                        try {
-                            Object computed = entryProcessor.process(invokeEntry, invokeArgs);
-
-                            updatedVal = ctx.unwrapTemporary(invokeEntry.getValue());
-
-                            updated = ctx.toCacheObject(updatedVal);
-
-                            if (computed != null)
-                                invokeRes = CacheInvokeResult.fromResult(ctx.unwrapTemporary(computed));
-
-                            if (invokeEntry.modified() && updated != null) {
-                                validation = true;
-
-                                ctx.validateKeyAndValue(entry.key(), updated);
-                            }
-                            else if (ctx.statisticsEnabled() && !invokeEntry.modified())
-                                ctx.cache().metrics0().onReadOnlyInvoke(old != null);
-                        }
-                        catch (Exception e) {
-                            invokeRes = CacheInvokeResult.fromError(e);
-
-                            updated = old;
-
-                            if (validation) {
-                                invokeResMap.put((K)entry.key().value(ctx.cacheObjectContext(), false), invokeRes);
-
-                                continue;
-                            }
-                        }
-                        finally {
-                            IgniteThread.onEntryProcessorLeft();
-                        }
-
-                        if (invokeRes != null)
-                            invokeResMap.put((K)entry.key().value(ctx.cacheObjectContext(), false), invokeRes);
-
-                        if (updated == null) {
-                            if (intercept) {
-                                IgniteBiTuple<Boolean, ?> interceptorRes = ctx.config().getInterceptor()
-                                    .onBeforeRemove(new CacheLazyEntry(ctx, entry.key(), invokeEntry.key(),
-                                        old, oldVal, keepBinary));
-
-                                if (ctx.cancelRemove(interceptorRes))
-                                    continue;
-                            }
-
-                            // Update previous batch.
-                            if (putMap != null) {
-                                err = updatePartialBatch(
-                                    filtered,
-                                    ver,
-                                    writeVals,
-                                    putMap,
-                                    null,
-                                    expiryPlc,
-                                    keepBinary,
-                                    err,
-                                    taskName,
-                                    true);
-
-                                putMap = null;
-                                writeVals = null;
-
-                                filtered = new ArrayList<>();
-                            }
-
-                            // Start collecting new batch.
-                            if (rmvKeys == null)
-                                rmvKeys = new ArrayList<>(size);
-
-                            rmvKeys.add(entry.key());
-                        }
-                        else {
-                            if (intercept) {
-                                Object interceptorVal = ctx.config().getInterceptor()
-                                    .onBeforePut(new CacheLazyEntry(ctx, entry.key(), invokeEntry.getKey(),
-                                        old, oldVal, keepBinary), updatedVal);
-
-                                if (interceptorVal == null)
-                                    continue;
-
-                                updated = ctx.toCacheObject(ctx.unwrapTemporary(interceptorVal));
-                            }
-
-                            // Update previous batch.
-                            if (rmvKeys != null) {
-                                err = updatePartialBatch(
-                                    filtered,
-                                    ver,
-                                    null,
-                                    null,
-                                    rmvKeys,
-                                    expiryPlc,
-                                    keepBinary,
-                                    err,
-                                    taskName,
-                                    true);
-
-                                rmvKeys = null;
-
-                                filtered = new ArrayList<>();
-                            }
-
-                            if (putMap == null) {
-                                putMap = new LinkedHashMap<>(size, 1.0f);
-                                writeVals = new ArrayList<>(size);
-                            }
-
-                            putMap.put(entry.key(), updated);
-                            writeVals.add(updated);
-                        }
-                    }
-                    else if (op == UPDATE) {
-                        CacheObject cacheVal = ctx.toCacheObject(val);
-
-                        if (intercept) {
-                            CacheObject old = entry.innerGet(
-                                null,
-                                null,
-                                /*read-through*/ctx.loadPreviousValue(),
-                                /*update-metrics*/true,
-                                /*event*/true,
-                                null,
-                                taskName,
-                                null,
-                                keepBinary);
-
-                            Object interceptorVal = ctx.config().getInterceptor().onBeforePut(new CacheLazyEntry(
-                                ctx, entry.key(), old, keepBinary), val);
-
-                            if (interceptorVal == null)
-                                continue;
-
-                            cacheVal = ctx.toCacheObject(ctx.unwrapTemporary(interceptorVal));
-                        }
-
-                        ctx.validateKeyAndValue(entry.key(), cacheVal);
-
-                        if (putMap == null) {
-                            putMap = new LinkedHashMap<>(size, 1.0f);
-                            writeVals = new ArrayList<>(size);
-                        }
-
-                        putMap.put(entry.key(), cacheVal);
-                        writeVals.add(cacheVal);
-                    }
-                    else {
-                        assert op == DELETE;
-
-                        if (intercept) {
-                            CacheObject old = entry.innerGet(
-                                null,
-                                null,
-                                /*read-through*/ctx.loadPreviousValue(),
-                                /*update-metrics*/true,
-                                /*event*/true,
-                                null,
-                                taskName,
-                                null,
-                                keepBinary);
-
-                            IgniteBiTuple<Boolean, ?> interceptorRes = ctx.config().getInterceptor()
-                                .onBeforeRemove(new CacheLazyEntry(ctx, entry.key(), old, keepBinary));
-
-                            if (ctx.cancelRemove(interceptorRes))
-                                continue;
-                        }
-
-                        if (rmvKeys == null)
-                            rmvKeys = new ArrayList<>(size);
-
-                        rmvKeys.add(entry.key());
-                    }
-
-                    filtered.add(entry);
-                }
-                catch (IgniteCheckedException e) {
-                    if (err == null)
-                        err = partialUpdateException();
-
-                    err.add(F.asList(entry.key()), e);
-                }
-                catch (GridCacheEntryRemovedException ignore) {
-                    assert false : "Entry cannot become obsolete while holding lock.";
-                }
-            }
-
-            // Store final batch.
-            if (putMap != null || rmvKeys != null) {
-                err = updatePartialBatch(
-                    filtered,
-                    ver,
-                    writeVals,
-                    putMap,
-                    rmvKeys,
-                    expiryPlc,
-                    keepBinary,
-                    err,
-                    taskName,
-                    op == TRANSFORM);
-            }
-            else
-                assert filtered.isEmpty();
-
-            if (err != null)
-                throw err;
-
-            return invokeResMap;
-        }
-        finally {
-            unlockEntries(locked);
-        }
-    }
-
-    /**
-     * @param entries Entries to update.
-     * @param ver Cache version.
-     * @param writeVals Cache values.
-     * @param putMap Values to put.
-     * @param rmvKeys Keys to remove.
-     * @param expiryPlc Expiry policy.
-     * @param err Optional partial update exception.
-     * @param taskName Task name.
-     * @param transformed {@code True} if transform operation performed.
-     * @return Partial update exception.
-     */
-    @SuppressWarnings({"unchecked", "ConstantConditions"})
-    @Nullable private CachePartialUpdateCheckedException updatePartialBatch(
-        List<GridCacheEntryEx> entries,
-        final GridCacheVersion ver,
-        @Nullable List<CacheObject> writeVals,
-        @Nullable Map<KeyCacheObject, CacheObject> putMap,
-        @Nullable Collection<KeyCacheObject> rmvKeys,
-        @Nullable ExpiryPolicy expiryPlc,
-        boolean keepBinary,
-        @Nullable CachePartialUpdateCheckedException err,
-        String taskName,
-        boolean transformed) {
-        assert putMap == null ^ rmvKeys == null;
-        GridCacheOperation op;
-
-        CacheStorePartialUpdateException storeErr = null;
-
-        try {
-            if (putMap != null) {
-                try {
-                    Map<? extends KeyCacheObject, IgniteBiTuple<? extends CacheObject, GridCacheVersion>> view = F.viewReadOnly(putMap,
-                        new C1<CacheObject, IgniteBiTuple<? extends CacheObject, GridCacheVersion>>() {
-                            @Override public IgniteBiTuple<? extends CacheObject, GridCacheVersion> apply(CacheObject val) {
-                                return F.t(val, ver);
-                            }
-                        });
-
-                    ctx.store().putAll(null, view);
-                }
-                catch (CacheStorePartialUpdateException e) {
-                    storeErr = e;
-                }
-
-                op = UPDATE;
-            }
-            else {
-                try {
-                    ctx.store().removeAll(null, rmvKeys);
-                }
-                catch (CacheStorePartialUpdateException e) {
-                    storeErr = e;
-                }
-
-                op = DELETE;
-            }
-        }
-        catch (IgniteCheckedException e) {
-            if (err == null)
-                err = partialUpdateException();
-
-            err.add(putMap != null ? putMap.keySet() : rmvKeys, e);
-
-            return err;
-        }
-
-        boolean intercept = ctx.config().getInterceptor() != null;
-
-        for (int i = 0; i < entries.size(); i++) {
-            GridCacheEntryEx entry = entries.get(i);
-
-            assert entry.lockedByCurrentThread();
-
-            if (entry.obsolete() ||
-                (storeErr != null && storeErr.failedKeys().contains(entry.key().value(ctx.cacheObjectContext(), false))))
-                continue;
-
-            try {
-                // We are holding java-level locks on entries at this point.
-                CacheObject writeVal = op == UPDATE ? writeVals.get(i) : null;
-
-                assert writeVal != null || op == DELETE : "null write value found.";
-
-                GridTuple3<Boolean, Object, EntryProcessorResult<Object>> t = entry.innerUpdateLocal(
-                    ver,
-                    op,
-                    writeVal,
-                    null,
-                    false,
-                    false,
-                    false,
-                    keepBinary,
-                    expiryPlc,
-                    true,
-                    true,
-                    null,
-                    false,
-                    taskName,
-                    transformed);
-
-                if (intercept) {
-                    if (op == UPDATE)
-                        ctx.config().getInterceptor().onAfterPut(new CacheLazyEntry(ctx, entry.key(), writeVal, keepBinary));
-                    else
-                        ctx.config().getInterceptor().onAfterRemove(new CacheLazyEntry(ctx, entry.key(), t.get2(), keepBinary));
-                }
-            }
-            catch (GridCacheEntryRemovedException ignore) {
-                assert false : "Entry cannot become obsolete while holding lock.";
-            }
-            catch (IgniteCheckedException e) {
-                if (err == null)
-                    err = partialUpdateException();
-
-                err.add(Collections.singleton(entry.key()), e);
-            }
-        }
-
-        return err;
-    }
-
-    /**
-     * Acquires java-level locks on cache entries.
-     *
-     * @param keys Keys to lock.
-     * @return Collection of locked entries.
-     */
-    private List<GridCacheEntryEx> lockEntries(Collection<? extends K> keys) {
-        GridCacheEntryEx[] locked = new GridCacheEntryEx[keys.size()];
-
-        boolean nullKeys = false;
-
-        while (true) {
-            int i = 0;
-
-            for (K key : keys) {
-                if (key == null) {
-                    nullKeys = true;
-
-                    break;
-                }
-
-                GridCacheEntryEx entry = entryEx(ctx.toCacheKeyObject(key));
-
-                locked[i++] = entry;
-            }
-
-            if (nullKeys)
-                break;
-
-            if (lockedEntriesInfo.tryLockEntries(locked))
-                return Arrays.asList(locked);
-        }
-
-        assert nullKeys;
-
-        AffinityTopologyVersion topVer = ctx.affinity().affinityTopologyVersion();
-
-        for (GridCacheEntryEx entry : locked) {
-            if (entry != null)
-                entry.touch();
-        }
-
-        throw new NullPointerException("Null key.");
-    }
-
-    /**
-     * Releases java-level locks on cache entries.
-     *
-     * @param locked Locked entries.
-     */
-    private void unlockEntries(Iterable<GridCacheEntryEx> locked) {
-        for (GridCacheEntryEx entry : locked)
-            entry.unlockEntry();
-
-        AffinityTopologyVersion topVer = ctx.affinity().affinityTopologyVersion();
-
-        for (GridCacheEntryEx entry : locked)
-            entry.touch();
-    }
-
-    /**
-     * @return New partial update exception.
-     */
-    private static CachePartialUpdateCheckedException partialUpdateException() {
-        return new CachePartialUpdateCheckedException("Failed to update keys (retry update if possible).");
-    }
-
-    /** {@inheritDoc} */
-    @Override public IgniteInternalFuture<Boolean> txLockAsync(Collection<KeyCacheObject> keys,
-        long timeout,
-        IgniteTxLocalEx tx,
-        boolean isRead,
-        boolean retval,
-        TransactionIsolation isolation,
-        boolean invalidate,
-        long createTtl,
-        long accessTtl) {
-        return new GridFinishedFuture<>(new UnsupportedOperationException("Locks are not supported for " +
-            "CacheAtomicityMode.ATOMIC mode (use CacheAtomicityMode.TRANSACTIONAL instead)"));
-    }
-
-    /** {@inheritDoc} */
-    @Override public IgniteInternalFuture<Boolean> lockAllAsync(@Nullable Collection<? extends K> keys,
-        long timeout) {
-        return new GridFinishedFuture<>(new UnsupportedOperationException("Locks are not supported for " +
-            "CacheAtomicityMode.ATOMIC mode (use CacheAtomicityMode.TRANSACTIONAL instead)"));
-    }
-
-    /** {@inheritDoc} */
-    @Override public void unlockAll(@Nullable Collection<? extends K> keys) throws IgniteCheckedException {
-        throw new UnsupportedOperationException("Locks are not supported for " +
-            "CacheAtomicityMode.ATOMIC mode (use CacheAtomicityMode.TRANSACTIONAL instead)");
-    }
-
-    /**
-     * @return Expiry policy.
-     */
-    @Nullable private ExpiryPolicy expiryPerCall() {
-        CacheOperationContext opCtx = ctx.operationContextPerCall();
-
-        ExpiryPolicy expiry = opCtx != null ? opCtx.expiry() : null;
-
-        if (expiry == null)
-            expiry = ctx.expiry();
-
-        return expiry;
-    }
-
-    /**
-     * @param op Operation closure.
-     * @return Future.
-     */
-    @SuppressWarnings("unchecked")
-    private IgniteInternalFuture asyncOp(final Callable<?> op) {
-        IgniteInternalFuture fail = asyncOpAcquire(/*retry*/false);
-
-        if (fail != null)
-            return fail;
-
-        IgniteInternalFuture f = ctx.closures().callLocalSafe(op);
-
-        f.listen(new CI1<IgniteInternalFuture<?>>() {
-            @Override public void apply(IgniteInternalFuture<?> f) {
-                asyncOpRelease(false);
-            }
-        });
-
-        return f;
-    }
-
-    /** {@inheritDoc} */
-    @Override public void onDeferredDelete(GridCacheEntryEx entry, GridCacheVersion ver) {
-        assert false : "Should not be called";
-    }
-}
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheDatabaseSharedManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheDatabaseSharedManager.java
index 28d58ab..2ca91ab 100755
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheDatabaseSharedManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheDatabaseSharedManager.java
@@ -1427,9 +1427,6 @@
                 cctx.kernalContext().pools().getSystemExecutorService(),
                 cctx.cache().cacheGroups(),
                 cacheGroup -> {
-                    if (cacheGroup.isLocal())
-                        return null;
-
                     cctx.database().checkpointReadLock();
 
                     try {
@@ -1789,9 +1786,6 @@
         Map<Integer, Set<Integer>> res = new HashMap<>();
 
         for (CacheGroupContext grp : cctx.cache().cacheGroups()) {
-            if (grp.isLocal())
-                continue;
-
             for (GridDhtLocalPartition locPart : grp.topology().currentLocalPartitions()) {
                 if (locPart.state() == OWNING && (preferWalRebalance() ||
                     locPart.fullSize() > historicalRebalanceThreshold.getOrDefault(walRebalanceThresholdLegacy)))
@@ -2726,7 +2720,7 @@
 
                         CacheGroupContext ctx = cctx.cache().cacheGroup(rbRec.groupId());
 
-                        if (ctx != null && !ctx.isLocal()) {
+                        if (ctx != null) {
                             GridDhtLocalPartition part = ctx.topology().forceCreatePartition(rbRec.partitionId());
 
                             ctx.offheap().dataStore(part).updateInitialCounter(rbRec.start(), rbRec.range());
@@ -2961,7 +2955,7 @@
         if (partId == -1)
             partId = cacheCtx.affinity().partition(dataEntry.key());
 
-        GridDhtLocalPartition locPart = cacheCtx.isLocal() ? null : cacheCtx.topology().forceCreatePartition(partId);
+        GridDhtLocalPartition locPart = cacheCtx.topology().forceCreatePartition(partId);
 
         switch (dataEntry.op()) {
             case CREATE:
@@ -3347,7 +3341,7 @@
     private static void dumpPartitionsInfo(GridCacheSharedContext cctx,
         IgniteLogger log) throws IgniteCheckedException {
         for (CacheGroupContext grp : cctx.cache().cacheGroups()) {
-            if (grp.isLocal() || !grp.persistenceEnabled())
+            if (!grp.persistenceEnabled())
                 continue;
 
             dumpPartitionsInfo(grp, log);
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheOffheapManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheOffheapManager.java
index 6a59a14..4668f48 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheOffheapManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheOffheapManager.java
@@ -126,7 +126,6 @@
 import org.apache.ignite.internal.util.typedef.internal.U;
 import org.apache.ignite.lang.IgniteBiTuple;
 import org.jetbrains.annotations.Nullable;
-
 import static org.apache.ignite.failure.FailureType.CRITICAL_ERROR;
 import static org.apache.ignite.internal.processors.cache.GridCacheTtlManager.DFLT_UNWIND_THROTTLING_TIMEOUT;
 import static org.apache.ignite.internal.processors.cache.distributed.dht.topology.GridDhtPartitionState.EVICTED;
@@ -399,7 +398,7 @@
     ) throws IgniteCheckedException {
         RowStore rowStore0 = store.rowStore();
 
-        if (rowStore0 != null && (partitionStatesRestored || grp.isLocal())) {
+        if (rowStore0 != null && partitionStatesRestored) {
             ((CacheFreeList)rowStore0.freeList()).saveMetadata(grp.statisticsHolderData());
 
             PartitionMetaStorage<SimpleDataRow> partStore = store.partStorage();
@@ -421,21 +420,19 @@
                 // localPartition will not acquire writeLock here because create=false.
                 GridDhtLocalPartition part = null;
 
-                if (!grp.isLocal()) {
-                    if (beforeDestroy)
-                        state = GridDhtPartitionState.EVICTED;
-                    else {
-                        part = getPartition(store);
+                if (beforeDestroy)
+                    state = GridDhtPartitionState.EVICTED;
+                else {
+                    part = getPartition(store);
 
-                        if (part != null && part.state() != GridDhtPartitionState.EVICTED)
-                            state = part.state();
-                    }
-
-                    // Do not save meta for evicted partitions on next checkpoints.
-                    if (state == null)
-                        return;
+                    if (part != null && part.state() != GridDhtPartitionState.EVICTED)
+                        state = part.state();
                 }
 
+                // Do not save meta for evicted partitions on next checkpoints.
+                if (state == null)
+                    return;
+
                 int grpId = grp.groupId();
                 long partMetaId = pageMem.partitionMetaPageId(grpId, store.partId());
 
@@ -520,10 +517,7 @@
                             }
                         }
 
-                        if (state != null)
-                            changed |= io.setPartitionState(partMetaPageAddr, (byte)state.ordinal());
-                        else
-                            assert grp.isLocal() : grp.cacheOrGroupName();
+                        changed |= io.setPartitionState(partMetaPageAddr, (byte)state.ordinal());
 
                         long cntrsPageId;
 
@@ -624,7 +618,7 @@
 
     /** {@inheritDoc} */
     @Override public long restoreStateOfPartition(int p, @Nullable Integer recoveryState) throws IgniteCheckedException {
-        if (grp.isLocal() || !grp.affinityNode() || !grp.dataRegion().config().isPersistenceEnabled()
+        if (!grp.affinityNode() || !grp.dataRegion().config().isPersistenceEnabled()
             || partitionStatesRestored)
             return 0;
 
@@ -744,7 +738,7 @@
 
     /** {@inheritDoc} */
     @Override public void restorePartitionStates() throws IgniteCheckedException {
-        if (grp.isLocal() || !grp.affinityNode() || !grp.dataRegion().config().isPersistenceEnabled()
+        if (!grp.affinityNode() || !grp.dataRegion().config().isPersistenceEnabled()
             || partitionStatesRestored)
             return;
 
@@ -1284,12 +1278,6 @@
 
     /** {@inheritDoc} */
     @Override public void preloadPartition(int partId) throws IgniteCheckedException {
-        if (grp.isLocal()) {
-            dataStore(null).preload();
-
-            return;
-        }
-
         GridDhtLocalPartition locPart = grp.topology().localPartition(partId, AffinityTopologyVersion.NONE, false, false);
 
         assert locPart != null && locPart.reservations() > 0;
@@ -3090,13 +3078,11 @@
         ) throws IgniteCheckedException {
             GridDhtLocalPartition part = null;
 
-            if (!grp.isLocal()) {
-                part = cctx.topology().localPartition(partId, AffinityTopologyVersion.NONE, false, false);
+            part = cctx.topology().localPartition(partId, AffinityTopologyVersion.NONE, false, false);
 
-                // Skip non-owned partitions.
-                if (part == null || part.state() != OWNING || !cctx.topology().initialized())
-                    return 0;
-            }
+            // Skip non-owned partitions.
+            if (part == null || part.state() != OWNING || !cctx.topology().initialized())
+                return 0;
 
             cctx.shared().database().checkpointReadLock();
 
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/checkpoint/CheckpointWorkflow.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/checkpoint/CheckpointWorkflow.java
index 215a1ac..19a8c72 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/checkpoint/CheckpointWorkflow.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/checkpoint/CheckpointWorkflow.java
@@ -379,7 +379,7 @@
         GridCompoundFuture grpHandleFut = checkpointCollectPagesInfoPool == null ? null : new GridCompoundFuture();
 
         for (CacheGroupContext grp : cacheGroupsContexts.get()) {
-            if (grp.isLocal() || !grp.walEnabled())
+            if (!grp.walEnabled())
                 continue;
 
             Runnable r = () -> {
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/migration/UpgradePendingTreeToPerPartitionTask.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/migration/UpgradePendingTreeToPerPartitionTask.java
index f743049..1d5b920 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/migration/UpgradePendingTreeToPerPartitionTask.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/migration/UpgradePendingTreeToPerPartitionTask.java
@@ -305,7 +305,7 @@
                 assert PageIO.getVersion(pageAddr) != 0;
 
                 IgniteCacheOffheapManager.CacheDataStore store =
-                    grp.offheap().dataStore(grp.isLocal() ? null : grp.topology().localPartition(partition));
+                    grp.offheap().dataStore(grp.topology().localPartition(partition));
 
                 if (store == null) {
                     log.warning("Failed to move old-version pending entry " +
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheDistributedQueryManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheDistributedQueryManager.java
index f0f7307..0c6dbe3 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheDistributedQueryManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheDistributedQueryManager.java
@@ -54,8 +54,6 @@
 import org.apache.ignite.lang.IgniteFuture;
 import org.apache.ignite.lang.IgniteReducer;
 import org.jetbrains.annotations.Nullable;
-
-import static org.apache.ignite.cache.CacheMode.LOCAL;
 import static org.apache.ignite.events.EventType.EVT_NODE_FAILED;
 import static org.apache.ignite.events.EventType.EVT_NODE_LEFT;
 import static org.apache.ignite.internal.GridTopic.TOPIC_CACHE;
@@ -106,8 +104,6 @@
     @Override public void start0() throws IgniteCheckedException {
         super.start0();
 
-        assert cctx.config().getCacheMode() != LOCAL;
-
         cctx.io().addCacheHandler(cctx.cacheId(), GridCacheQueryRequest.class, new CI2<UUID, GridCacheQueryRequest>() {
             @Override public void apply(UUID nodeId, GridCacheQueryRequest req) {
                 processQueryRequest(nodeId, req);
@@ -504,8 +500,6 @@
 
     /** */
     private CacheQueryFuture<?> queryDistributed(GridCacheQueryBean qry, final Collection<ClusterNode> nodes, boolean fields) {
-        assert cctx.config().getCacheMode() != LOCAL;
-
         if (log.isDebugEnabled())
             log.debug("Executing distributed query: " + qry);
 
@@ -551,7 +545,6 @@
     @SuppressWarnings({"unchecked"})
     @Override public GridCloseableIterator scanQueryDistributed(final GridCacheQueryAdapter qry,
         Collection<ClusterNode> nodes) throws IgniteCheckedException {
-        assert !cctx.isLocal() : cctx.name();
         assert qry.type() == GridCacheQueryType.SCAN : qry;
         assert qry.mvccSnapshot() != null || !cctx.mvccEnabled();
 
@@ -679,8 +672,6 @@
 
     /** {@inheritDoc} */
     @Override public CacheQueryFuture<?> queryFieldsLocal(GridCacheQueryBean qry) {
-        assert cctx.config().getCacheMode() != LOCAL;
-
         if (log.isDebugEnabled())
             log.debug("Executing query on local node: " + qry);
 
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheLocalQueryManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheLocalQueryManager.java
deleted file mode 100644
index 1e1f2f0..0000000
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheLocalQueryManager.java
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache.query;
-
-import java.util.Collection;
-import java.util.List;
-import org.apache.ignite.IgniteCheckedException;
-import org.apache.ignite.IgniteException;
-import org.apache.ignite.cluster.ClusterNode;
-import org.apache.ignite.internal.cache.query.index.IndexQueryResultMeta;
-import org.apache.ignite.internal.processors.query.GridQueryFieldMetadata;
-import org.apache.ignite.internal.util.lang.GridCloseableIterator;
-import org.jetbrains.annotations.Nullable;
-
-import static org.apache.ignite.cache.CacheMode.LOCAL;
-
-/**
- * Local query manager (for cache in LOCAL cache mode).
- */
-public class GridCacheLocalQueryManager<K, V> extends GridCacheQueryManager<K, V> {
-    /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
-    @Override protected boolean onPageReady(
-        boolean loc,
-        GridCacheQueryInfo qryInfo,
-        IndexQueryResultMeta metadata,
-        Collection<?> data,
-        boolean finished, Throwable e) {
-        GridCacheQueryFutureAdapter fut = qryInfo.localQueryFuture();
-
-        assert fut != null;
-
-        if (e != null)
-            fut.onPage(null, null, null, e, true);
-        else
-            fut.onPage(null, metadata, data, null, finished);
-
-        return true;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected boolean onFieldsPageReady(boolean loc,
-        GridCacheQueryInfo qryInfo,
-        @Nullable List<GridQueryFieldMetadata> metaData,
-        @Nullable Collection<?> entities,
-        @Nullable Collection<?> data,
-        boolean finished,
-        @Nullable Throwable e) {
-        assert qryInfo != null;
-
-        GridCacheLocalFieldsQueryFuture fut = (GridCacheLocalFieldsQueryFuture)qryInfo.localQueryFuture();
-
-        assert fut != null;
-
-        if (e != null)
-            fut.onPage(null, null, null, e, true);
-        else
-            fut.onFieldsPage(null, metaData, data, null, finished);
-
-        return true;
-    }
-
-    /** {@inheritDoc} */
-    @Override public void start0() throws IgniteCheckedException {
-        super.start0();
-
-        assert cctx.config().getCacheMode() == LOCAL;
-    }
-
-    /** {@inheritDoc} */
-    @Override public CacheQueryFuture<?> queryDistributed(GridCacheQueryBean qry, Collection<ClusterNode> nodes) {
-        assert cctx.config().getCacheMode() == LOCAL;
-
-        throw new IgniteException("Distributed queries are not available for local cache " +
-            "(use 'CacheQuery.execute(grid.forLocal())' instead) [cacheName=" + cctx.name() + ']');
-    }
-
-    /** {@inheritDoc} */
-    @Override public GridCloseableIterator scanQueryDistributed(GridCacheQueryAdapter qry,
-        Collection<ClusterNode> nodes) throws IgniteCheckedException {
-        assert cctx.isLocal() : cctx.name();
-
-        throw new IgniteException("Distributed scan query are not available for local cache " +
-            "(use 'CacheQuery.executeScanQuery(grid.forLocal())' instead) [cacheName=" + cctx.name() + ']');
-    }
-
-    /** {@inheritDoc} */
-    @Override public CacheQueryFuture<?> queryFieldsLocal(GridCacheQueryBean qry) {
-        assert cctx.config().getCacheMode() == LOCAL;
-
-        if (log.isDebugEnabled())
-            log.debug("Executing query on local node: " + qry);
-
-        GridCacheLocalFieldsQueryFuture fut = new GridCacheLocalFieldsQueryFuture(cctx, qry);
-
-        try {
-            qry.query().validate();
-
-            fut.execute();
-        }
-        catch (IgniteCheckedException e) {
-            fut.onDone(e);
-        }
-
-        return fut;
-    }
-
-    /** {@inheritDoc} */
-    @Override public CacheQueryFuture<?> queryFieldsDistributed(GridCacheQueryBean qry,
-        Collection<ClusterNode> nodes) {
-        assert cctx.config().getCacheMode() == LOCAL;
-
-        throw new IgniteException("Distributed queries are not available for local cache " +
-            "(use 'CacheQuery.execute(grid.forLocal())' instead) [cacheName=" + cctx.name() + ']');
-    }
-}
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryAdapter.java
index 6071b8e..72c6633 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryAdapter.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryAdapter.java
@@ -64,15 +64,12 @@
 import org.apache.ignite.internal.util.typedef.internal.A;
 import org.apache.ignite.internal.util.typedef.internal.CU;
 import org.apache.ignite.internal.util.typedef.internal.S;
-import org.apache.ignite.internal.util.typedef.internal.U;
 import org.apache.ignite.lang.IgniteBiPredicate;
 import org.apache.ignite.lang.IgniteClosure;
 import org.apache.ignite.lang.IgniteReducer;
 import org.apache.ignite.plugin.security.SecurityPermission;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
-
-import static org.apache.ignite.cache.CacheMode.LOCAL;
 import static org.apache.ignite.internal.processors.cache.query.GridCacheQueryType.INDEX;
 import static org.apache.ignite.internal.processors.cache.query.GridCacheQueryType.SCAN;
 import static org.apache.ignite.internal.processors.cache.query.GridCacheQueryType.SET;
@@ -590,17 +587,15 @@
     @Override public GridCloseableIterator executeScanQuery() throws IgniteCheckedException {
         assert type == SCAN : "Wrong processing of query: " + type;
 
-        if (!cctx.isLocal()) {
-            GridDhtCacheAdapter<?, ?> cacheAdapter = cctx.isNear() ? cctx.near().dht() : cctx.dht();
+        GridDhtCacheAdapter<?, ?> cacheAdapter = cctx.isNear() ? cctx.near().dht() : cctx.dht();
 
-            Set<Integer> lostParts = cacheAdapter.topology().lostPartitions();
+        Set<Integer> lostParts = cacheAdapter.topology().lostPartitions();
 
-            if (!lostParts.isEmpty()) {
-                if (part == null || lostParts.contains(part)) {
-                    throw new CacheException(new CacheInvalidStateException("Failed to execute query because cache partition " +
-                        "has been lostParts [cacheName=" + cctx.name() +
-                        ", part=" + (part == null ? lostParts.iterator().next() : part) + ']'));
-                }
+        if (!lostParts.isEmpty()) {
+            if (part == null || lostParts.contains(part)) {
+                throw new CacheException(new CacheInvalidStateException("Failed to execute query because cache partition " +
+                    "has been lostParts [cacheName=" + cctx.name() +
+                    ", part=" + (part == null ? lostParts.iterator().next() : part) + ']'));
             }
         }
 
@@ -669,17 +664,6 @@
         Integer part = partition();
 
         switch (cacheMode) {
-            case LOCAL:
-                if (prj != null)
-                    U.warn(log, "Ignoring query projection because it's executed over LOCAL cache " +
-                        "(only local node will be queried): " + this);
-
-                if (type == SCAN && cctx.config().getCacheMode() == LOCAL &&
-                    part != null && part >= cctx.affinity().partitions())
-                    throw new IgniteCheckedException("Invalid partition number: " + part);
-
-                return Collections.singletonList(cctx.localNode());
-
             case REPLICATED:
                 if (prj != null || part != null)
                     return nodes(cctx, prj, part);
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryManager.java
index a4bf962..31f02b8 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryManager.java
@@ -135,9 +135,7 @@
 import org.apache.ignite.spi.indexing.IndexingSpi;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
-
 import static org.apache.ignite.IgniteSystemProperties.IGNITE_QUIET;
-import static org.apache.ignite.cache.CacheMode.LOCAL;
 import static org.apache.ignite.events.EventType.EVT_CACHE_QUERY_EXECUTED;
 import static org.apache.ignite.events.EventType.EVT_CACHE_QUERY_OBJECT_READ;
 import static org.apache.ignite.events.EventType.EVT_NODE_FAILED;
@@ -817,7 +815,7 @@
             else
                 injectResources(keyValFilter);
 
-            Integer part = cctx.isLocal() ? null : qry.partition();
+            Integer part = qry.partition();
 
             if (part != null && (part < 0 || part >= cctx.affinity().partitions()))
                 return new GridEmptyCloseableIterator() {
@@ -861,15 +859,13 @@
             else {
                 locPart = null;
 
-                if (!cctx.isLocal()) {
-                    final GridDhtCacheAdapter dht = cctx.isNear() ? cctx.near().dht() : cctx.dht();
+                final GridDhtCacheAdapter dht = cctx.isNear() ? cctx.near().dht() : cctx.dht();
 
-                    Set<Integer> lostParts = dht.topology().lostPartitions();
+                Set<Integer> lostParts = dht.topology().lostPartitions();
 
-                    if (!lostParts.isEmpty()) {
-                        throw new CacheInvalidStateException("Failed to execute scan query because cache partition " +
-                            "has been lost [cacheName=" + cctx.name() + ", part=" + lostParts.iterator().next() + "]");
-                    }
+                if (!lostParts.isEmpty()) {
+                    throw new CacheInvalidStateException("Failed to execute scan query because cache partition " +
+                        "has been lost [cacheName=" + cctx.name() + ", part=" + lostParts.iterator().next() + "]");
                 }
 
                 it = cctx.offheap().cacheIterator(cctx.cacheId(), true, backups, topVer,
@@ -3124,7 +3120,7 @@
             // keep binary for remote scans if possible
             keepBinary = (!locNode && scanFilter == null && transformer == null && !readEvt) || qry.keepBinary();
             transform = transformer;
-            dht = cctx.isLocal() ? null : (cctx.isNear() ? cctx.near().dht() : cctx.dht());
+            dht = cctx.isNear() ? cctx.near().dht() : cctx.dht();
             cache = dht != null ? dht : cctx.cache();
             objCtx = cctx.cacheObjectContext();
             cacheName = cctx.name();
@@ -3228,8 +3224,7 @@
 
                 // Filter backups for SCAN queries, if it isn't partition scan.
                 // Other types are filtered in indexing manager.
-                if (!cctx.isReplicated() && /*qry.partition()*/this.locPart == null &&
-                    cctx.config().getCacheMode() != LOCAL && !incBackups &&
+                if (!cctx.isReplicated() && /*qry.partition()*/this.locPart == null && !incBackups &&
                     !cctx.affinity().primaryByKey(cctx.localNode(), key, topVer)) {
                     if (log.isDebugEnabled())
                         log.debug("Ignoring backup element [row=" + row +
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/continuous/CacheContinuousQueryHandler.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/continuous/CacheContinuousQueryHandler.java
index dc71aff..69c0a59 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/continuous/CacheContinuousQueryHandler.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/continuous/CacheContinuousQueryHandler.java
@@ -423,21 +423,21 @@
             @Override public void onBeforeRegister() {
                 GridCacheContext<K, V> cctx = cacheContext(ctx);
 
-                if (cctx != null && !cctx.isLocal())
+                if (cctx != null)
                     cctx.topology().readLock();
             }
 
             @Override public void onAfterRegister() {
                 GridCacheContext<K, V> cctx = cacheContext(ctx);
 
-                if (cctx != null && !cctx.isLocal())
+                if (cctx != null)
                     cctx.topology().readUnlock();
             }
 
             @Override public void onRegister() {
                 GridCacheContext<K, V> cctx = cacheContext(ctx);
 
-                if (cctx != null && !cctx.isLocal())
+                if (cctx != null)
                     locInitUpdCntrs = toCountersMap(cctx.topology().localUpdateCounters(false));
             }
 
@@ -681,7 +681,7 @@
                 assert !skipEvt || evt == null;
                 assert skipEvt || part == -1 && cntr == -1; // part == -1 && cntr == -1 means skip counter.
 
-                if (!cctx.mvccEnabled() || cctx.isLocal())
+                if (!cctx.mvccEnabled())
                     return true;
 
                 assert locInitUpdCntrs != null;
@@ -857,14 +857,12 @@
     void waitTopologyFuture(GridKernalContext ctx) throws IgniteCheckedException {
         GridCacheContext<K, V> cctx = cacheContext(ctx);
 
-        if (!cctx.isLocal()) {
-            AffinityTopologyVersion topVer = initTopVer;
+        AffinityTopologyVersion topVer = initTopVer;
 
-            cacheContext(ctx).shared().exchange().affinityReadyFuture(topVer).get();
+        cacheContext(ctx).shared().exchange().affinityReadyFuture(topVer).get();
 
-            for (int partId = 0; partId < cacheContext(ctx).affinity().partitions(); partId++)
-                getOrCreatePartitionRecovery(ctx, partId, topVer);
-        }
+        for (int partId = 0; partId < cacheContext(ctx).affinity().partitions(); partId++)
+            getOrCreatePartitionRecovery(ctx, partId, topVer);
     }
 
     /** {@inheritDoc} */
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/continuous/CacheContinuousQueryManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/continuous/CacheContinuousQueryManager.java
index f680e37..6d5253c 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/continuous/CacheContinuousQueryManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/continuous/CacheContinuousQueryManager.java
@@ -207,8 +207,7 @@
      * @return {@code True} if should notify continuous query manager.
      */
     public boolean notifyContinuousQueries(@Nullable IgniteInternalTx tx) {
-        return cctx.isLocal() ||
-            cctx.isReplicated() ||
+        return cctx.isReplicated() ||
             (!cctx.isNear() && !(tx != null && tx.onePhaseCommit() && !tx.local()));
     }
 
@@ -738,17 +737,14 @@
 
         final CacheContinuousQueryHandler hnd = clsr.apply();
 
-        boolean locOnly = cctx.isLocal() || loc;
-
         hnd.taskNameHash(taskNameHash);
         hnd.skipPrimaryCheck(skipPrimaryCheck);
         hnd.notifyExisting(notifyExisting);
         hnd.internal(internal);
         hnd.keepBinary(keepBinary);
-        hnd.localOnly(locOnly);
+        hnd.localOnly(loc);
 
-        IgnitePredicate<ClusterNode> pred = (loc || cctx.config().getCacheMode() == CacheMode.LOCAL)
-            ? F.nodeForNodeId(cctx.localNodeId())
+        IgnitePredicate<ClusterNode> pred = loc ? F.nodeForNodeId(cctx.localNodeId())
             : new IsAllPredicate<>(cctx.group().nodeFilter(), new AttributeNodeFilter(ATTR_CLIENT_MODE, false));
 
         assert pred != null : cctx.config();
@@ -758,13 +754,13 @@
         try {
             id = cctx.kernalContext().continuous().startRoutine(
                 hnd,
-                locOnly,
+                loc,
                 bufSize,
                 timeInterval,
                 autoUnsubscribe,
                 pred).get();
 
-            if (hnd.isQuery() && cctx.userCache() && !locOnly && !onStart)
+            if (hnd.isQuery() && cctx.userCache() && !loc && !onStart)
                 hnd.waitTopologyFuture(cctx.kernalContext());
         }
         catch (NodeStoppingException e) {
@@ -1000,7 +996,7 @@
                         lsnr.onRegister();
 
                         if (lsnrCnt.get() == 1) {
-                            if (grp.sharedGroup() && !cctx.isLocal())
+                            if (grp.sharedGroup())
                                 grp.addCacheWithContinuousQuery(cctx);
                         }
                     }
@@ -1039,7 +1035,7 @@
                 if ((lsnr = lsnrs.remove(id)) != null) {
                     int cnt = lsnrCnt.decrementAndGet();
 
-                    if (cctx.group().sharedGroup() && cnt == 0 && !cctx.isLocal())
+                    if (cctx.group().sharedGroup() && cnt == 0)
                         cctx.group().removeCacheWithContinuousQuery(cctx);
                 }
             }
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/jdbc/GridCacheQueryJdbcTask.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/jdbc/GridCacheQueryJdbcTask.java
index 97b2b7b..e2d04de 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/jdbc/GridCacheQueryJdbcTask.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/jdbc/GridCacheQueryJdbcTask.java
@@ -113,7 +113,7 @@
                     boolean start = ignite.configuration().isClientMode();
 
                     IgniteCache<?, ?> cache0 =
-                            ((IgniteKernal)ignite).context().cache().getOrStartPublicCache(start, false);
+                            ((IgniteKernal)ignite).context().cache().getOrStartPublicCache(start);
 
                     if (cache0 != null)
                         node = mapToNode(subgrid, args, first, cache0.getName());
@@ -257,7 +257,7 @@
                     try {
                         boolean start = ignite.configuration().isClientMode();
 
-                        cache = ((IgniteKernal)ignite).context().cache().getOrStartPublicCache(start, false);
+                        cache = ((IgniteKernal)ignite).context().cache().getOrStartPublicCache(start);
                     }
                     catch (IgniteCheckedException e) {
                         throw new IgniteException(e);
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxImplicitSingleStateImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxImplicitSingleStateImpl.java
index fb6dc55..6241138 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxImplicitSingleStateImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxImplicitSingleStateImpl.java
@@ -156,7 +156,7 @@
 
     /** {@inheritDoc} */
     @Override public GridDhtTopologyFuture topologyReadLock(GridCacheSharedContext cctx, GridFutureAdapter<?> fut) {
-        if (cacheCtx == null || cacheCtx.isLocal())
+        if (cacheCtx == null)
             return cctx.exchange().lastTopologyFuture();
 
         cacheCtx.topology().readLock();
@@ -175,7 +175,7 @@
 
     /** {@inheritDoc} */
     @Override public void topologyReadUnlock(GridCacheSharedContext cctx) {
-        if (cacheCtx == null || cacheCtx.isLocal())
+        if (cacheCtx == null)
             return;
 
         cacheCtx.topology().readUnlock();
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxLocalAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxLocalAdapter.java
index dc3da4c..7b67d58 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxLocalAdapter.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxLocalAdapter.java
@@ -1201,15 +1201,11 @@
                     if (retval || invoke) {
                         if (!cacheCtx.isNear()) {
                             if (!hasPrevVal) {
-                                // For non-local cache should read from store after lock on primary.
-                                boolean readThrough = cacheCtx.isLocal() &&
-                                    (invoke || cacheCtx.loadPreviousValue()) &&
-                                    !txEntry.skipStore();
-
+                                // For caches, we should read from store after lock on primary.
                                 v = cached.innerGet(
                                     null,
                                     this,
-                                    readThrough,
+                                    false,
                                     /*metrics*/!invoke,
                                     /*event*/!invoke && !dht(),
                                     null,
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxStateImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxStateImpl.java
index 00d4817..c3f3937 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxStateImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxStateImpl.java
@@ -282,12 +282,10 @@
 
             GridCacheContext<?, ?> cacheCtx = cctx.cacheContext(cacheId);
 
-            if (!cacheCtx.isLocal()) {
-                if (nonLocCtx == null)
-                    nonLocCtx = cacheCtx;
+            if (nonLocCtx == null)
+                nonLocCtx = cacheCtx;
 
-                cacheCtxs.putIfAbsent(cacheCtx.cacheId(), cacheCtx);
-            }
+            cacheCtxs.putIfAbsent(cacheCtx.cacheId(), cacheCtx);
         }
 
         if (nonLocCtx == null)
@@ -321,11 +319,9 @@
 
                 GridCacheContext<?, ?> cacheCtx = cctx.cacheContext(cacheId);
 
-                if (!cacheCtx.isLocal()) {
-                    nonLocCtx = cacheCtx;
+                nonLocCtx = cacheCtx;
 
-                    break;
-                }
+                break;
             }
 
             if (nonLocCtx != null)
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/verify/CacheInfo.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/verify/CacheInfo.java
index 0123199..4b2aeee 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/verify/CacheInfo.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/verify/CacheInfo.java
@@ -359,7 +359,7 @@
         out.writeInt(partitions);
         out.writeInt(mapped);
         out.writeObject(topVer);
-        U.writeEnum(out, mode);
+        out.writeByte(CacheMode.toCode(mode));
         out.writeInt(backupsCnt);
         U.writeString(out, affinityClsName);
         out.writeInt(cachesCnt);
@@ -377,7 +377,7 @@
         partitions = in.readInt();
         mapped = in.readInt();
         topVer = (AffinityTopologyVersion)in.readObject();
-        mode = CacheMode.fromOrdinal(in.readByte());
+        mode = CacheMode.fromCode(in.readByte());
         backupsCnt = in.readInt();
         affinityClsName = U.readString(in);
         cachesCnt = in.readInt();
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/verify/VerifyBackupPartitionsTask.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/verify/VerifyBackupPartitionsTask.java
index f14ab77..885dcee 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/verify/VerifyBackupPartitionsTask.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/verify/VerifyBackupPartitionsTask.java
@@ -222,7 +222,7 @@
                 Collection<CacheGroupContext> groups = ignite.context().cache().cacheGroups();
 
                 for (CacheGroupContext grp : groups) {
-                    if (!grp.systemCache() && !grp.isLocal())
+                    if (!grp.systemCache())
                         grpIds.add(grp.groupId());
                 }
             }
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/verify/VerifyBackupPartitionsTaskV2.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/verify/VerifyBackupPartitionsTaskV2.java
index 0376d81..f75a2b6 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/verify/VerifyBackupPartitionsTaskV2.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/verify/VerifyBackupPartitionsTaskV2.java
@@ -62,9 +62,7 @@
 import org.apache.ignite.resources.LoggerResource;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
-
 import static java.util.Collections.emptyMap;
-import static org.apache.ignite.cache.CacheMode.LOCAL;
 import static org.apache.ignite.internal.pagemem.PageIdAllocator.FLAG_DATA;
 import static org.apache.ignite.internal.processors.cache.verify.IdleVerifyUtility.GRID_NOT_IDLE_MSG;
 import static org.apache.ignite.internal.processors.cache.verify.IdleVerifyUtility.calculatePartitionHash;
@@ -389,7 +387,7 @@
             for (GridCacheContext cacheCtx : grp.caches()) {
                 DynamicCacheDescriptor desc = ignite.context().cache().cacheDescriptor(cacheCtx.name());
 
-                if (desc.cacheConfiguration().getCacheMode() != LOCAL && isCacheMatchFilter(desc))
+                if (isCacheMatchFilter(desc))
                     return true;
             }
 
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/continuous/GridContinuousProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/continuous/GridContinuousProcessor.java
index 0fa1f11..dd626cc 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/continuous/GridContinuousProcessor.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/continuous/GridContinuousProcessor.java
@@ -1463,7 +1463,7 @@
                         if (proc != null) {
                             GridCacheAdapter cache = ctx.cache().internalCache(hnd.cacheName());
 
-                            if (cache != null && !cache.isLocal() && cache.context().userCache())
+                            if (cache != null && cache.context().userCache())
                                 req.addUpdateCounters(ctx.localNodeId(), hnd.updateCounters());
                         }
                     }
@@ -1621,7 +1621,7 @@
                             if (proc != null) {
                                 GridCacheAdapter cache = ctx.cache().internalCache(hnd.cacheName());
 
-                                if (cache != null && !cache.isLocal() && cache.context().userCache()) {
+                                if (cache != null && cache.context().userCache()) {
                                     CachePartitionPartialCountersMap cntrsMap =
                                         cache.context().topology().localUpdateCounters(false);
 
@@ -2651,7 +2651,7 @@
 
                         GridCacheContext cctx = interCache != null ? interCache.context() : null;
 
-                        if (cctx != null && cntrsPerNode != null && !cctx.isLocal() && cctx.affinityNode())
+                        if (cctx != null && cntrsPerNode != null && cctx.affinityNode())
                             cntrsPerNode.put(ctx.localNodeId(),
                                 toCountersMap(cctx.topology().localUpdateCounters(false)));
 
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/datastreamer/DataStreamerImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/datastreamer/DataStreamerImpl.java
index 3ddab1a..1dca24a 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/datastreamer/DataStreamerImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/datastreamer/DataStreamerImpl.java
@@ -53,7 +53,6 @@
 import org.apache.ignite.IgniteException;
 import org.apache.ignite.IgniteInterruptedException;
 import org.apache.ignite.IgniteLogger;
-import org.apache.ignite.cache.CacheMode;
 import org.apache.ignite.cluster.ClusterNode;
 import org.apache.ignite.cluster.ClusterTopologyException;
 import org.apache.ignite.configuration.CacheConfiguration;
@@ -121,7 +120,6 @@
 import org.apache.ignite.stream.StreamReceiver;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
-
 import static org.apache.ignite.events.EventType.EVT_NODE_FAILED;
 import static org.apache.ignite.events.EventType.EVT_NODE_LEFT;
 import static org.apache.ignite.internal.GridTopic.TOPIC_DATASTREAM;
@@ -377,9 +375,6 @@
         if (cache == null) { // Possible, cache is not configured on node.
             assert ccfg != null;
 
-            if (ccfg.getCacheMode() == CacheMode.LOCAL)
-                throw new CacheException("Impossible to load Local cache configured remotely.");
-
             ctx.grid().getOrCreateCache(ccfg);
         }
 
@@ -845,25 +840,21 @@
 
             AffinityTopologyVersion topVer;
 
-            if (!cctx.isLocal()) {
-                GridDhtPartitionsExchangeFuture exchFut = ctx.cache().context().exchange().lastTopologyFuture();
+            GridDhtPartitionsExchangeFuture exchFut = ctx.cache().context().exchange().lastTopologyFuture();
 
-                if (!exchFut.isDone()) {
-                    ExchangeActions acts = exchFut.exchangeActions();
+            if (!exchFut.isDone()) {
+                ExchangeActions acts = exchFut.exchangeActions();
 
-                    if (acts != null && acts.cacheStopped(CU.cacheId(cacheName)))
-                        throw new CacheStoppedException(cacheName);
-                }
-
-                // It is safe to block here even if the cache gate is acquired.
-                topVer = exchFut.get();
+                if (acts != null && acts.cacheStopped(CU.cacheId(cacheName)))
+                    throw new CacheStoppedException(cacheName);
             }
-            else
-                topVer = ctx.cache().context().exchange().readyAffinityVersion();
+
+            // It is safe to block here even if the cache gate is acquired.
+            topVer = exchFut.get();
 
             List<List<ClusterNode>> assignments = cctx.affinity().assignments(topVer);
 
-            if (!allowOverwrite() && !cctx.isLocal()) { // Cases where cctx required.
+            if (!allowOverwrite()) { // Cases where cctx required.
                 gate = cctx.gate();
 
                 gate.enter();
@@ -1113,9 +1104,7 @@
         List<ClusterNode> res = null;
 
         if (!allowOverwrite())
-            res = cctx.isLocal() ?
-                aff.mapKeyToPrimaryAndBackups(cacheName, key, topVer) :
-                cctx.topology().nodes(cctx.affinity().partition(key), topVer);
+            res = cctx.topology().nodes(cctx.affinity().partition(key), topVer);
         else {
             ClusterNode node = aff.mapKeyToNode(cacheName, key, topVer);
 
@@ -1806,7 +1795,7 @@
             try {
                 GridCacheContext cctx = ctx.cache().internalCache(cacheName).context();
 
-                final boolean lockTop = !cctx.isLocal() && !allowOverwrite();
+                final boolean lockTop = !allowOverwrite();
 
                 GridDhtTopologyFuture topWaitFut = null;
 
@@ -2272,32 +2261,30 @@
                     try {
                         e.getKey().finishUnmarshal(cctx.cacheObjectContext(), cctx.deploy().globalLoader());
 
-                        if (!cctx.isLocal()) {
-                            int p = cctx.affinity().partition(e.getKey());
+                        int p = cctx.affinity().partition(e.getKey());
 
-                            if (ignoredParts.contains(p))
+                        if (ignoredParts.contains(p))
+                            continue;
+
+                        if (!reservedParts.contains(p)) {
+                            GridDhtLocalPartition part = cctx.topology().localPartition(p, topVer, true);
+
+                            if (!part.reserve()) {
+                                ignoredParts.add(p);
+
                                 continue;
+                            }
+                            else {
+                                // We must not allow to read from RENTING partitions.
+                                if (part.state() == GridDhtPartitionState.RENTING) {
+                                    part.release();
 
-                            if (!reservedParts.contains(p)) {
-                                GridDhtLocalPartition part = cctx.topology().localPartition(p, topVer, true);
-
-                                if (!part.reserve()) {
                                     ignoredParts.add(p);
 
                                     continue;
                                 }
-                                else {
-                                    // We must not allow to read from RENTING partitions.
-                                    if (part.state() == GridDhtPartitionState.RENTING) {
-                                        part.release();
 
-                                        ignoredParts.add(p);
-
-                                        continue;
-                                    }
-
-                                    reservedParts.add(p);
-                                }
+                                reservedParts.add(p);
                             }
                         }
 
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/GridCacheSetImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/GridCacheSetImpl.java
index 6417736..8d95044 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/GridCacheSetImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/GridCacheSetImpl.java
@@ -531,7 +531,7 @@
     private Collection<ClusterNode> dataNodes(AffinityTopologyVersion topVer) throws IgniteCheckedException {
         assert ctx.isPartitioned() || collocated : "Non-collocated mode is supported only for PARTITIONED caches.";
 
-        if (ctx.isLocal() || (ctx.isReplicated() && ctx.affinityNode()))
+        if (ctx.isReplicated() && ctx.affinityNode())
             return Collections.singleton(ctx.localNode());
 
         Collection<ClusterNode> nodes;
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/GridSetQueryPredicate.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/GridSetQueryPredicate.java
index 3450cec..7d3e83a 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/GridSetQueryPredicate.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/GridSetQueryPredicate.java
@@ -97,7 +97,7 @@
      * @return {@code True} if need to filter out non-primary keys during processing of set data query.
      */
     private boolean filterKeys() {
-        return !collocated && !(ctx.isLocal() || ctx.isReplicated()) &&
+        return !collocated && !ctx.isReplicated() &&
                 (CU.isNearEnabled(ctx) || ctx.isPartitioned());
     }
 
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/job/GridJobProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/job/GridJobProcessor.java
index 71e6247..d09f40b 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/job/GridJobProcessor.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/job/GridJobProcessor.java
@@ -1839,7 +1839,7 @@
                     if (!cctx.started()) // Cache not started.
                         return reserved;
 
-                    if (cctx.isLocal() || !cctx.rebalanceEnabled())
+                    if (!cctx.rebalanceEnabled())
                         continue;
 
                     boolean checkPartMapping = false;
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/client/ClientStatus.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/client/ClientStatus.java
index a6e797e..f91c7b7 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/client/ClientStatus.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/client/ClientStatus.java
@@ -49,6 +49,9 @@
     /** Cache already exists. */
     public static final int CACHE_EXISTS = 1001;
 
+    /** Invalid cache configuration. */
+    public static final int CACHE_CONFIG_INVALID = 1002;
+
     /** Too many cursors. */
     public static final int TOO_MANY_CURSORS = 1010;
 
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/client/cache/ClientCacheConfigurationSerializer.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/client/cache/ClientCacheConfigurationSerializer.java
index c8697f9..70c3ca8 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/client/cache/ClientCacheConfigurationSerializer.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/client/cache/ClientCacheConfigurationSerializer.java
@@ -33,12 +33,13 @@
 import org.apache.ignite.cache.PartitionLossPolicy;
 import org.apache.ignite.cache.QueryEntity;
 import org.apache.ignite.cache.QueryIndex;
+import org.apache.ignite.client.ClientException;
 import org.apache.ignite.configuration.CacheConfiguration;
 import org.apache.ignite.internal.binary.BinaryRawWriterEx;
 import org.apache.ignite.internal.processors.platform.client.ClientProtocolContext;
 import org.apache.ignite.internal.processors.platform.client.ClientProtocolVersionFeature;
 import org.apache.ignite.internal.processors.platform.utils.PlatformConfigurationUtils;
-
+import static java.util.Optional.ofNullable;
 import static org.apache.ignite.internal.processors.platform.client.ClientProtocolVersionFeature.QUERY_ENTITY_PRECISION_AND_SCALE;
 
 /**
@@ -155,7 +156,7 @@
                 CacheConfiguration.DFLT_CACHE_ATOMICITY_MODE);
 
         writer.writeInt(cfg.getBackups());
-        PlatformConfigurationUtils.writeEnumInt(writer, cfg.getCacheMode(), CacheConfiguration.DFLT_CACHE_MODE);
+        writer.writeInt(ofNullable(cfg.getCacheMode()).orElse(CacheConfiguration.DFLT_CACHE_MODE).code());
         writer.writeBoolean(cfg.isCopyOnRead());
         writer.writeString(cfg.getDataRegionName());
         writer.writeBoolean(cfg.isEagerTtl());
@@ -298,7 +299,7 @@
 
         short propCnt = reader.readShort();
 
-        CacheConfiguration cfg = new CacheConfiguration();
+        CacheConfiguration<?, ?> cfg = new CacheConfiguration<>();
 
         for (int i = 0; i < propCnt; i++) {
             short code = reader.readShort();
@@ -313,7 +314,7 @@
                     break;
 
                 case CACHE_MODE:
-                    cfg.setCacheMode(CacheMode.fromOrdinal(reader.readInt()));
+                    cfg.setCacheMode(CacheMode.fromCode(reader.readInt()));
                     break;
 
                 case COPY_ON_READ:
@@ -449,6 +450,9 @@
             }
         }
 
+        if (cfg.getCacheMode() == null)
+            throw new ClientException("Unsupported cache mode");
+
         return cfg;
     }
 
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/client/cache/ClientCacheCreateWithConfigurationRequest.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/client/cache/ClientCacheCreateWithConfigurationRequest.java
index d0ddb4d..e1cd446 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/client/cache/ClientCacheCreateWithConfigurationRequest.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/client/cache/ClientCacheCreateWithConfigurationRequest.java
@@ -26,6 +26,7 @@
 import org.apache.ignite.internal.processors.platform.client.ClientResponse;
 import org.apache.ignite.internal.processors.platform.client.ClientStatus;
 import org.apache.ignite.internal.processors.platform.client.IgniteClientException;
+import static org.apache.ignite.internal.processors.platform.client.ClientStatus.CACHE_CONFIG_INVALID;
 
 /**
  * Cache create with configuration request.
@@ -49,6 +50,8 @@
 
     /** {@inheritDoc} */
     @Override public ClientResponse process(ClientConnectionContext ctx) {
+        checkClientCacheConfiguration(cacheCfg);
+
         try {
             ctx.kernalContext().grid().createCache(cacheCfg);
         }
@@ -58,4 +61,12 @@
 
         return super.process(ctx);
     }
+
+    /**
+     * @param cfg Cache configuration to validate compatibility.
+     */
+    public static void checkClientCacheConfiguration(CacheConfiguration<?, ?> cfg) {
+        if (cfg.getCacheMode() == null)
+            throw new IgniteClientException(CACHE_CONFIG_INVALID, "The cache mode LOCAL is not supported by the server.");
+    }
 }
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/client/cache/ClientCacheGetOrCreateWithConfigurationRequest.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/client/cache/ClientCacheGetOrCreateWithConfigurationRequest.java
index fc15fc9..df80e21 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/client/cache/ClientCacheGetOrCreateWithConfigurationRequest.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/client/cache/ClientCacheGetOrCreateWithConfigurationRequest.java
@@ -26,6 +26,7 @@
 import org.apache.ignite.internal.processors.platform.client.ClientResponse;
 import org.apache.ignite.internal.processors.platform.client.ClientStatus;
 import org.apache.ignite.internal.processors.platform.client.IgniteClientException;
+import static org.apache.ignite.internal.processors.platform.client.cache.ClientCacheCreateWithConfigurationRequest.checkClientCacheConfiguration;
 
 /**
  * Cache get or create with configuration request.
@@ -49,6 +50,8 @@
 
     /** {@inheritDoc} */
     @Override public ClientResponse process(ClientConnectionContext ctx) {
+        checkClientCacheConfiguration(cacheCfg);
+
         try {
             ctx.kernalContext().grid().getOrCreateCache(cacheCfg);
         }
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/client/datastructures/ClientAtomicLongCreateRequest.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/client/datastructures/ClientAtomicLongCreateRequest.java
index 70ef46d..91d0b82 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/client/datastructures/ClientAtomicLongCreateRequest.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/client/datastructures/ClientAtomicLongCreateRequest.java
@@ -76,7 +76,7 @@
 
         return new AtomicConfiguration()
                 .setAtomicSequenceReserveSize(reader.readInt())
-                .setCacheMode(CacheMode.fromOrdinal(reader.readByte()))
+                .setCacheMode(CacheMode.fromCode(reader.readByte()))
                 .setBackups(reader.readInt())
                 .setGroupName(reader.readString());
     }
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/client/datastructures/ClientIgniteSetGetOrCreateRequest.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/client/datastructures/ClientIgniteSetGetOrCreateRequest.java
index dcb63c9..4efa2b6 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/client/datastructures/ClientIgniteSetGetOrCreateRequest.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/client/datastructures/ClientIgniteSetGetOrCreateRequest.java
@@ -51,7 +51,7 @@
         collectionConfiguration = create
                 ? new CollectionConfiguration()
                 .setAtomicityMode(CacheAtomicityMode.fromOrdinal(reader.readByte()))
-                .setCacheMode(CacheMode.fromOrdinal(reader.readByte()))
+                .setCacheMode(CacheMode.fromCode(reader.readByte()))
                 .setBackups(reader.readInt())
                 .setGroupName(reader.readString())
                 .setCollocated(reader.readBoolean())
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/utils/PlatformConfigurationUtils.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/utils/PlatformConfigurationUtils.java
index afc324f..4a24877 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/utils/PlatformConfigurationUtils.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/utils/PlatformConfigurationUtils.java
@@ -115,6 +115,7 @@
 import org.apache.ignite.transactions.TransactionConcurrency;
 import org.apache.ignite.transactions.TransactionIsolation;
 import org.apache.ignite.util.AttributeNodeFilter;
+import static java.util.Optional.ofNullable;
 
 /**
  * Configuration utils.
@@ -178,7 +179,7 @@
 
         ccfg.setAtomicityMode(CacheAtomicityMode.fromOrdinal(in.readInt()));
         ccfg.setBackups(in.readInt());
-        ccfg.setCacheMode(CacheMode.fromOrdinal(in.readInt()));
+        ccfg.setCacheMode(CacheMode.fromCode(in.readInt()));
         ccfg.setCopyOnRead(in.readBoolean());
         ccfg.setEagerTtl(in.readBoolean());
         ccfg.setInvalidate(in.readBoolean());
@@ -872,7 +873,7 @@
 
             atomic.setAtomicSequenceReserveSize(in.readInt());
             atomic.setBackups(in.readInt());
-            atomic.setCacheMode(CacheMode.fromOrdinal(in.readInt()));
+            atomic.setCacheMode(CacheMode.fromCode(in.readInt()));
 
             cfg.setAtomicConfiguration(atomic);
         }
@@ -1105,7 +1106,7 @@
 
         writeEnumInt(writer, ccfg.getAtomicityMode(), CacheConfiguration.DFLT_CACHE_ATOMICITY_MODE);
         writer.writeInt(ccfg.getBackups());
-        writeEnumInt(writer, ccfg.getCacheMode(), CacheConfiguration.DFLT_CACHE_MODE);
+        writer.writeInt(ofNullable(ccfg.getCacheMode()).orElse(CacheConfiguration.DFLT_CACHE_MODE).code());
         writer.writeBoolean(ccfg.isCopyOnRead());
         writer.writeBoolean(ccfg.isEagerTtl());
         writer.writeBoolean(ccfg.isInvalidate());
@@ -1490,7 +1491,7 @@
 
             w.writeInt(atomic.getAtomicSequenceReserveSize());
             w.writeInt(atomic.getBackups());
-            writeEnumInt(w, atomic.getCacheMode(), AtomicConfiguration.DFLT_CACHE_MODE);
+            w.writeInt(ofNullable(atomic.getCacheMode()).orElse(AtomicConfiguration.DFLT_CACHE_MODE).code());
         }
         else
             w.writeBoolean(false);
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java
index e9dc8ef..443e12d 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java
@@ -673,15 +673,7 @@
             else {
                 CacheConfiguration ccfg = cacheDesc.cacheConfiguration();
 
-                if (ccfg.getCacheMode() == CacheMode.LOCAL) {
-                    // Distributed operation is not allowed on LOCAL caches.
-                    if (log.isDebugEnabled())
-                        log.debug("Received schema propose discovery message, but cache is LOCAL " +
-                            "(will report error) [opId=" + opId + ", msg=" + msg + ']');
-
-                    msg.onError(new SchemaOperationException("Schema changes are not supported for LOCAL cache."));
-                }
-                else if (failOnStaticCacheSchemaChanges(cacheDesc)) {
+                if (failOnStaticCacheSchemaChanges(cacheDesc)) {
                     // Do not allow any schema changes when keep static cache configuration flag is set.
                     if (log.isDebugEnabled())
                         log.debug("Received schema propose discovery message, but cache is statically configured " +
@@ -2989,7 +2981,7 @@
         if (qry.isDistributedJoins() && qry.getPartitions() != null)
             throw new CacheException("Using both partitions and distributed JOINs is not supported for the same query");
 
-        if (qry.isLocal() && ctx.clientNode() && (cctx == null || cctx.config().getCacheMode() != CacheMode.LOCAL))
+        if (qry.isLocal() && ctx.clientNode())
             throw new CacheException("Execution of local SqlFieldsQuery on client node disallowed.");
 
         return executeQuerySafe(cctx, () -> {
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/sql/SqlCommandProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/sql/SqlCommandProcessor.java
index 358c82a..e58a5eb 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/sql/SqlCommandProcessor.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/sql/SqlCommandProcessor.java
@@ -22,7 +22,6 @@
 import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.IgniteCluster;
 import org.apache.ignite.IgniteLogger;
-import org.apache.ignite.cache.CacheMode;
 import org.apache.ignite.cache.QueryIndex;
 import org.apache.ignite.cache.QueryIndexType;
 import org.apache.ignite.cache.query.FieldsQueryCursor;
@@ -57,7 +56,6 @@
 import org.apache.ignite.internal.sql.command.SqlKillTransactionCommand;
 import org.apache.ignite.internal.util.future.GridFinishedFuture;
 import org.jetbrains.annotations.Nullable;
-
 import static org.apache.ignite.internal.processors.query.QueryUtils.convert;
 import static org.apache.ignite.internal.processors.query.QueryUtils.isDdlOnSchemaSupported;
 
@@ -221,8 +219,6 @@
                 if (typeDesc == null)
                     throw new SchemaOperationException(SchemaOperationException.CODE_TABLE_NOT_FOUND, cmd0.tableName());
 
-                ensureDdlSupported(cacheInfo);
-
                 QueryIndex newIdx = new QueryIndex();
 
                 newIdx.setName(cmd0.indexName());
@@ -255,8 +251,6 @@
                     GridCacheContextInfo<?, ?> cacheInfo = schemaMgr.cacheInfoForTable(typeDesc.schemaName(),
                         typeDesc.tableName());
 
-                    ensureDdlSupported(cacheInfo);
-
                     fut = ctx.query().dynamicIndexDrop(cacheInfo.name(), cmd0.schemaName(), cmd0.indexName(),
                         cmd0.ifExists());
                 }
@@ -348,17 +342,4 @@
                 tx.rollback();
         }
     }
-
-    /**
-     * Check if cache supports DDL statement.
-     *
-     * @param cctxInfo Cache context info.
-     * @throws IgniteSQLException If failed.
-     */
-    protected static void ensureDdlSupported(GridCacheContextInfo<?, ?> cctxInfo) throws IgniteSQLException {
-        if (cctxInfo.config().getCacheMode() == CacheMode.LOCAL) {
-            throw new IgniteSQLException("DDL statements are not supported on LOCAL caches",
-                IgniteQueryErrorCode.UNSUPPORTED_OPERATION);
-        }
-    }
 }
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCache.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCache.java
index a2738ac..0d23954 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCache.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCache.java
@@ -299,7 +299,7 @@
     @Override protected void writeExternalData(ObjectOutput out) throws IOException {
         U.writeString(out, name);
         U.writeIgniteUuid(out, dynamicDeploymentId);
-        U.writeEnum(out, mode);
+        out.writeByte(CacheMode.toCode(mode));
         out.writeLong(memorySize);
         out.writeLong(indexesSize);
         out.writeLong(size);
@@ -317,7 +317,7 @@
     @Override protected void readExternalData(byte protoVer, ObjectInput in) throws IOException, ClassNotFoundException {
         name = U.readString(in);
         dynamicDeploymentId = U.readIgniteUuid(in);
-        mode = CacheMode.fromOrdinal(in.readByte());
+        mode = CacheMode.fromCode(in.readByte());
         memorySize = in.readLong();
         indexesSize = in.readLong();
         size = in.readLong();
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheAggregatedMetrics.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheAggregatedMetrics.java
index 6dd91d8..8bcb5de 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheAggregatedMetrics.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheAggregatedMetrics.java
@@ -560,7 +560,7 @@
     /** {@inheritDoc} */
     @Override protected void writeExternalData(ObjectOutput out) throws IOException {
         U.writeString(out, name);
-        U.writeEnum(out, mode);
+        out.writeByte(CacheMode.toCode(mode));
         out.writeBoolean(sys);
         U.writeMap(out, metrics);
         out.writeObject(minHeapSize);
@@ -592,7 +592,7 @@
     /** {@inheritDoc} */
     @Override protected void readExternalData(byte protoVer, ObjectInput in) throws IOException, ClassNotFoundException {
         name = U.readString(in);
-        mode = CacheMode.fromOrdinal(in.readByte());
+        mode = CacheMode.fromCode(in.readByte());
         sys = in.readBoolean();
         metrics = U.readMap(in);
         minHeapSize = (Long)in.readObject();
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheConfiguration.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheConfiguration.java
index c7cf2a9..769a282 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheConfiguration.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheConfiguration.java
@@ -36,7 +36,6 @@
 import org.apache.ignite.internal.visor.query.VisorQueryEntity;
 import org.apache.ignite.lang.IgniteUuid;
 import org.jetbrains.annotations.Nullable;
-
 import static org.apache.ignite.internal.visor.util.VisorTaskUtils.compactClass;
 import static org.apache.ignite.internal.visor.util.VisorTaskUtils.compactIterable;
 
@@ -551,7 +550,7 @@
     @Override protected void writeExternalData(ObjectOutput out) throws IOException {
         U.writeString(out, name);
         U.writeString(out, grpName);
-        U.writeEnum(out, mode);
+        out.writeByte(CacheMode.toCode(mode));
         U.writeEnum(out, atomicityMode);
         out.writeBoolean(eagerTtl);
         U.writeEnum(out, writeSynchronizationMode);
@@ -599,7 +598,7 @@
     @Override protected void readExternalData(byte protoVer, ObjectInput in) throws IOException, ClassNotFoundException {
         name = U.readString(in);
         grpName = U.readString(in);
-        mode = CacheMode.fromOrdinal(in.readByte());
+        mode = CacheMode.fromCode(in.readByte());
         atomicityMode = CacheAtomicityMode.fromOrdinal(in.readByte());
         eagerTtl = in.readBoolean();
         writeSynchronizationMode = CacheWriteSynchronizationMode.fromOrdinal(in.readByte());
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheMetrics.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheMetrics.java
index 854bbd7..378de7a 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheMetrics.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorCacheMetrics.java
@@ -680,7 +680,7 @@
     /** {@inheritDoc} */
     @Override protected void writeExternalData(ObjectOutput out) throws IOException {
         U.writeString(out, name);
-        U.writeEnum(out, mode);
+        out.writeByte(CacheMode.toCode(mode));
 
         out.writeBoolean(sys);
         out.writeInt(size);
@@ -743,7 +743,7 @@
     /** {@inheritDoc} */
     @Override protected void readExternalData(byte protoVer, ObjectInput in) throws IOException, ClassNotFoundException {
         name = U.readString(in);
-        mode = CacheMode.fromOrdinal(in.readByte());
+        mode = CacheMode.fromCode(in.readByte());
         sys = in.readBoolean();
         size = in.readInt();
         keySize = in.readInt();
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorFindAndDeleteGarbageInPersistenceClosure.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorFindAndDeleteGarbageInPersistenceClosure.java
index 18597f2..f4078c1 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorFindAndDeleteGarbageInPersistenceClosure.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/cache/VisorFindAndDeleteGarbageInPersistenceClosure.java
@@ -247,7 +247,7 @@
             Collection<CacheGroupContext> groups = ignite.context().cache().cacheGroups();
 
             for (CacheGroupContext grp : groups) {
-                if (!grp.systemCache() && !grp.isLocal())
+                if (!grp.systemCache())
                     grpIds.add(grp.groupId());
             }
         }
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorAtomicConfiguration.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorAtomicConfiguration.java
index 79b468d..2c77d6e 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorAtomicConfiguration.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/node/VisorAtomicConfiguration.java
@@ -23,7 +23,6 @@
 import org.apache.ignite.cache.CacheMode;
 import org.apache.ignite.configuration.AtomicConfiguration;
 import org.apache.ignite.internal.util.typedef.internal.S;
-import org.apache.ignite.internal.util.typedef.internal.U;
 import org.apache.ignite.internal.visor.VisorDataTransferObject;
 
 /**
@@ -84,14 +83,14 @@
     /** {@inheritDoc} */
     @Override protected void writeExternalData(ObjectOutput out) throws IOException {
         out.writeInt(seqReserveSize);
-        U.writeEnum(out, cacheMode);
+        out.writeByte(CacheMode.toCode(cacheMode));
         out.writeInt(backups);
     }
 
     /** {@inheritDoc} */
     @Override protected void readExternalData(byte protoVer, ObjectInput in) throws IOException, ClassNotFoundException {
         seqReserveSize = in.readInt();
-        cacheMode = CacheMode.fromOrdinal(in.readByte());
+        cacheMode = CacheMode.fromCode(in.readByte());
         backups = in.readInt();
     }
 
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/visor/verify/ValidateIndexesClosure.java b/modules/core/src/main/java/org/apache/ignite/internal/visor/verify/ValidateIndexesClosure.java
index 38aa899..634768a 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/visor/verify/ValidateIndexesClosure.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/visor/verify/ValidateIndexesClosure.java
@@ -238,7 +238,7 @@
             Collection<CacheGroupContext> groups = ignite.context().cache().cacheGroups();
 
             for (CacheGroupContext grp : groups) {
-                if (!grp.systemCache() && !grp.isLocal() && grp.affinityNode())
+                if (!grp.systemCache() && grp.affinityNode())
                     grpIds.add(grp.groupId());
             }
         }
diff --git a/modules/core/src/main/resources/META-INF/classnames.properties b/modules/core/src/main/resources/META-INF/classnames.properties
index 17490a8..5675a08 100644
--- a/modules/core/src/main/resources/META-INF/classnames.properties
+++ b/modules/core/src/main/resources/META-INF/classnames.properties
@@ -445,7 +445,6 @@
 org.apache.ignite.internal.processors.affinity.GridAffinityProcessor$2
 org.apache.ignite.internal.processors.affinity.GridAffinityProcessor$AffinityFuture$1
 org.apache.ignite.internal.processors.affinity.GridAffinityUtils$AffinityJob
-org.apache.ignite.internal.processors.affinity.LocalAffinityFunction
 org.apache.ignite.internal.processors.authentication.IgniteAccessControlException
 org.apache.ignite.internal.processors.authentication.IgniteAuthenticationProcessor$InitialUsersData
 org.apache.ignite.internal.processors.authentication.User
@@ -647,7 +646,6 @@
 org.apache.ignite.internal.processors.cache.GridCacheProcessor$7$1
 org.apache.ignite.internal.processors.cache.GridCacheProcessor$8
 org.apache.ignite.internal.processors.cache.GridCacheProcessor$9
-org.apache.ignite.internal.processors.cache.GridCacheProcessor$LocalAffinityFunction
 org.apache.ignite.internal.processors.cache.GridCacheProxyImpl
 org.apache.ignite.internal.processors.cache.GridCacheReturn
 org.apache.ignite.internal.processors.cache.GridCacheTtlManager$1
@@ -1044,14 +1042,6 @@
 org.apache.ignite.internal.processors.cache.distributed.near.GridNearUnlockRequest
 org.apache.ignite.internal.processors.cache.dr.GridCacheDrExpirationInfo
 org.apache.ignite.internal.processors.cache.dr.GridCacheDrInfo
-org.apache.ignite.internal.processors.cache.local.GridLocalCache
-org.apache.ignite.internal.processors.cache.local.GridLocalLockFuture$LockTimeoutObject$1
-org.apache.ignite.internal.processors.cache.local.atomic.GridLocalAtomicCache
-org.apache.ignite.internal.processors.cache.local.atomic.GridLocalAtomicCache$3
-org.apache.ignite.internal.processors.cache.local.atomic.GridLocalAtomicCache$4
-org.apache.ignite.internal.processors.cache.local.atomic.GridLocalAtomicCache$5
-org.apache.ignite.internal.processors.cache.local.atomic.GridLocalAtomicCache$8
-org.apache.ignite.internal.processors.cache.local.atomic.GridLocalAtomicCache$9
 org.apache.ignite.internal.processors.cache.mvcc.DeadlockProbe
 org.apache.ignite.internal.processors.cache.mvcc.MvccCoordinator
 org.apache.ignite.internal.processors.cache.mvcc.MvccProcessorImpl$2
diff --git a/modules/core/src/test/config/example-cache.xml b/modules/core/src/test/config/example-cache.xml
index fe040bb..67f4f78 100644
--- a/modules/core/src/test/config/example-cache.xml
+++ b/modules/core/src/test/config/example-cache.xml
@@ -88,20 +88,6 @@
                     <property name="cacheMode" value="REPLICATED"/>
                     <property name="atomicityMode" value="TRANSACTIONAL"/>
                 </bean>
-
-                  <!-- Local cache example configuration (Atomic mode). -->
-                  <bean parent="cache-template">
-                      <property name="name" value="local"/>
-                      <property name="cacheMode" value="LOCAL"/>
-                      <property name="atomicityMode" value="ATOMIC"/>
-                  </bean>
-
-                <!-- Local cache example configuration (Transactional mode). -->
-                <bean parent="cache-template">
-                    <property name="name" value="local_tx"/>
-                    <property name="cacheMode" value="LOCAL"/>
-                    <property name="atomicityMode" value="TRANSACTIONAL"/>
-                </bean>
             </list>
         </property>
 
diff --git a/modules/core/src/test/config/load/cache-benchmark.xml b/modules/core/src/test/config/load/cache-benchmark.xml
index 4422b53..661551c 100644
--- a/modules/core/src/test/config/load/cache-benchmark.xml
+++ b/modules/core/src/test/config/load/cache-benchmark.xml
@@ -40,15 +40,6 @@
 
                     <property name="writeSynchronizationMode" value="FULL_ASYNC"/>
                 </bean>
-                <bean class="org.apache.ignite.configuration.CacheConfiguration">
-                    <property name="name" value="local"/>
-
-                    <property name="cacheMode" value="LOCAL"/>
-
-                    <property name="swapEnabled" value="false"/>
-
-                    <property name="writeSynchronizationMode" value="FULL_ASYNC"/>
-                </bean>
             </list>
         </property>
 
diff --git a/modules/core/src/test/config/load/cache-client-benchmark.xml b/modules/core/src/test/config/load/cache-client-benchmark.xml
index 41bd974..6ff7e2e 100644
--- a/modules/core/src/test/config/load/cache-client-benchmark.xml
+++ b/modules/core/src/test/config/load/cache-client-benchmark.xml
@@ -34,7 +34,7 @@
                 <bean class="org.apache.ignite.configuration.CacheConfiguration">
                     <property name="name" value="local"/>
 
-                    <property name="cacheMode" value="LOCAL"/>
+                    <property name="cacheMode" value="REPLICATED"/>
 
                     <property name="swapEnabled" value="false"/>
 
diff --git a/modules/core/src/test/config/spring-cache-swap.xml b/modules/core/src/test/config/spring-cache-swap.xml
index 6caaf32..0260200 100644
--- a/modules/core/src/test/config/spring-cache-swap.xml
+++ b/modules/core/src/test/config/spring-cache-swap.xml
@@ -32,7 +32,7 @@
             <bean class="org.apache.ignite.configuration.CacheConfiguration">
                 <property name="name" value="test-cache"/>
 
-                <property name="cacheMode" value="LOCAL"/>
+                <property name="cacheMode" value="REPLICATED"/>
 
                 <property name="swapEnabled" value="true"/>
 
diff --git a/modules/core/src/test/config/websession/example-cache-base.xml b/modules/core/src/test/config/websession/example-cache-base.xml
index 8777528..4f9cf32 100644
--- a/modules/core/src/test/config/websession/example-cache-base.xml
+++ b/modules/core/src/test/config/websession/example-cache-base.xml
@@ -96,20 +96,6 @@
                     <property name="cacheMode" value="REPLICATED"/>
                     <property name="atomicityMode" value="TRANSACTIONAL"/>
                 </bean>
-
-                <!-- Local cache example configuration (Atomic mode). -->
-                <bean parent="cache-template">
-                    <property name="name" value="local"/>
-                    <property name="cacheMode" value="LOCAL"/>
-                    <property name="atomicityMode" value="ATOMIC"/>
-                </bean>
-
-                <!-- Local cache example configuration (Transactional mode). -->
-                <bean parent="cache-template">
-                    <property name="name" value="local_tx"/>
-                    <property name="cacheMode" value="LOCAL"/>
-                    <property name="atomicityMode" value="TRANSACTIONAL"/>
-                </bean>
             </list>
         </property>
 
diff --git a/modules/core/src/test/java/org/apache/ignite/cache/affinity/local/LocalAffinityFunctionTest.java b/modules/core/src/test/java/org/apache/ignite/cache/affinity/local/LocalAffinityFunctionTest.java
deleted file mode 100755
index 0b62c33..0000000
--- a/modules/core/src/test/java/org/apache/ignite/cache/affinity/local/LocalAffinityFunctionTest.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.cache.affinity.local;
-
-import org.apache.ignite.Ignite;
-import org.apache.ignite.cache.CacheMode;
-import org.apache.ignite.cache.affinity.rendezvous.RendezvousAffinityFunction;
-import org.apache.ignite.configuration.CacheConfiguration;
-import org.apache.ignite.configuration.IgniteConfiguration;
-import org.apache.ignite.internal.processors.affinity.LocalAffinityFunction;
-import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
-import org.junit.Test;
-
-/**
- * Test for local affinity function.
- */
-public class LocalAffinityFunctionTest extends GridCommonAbstractTest {
-    /** */
-    private static final int NODE_CNT = 1;
-
-    /** */
-    private static final String CACHE1 = "cache1";
-
-    /** {@inheritDoc} */
-    @Override protected IgniteConfiguration getConfiguration(String igniteInstanceName) throws Exception {
-        IgniteConfiguration cfg = super.getConfiguration(igniteInstanceName);
-
-        CacheConfiguration ccfg = new CacheConfiguration(DEFAULT_CACHE_NAME);
-
-        ccfg.setBackups(1);
-        ccfg.setName(CACHE1);
-        ccfg.setCacheMode(CacheMode.LOCAL);
-        ccfg.setAffinity(new RendezvousAffinityFunction());
-        cfg.setCacheConfiguration(ccfg);
-
-        return cfg;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected void beforeTestsStarted() throws Exception {
-        super.beforeTestsStarted();
-        startGrids(NODE_CNT);
-    }
-
-    /** */
-    @Test
-    public void testWronglySetAffinityFunctionForLocalCache() {
-        Ignite node = ignite(NODE_CNT - 1);
-
-        CacheConfiguration ccf = node.cache(CACHE1).getConfiguration(CacheConfiguration.class);
-
-        assertEquals(LocalAffinityFunction.class, ccf.getAffinity().getClass());
-    }
-}
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/GridCacheHashMapPutAllWarningsTest.java b/modules/core/src/test/java/org/apache/ignite/internal/GridCacheHashMapPutAllWarningsTest.java
index e518a4d..c64627a 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/GridCacheHashMapPutAllWarningsTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/GridCacheHashMapPutAllWarningsTest.java
@@ -23,15 +23,9 @@
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
-import java.util.Map;
 import java.util.TreeSet;
-import javax.cache.processor.EntryProcessor;
-import javax.cache.processor.EntryProcessorException;
-import javax.cache.processor.EntryProcessorResult;
-import javax.cache.processor.MutableEntry;
 import org.apache.ignite.Ignite;
 import org.apache.ignite.IgniteCache;
-import org.apache.ignite.IgniteSystemProperties;
 import org.apache.ignite.cache.CacheAtomicityMode;
 import org.apache.ignite.cache.CacheMode;
 import org.apache.ignite.configuration.CacheConfiguration;
@@ -42,7 +36,6 @@
 import org.apache.ignite.transactions.Transaction;
 import org.apache.ignite.transactions.TransactionConcurrency;
 import org.apache.ignite.transactions.TransactionIsolation;
-import org.junit.Assume;
 import org.junit.Test;
 
 /**
@@ -152,55 +145,6 @@
      * @throws Exception If failed.
      */
     @Test
-    public void testHashMapInvokeAllLocal() throws Exception {
-        Assume.assumeFalse( "Local transactional caches not supported by MVCC",
-            IgniteSystemProperties.getBoolean(IgniteSystemProperties.IGNITE_FORCE_MVCC_MODE_IN_TESTS, false));
-
-        List<String> messages = Collections.synchronizedList(new ArrayList<>());
-
-        testLog = new ListeningTestLogger(log());
-
-        testLog.registerListener((s) -> {
-            if (s.contains("deadlock"))
-                messages.add(s);
-        });
-
-        Ignite ignite = startGrid(0);
-
-        IgniteCache<Integer, String> c = ignite.getOrCreateCache(new CacheConfiguration<Integer, String>("invoke")
-            .setCacheMode(CacheMode.LOCAL).setAtomicityMode(CacheAtomicityMode.TRANSACTIONAL));
-
-        c.put(1, "foo");
-        c.put(2, "bar");
-
-        Map<Integer, EntryProcessorResult<String>> result = c.invokeAll(new HashSet<>(Arrays.asList(1, 2)),
-            new EntryProcessor<Integer, String, String>() {
-                @Override public String process(MutableEntry entry, Object... arguments) throws EntryProcessorException {
-                    String newVal = entry.getValue() + "2";
-
-                    entry.setValue(newVal);
-
-                    return newVal;
-                }
-            });
-
-        assertEquals(2, result.size());
-        assertEquals("bar2", c.get(2));
-
-        int found = 0;
-
-        for (String message : messages) {
-            if (message.contains("Unordered collection java.util.HashSet is used for invokeAll operation on cache invoke. "))
-                found++;
-        }
-
-        assertEquals(1, found);
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    @Test
     public void testTreeMapRemoveAll() throws Exception {
         List<String> messages = Collections.synchronizedList(new ArrayList<>());
 
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheClientStoreSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheClientStoreSelfTest.java
index 1581882..53b080d4 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheClientStoreSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheClientStoreSelfTest.java
@@ -233,57 +233,6 @@
     }
 
     /**
-     * Load cache created on client as LOCAL and see if it only loaded on client
-     *
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testLocalLoadClient() throws Exception {
-        cacheMode = CacheMode.LOCAL;
-        factory = new Factory3();
-
-        startGrids(2);
-
-        Ignite client = startClientGrid("client-1");
-
-        IgniteCache<Object, Object> cache = client.cache(CACHE_NAME);
-
-        cache.loadCache(null);
-
-        assertEquals(10, cache.localSize(CachePeekMode.ALL));
-
-        assertEquals(0, grid(0).cache(CACHE_NAME).localSize(CachePeekMode.ALL));
-        assertEquals(0, grid(1).cache(CACHE_NAME).localSize(CachePeekMode.ALL));
-
-        assert loadedFromClient;
-    }
-
-    /**
-     * Load cache from server that created on client as LOCAL and see if it only loaded on server
-     *
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testLocalLoadServer() throws Exception {
-        cacheMode = CacheMode.LOCAL;
-        factory = new Factory3();
-
-        startGrids(2);
-
-        Ignite client = startClientGrid("client-1");
-
-        IgniteCache cache = grid(0).cache(CACHE_NAME);
-
-        cache.loadCache(null);
-
-        assertEquals(10, cache.localSize(CachePeekMode.ALL));
-        assertEquals(0, grid(1).cache(CACHE_NAME).localSize(CachePeekMode.ALL));
-        assertEquals(0, client.cache(CACHE_NAME).localSize(CachePeekMode.ALL));
-
-        assert !loadedFromClient : "Loaded data from client!";
-    }
-
-    /**
      * Load cache created on client as REPLICATED and see if it only loaded on servers
      */
     @Test
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheDeferredDeleteSanitySelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheDeferredDeleteSanitySelfTest.java
index 69a19f4..a9b8136 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheDeferredDeleteSanitySelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheDeferredDeleteSanitySelfTest.java
@@ -25,11 +25,9 @@
 import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
 import org.junit.Ignore;
 import org.junit.Test;
-
 import static org.apache.ignite.cache.CacheAtomicityMode.ATOMIC;
 import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL;
 import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL_SNAPSHOT;
-import static org.apache.ignite.cache.CacheMode.LOCAL;
 import static org.apache.ignite.cache.CacheMode.PARTITIONED;
 import static org.apache.ignite.cache.CacheMode.REPLICATED;
 
@@ -47,19 +45,12 @@
      */
     @Test
     public void testDeferredDelete() throws Exception {
-        testDeferredDelete(LOCAL, ATOMIC, false, false);
-        testDeferredDelete(LOCAL, TRANSACTIONAL, false, false);
-
         testDeferredDelete(PARTITIONED, ATOMIC, false, true);
         testDeferredDelete(PARTITIONED, TRANSACTIONAL, false, true);
 
         testDeferredDelete(REPLICATED, ATOMIC, false, true);
         testDeferredDelete(REPLICATED, TRANSACTIONAL, false, true);
 
-        // Near
-        testDeferredDelete(LOCAL, ATOMIC, true, false);
-        testDeferredDelete(LOCAL, TRANSACTIONAL, true, false);
-
         testDeferredDelete(PARTITIONED, ATOMIC, true, true);
         testDeferredDelete(PARTITIONED, TRANSACTIONAL, true, false);
 
@@ -87,16 +78,6 @@
     }
 
     /**
-     * @throws Exception If fails.
-     */
-    @Ignore("https://issues.apache.org/jira/browse/IGNITE-9530")
-    @Test
-    public void testDeferredDeleteMvccLocal() throws Exception {
-        testDeferredDelete(LOCAL, TRANSACTIONAL_SNAPSHOT, false, false);
-        testDeferredDelete(LOCAL, TRANSACTIONAL_SNAPSHOT, true, false);
-    }
-
-    /**
      * @param mode Mode.
      * @param atomicityMode Atomicity mode.
      * @param near Near cache enabled.
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheGetEntryAbstractTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheGetEntryAbstractTest.java
index a0905c0..b31d154 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheGetEntryAbstractTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheGetEntryAbstractTest.java
@@ -42,10 +42,8 @@
 import org.apache.ignite.transactions.TransactionIsolation;
 import org.jetbrains.annotations.Nullable;
 import org.junit.Test;
-
 import static org.apache.ignite.cache.CacheAtomicityMode.ATOMIC;
 import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL;
-import static org.apache.ignite.cache.CacheMode.LOCAL;
 import static org.apache.ignite.cache.CacheMode.PARTITIONED;
 import static org.apache.ignite.cache.CacheMode.REPLICATED;
 import static org.apache.ignite.cache.CacheWriteSynchronizationMode.FULL_SYNC;
@@ -161,36 +159,6 @@
      * @throws Exception If failed.
      */
     @Test
-    public void testLocal() throws Exception {
-        CacheConfiguration cfg = new CacheConfiguration(DEFAULT_CACHE_NAME);
-
-        cfg.setWriteSynchronizationMode(FULL_SYNC);
-        cfg.setCacheMode(LOCAL);
-        cfg.setAtomicityMode(ATOMIC);
-        cfg.setName("local");
-
-        test(cfg);
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testLocalTransactional() throws Exception {
-        CacheConfiguration cfg = new CacheConfiguration(DEFAULT_CACHE_NAME);
-
-        cfg.setWriteSynchronizationMode(FULL_SYNC);
-        cfg.setCacheMode(LOCAL);
-        cfg.setAtomicityMode(TRANSACTIONAL);
-        cfg.setName("localT");
-
-        test(cfg);
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    @Test
     public void testReplicated() throws Exception {
         CacheConfiguration cfg = new CacheConfiguration(DEFAULT_CACHE_NAME);
 
@@ -498,26 +466,24 @@
         throws Exception {
         CacheConfiguration cfg = cache.getConfiguration(CacheConfiguration.class);
 
-        if (cfg.getCacheMode() != LOCAL) {
-            Ignite prim = primaryNode(e.getKey(), cache.getName());
+        Ignite prim = primaryNode(e.getKey(), cache.getName());
 
-            GridCacheAdapter<Object, Object> cacheAdapter = ((IgniteKernal)prim).internalCache(cache.getName());
+        GridCacheAdapter<Object, Object> cacheAdapter = ((IgniteKernal)prim).internalCache(cache.getName());
 
-            if (cfg.getNearConfiguration() != null)
-                cacheAdapter = ((GridNearCacheAdapter)cacheAdapter).dht();
+        if (cfg.getNearConfiguration() != null)
+            cacheAdapter = ((GridNearCacheAdapter)cacheAdapter).dht();
 
-            IgniteCacheObjectProcessor cacheObjects = cacheAdapter.context().cacheObjects();
+        IgniteCacheObjectProcessor cacheObjects = cacheAdapter.context().cacheObjects();
 
-            CacheObjectContext cacheObjCtx = cacheAdapter.context().cacheObjectContext();
+        CacheObjectContext cacheObjCtx = cacheAdapter.context().cacheObjectContext();
 
-            GridCacheEntryEx mapEntry = cacheAdapter.entryEx(cacheObjects.toCacheKeyObject(
-                cacheObjCtx, cacheAdapter.context(), e.getKey(), true));
+        GridCacheEntryEx mapEntry = cacheAdapter.entryEx(cacheObjects.toCacheKeyObject(
+            cacheObjCtx, cacheAdapter.context(), e.getKey(), true));
 
-            mapEntry.unswap();
+        mapEntry.unswap();
 
-            assertNotNull("No entry for key: " + e.getKey(), mapEntry);
-            assertEquals(mapEntry.version(), e.version());
-        }
+        assertNotNull("No entry for key: " + e.getKey(), mapEntry);
+        assertEquals(mapEntry.version(), e.version());
     }
 
     /**
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheGetEntryPessimisticRepeatableReadSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheGetEntryPessimisticRepeatableReadSelfTest.java
index 6852997..d93586e 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheGetEntryPessimisticRepeatableReadSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheGetEntryPessimisticRepeatableReadSelfTest.java
@@ -23,9 +23,7 @@
 import org.apache.ignite.transactions.TransactionIsolation;
 import org.junit.Ignore;
 import org.junit.Test;
-
 import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL_SNAPSHOT;
-import static org.apache.ignite.cache.CacheMode.LOCAL;
 import static org.apache.ignite.cache.CacheMode.PARTITIONED;
 import static org.apache.ignite.cache.CacheMode.REPLICATED;
 import static org.apache.ignite.cache.CacheWriteSynchronizationMode.FULL_SYNC;
@@ -79,22 +77,6 @@
     /**
      * @throws Exception If failed.
      */
-    @Ignore("https://issues.apache.org/jira/browse/IGNITE-9530")
-    @Test
-    public void testLocalTransactionalMvcc() throws Exception {
-        CacheConfiguration cfg = new CacheConfiguration(DEFAULT_CACHE_NAME);
-
-        cfg.setWriteSynchronizationMode(FULL_SYNC);
-        cfg.setCacheMode(LOCAL);
-        cfg.setAtomicityMode(TRANSACTIONAL_SNAPSHOT);
-        cfg.setName("localT");
-
-        test(cfg);
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
     @Test
     public void testReplicatedTransactionalMvcc() throws Exception {
         CacheConfiguration cfg = new CacheConfiguration(DEFAULT_CACHE_NAME);
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheInterceptorPartitionCounterLocalSanityTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheInterceptorPartitionCounterLocalSanityTest.java
deleted file mode 100644
index b085f40..0000000
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheInterceptorPartitionCounterLocalSanityTest.java
+++ /dev/null
@@ -1,692 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache;
-
-import java.io.Serializable;
-import java.util.Random;
-import java.util.concurrent.BlockingQueue;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-import javax.cache.Cache;
-import javax.cache.configuration.Factory;
-import javax.cache.integration.CacheLoaderException;
-import javax.cache.integration.CacheWriterException;
-import javax.cache.processor.EntryProcessor;
-import javax.cache.processor.MutableEntry;
-import org.apache.ignite.Ignite;
-import org.apache.ignite.IgniteCache;
-import org.apache.ignite.cache.CacheAtomicityMode;
-import org.apache.ignite.cache.CacheInterceptorAdapter;
-import org.apache.ignite.cache.CacheInterceptorEntry;
-import org.apache.ignite.cache.store.CacheStore;
-import org.apache.ignite.cache.store.CacheStoreAdapter;
-import org.apache.ignite.configuration.CacheConfiguration;
-import org.apache.ignite.configuration.IgniteConfiguration;
-import org.apache.ignite.internal.util.tostring.GridToStringInclude;
-import org.apache.ignite.internal.util.typedef.internal.S;
-import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;
-import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder;
-import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
-import org.apache.ignite.transactions.Transaction;
-import org.apache.ignite.transactions.TransactionConcurrency;
-import org.apache.ignite.transactions.TransactionIsolation;
-import org.eclipse.jetty.util.BlockingArrayQueue;
-import org.jetbrains.annotations.NotNull;
-import org.junit.Ignore;
-import org.junit.Test;
-
-import static java.util.concurrent.TimeUnit.MILLISECONDS;
-import static java.util.concurrent.TimeUnit.SECONDS;
-import static org.apache.ignite.cache.CacheAtomicityMode.ATOMIC;
-import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL;
-import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL_SNAPSHOT;
-import static org.apache.ignite.cache.CacheMode.LOCAL;
-import static org.apache.ignite.transactions.TransactionIsolation.READ_COMMITTED;
-import static org.apache.ignite.transactions.TransactionIsolation.REPEATABLE_READ;
-import static org.apache.ignite.transactions.TransactionIsolation.SERIALIZABLE;
-
-/**
- *
- */
-public class CacheInterceptorPartitionCounterLocalSanityTest extends GridCommonAbstractTest {
-    /** */
-    private static final int NODES = 1;
-
-    /** */
-    private static final int KEYS = 50;
-
-    /** */
-    private static final int VALS = 10;
-
-    /** */
-    private static final int ITERATION_CNT = 100;
-
-    /** */
-    private static BlockingQueue<Cache.Entry<TestKey, TestValue>> afterPutEvts;
-
-    /** */
-    private static BlockingQueue<Cache.Entry<TestKey, TestValue>> afterRmvEvts;
-
-    /** {@inheritDoc} */
-    @Override protected IgniteConfiguration getConfiguration(String igniteInstanceName) throws Exception {
-        IgniteConfiguration cfg = super.getConfiguration(igniteInstanceName);
-
-        ((TcpDiscoverySpi)cfg.getDiscoverySpi()).setIpFinder(new TcpDiscoveryVmIpFinder(true));
-
-        return cfg;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected void beforeTestsStarted() throws Exception {
-        super.beforeTestsStarted();
-
-        startGrid(NODES - 1);
-    }
-
-    /** {@inheritDoc} */
-    @Override protected void beforeTest() throws Exception {
-        afterPutEvts = new BlockingArrayQueue<>();
-        afterRmvEvts = new BlockingArrayQueue<>();
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testLocal() throws Exception {
-        CacheConfiguration<Object, Object> ccfg = cacheConfiguration(ATOMIC, false);
-
-        doTestPartitionCounterOperation(ccfg);
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testLocalWithStore() throws Exception {
-        CacheConfiguration<Object, Object> ccfg = cacheConfiguration(ATOMIC, true);
-
-        doTestPartitionCounterOperation(ccfg);
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testLocalTx() throws Exception {
-        CacheConfiguration<Object, Object> ccfg = cacheConfiguration(TRANSACTIONAL, false);
-
-        doTestPartitionCounterOperation(ccfg);
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testLocalTxWithStore() throws Exception {
-        CacheConfiguration<Object, Object> ccfg = cacheConfiguration(TRANSACTIONAL, true);
-
-        doTestPartitionCounterOperation(ccfg);
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    @Ignore("https://issues.apache.org/jira/browse/IGNITE-9530")
-    @Test
-    public void testLocalMvccTx() throws Exception {
-        CacheConfiguration<Object, Object> ccfg = cacheConfiguration(TRANSACTIONAL_SNAPSHOT, false);
-
-        doTestPartitionCounterOperation(ccfg);
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    @Ignore("https://issues.apache.org/jira/browse/IGNITE-9530")
-    @Test
-    public void testLocalMvccTxWithStore() throws Exception {
-        CacheConfiguration<Object, Object> ccfg = cacheConfiguration(TRANSACTIONAL_SNAPSHOT, true);
-
-        doTestPartitionCounterOperation(ccfg);
-    }
-
-    /**
-     * @param ccfg Cache configuration.
-     * @throws Exception If failed.
-     */
-    private void doTestPartitionCounterOperation(CacheConfiguration<Object, Object> ccfg)
-        throws Exception {
-        ignite(0).createCache(ccfg);
-
-        try {
-            long seed = System.currentTimeMillis();
-
-            Random rnd = new Random(seed);
-
-            log.info("Random seed: " + seed);
-
-            ConcurrentMap<Object, Object> expData = new ConcurrentHashMap<>();
-
-            for (int i = 0; i < ITERATION_CNT; i++) {
-                if (i % 20 == 0)
-                    log.info("Iteration: " + i);
-
-                randomUpdate(rnd, expData, grid(0).cache(ccfg.getName()));
-            }
-        }
-        finally {
-            ignite(0).destroyCache(ccfg.getName());
-        }
-    }
-
-    /**
-     * @param rnd Random generator.
-     * @param expData Expected cache data.
-     * @param cache Cache.
-     * @throws Exception If failed.
-     */
-    private void randomUpdate(
-        Random rnd,
-        ConcurrentMap<Object, Object> expData,
-        IgniteCache<Object, Object> cache)
-        throws Exception {
-        Object key = new TestKey(rnd.nextInt(KEYS));
-        Object newVal = value(rnd);
-        Object oldVal = expData.get(key);
-
-        int op = rnd.nextInt(11);
-
-        Ignite ignite = cache.unwrap(Ignite.class);
-
-        Transaction tx = null;
-
-        if (atomicityMode(cache) == TRANSACTIONAL && rnd.nextBoolean())
-            tx = ignite.transactions().txStart(txRandomConcurrency(rnd), txRandomIsolation(rnd));
-
-        try {
-            //log.info("Random operation [key=" + key + ", op=" + op + ']');
-
-            switch (op) {
-                case 0: {
-                    cache.put(key, newVal);
-
-                    if (tx != null)
-                        tx.commit();
-
-                    waitAndCheckEvent(key, newVal, oldVal, false);
-
-                    expData.put(key, newVal);
-
-                    break;
-                }
-
-                case 1: {
-                    cache.getAndPut(key, newVal);
-
-                    if (tx != null)
-                        tx.commit();
-
-                    waitAndCheckEvent(key, newVal, oldVal, false);
-
-                    expData.put(key, newVal);
-
-                    break;
-                }
-
-                case 2: {
-                    cache.remove(key);
-
-                    if (tx != null)
-                        tx.commit();
-
-                    waitAndCheckEvent(key, null, oldVal, true);
-
-                    expData.remove(key);
-
-                    break;
-                }
-
-                case 3: {
-                    cache.getAndRemove(key);
-
-                    if (tx != null)
-                        tx.commit();
-
-                    waitAndCheckEvent(key, null, oldVal, true);
-
-                    expData.remove(key);
-
-                    break;
-                }
-
-                case 4: {
-                    cache.invoke(key, new EntrySetValueProcessor(newVal, rnd.nextBoolean()));
-
-                    if (tx != null)
-                        tx.commit();
-
-                    waitAndCheckEvent(key, newVal, oldVal, false);
-
-                    expData.put(key, newVal);
-
-                    break;
-                }
-
-                case 5: {
-                    cache.invoke(key, new EntrySetValueProcessor(null, rnd.nextBoolean()));
-
-                    if (tx != null)
-                        tx.commit();
-
-                    waitAndCheckEvent(key, null, oldVal, true);
-
-                    expData.remove(key);
-
-                    break;
-                }
-
-                case 6: {
-                    cache.putIfAbsent(key, newVal);
-
-                    if (tx != null)
-                        tx.commit();
-
-                    if (oldVal == null) {
-                        waitAndCheckEvent(key, newVal, null, false);
-
-                        expData.put(key, newVal);
-                    }
-                    else
-                        checkNoEvent(afterPutEvts);
-
-                    break;
-                }
-
-                case 7: {
-                    cache.getAndPutIfAbsent(key, newVal);
-
-                    if (tx != null)
-                        tx.commit();
-
-                    if (oldVal == null) {
-                        waitAndCheckEvent(key, newVal, null, false);
-
-                        expData.put(key, newVal);
-                    }
-                    else
-                        checkNoEvent(afterPutEvts);
-
-                    break;
-                }
-
-                case 8: {
-                    cache.replace(key, newVal);
-
-                    if (tx != null)
-                        tx.commit();
-
-                    if (oldVal != null) {
-                        waitAndCheckEvent(key, newVal, oldVal, false);
-
-                        expData.put(key, newVal);
-                    }
-                    else
-                        checkNoEvent(afterPutEvts);
-
-                    break;
-                }
-
-                case 9: {
-                    cache.getAndReplace(key, newVal);
-
-                    if (tx != null)
-                        tx.commit();
-
-                    if (oldVal != null) {
-                        waitAndCheckEvent(key, newVal, oldVal, false);
-
-                        expData.put(key, newVal);
-                    }
-                    else
-                        checkNoEvent(afterPutEvts);
-
-                    break;
-                }
-
-                case 10: {
-                    if (oldVal != null) {
-                        Object replaceVal = value(rnd);
-
-                        boolean success = replaceVal.equals(oldVal);
-
-                        if (success) {
-                            cache.replace(key, replaceVal, newVal);
-
-                            if (tx != null)
-                                tx.commit();
-
-                            waitAndCheckEvent(key, newVal, oldVal, false);
-
-                            expData.put(key, newVal);
-                        }
-                        else {
-                            cache.replace(key, replaceVal, newVal);
-
-                            if (tx != null)
-                                tx.commit();
-
-                            checkNoEvent(afterPutEvts);
-                        }
-                    }
-                    else {
-                        cache.replace(key, value(rnd), newVal);
-
-                        if (tx != null)
-                            tx.commit();
-
-                        checkNoEvent(afterPutEvts);
-                    }
-
-                    break;
-                }
-
-                default:
-                    fail("Op:" + op);
-            }
-        }
-        finally {
-            if (tx != null)
-                tx.close();
-        }
-    }
-
-    /**
-     * @param rnd {@link Random}.
-     * @return {@link TransactionIsolation}.
-     */
-    private TransactionIsolation txRandomIsolation(Random rnd) {
-        int val = rnd.nextInt(3);
-
-        if (val == 0)
-            return READ_COMMITTED;
-        else if (val == 1)
-            return REPEATABLE_READ;
-        else
-            return SERIALIZABLE;
-    }
-
-    /**
-     * @param rnd {@link Random}.
-     * @return {@link TransactionConcurrency}.
-     */
-    private TransactionConcurrency txRandomConcurrency(Random rnd) {
-        return rnd.nextBoolean() ? TransactionConcurrency.OPTIMISTIC : TransactionConcurrency.PESSIMISTIC;
-    }
-
-    /**
-     * @param rnd Random generator.
-     * @return Cache value.
-     */
-    private static Object value(Random rnd) {
-        return new TestValue(rnd.nextInt(VALS));
-    }
-
-    /**
-     * @param key Key.
-     * @param val Value.
-     * @param oldVal Old value.
-     * @param rmv Remove operation.
-     * @throws Exception If failed.
-     */
-    private void waitAndCheckEvent(
-        Object key,
-        Object val,
-        Object oldVal,
-        boolean rmv)
-        throws Exception {
-        BlockingQueue<Cache.Entry<TestKey, TestValue>> evtsQueue = rmv ? afterRmvEvts : afterPutEvts;
-
-        if (val == null && oldVal == null) {
-            checkNoEvent(evtsQueue);
-
-            return;
-        }
-
-        Cache.Entry<TestKey, TestValue> entry = evtsQueue.poll(5, SECONDS);
-
-        assertNotNull("Failed to wait for event [key=" + key + ", val=" + val + ", oldVal=" + oldVal + ']', entry);
-        assertEquals(key, entry.getKey());
-        assertEquals(rmv ? oldVal : val, entry.getValue());
-
-        CacheInterceptorEntry interceptorEntry = entry.unwrap(CacheInterceptorEntry.class);
-
-        assertNotNull(interceptorEntry);
-
-        // For local cache partition counter always zero.
-        assertEquals(0, interceptorEntry.getPartitionUpdateCounter());
-
-        assertNull(evtsQueue.peek());
-    }
-
-    /**
-     * @param evtsQueue Event queue.
-     * @throws Exception If failed.
-     */
-    private void checkNoEvent(BlockingQueue<Cache.Entry<TestKey, TestValue>> evtsQueue) throws Exception {
-        Cache.Entry<TestKey, TestValue> evt = evtsQueue.poll(50, MILLISECONDS);
-
-        assertTrue(evt == null || evt.getValue() == null);
-    }
-
-    /**
-     * @param atomicityMode Cache atomicity mode.
-     * @param store If {@code true} configures dummy cache store.
-     * @return Cache configuration.
-     */
-    protected CacheConfiguration<Object, Object> cacheConfiguration(
-        CacheAtomicityMode atomicityMode,
-        boolean store) {
-        CacheConfiguration<TestKey, TestValue> ccfg = new CacheConfiguration<>(DEFAULT_CACHE_NAME);
-
-        ccfg.setAtomicityMode(atomicityMode);
-        ccfg.setCacheMode(LOCAL);
-
-        if (store) {
-            ccfg.setCacheStoreFactory(new TestStoreFactory());
-            ccfg.setReadThrough(true);
-            ccfg.setWriteThrough(true);
-        }
-
-        ccfg.setInterceptor(new TestInterceptor());
-
-        return (CacheConfiguration)ccfg;
-    }
-
-    /**
-     *
-     */
-    private static class TestStoreFactory implements Factory<CacheStore<Object, Object>> {
-        /** {@inheritDoc} */
-        @SuppressWarnings("unchecked")
-        @Override public CacheStore<Object, Object> create() {
-            return new CacheStoreAdapter() {
-                @Override public Object load(Object key) throws CacheLoaderException {
-                    return null;
-                }
-
-                @Override public void write(Cache.Entry entry) throws CacheWriterException {
-                    // No-op.
-                }
-
-                @Override public void delete(Object key) throws CacheWriterException {
-                    // No-op.
-                }
-            };
-        }
-    }
-
-    /**
-     *
-     */
-    public static class TestKey implements Serializable, Comparable {
-        /** */
-        private final Integer key;
-
-        /**
-         * @param key Key.
-         */
-        public TestKey(Integer key) {
-            this.key = key;
-        }
-
-        /** {@inheritDoc} */
-        @Override public boolean equals(Object o) {
-            if (this == o)
-                return true;
-
-            if (o == null || getClass() != o.getClass())
-                return false;
-
-            TestKey that = (TestKey)o;
-
-            return key.equals(that.key);
-        }
-
-        /** {@inheritDoc} */
-        @Override public int hashCode() {
-            return key.hashCode();
-        }
-
-        /** {@inheritDoc} */
-        @Override public String toString() {
-            return S.toString(TestKey.class, this);
-        }
-
-        /** {@inheritDoc} */
-        @Override public int compareTo(@NotNull Object o) {
-            return key - ((TestKey)o).key;
-        }
-    }
-
-    /**
-     *
-     */
-    private static class TestInterceptor extends CacheInterceptorAdapter<TestKey, TestValue> {
-        /** {@inheritDoc} */
-        @Override public void onAfterPut(Cache.Entry<TestKey, TestValue> e) {
-            e.getKey();
-            e.getValue();
-
-            afterPutEvts.add(e);
-        }
-
-        /** {@inheritDoc} */
-        @Override public void onAfterRemove(Cache.Entry<TestKey, TestValue> e) {
-            e.getKey();
-            e.getValue();
-
-            afterRmvEvts.add(e);
-        }
-    }
-
-    /**
-     *
-     */
-    public static class TestValue implements Serializable {
-        /** */
-        @GridToStringInclude
-        protected final Integer val1;
-
-        /** */
-        @GridToStringInclude
-        protected final String val2;
-
-        /**
-         * @param val Value.
-         */
-        public TestValue(Integer val) {
-            this.val1 = val;
-            this.val2 = String.valueOf(val);
-        }
-
-        /** {@inheritDoc} */
-        @Override public boolean equals(Object o) {
-            if (this == o)
-                return true;
-
-            if (o == null || getClass() != o.getClass())
-                return false;
-
-            TestValue that = (TestValue)o;
-
-            return val1.equals(that.val1) && val2.equals(that.val2);
-        }
-
-        /** {@inheritDoc} */
-        @Override public int hashCode() {
-            int res = val1.hashCode();
-
-            res = 31 * res + val2.hashCode();
-
-            return res;
-        }
-
-        /** {@inheritDoc} */
-        @Override public String toString() {
-            return S.toString(TestValue.class, this);
-        }
-    }
-
-    /**
-     *
-     */
-    private static class EntrySetValueProcessor implements EntryProcessor<Object, Object, Object> {
-        /** */
-        private Object val;
-
-        /** */
-        private boolean retOld;
-
-        /**
-         * @param val Value to set.
-         * @param retOld Return old value flag.
-         */
-        EntrySetValueProcessor(Object val, boolean retOld) {
-            this.val = val;
-            this.retOld = retOld;
-        }
-
-        /** {@inheritDoc} */
-        @Override public Object process(MutableEntry<Object, Object> e, Object... args) {
-            Object old = retOld ? e.getValue() : null;
-
-            if (val != null)
-                e.setValue(val);
-            else
-                e.remove();
-
-            return old;
-        }
-
-        /** {@inheritDoc} */
-        @Override public String toString() {
-            return S.toString(EntrySetValueProcessor.class, this);
-        }
-    }
-}
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheLockCandidatesThreadTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheLockCandidatesThreadTest.java
index 4a81480..05f2c62 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheLockCandidatesThreadTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheLockCandidatesThreadTest.java
@@ -44,14 +44,6 @@
      * @throws Exception if failed.
      */
     @Test
-    public void testLockCandidatesThreadForLocalMode() throws Exception {
-        lockThreadOfCandidates(CacheMode.LOCAL);
-    }
-
-    /**
-     * @throws Exception if failed.
-     */
-    @Test
     public void testLockCandidatesThreadForReplicatedMode() throws Exception {
         lockThreadOfCandidates(CacheMode.REPLICATED);
     }
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheMetricsEntitiesCountTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheMetricsEntitiesCountTest.java
index 4b38e9e..3febf26 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheMetricsEntitiesCountTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheMetricsEntitiesCountTest.java
@@ -35,7 +35,6 @@
 import org.apache.ignite.testframework.MvccFeatureChecker;
 import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
 import org.junit.Test;
-
 import static org.apache.ignite.internal.processors.metric.impl.MetricUtils.cacheMetricsRegistryName;
 
 /**
@@ -100,14 +99,6 @@
             .setOnheapCacheEnabled(true)
             .setAtomicityMode(CacheAtomicityMode.TRANSACTIONAL));
 
-        if (!MvccFeatureChecker.forcedMvcc() || MvccFeatureChecker.isSupported(MvccFeatureChecker.Feature.LOCAL_CACHE)) {
-            ccfgs.add(new CacheConfiguration<>()
-                .setName(CACHE_PREFIX + 4)
-                .setStatisticsEnabled(true)
-                .setCacheMode(CacheMode.LOCAL)
-                .setAtomicityMode(CacheAtomicityMode.TRANSACTIONAL));
-        }
-
         cacheCnt = ccfgs.size();
 
         cfg.setCacheConfiguration(U.toArray(ccfgs, new CacheConfiguration[cacheCnt]));
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheOffheapMapEntrySelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheOffheapMapEntrySelfTest.java
index ebb1831..69c5ece 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheOffheapMapEntrySelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheOffheapMapEntrySelfTest.java
@@ -24,14 +24,11 @@
 import org.apache.ignite.internal.IgniteKernal;
 import org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtCacheEntry;
 import org.apache.ignite.internal.processors.cache.distributed.near.GridNearCacheEntry;
-import org.apache.ignite.internal.processors.cache.local.GridLocalCacheEntry;
 import org.apache.ignite.testframework.MvccFeatureChecker;
 import org.junit.Test;
-
 import static org.apache.ignite.cache.CacheAtomicityMode.ATOMIC;
 import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL;
 import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL_SNAPSHOT;
-import static org.apache.ignite.cache.CacheMode.LOCAL;
 import static org.apache.ignite.cache.CacheMode.PARTITIONED;
 import static org.apache.ignite.cache.CacheMode.REPLICATED;
 
@@ -89,13 +86,6 @@
      */
     @Test
     public void testCacheMapEntry() throws Exception {
-        checkCacheMapEntry(ATOMIC, LOCAL, GridLocalCacheEntry.class);
-
-        checkCacheMapEntry(TRANSACTIONAL, LOCAL, GridLocalCacheEntry.class);
-
-        if (MvccFeatureChecker.isSupported(MvccFeatureChecker.Feature.LOCAL_CACHE))
-            checkCacheMapEntry(TRANSACTIONAL_SNAPSHOT, LOCAL, GridLocalCacheEntry.class);
-
         checkCacheMapEntry(ATOMIC, PARTITIONED, GridNearCacheEntry.class);
 
         checkCacheMapEntry(TRANSACTIONAL, PARTITIONED, GridNearCacheEntry.class);
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheReadThroughLocalAtomicRestartSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheReadThroughLocalAtomicRestartSelfTest.java
deleted file mode 100644
index ba8ba81..0000000
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheReadThroughLocalAtomicRestartSelfTest.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache;
-
-import org.apache.ignite.cache.CacheAtomicityMode;
-
-import static org.apache.ignite.cache.CacheAtomicityMode.ATOMIC;
-
-/**
- * Test for read through store.
- */
-public class CacheReadThroughLocalAtomicRestartSelfTest extends CacheReadThroughLocalRestartSelfTest {
-    /** {@inheritDoc} */
-    @Override protected CacheAtomicityMode atomicityMode() {
-        return ATOMIC;
-    }
-}
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheReadThroughLocalRestartSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheReadThroughLocalRestartSelfTest.java
deleted file mode 100644
index 70511bf..0000000
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheReadThroughLocalRestartSelfTest.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache;
-
-import org.apache.ignite.cache.CacheMode;
-import org.apache.ignite.configuration.CacheConfiguration;
-import org.apache.ignite.testframework.MvccFeatureChecker;
-import org.junit.Before;
-
-import static org.apache.ignite.cache.CacheMode.LOCAL;
-
-/**
- * Test for read through store.
- */
-public class CacheReadThroughLocalRestartSelfTest extends CacheReadThroughRestartSelfTest {
-    /** {@inheritDoc} */
-    @Override protected CacheMode cacheMode() {
-        return LOCAL;
-    }
-
-    /** */
-    @Before
-    public void beforeCacheReadThroughLocalRestartSelfTest() {
-        MvccFeatureChecker.skipIfNotSupported(MvccFeatureChecker.Feature.LOCAL_CACHE);
-    }
-
-    /** {@inheritDoc} */
-    @Override protected CacheConfiguration cacheConfiguration(String igniteInstanceName) throws Exception {
-        MvccFeatureChecker.skipIfNotSupported(MvccFeatureChecker.Feature.LOCAL_CACHE);
-
-        return super.cacheConfiguration(igniteInstanceName);
-    }
-}
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheRebalancingSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheRebalancingSelfTest.java
index 002e486..c2427c7 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheRebalancingSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheRebalancingSelfTest.java
@@ -23,7 +23,6 @@
 import java.util.Set;
 import org.apache.ignite.Ignite;
 import org.apache.ignite.IgniteCache;
-import org.apache.ignite.cache.CacheMode;
 import org.apache.ignite.cache.CachePeekMode;
 import org.apache.ignite.cache.CacheWriteSynchronizationMode;
 import org.apache.ignite.configuration.CacheConfiguration;
@@ -35,7 +34,6 @@
 import org.apache.ignite.internal.util.lang.GridAbsPredicate;
 import org.apache.ignite.lang.IgniteFuture;
 import org.apache.ignite.testframework.GridTestUtils;
-import org.apache.ignite.testframework.MvccFeatureChecker;
 import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
 import org.junit.Test;
 
@@ -68,27 +66,6 @@
     }
 
     /**
-     * @throws Exception If fails.
-     */
-    @Test
-    public void testRebalanceLocalCacheFuture() throws Exception {
-        MvccFeatureChecker.skipIfNotSupported(MvccFeatureChecker.Feature.LOCAL_CACHE);
-
-        startGrid(
-            getTestIgniteInstanceName(0),
-            getConfiguration(getTestIgniteInstanceName(0))
-                .setCacheConfiguration(
-                    new CacheConfiguration<Integer, Integer>(DEFAULT_CACHE_NAME),
-                    new CacheConfiguration<Integer, Integer>(REBALANCE_TEST_CACHE_NAME)
-                        .setCacheMode(CacheMode.LOCAL))
-        );
-
-        IgniteCache<Integer, Integer> cache = ignite(0).cache(DEFAULT_CACHE_NAME);
-
-        assertTrue(cache.rebalance().get());
-    }
-
-    /**
      * @throws Exception If failed.
      */
     @Test
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheStopAndDestroySelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheStopAndDestroySelfTest.java
index 4cb7714..049b2bf 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheStopAndDestroySelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheStopAndDestroySelfTest.java
@@ -35,9 +35,7 @@
 import org.apache.ignite.configuration.DataStorageConfiguration;
 import org.apache.ignite.configuration.IgniteConfiguration;
 import org.apache.ignite.configuration.NearCacheConfiguration;
-import org.apache.ignite.internal.IgniteInternalFuture;
 import org.apache.ignite.internal.managers.communication.GridIoMessage;
-import org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion;
 import org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtTxPrepareRequest;
 import org.apache.ignite.internal.util.typedef.internal.U;
 import org.apache.ignite.lang.IgniteInClosure;
@@ -49,8 +47,6 @@
 import org.apache.ignite.testframework.MvccFeatureChecker;
 import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
 import org.junit.Test;
-
-import static org.apache.ignite.cache.CacheMode.LOCAL;
 import static org.apache.ignite.cache.CacheMode.PARTITIONED;
 
 /**
@@ -70,9 +66,6 @@
     /** Near cache name. */
     private static String CACHE_NAME_NEAR = "cache_near";
 
-    /** Local cache name. */
-    private static String CACHE_NAME_LOC = "cache_local";
-
     /** Memory configuration to be used on client nodes with local caches. */
     private static DataStorageConfiguration memCfg;
 
@@ -182,20 +175,6 @@
     }
 
     /**
-     * @return local config
-     */
-    private CacheConfiguration getLocalConfig() {
-        CacheConfiguration cfg = defaultCacheConfiguration();
-
-        cfg.setName(CACHE_NAME_LOC);
-        cfg.setCacheMode(LOCAL);
-        cfg.setNearConfiguration(null);
-        cfg.setAtomicityMode(CacheAtomicityMode.TRANSACTIONAL);
-
-        return cfg;
-    }
-
-    /**
      * Test Double Destroy.
      *
      * @throws Exception If failed.
@@ -327,44 +306,6 @@
     }
 
     /**
-     * Test Double Destroy.
-     *
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testLocalDoubleDestroy() throws Exception {
-        MvccFeatureChecker.skipIfNotSupported(MvccFeatureChecker.Feature.LOCAL_CACHE);
-
-        startGridsMultiThreaded(gridCount());
-
-        localDestroy();
-
-        localDestroy();
-    }
-
-    /**
-     * Test Local Destroy.
-     *
-     * @throws Exception If failed.
-     */
-    private void localDestroy() throws Exception {
-        grid(0).getOrCreateCache(getLocalConfig());
-
-        assert grid(0).cache(CACHE_NAME_LOC).get(KEY_VAL) == null;
-        assert grid(1).cache(CACHE_NAME_LOC).get(KEY_VAL) == null;
-
-        grid(0).cache(CACHE_NAME_LOC).put(KEY_VAL, KEY_VAL + 0);
-        grid(1).cache(CACHE_NAME_LOC).put(KEY_VAL, KEY_VAL + 1);
-
-        assert grid(0).cache(CACHE_NAME_LOC).get(KEY_VAL).equals(KEY_VAL + 0);
-        assert grid(1).cache(CACHE_NAME_LOC).get(KEY_VAL).equals(KEY_VAL + 1);
-
-        grid(0).cache(CACHE_NAME_LOC).destroy();
-
-        assertNull(grid(0).cache(CACHE_NAME_LOC));
-    }
-
-    /**
      * Test Dht close.
      *
      * @throws Exception If failed.
@@ -726,99 +667,6 @@
     }
 
     /**
-     * Test Local close.
-     *
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testLocalClose() throws Exception {
-        MvccFeatureChecker.skipIfNotSupported(MvccFeatureChecker.Feature.LOCAL_CACHE);
-
-        memCfg = new DataStorageConfiguration();
-
-        startGridsMultiThreaded(gridCount());
-
-        grid(0).getOrCreateCache(getLocalConfig());
-
-        assert grid(0).cache(CACHE_NAME_LOC).get(KEY_VAL) == null;
-        assert grid(1).cache(CACHE_NAME_LOC).get(KEY_VAL) == null;
-
-        grid(0).cache(CACHE_NAME_LOC).put(KEY_VAL, KEY_VAL + 0);
-        grid(1).cache(CACHE_NAME_LOC).put(KEY_VAL, KEY_VAL + 1);
-
-        assert grid(0).cache(CACHE_NAME_LOC).get(KEY_VAL).equals(KEY_VAL + 0);
-        assert grid(1).cache(CACHE_NAME_LOC).get(KEY_VAL).equals(KEY_VAL + 1);
-
-        // Local close. Same as Local destroy.
-
-        IgniteCache<Object, Object> cache = grid(1).cache(CACHE_NAME_LOC);
-
-        cache.close();
-
-        checkUsageFails(cache);
-
-        assertNull(grid(1).cache(CACHE_NAME_LOC));
-
-        // Local creation after closed.
-
-        AffinityTopologyVersion topVer = grid(1).context().cache().context().exchange().lastTopologyFuture().get();
-
-        IgniteInternalFuture<?> fut = grid(0).context().cache().context().exchange().affinityReadyFuture(topVer);
-
-        if (fut != null)
-            fut.get();
-
-        grid(0).getOrCreateCache(getLocalConfig());
-
-        awaitCacheOnClient(grid(2), getLocalConfig().getName());
-
-        grid(0).cache(CACHE_NAME_LOC).put(KEY_VAL, KEY_VAL + "recreated0");
-        grid(1).cache(CACHE_NAME_LOC).put(KEY_VAL, KEY_VAL + "recreated1");
-        grid(2).cache(CACHE_NAME_LOC).put(KEY_VAL, KEY_VAL + "recreated2");
-
-        assert grid(0).cache(CACHE_NAME_LOC).get(KEY_VAL).equals(KEY_VAL + "recreated0");
-        assert grid(1).cache(CACHE_NAME_LOC).get(KEY_VAL).equals(KEY_VAL + "recreated1");
-        assert grid(2).cache(CACHE_NAME_LOC).get(KEY_VAL).equals(KEY_VAL + "recreated2");
-    }
-
-    /**
-     * Test Local close.
-     *
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testLocalCloseWithTry() throws Exception {
-        MvccFeatureChecker.skipIfNotSupported(MvccFeatureChecker.Feature.LOCAL_CACHE);
-
-        memCfg = new DataStorageConfiguration();
-
-        startGridsMultiThreaded(gridCount());
-
-        String curVal = null;
-
-        for (int i = 0; i < 3; i++) {
-            try (IgniteCache<String, String> cache2 = grid(2).getOrCreateCache(getLocalConfig())) {
-                IgniteCache<String, String> cache0 = grid(0).cache(CACHE_NAME_LOC);
-                IgniteCache<String, String> cache1 = grid(1).cache(CACHE_NAME_LOC);
-
-                assert cache0.get(KEY_VAL) == null;
-                assert cache1.get(KEY_VAL) == null;
-                assert cache2.get(KEY_VAL) == null;
-
-                curVal = KEY_VAL + curVal;
-
-                cache0.put(KEY_VAL, curVal + 1);
-                cache1.put(KEY_VAL, curVal + 2);
-                cache2.put(KEY_VAL, curVal + 3);
-
-                assert cache0.get(KEY_VAL).equals(curVal + 1);
-                assert cache1.get(KEY_VAL).equals(curVal + 2);
-                assert cache2.get(KEY_VAL).equals(curVal + 3);
-            }
-        }
-    }
-
-    /**
      * Tests start -> destroy -> start -> close using CacheManager.
      */
     @Test
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheAbstractFullApiSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheAbstractFullApiSelfTest.java
index f7fef0f..499c48b 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheAbstractFullApiSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheAbstractFullApiSelfTest.java
@@ -106,13 +106,10 @@
 import org.junit.Before;
 import org.junit.Ignore;
 import org.junit.Test;
-
 import static java.util.concurrent.TimeUnit.MILLISECONDS;
 import static org.apache.ignite.cache.CacheAtomicityMode.ATOMIC;
 import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL;
-import static org.apache.ignite.cache.CacheMode.LOCAL;
 import static org.apache.ignite.cache.CacheMode.PARTITIONED;
-import static org.apache.ignite.cache.CacheMode.REPLICATED;
 import static org.apache.ignite.cache.CachePeekMode.ALL;
 import static org.apache.ignite.cache.CachePeekMode.ONHEAP;
 import static org.apache.ignite.cache.CachePeekMode.PRIMARY;
@@ -3223,7 +3220,7 @@
      */
     @Test
     public void testDeletedEntriesFlag() throws Exception {
-        if (cacheMode() != LOCAL && cacheMode() != REPLICATED) {
+        if (cacheMode() == PARTITIONED) {
             final int cnt = 3;
 
             IgniteCache<String, Integer> cache = jcache();
@@ -4498,15 +4495,6 @@
             }
         }, Math.min(ttl * 10, getTestTimeout())));
 
-        IgniteCache fullCache = fullCache();
-
-        if (!isMultiJvmObject(fullCache)) {
-            GridCacheAdapter internalCache = internalCache(fullCache);
-
-            if (internalCache.isLocal())
-                return;
-        }
-
         assert c.get(key) == null;
 
         // Ensure that old TTL and expire time are not longer "visible".
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheClearLocallySelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheClearLocallySelfTest.java
index e8b81f8..5865f53 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheClearLocallySelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheClearLocallySelfTest.java
@@ -31,9 +31,7 @@
 import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
 import org.apache.ignite.transactions.Transaction;
 import org.junit.Test;
-
 import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL;
-import static org.apache.ignite.cache.CacheMode.LOCAL;
 import static org.apache.ignite.cache.CacheMode.PARTITIONED;
 import static org.apache.ignite.cache.CacheMode.REPLICATED;
 import static org.apache.ignite.cache.CacheWriteSynchronizationMode.FULL_SYNC;
@@ -44,9 +42,6 @@
  * Test {@link IgniteCache#localClearAll(java.util.Set)} operations in multinode environment with nodes having caches with different names.
  */
 public class GridCacheClearLocallySelfTest extends GridCommonAbstractTest {
-    /** Local cache. */
-    private static final String CACHE_LOCAL = "cache_local";
-
     /** Partitioned cache. */
     private static final String CACHE_PARTITIONED = "cache_partitioned";
 
@@ -59,9 +54,6 @@
     /** Grid nodes count. */
     private static final int GRID_CNT = 3;
 
-    /** Local caches. */
-    private IgniteCache<Integer, Integer>[] cachesLoc;
-
     /** Partitioned caches. */
     private IgniteCache<Integer, Integer>[] cachesPartitioned;
 
@@ -75,13 +67,6 @@
     @Override protected IgniteConfiguration getConfiguration(String igniteInstanceName) throws Exception {
         IgniteConfiguration cfg = super.getConfiguration(igniteInstanceName);
 
-        CacheConfiguration ccfgLoc = new CacheConfiguration(DEFAULT_CACHE_NAME);
-
-        ccfgLoc.setName(CACHE_LOCAL);
-        ccfgLoc.setCacheMode(LOCAL);
-        ccfgLoc.setWriteSynchronizationMode(FULL_SYNC);
-        ccfgLoc.setAtomicityMode(TRANSACTIONAL);
-
         CacheConfiguration ccfgPartitioned = new CacheConfiguration(DEFAULT_CACHE_NAME);
 
         ccfgPartitioned.setName(CACHE_PARTITIONED);
@@ -111,7 +96,7 @@
         ccfgReplicated.setWriteSynchronizationMode(FULL_SYNC);
         ccfgReplicated.setAtomicityMode(TRANSACTIONAL);
 
-        cfg.setCacheConfiguration(ccfgLoc, ccfgPartitioned, ccfgColocated, ccfgReplicated);
+        cfg.setCacheConfiguration(ccfgPartitioned, ccfgColocated, ccfgReplicated);
 
         return cfg;
     }
@@ -120,7 +105,6 @@
     @Override protected void afterTest() throws Exception {
         stopAllGrids();
 
-        cachesLoc = null;
         cachesPartitioned = null;
         cachesColocated = null;
         cachesReplicated = null;
@@ -132,7 +116,6 @@
      * @throws Exception If failed.
      */
     private void startUp() throws Exception {
-        cachesLoc = (IgniteCache<Integer, Integer>[])Array.newInstance(IgniteCache.class, GRID_CNT);
         cachesPartitioned = (IgniteCache<Integer, Integer>[])Array.newInstance(IgniteCache.class, GRID_CNT);
         cachesColocated = (IgniteCache<Integer, Integer>[])Array.newInstance(IgniteCache.class, GRID_CNT);
         cachesReplicated = (IgniteCache<Integer, Integer>[])Array.newInstance(IgniteCache.class, GRID_CNT);
@@ -149,7 +132,6 @@
             if (i == 2)
                 ignite.cache(CACHE_PARTITIONED);
 
-            cachesLoc[i] = ignite.cache(CACHE_LOCAL);
             cachesPartitioned[i] = ignite.cache(CACHE_PARTITIONED);
             cachesColocated[i] = ignite.cache(CACHE_COLOCATED);
             cachesReplicated[i] = ignite.cache(CACHE_REPLICATED);
@@ -157,26 +139,6 @@
     }
 
     /**
-     * Test {@link IgniteCache#localClearAll(java.util.Set)} on LOCAL cache with no split.
-     *
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testLocalNoSplit() throws Exception {
-        test(Mode.TEST_LOCAL, CLEAR_ALL_SPLIT_THRESHOLD / 2);
-    }
-
-    /**
-     * Test {@link IgniteCache#localClearAll(java.util.Set)} on LOCAL cache with split.
-     *
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testLocalSplit() throws Exception {
-        test(Mode.TEST_LOCAL, CLEAR_ALL_SPLIT_THRESHOLD + 1);
-    }
-
-    /**
      * Test {@link IgniteCache#localClearAll(java.util.Set)} on PARTITIONED cache with no split.
      *
      * @throws Exception If failed.
@@ -249,63 +211,45 @@
 
         startUp();
 
-        switch (mode) {
-            case TEST_LOCAL: {
-                // Check on only one node.
-                IgniteCache<Integer, Integer> cache = cachesLoc[0];
+        // Take in count special case for near-only cache as well.
+        if (mode == Mode.TEST_PARTITIONED) {
+            fillCache(cachesPartitioned[0], keysCnt);
 
-                fillCache(cache, keysCnt);
+            // Ensure correct no-op clean of CLIENT_ONLY cache.
+            warmCache(cachesPartitioned[2], keysCnt);
+            assert cachesPartitioned[1].localSize(CachePeekMode.ALL) == 0;
+            // XXX I think it was supposed that NEAR cache will only be present on node 1.
+            assert cachesPartitioned[2].localSize(CachePeekMode.PRIMARY) == 0;
+
+            stopGrid(2); // Shutdown Grid in order to remove reader in NEAR_PARTITIONED cache.
+
+            // Ensure correct clearLocally of NEAR_ONLY cache.
+            warmCache(cachesPartitioned[1], keysCnt);
+            assert cachesPartitioned[1].localSize(CachePeekMode.NEAR) != 0;
+            cachesPartitioned[1].localClearAll(keySet(cachesPartitioned[1]));
+            assert cachesPartitioned[1].localSize() == 0;
+            fillCache(cachesPartitioned[1], keysCnt);
+
+            stopGrid(1); // Shutdown Grid in order to remove reader in NEAR_PARTITIONED cache.
+
+            // Ensure correct clearLocally of NEAR_PARTITIONED cache.
+            assert cachesPartitioned[0].localSize() != 0;
+            cachesPartitioned[0].localClearAll(keySet(cachesPartitioned[0]));
+            assert cachesPartitioned[0].localSize() == 0;
+        }
+        else {
+            assert mode == Mode.TEST_COLOCATED || mode == Mode.TEST_REPLICATED;
+
+            IgniteCache<Integer, Integer>[] caches = mode == Mode.TEST_COLOCATED ? cachesColocated : cachesReplicated;
+
+            fillCache(caches[0], keysCnt);
+
+            for (IgniteCache<Integer, Integer> cache : caches) {
+                assert cache.localSize() != 0;
 
                 cache.localClearAll(keySet(cache));
 
                 assert cache.localSize() == 0;
-
-                break;
-            }
-
-            case TEST_PARTITIONED: {
-                // Take in count special case for near-only cache as well.
-                fillCache(cachesPartitioned[0], keysCnt);
-
-                // Ensure correct no-op clean of CLIENT_ONLY cache.
-                warmCache(cachesPartitioned[2], keysCnt);
-                assert cachesPartitioned[1].localSize(CachePeekMode.ALL) == 0;
-                // XXX I think it was supposed that NEAR cache will only be present on node 1.
-                assert cachesPartitioned[2].localSize(CachePeekMode.PRIMARY) == 0;
-
-                stopGrid(2); // Shutdown Grid in order to remove reader in NEAR_PARTITIONED cache.
-
-                // Ensure correct clearLocally of NEAR_ONLY cache.
-                warmCache(cachesPartitioned[1], keysCnt);
-                assert cachesPartitioned[1].localSize(CachePeekMode.NEAR) != 0;
-                cachesPartitioned[1].localClearAll(keySet(cachesPartitioned[1]));
-                assert cachesPartitioned[1].localSize() == 0;
-                fillCache(cachesPartitioned[1], keysCnt);
-
-                stopGrid(1); // Shutdown Grid in order to remove reader in NEAR_PARTITIONED cache.
-
-                // Ensure correct clearLocally of NEAR_PARTITIONED cache.
-                assert cachesPartitioned[0].localSize() != 0;
-                cachesPartitioned[0].localClearAll(keySet(cachesPartitioned[0]));
-                assert cachesPartitioned[0].localSize() == 0;
-
-                break;
-            }
-
-            default: {
-                assert mode == Mode.TEST_COLOCATED || mode == Mode.TEST_REPLICATED;
-
-                IgniteCache<Integer, Integer>[] caches = mode == Mode.TEST_COLOCATED ? cachesColocated : cachesReplicated;
-
-                fillCache(caches[0], keysCnt);
-
-                for (IgniteCache<Integer, Integer> cache : caches) {
-                    assert cache.localSize() != 0;
-
-                    cache.localClearAll(keySet(cache));
-
-                    assert cache.localSize() == 0;
-                }
             }
         }
     }
@@ -344,9 +288,6 @@
      * Test mode.
      */
     private enum Mode {
-        /** Local cache. */
-        TEST_LOCAL,
-
         /** Partitioned cache. */
         TEST_PARTITIONED,
 
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheConcurrentMapSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheConcurrentMapSelfTest.java
index 42c1c5f..604a205 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheConcurrentMapSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheConcurrentMapSelfTest.java
@@ -25,30 +25,18 @@
 import java.util.concurrent.atomic.AtomicInteger;
 import javax.cache.Cache;
 import org.apache.ignite.IgniteCache;
-import org.apache.ignite.configuration.CacheConfiguration;
 import org.apache.ignite.configuration.IgniteConfiguration;
 import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
 import org.junit.Test;
 
-import static org.apache.ignite.cache.CacheMode.LOCAL;
-import static org.apache.ignite.cache.CacheWriteSynchronizationMode.FULL_SYNC;
-
 /**
  * Grid cache concurrent hash map self test.
  */
 public class GridCacheConcurrentMapSelfTest extends GridCommonAbstractTest {
     /** {@inheritDoc} */
     @Override protected IgniteConfiguration getConfiguration(String igniteInstanceName) throws Exception {
-        IgniteConfiguration cfg = super.getConfiguration(igniteInstanceName);
-
-        CacheConfiguration cc = defaultCacheConfiguration();
-
-        cc.setCacheMode(LOCAL);
-        cc.setWriteSynchronizationMode(FULL_SYNC);
-
-        cfg.setCacheConfiguration(cc);
-
-        return cfg;
+        return super.getConfiguration(igniteInstanceName)
+            .setCacheConfiguration(defaultCacheConfiguration());
     }
 
     /** {@inheritDoc} */
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheConfigurationConsistencySelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheConfigurationConsistencySelfTest.java
index 5164140..1081766 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheConfigurationConsistencySelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheConfigurationConsistencySelfTest.java
@@ -46,11 +46,9 @@
 import org.apache.ignite.testframework.GridTestUtils;
 import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
 import org.junit.Test;
-
 import static org.apache.ignite.cache.CacheAtomicityMode.ATOMIC;
 import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL;
 import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL_SNAPSHOT;
-import static org.apache.ignite.cache.CacheMode.LOCAL;
 import static org.apache.ignite.cache.CacheMode.PARTITIONED;
 import static org.apache.ignite.cache.CacheMode.REPLICATED;
 import static org.apache.ignite.cache.CacheRebalanceMode.ASYNC;
@@ -140,7 +138,7 @@
 
         final GridStringLogger strLog = new GridStringLogger(false, log);
 
-        CU.checkAttributeMismatch(strLog, "cache", node.id(), "cacheMode", "Cache mode", LOCAL, PARTITIONED, false);
+        CU.checkAttributeMismatch(strLog, "cache", node.id(), "cacheMode", "Cache mode", REPLICATED, PARTITIONED, false);
 
         assertTrue("No expected message in log: " + strLog.toString(),
             strLog.toString().contains("Cache mode mismatch"));
@@ -150,14 +148,14 @@
         GridTestUtils.assertThrows(log, new Callable<Void>() {
             /** {@inheritDoc} */
             @Override public Void call() throws Exception {
-                CU.checkAttributeMismatch(strLog, "cache", node.id(), "cacheMode", "Cache mode", LOCAL, PARTITIONED, true);
+                CU.checkAttributeMismatch(strLog, "cache", node.id(), "cacheMode", "Cache mode", REPLICATED, PARTITIONED, true);
                 return null;
             }
         }, IgniteCheckedException.class, "Cache mode mismatch");
 
         final CacheConfiguration cfg1 = defaultCacheConfiguration();
 
-        cfg1.setCacheMode(LOCAL);
+        cfg1.setCacheMode(REPLICATED);
 
         final CacheConfiguration cfg2 = defaultCacheConfiguration();
 
@@ -246,14 +244,6 @@
      */
     @Test
     public void testDifferentCacheDifferentModes() throws Exception {
-        // 1st grid with local cache.
-        cacheEnabled = true;
-        cacheName = "local";
-        cacheMode = LOCAL;
-        depMode = SHARED;
-
-        startGrid(1);
-
         // 2nd grid with replicated cache.
         cacheEnabled = true;
         cacheName = "replicated";
@@ -701,54 +691,6 @@
      * @throws Exception If failed.
      */
     @Test
-    public void testIgnoreMismatchForLocalCaches() throws Exception {
-        cacheEnabled = true;
-
-        cacheMode = LOCAL;
-
-        initCache = new C1<CacheConfiguration, Void>() {
-            /** {@inheritDoc} */
-            @SuppressWarnings("unchecked")
-            @Override public Void apply(CacheConfiguration cfg) {
-                cfg.setAffinity(new TestRendezvousAffinityFunction());
-
-                cfg.setEvictionPolicyFactory(new FifoEvictionPolicyFactory<>());
-                cfg.setEvictionPolicy(new FifoEvictionPolicy());
-                cfg.setOnheapCacheEnabled(true);
-
-                cfg.setCacheStoreFactory(new IgniteCacheAbstractTest.TestStoreFactory());
-                cfg.setReadThrough(true);
-                cfg.setWriteThrough(true);
-                cfg.setLoadPreviousValue(true);
-
-                return null;
-            }
-        };
-
-        startGrid(1);
-
-        initCache = new C1<CacheConfiguration, Void>() {
-            /** {@inheritDoc} */
-            @Override public Void apply(CacheConfiguration cfg) {
-                cfg.setAffinity(new RendezvousAffinityFunction());
-
-                cfg.setEvictionPolicyFactory(new FifoEvictionPolicyFactory<>());
-                cfg.setEvictionPolicy(new LruEvictionPolicy());
-                cfg.setOnheapCacheEnabled(true);
-
-                cfg.setCacheStoreFactory(null);
-
-                return null;
-            }
-        };
-
-        startGrid(2);
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    @Test
     public void testStoreCheckAtomic() throws Exception {
         cacheEnabled = true;
 
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheConfigurationValidationSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheConfigurationValidationSelfTest.java
index 2a084f5..348fee5 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheConfigurationValidationSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheConfigurationValidationSelfTest.java
@@ -25,8 +25,6 @@
 import org.apache.ignite.internal.processors.datastructures.DataStructuresProcessor;
 import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
 import org.junit.Test;
-
-import static org.apache.ignite.cache.CacheMode.LOCAL;
 import static org.apache.ignite.cache.CacheMode.PARTITIONED;
 import static org.apache.ignite.cache.CacheMode.REPLICATED;
 import static org.apache.ignite.cache.CacheRebalanceMode.ASYNC;
@@ -104,11 +102,6 @@
         namedCacheCfg.setWriteSynchronizationMode(FULL_SYNC);
         namedCacheCfg.setAffinity(new RendezvousAffinityFunction());
 
-        // Local cache configuration.
-        CacheConfiguration localCacheCfg = defaultCacheConfiguration();
-
-        localCacheCfg.setCacheMode(LOCAL);
-
         // Modify cache config according to test parameters.
         if (igniteInstanceName.contains(WRONG_PRELOAD_MODE_IGNITE_INSTANCE_NAME))
             dfltCacheCfg.setRebalanceMode(SYNC);
@@ -126,7 +119,7 @@
         else {
             // Normal configuration.
             if (!cfg.isClientMode())
-                cfg.setCacheConfiguration(dfltCacheCfg, namedCacheCfg, localCacheCfg);
+                cfg.setCacheConfiguration(dfltCacheCfg, namedCacheCfg);
         }
 
         if (igniteInstanceName.contains(RESERVED_FOR_DATASTRUCTURES_CACHE_NAME_IGNITE_INSTANCE_NAME))
@@ -206,7 +199,7 @@
 
             Collection<String> names = grid(0).cacheNames();
 
-            assertEquals(3, names.size());
+            assertEquals(2, names.size());
 
             for (String name : names)
                 assertTrue(name.equals(CACHE_NAME_WITH_SPECIAL_CHARACTERS_PARTITIONED)
@@ -217,7 +210,7 @@
 
             names = client.cacheNames();
 
-            assertEquals(3, names.size());
+            assertEquals(2, names.size());
         }
         finally {
             stopAllGrids();
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheEntryMemorySizeSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheEntryMemorySizeSelfTest.java
index 8355335..414ff1c 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheEntryMemorySizeSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheEntryMemorySizeSelfTest.java
@@ -39,9 +39,7 @@
 import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
 import org.junit.Ignore;
 import org.junit.Test;
-
 import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL;
-import static org.apache.ignite.cache.CacheMode.LOCAL;
 import static org.apache.ignite.cache.CacheMode.PARTITIONED;
 import static org.apache.ignite.cache.CacheMode.REPLICATED;
 
@@ -181,32 +179,6 @@
 
     /** @throws Exception If failed. */
     @Test
-    public void testLocal() throws Exception {
-        MvccFeatureChecker.skipIfNotSupported(MvccFeatureChecker.Feature.LOCAL_CACHE);
-
-        IgniteCache<Integer, Value> cache = createCache(false, LOCAL);
-
-        try {
-            cache.put(1, new Value(new byte[1024]));
-            cache.put(2, new Value(new byte[2048]));
-
-            GridCacheAdapter<Integer, Value> internalCache = internalCache(cache);
-
-            // All values are stored in PageMemory, cache entry size shouldn't depend on value size
-            assertEquals(KEY_SIZE + NULL_REF_SIZE + ENTRY_OVERHEAD + extrasSize(internalCache.entryEx(0)),
-                internalCache.entryEx(0).memorySize());
-            assertEquals(KEY_SIZE + NULL_REF_SIZE + ENTRY_OVERHEAD + extrasSize(internalCache.entryEx(1)),
-                internalCache.entryEx(1).memorySize());
-            assertEquals(KEY_SIZE + NULL_REF_SIZE + ENTRY_OVERHEAD + extrasSize(internalCache.entryEx(2)),
-                internalCache.entryEx(2).memorySize());
-        }
-        finally {
-            ignite(0).destroyCache(cache.getName());
-        }
-    }
-
-    /** @throws Exception If failed. */
-    @Test
     public void testReplicated() throws Exception {
         IgniteCache<Integer, Value> cache = createCache(false, REPLICATED);
 
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheFastNodeLeftForTransactionTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheFastNodeLeftForTransactionTest.java
similarity index 99%
rename from modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheFastNodeLeftForTransactionTest.java
rename to modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheFastNodeLeftForTransactionTest.java
index 2dc34ae..c66a35b 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheFastNodeLeftForTransactionTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheFastNodeLeftForTransactionTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.ignite.internal.processors.cache.local;
+package org.apache.ignite.internal.processors.cache;
 
 import java.util.ArrayList;
 import java.util.Collection;
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheInterceptorAbstractSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheInterceptorAbstractSelfTest.java
index 37d22f1..e2b5ade 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheInterceptorAbstractSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheInterceptorAbstractSelfTest.java
@@ -47,9 +47,7 @@
 import org.jetbrains.annotations.Nullable;
 import org.junit.Before;
 import org.junit.Test;
-
 import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL;
-import static org.apache.ignite.cache.CacheMode.LOCAL;
 import static org.apache.ignite.cache.CacheMode.PARTITIONED;
 import static org.apache.ignite.cache.CacheMode.REPLICATED;
 
@@ -160,8 +158,7 @@
 
         afterTest();
 
-        if (cacheMode() != LOCAL)
-            testGet(backupKey(0), false);
+        testGet(backupKey(0), false);
     }
 
     /**
@@ -173,8 +170,7 @@
 
         afterTest();
 
-        if (cacheMode() != LOCAL)
-            testGet(backupKey(0), true);
+        testGet(backupKey(0), true);
     }
 
     /**
@@ -437,11 +433,9 @@
 
             afterTest();
 
-            if (cacheMode() != LOCAL) {
-                testCancelUpdate(backupKey(0), op);
+            testCancelUpdate(backupKey(0), op);
 
-                afterTest();
-            }
+            afterTest();
         }
     }
 
@@ -545,11 +539,9 @@
 
             afterTest();
 
-            if (cacheMode() != LOCAL) {
-                testModifyUpdate(backupKey(0), op);
+            testModifyUpdate(backupKey(0), op);
 
-                afterTest();
-            }
+            afterTest();
         }
     }
 
@@ -621,11 +613,9 @@
 
             afterTest();
 
-            if (cacheMode() != LOCAL) {
-                testCancelRemove(backupKey(0), op);
+            testCancelRemove(backupKey(0), op);
 
-                afterTest();
-            }
+            afterTest();
         }
     }
 
@@ -733,11 +723,9 @@
 
             afterTest();
 
-            if (cacheMode() != LOCAL) {
-                testRemove(backupKey(0), op);
+            testRemove(backupKey(0), op);
 
-                afterTest();
-            }
+            afterTest();
         }
     }
 
@@ -951,17 +939,10 @@
         String key2;
         String key3;
 
-        if (cacheMode() == LOCAL) {
-            key1 = "1";
-            key2 = "2";
-            key3 = "3";
-        }
-        else {
-            List<String> keys = primaryKeys(0, 2);
-            key1 = keys.get(0); // Need two keys for the same node to test atomic cache batch store upadte.
-            key2 = keys.get(1);
-            key3 = backupKey(0);
-        }
+        List<String> keys = primaryKeys(0, 2);
+        key1 = keys.get(0); // Need two keys for the same node to test atomic cache batch store upadte.
+        key2 = keys.get(1);
+        key3 = backupKey(0);
 
         map.put(key1, 1);
         map.put(key2, 2);
@@ -1040,17 +1021,10 @@
         String key2;
         String key3;
 
-        if (cacheMode() == LOCAL) {
-            key1 = "1";
-            key2 = "2";
-            key3 = "3";
-        }
-        else {
-            List<String> keys = primaryKeys(0, 2);
-            key1 = keys.get(0);
-            key2 = keys.get(1);
-            key3 = backupKey(0);
-        }
+        List<String> keys = primaryKeys(0, 2);
+        key1 = keys.get(0);
+        key2 = keys.get(1);
+        key3 = backupKey(0);
 
         map.put(key1, 1);
         map.put(key2, 2);
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheInterceptorLocalAtomicSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheInterceptorLocalAtomicSelfTest.java
deleted file mode 100644
index 07e48af..0000000
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheInterceptorLocalAtomicSelfTest.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache;
-
-import org.apache.ignite.cache.CacheAtomicityMode;
-import org.apache.ignite.cache.CacheMode;
-
-import static org.apache.ignite.cache.CacheAtomicityMode.ATOMIC;
-import static org.apache.ignite.cache.CacheMode.LOCAL;
-
-/**
- * Tests {@link org.apache.ignite.cache.CacheInterceptor}.
- */
-public class GridCacheInterceptorLocalAtomicSelfTest extends GridCacheInterceptorAbstractSelfTest {
-    /** {@inheritDoc} */
-    @Override protected CacheAtomicityMode atomicityMode() {
-        return ATOMIC;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected int gridCount() {
-        return 1;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected CacheMode cacheMode() {
-        return LOCAL;
-    }
-}
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheInterceptorLocalAtomicWithStoreSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheInterceptorLocalAtomicWithStoreSelfTest.java
deleted file mode 100644
index 152e8e4..0000000
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheInterceptorLocalAtomicWithStoreSelfTest.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache;
-
-/**
- * Tests {@link org.apache.ignite.cache.CacheInterceptor}.
- */
-public class GridCacheInterceptorLocalAtomicWithStoreSelfTest extends GridCacheInterceptorLocalAtomicSelfTest {
-    /** {@inheritDoc} */
-    @Override protected boolean storeEnabled() {
-        return true;
-    }
-}
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheInterceptorLocalSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheInterceptorLocalSelfTest.java
deleted file mode 100644
index 74fa628..0000000
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheInterceptorLocalSelfTest.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache;
-
-import org.apache.ignite.cache.CacheAtomicityMode;
-import org.apache.ignite.cache.CacheMode;
-import org.apache.ignite.configuration.CacheConfiguration;
-import org.apache.ignite.testframework.MvccFeatureChecker;
-import org.junit.Before;
-
-import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL;
-import static org.apache.ignite.cache.CacheMode.LOCAL;
-
-/**
- * Tests {@link org.apache.ignite.cache.CacheInterceptor}.
- */
-public class GridCacheInterceptorLocalSelfTest extends GridCacheInterceptorAbstractSelfTest {
-    /** */
-    @Before
-    public void beforeGridCacheInterceptorLocalSelfTest() {
-        MvccFeatureChecker.skipIfNotSupported(MvccFeatureChecker.Feature.LOCAL_CACHE);
-    }
-
-    /** {@inheritDoc} */
-    @Override protected CacheConfiguration cacheConfiguration(String igniteInstanceName) throws Exception {
-        MvccFeatureChecker.skipIfNotSupported(MvccFeatureChecker.Feature.LOCAL_CACHE);
-
-        return super.cacheConfiguration(igniteInstanceName);
-    }
-
-    /** {@inheritDoc} */
-    @Override protected CacheAtomicityMode atomicityMode() {
-        return TRANSACTIONAL;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected CacheMode cacheMode() {
-        return LOCAL;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected int gridCount() {
-        return 1;
-    }
-}
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheInterceptorLocalWithStoreSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheInterceptorLocalWithStoreSelfTest.java
deleted file mode 100644
index 7a1ad73..0000000
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheInterceptorLocalWithStoreSelfTest.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache;
-
-import org.apache.ignite.configuration.CacheConfiguration;
-import org.apache.ignite.testframework.MvccFeatureChecker;
-import org.junit.Before;
-
-/**
- * Tests {@link org.apache.ignite.cache.CacheInterceptor}.
- */
-public class GridCacheInterceptorLocalWithStoreSelfTest extends GridCacheInterceptorLocalSelfTest {
-    /** */
-    @Before
-    public void beforeGridCacheInterceptorLocalWithStoreSelfTest() {
-        MvccFeatureChecker.skipIfNotSupported(MvccFeatureChecker.Feature.CACHE_STORE);
-    }
-
-    /** {@inheritDoc} */
-    @Override protected CacheConfiguration cacheConfiguration(String igniteInstanceName) throws Exception {
-        MvccFeatureChecker.skipIfNotSupported(MvccFeatureChecker.Feature.CACHE_STORE);
-
-        return super.cacheConfiguration(igniteInstanceName);
-    }
-
-    /** {@inheritDoc} */
-    @Override protected boolean storeEnabled() {
-        return true;
-    }
-}
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheLocalTxStoreExceptionSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheLocalTxStoreExceptionSelfTest.java
deleted file mode 100644
index 9387aa7..0000000
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheLocalTxStoreExceptionSelfTest.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache;
-
-import org.apache.ignite.cache.CacheMode;
-import org.apache.ignite.testframework.MvccFeatureChecker;
-
-import static org.apache.ignite.cache.CacheMode.LOCAL;
-
-/**
- *
- */
-public class GridCacheLocalTxStoreExceptionSelfTest extends IgniteTxStoreExceptionAbstractSelfTest {
-    /** {@inheritDoc} */
-    @Override protected void beforeTestsStarted() throws Exception {
-        MvccFeatureChecker.skipIfNotSupported(MvccFeatureChecker.Feature.LOCAL_CACHE);
-
-        super.beforeTestsStarted();
-    }
-
-    /** {@inheritDoc} */
-    @Override protected int gridCount() {
-        return 1;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected CacheMode cacheMode() {
-        return LOCAL;
-    }
-}
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheMvccManagerSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheMvccManagerSelfTest.java
index 75b285e..b322119 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheMvccManagerSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheMvccManagerSelfTest.java
@@ -27,9 +27,7 @@
 import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
 import org.apache.ignite.transactions.Transaction;
 import org.junit.Test;
-
 import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL;
-import static org.apache.ignite.cache.CacheMode.LOCAL;
 import static org.apache.ignite.cache.CacheMode.PARTITIONED;
 import static org.apache.ignite.cache.CacheMode.REPLICATED;
 
@@ -62,14 +60,6 @@
 
     /** @throws Exception If failed. */
     @Test
-    public void testLocalCache() throws Exception {
-        mode = LOCAL;
-
-        testCandidates(1);
-    }
-
-    /** @throws Exception If failed. */
-    @Test
     public void testReplicatedCache() throws Exception {
         mode = REPLICATED;
 
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheObjectToStringSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheObjectToStringSelfTest.java
index 041ac65..7f9141a 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheObjectToStringSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheObjectToStringSelfTest.java
@@ -31,9 +31,7 @@
 import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
 import org.apache.ignite.transactions.Transaction;
 import org.junit.Test;
-
 import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL;
-import static org.apache.ignite.cache.CacheMode.LOCAL;
 import static org.apache.ignite.cache.CacheMode.PARTITIONED;
 import static org.apache.ignite.cache.CacheMode.REPLICATED;
 import static org.apache.ignite.transactions.TransactionConcurrency.PESSIMISTIC;
@@ -87,24 +85,6 @@
 
     /** @throws Exception If failed. */
     @Test
-    public void testLocalCacheFifoEvictionPolicy() throws Exception {
-        cacheMode = LOCAL;
-        evictionPlc = new FifoEvictionPolicy();
-
-        checkToString();
-    }
-
-    /** @throws Exception If failed. */
-    @Test
-    public void testLocalCacheLruEvictionPolicy() throws Exception {
-        cacheMode = LOCAL;
-        evictionPlc = new LruEvictionPolicy();
-
-        checkToString();
-    }
-
-    /** @throws Exception If failed. */
-    @Test
     public void testReplicatedCacheFifoEvictionPolicy() throws Exception {
         cacheMode = REPLICATED;
         evictionPlc = new FifoEvictionPolicy();
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheOnCopyFlagLocalSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheOnCopyFlagLocalSelfTest.java
deleted file mode 100644
index 03dfd75..0000000
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheOnCopyFlagLocalSelfTest.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache;
-
-import org.apache.ignite.cache.CacheAtomicityMode;
-import org.apache.ignite.cache.CacheMode;
-import org.junit.Ignore;
-
-import static org.apache.ignite.cache.CacheAtomicityMode.ATOMIC;
-import static org.apache.ignite.cache.CacheMode.LOCAL;
-
-/**
- * Tests {@link org.apache.ignite.cache.CacheInterceptor}.
- */
-@Ignore("https://issues.apache.org/jira/browse/IGNITE-9214")
-public class GridCacheOnCopyFlagLocalSelfTest extends GridCacheOnCopyFlagAbstractSelfTest {
-    /** {@inheritDoc} */
-    @Override protected CacheMode cacheMode() {
-        return LOCAL;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected CacheAtomicityMode atomicityMode() {
-        return ATOMIC;
-    }
-}
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheReferenceCleanupSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheReferenceCleanupSelfTest.java
index 6a405e6..2ff15b0 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheReferenceCleanupSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheReferenceCleanupSelfTest.java
@@ -35,11 +35,9 @@
 import org.apache.ignite.internal.util.typedef.G;
 import org.apache.ignite.lang.IgniteFuture;
 import org.apache.ignite.testframework.GridTestUtils;
-import org.apache.ignite.testframework.MvccFeatureChecker;
 import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
 import org.apache.ignite.transactions.Transaction;
 import org.junit.Test;
-
 import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL;
 import static org.apache.ignite.testframework.GridTestUtils.cacheContext;
 
@@ -101,21 +99,6 @@
 
     /** @throws Exception If failed. */
     @Test
-    public void testAtomicLongLocal() throws Exception {
-        MvccFeatureChecker.skipIfNotSupported(MvccFeatureChecker.Feature.LOCAL_CACHE);
-
-        mode = CacheMode.LOCAL;
-
-        try {
-            checkReferenceCleanup(atomicLongCallable());
-        }
-        finally {
-            stopAllGrids();
-        }
-    }
-
-    /** @throws Exception If failed. */
-    @Test
     public void testOneAsyncOpPartitioned() throws Exception {
         mode = CacheMode.PARTITIONED;
 
@@ -146,21 +129,6 @@
 
     /** @throws Exception If failed. */
     @Test
-    public void testOneAsyncOpLocal() throws Exception {
-        MvccFeatureChecker.skipIfNotSupported(MvccFeatureChecker.Feature.LOCAL_CACHE);
-
-        mode = CacheMode.LOCAL;
-
-        try {
-            checkReferenceCleanup(oneAsyncOpCallable());
-        }
-        finally {
-            stopAllGrids();
-        }
-    }
-
-    /** @throws Exception If failed. */
-    @Test
     public void testSeveralAsyncOpsPartitioned() throws Exception {
         mode = CacheMode.PARTITIONED;
 
@@ -191,21 +159,6 @@
 
     /** @throws Exception If failed. */
     @Test
-    public void testSeveralAsyncOpsLocal() throws Exception {
-        MvccFeatureChecker.skipIfNotSupported(MvccFeatureChecker.Feature.LOCAL_CACHE);
-
-        mode = CacheMode.LOCAL;
-
-        try {
-            checkReferenceCleanup(severalAsyncOpsCallable());
-        }
-        finally {
-            stopAllGrids();
-        }
-    }
-
-    /** @throws Exception If failed. */
-    @Test
     public void testSyncOpAsyncCommitPartitioned() throws Exception {
         mode = CacheMode.PARTITIONED;
 
@@ -236,21 +189,6 @@
 
     /** @throws Exception If failed. */
     @Test
-    public void testSyncOpAsyncCommitLocal() throws Exception {
-        MvccFeatureChecker.skipIfNotSupported(MvccFeatureChecker.Feature.LOCAL_CACHE);
-
-        mode = CacheMode.LOCAL;
-
-        try {
-            checkReferenceCleanup(syncOpAsyncCommitCallable());
-        }
-        finally {
-            stopAllGrids();
-        }
-    }
-
-    /** @throws Exception If failed. */
-    @Test
     public void testAsyncOpsAsyncCommitPartitioned() throws Exception {
         mode = CacheMode.PARTITIONED;
 
@@ -279,21 +217,6 @@
         }
     }
 
-    /** @throws Exception If failed. */
-    @Test
-    public void testAsyncOpsAsyncCommitLocal() throws Exception {
-        MvccFeatureChecker.skipIfNotSupported(MvccFeatureChecker.Feature.LOCAL_CACHE);
-
-        mode = CacheMode.LOCAL;
-
-        try {
-            checkReferenceCleanup(asyncOpsAsyncCommitCallable());
-        }
-        finally {
-            stopAllGrids();
-        }
-    }
-
     /**
      * @param call Callable.
      * @throws Exception If failed.
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheReloadSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheReloadSelfTest.java
index c7ecc3f..b8f98f2 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheReloadSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheReloadSelfTest.java
@@ -133,20 +133,6 @@
     }
 
     /**
-     * Checks that eviction works with reload() on local cache.
-     *
-     * @throws Exception If error occurs.
-     */
-    @Test
-    public void testReloadEvictionLocalCache() throws Exception {
-        MvccFeatureChecker.skipIfNotSupported(MvccFeatureChecker.Feature.LOCAL_CACHE);
-
-        cacheMode = CacheMode.LOCAL;
-
-        doTest();
-    }
-
-    /**
      * Checks that eviction works with reload() on partitioned cache
      * with near enabled.
      *
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheSlowTxWarnTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheSlowTxWarnTest.java
index 9a6f63d..fad614c 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheSlowTxWarnTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheSlowTxWarnTest.java
@@ -25,12 +25,8 @@
 import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
 import org.apache.ignite.transactions.Transaction;
 import org.junit.Test;
-
-import static org.apache.ignite.cache.CacheMode.LOCAL;
 import static org.apache.ignite.cache.CacheMode.PARTITIONED;
 import static org.apache.ignite.cache.CacheMode.REPLICATED;
-import static org.apache.ignite.testframework.MvccFeatureChecker.forcedMvcc;
-import static org.apache.ignite.testframework.MvccFeatureChecker.isSupported;
 
 /**
  * Test to check slow TX warning timeout defined by
@@ -38,27 +34,26 @@
  * system property.
  */
 public class GridCacheSlowTxWarnTest extends GridCommonAbstractTest {
+    /** Partitioned cache name. */
+    protected static final String PARTITIONED_CACHE_NAME = "partitioned";
+
+    /** Replicated cache name. */
+    private static final String REPLICATED_CACHE_NAME = "replicated";
+
     /** {@inheritDoc} */
     @Override protected IgniteConfiguration getConfiguration(String igniteInstanceName) throws Exception {
         IgniteConfiguration c = super.getConfiguration(igniteInstanceName);
 
-        CacheConfiguration cc1 = defaultCacheConfiguration();
+        CacheConfiguration cc1 = defaultCacheConfiguration()
+            .setName(PARTITIONED_CACHE_NAME)
+            .setCacheMode(PARTITIONED)
+            .setBackups(1);
 
-        cc1.setName("partitioned");
-        cc1.setCacheMode(PARTITIONED);
-        cc1.setBackups(1);
+        CacheConfiguration cc2 = defaultCacheConfiguration()
+            .setName(REPLICATED_CACHE_NAME)
+            .setCacheMode(REPLICATED);
 
-        CacheConfiguration cc2 = defaultCacheConfiguration();
-
-        cc2.setName("replicated");
-        cc2.setCacheMode(REPLICATED);
-
-        CacheConfiguration cc3 = defaultCacheConfiguration();
-
-        cc3.setName("local");
-        cc3.setCacheMode((!forcedMvcc() || isSupported(LOCAL)) ? LOCAL : REPLICATED);
-
-        c.setCacheConfiguration(cc1, cc2, cc3);
+        c.setCacheConfiguration(cc1, cc2);
 
         return c;
     }
@@ -73,21 +68,18 @@
 
             info(">>> Slow tx timeout is not set, long-live txs simulated.");
 
-            checkCache(g, "partitioned", true, false);
-            checkCache(g, "replicated", true, false);
-            checkCache(g, "local", true, false);
+            checkCache(g, PARTITIONED_CACHE_NAME, true, false);
+            checkCache(g, REPLICATED_CACHE_NAME, true, false);
 
             info(">>> Slow tx timeout is set, long-live tx simulated.");
 
-            checkCache(g, "partitioned", true, true);
-            checkCache(g, "replicated", true, true);
-            checkCache(g, "local", true, true);
+            checkCache(g, PARTITIONED_CACHE_NAME, true, true);
+            checkCache(g, REPLICATED_CACHE_NAME, true, true);
 
             info(">>> Slow tx timeout is set, no long-live txs.");
 
-            checkCache(g, "partitioned", false, true);
-            checkCache(g, "replicated", false, true);
-            checkCache(g, "local", false, true);
+            checkCache(g, PARTITIONED_CACHE_NAME, false, true);
+            checkCache(g, REPLICATED_CACHE_NAME, false, true);
         }
         finally {
             stopAllGrids();
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheTestEntryEx.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheTestEntryEx.java
index 6a8202f..057d3db 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheTestEntryEx.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheTestEntryEx.java
@@ -22,9 +22,7 @@
 import java.util.List;
 import java.util.UUID;
 import javax.cache.Cache;
-import javax.cache.expiry.ExpiryPolicy;
 import javax.cache.processor.EntryProcessor;
-import javax.cache.processor.EntryProcessorResult;
 import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.cache.eviction.EvictableEntry;
 import org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion;
@@ -40,7 +38,6 @@
 import org.apache.ignite.internal.processors.dr.GridDrType;
 import org.apache.ignite.internal.processors.query.schema.SchemaIndexCacheVisitorClosure;
 import org.apache.ignite.internal.util.lang.GridMetadataAwareAdapter;
-import org.apache.ignite.internal.util.lang.GridTuple3;
 import org.apache.ignite.lang.IgniteUuid;
 import org.jetbrains.annotations.Nullable;
 
@@ -522,27 +519,6 @@
     }
 
     /** {@inheritDoc} */
-    @Override public GridTuple3<Boolean, Object, EntryProcessorResult<Object>> innerUpdateLocal(
-        GridCacheVersion ver,
-        GridCacheOperation op,
-        @Nullable Object writeObj,
-        @Nullable Object[] invokeArgs,
-        boolean writeThrough,
-        boolean readThrough,
-        boolean retval,
-        boolean keepBinary,
-        @Nullable ExpiryPolicy expiryPlc,
-        boolean evt,
-        boolean metrics,
-        @Nullable CacheEntryPredicate[] filter,
-        boolean intercept,
-        String taskName,
-        boolean transformOp)
-        throws IgniteCheckedException, GridCacheEntryRemovedException {
-        return new GridTuple3<>(false, null, null);
-    }
-
-    /** {@inheritDoc} */
     @Override public GridCacheUpdateAtomicResult innerUpdate(
         GridCacheVersion ver,
         UUID evtNodeId,
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheTtlManagerEvictionSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheTtlManagerEvictionSelfTest.java
index 8fbf424..2474f02 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheTtlManagerEvictionSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheTtlManagerEvictionSelfTest.java
@@ -76,14 +76,6 @@
      * @throws Exception If failed.
      */
     @Test
-    public void testLocalEviction() throws Exception {
-        checkEviction(CacheMode.LOCAL);
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    @Test
     public void testPartitionedEviction() throws Exception {
         checkEviction(CacheMode.PARTITIONED);
     }
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheTtlManagerSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheTtlManagerSelfTest.java
index 30f09c2..511d383 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheTtlManagerSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheTtlManagerSelfTest.java
@@ -29,9 +29,7 @@
 import org.apache.ignite.testframework.MvccFeatureChecker;
 import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
 import org.junit.Test;
-
 import static java.util.concurrent.TimeUnit.MILLISECONDS;
-import static org.apache.ignite.cache.CacheMode.LOCAL;
 import static org.apache.ignite.cache.CacheMode.PARTITIONED;
 import static org.apache.ignite.cache.CacheMode.REPLICATED;
 
@@ -69,14 +67,6 @@
      * @throws Exception If failed.
      */
     @Test
-    public void testLocalTtl() throws Exception {
-        checkTtl(LOCAL);
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    @Test
     public void testPartitionedTtl() throws Exception {
         checkTtl(PARTITIONED);
     }
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridLocalCacheStoreManagerDeserializationTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridLocalCacheStoreManagerDeserializationTest.java
deleted file mode 100644
index 0bc099a..0000000
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridLocalCacheStoreManagerDeserializationTest.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-package org.apache.ignite.internal.processors.cache;
-
-import java.util.UUID;
-import javax.cache.expiry.ExpiryPolicy;
-import org.apache.ignite.Ignite;
-import org.apache.ignite.IgniteCache;
-import org.apache.ignite.binary.BinaryObject;
-import org.apache.ignite.binary.BinaryObjectBuilder;
-import org.apache.ignite.cache.CacheMode;
-import org.apache.ignite.internal.processors.cache.version.GridCacheVersion;
-import org.junit.Test;
-
-/**
- * Checks whether storing to local store doesn't cause binary objects unmarshalling,
- * and as a consequence {@link ClassNotFoundException} to be thrown.
- *
- * @see <a href="https://issues.apache.org/jira/browse/IGNITE-2753">
- *     https://issues.apache.org/jira/browse/IGNITE-2753
- *     </a>
- */
-public class GridLocalCacheStoreManagerDeserializationTest extends GridCacheStoreManagerDeserializationTest {
-    /** {@inheritDoc} */
-    @Override protected CacheMode cacheMode() {
-        return CacheMode.LOCAL;
-    }
-
-    /**
-     * Checks no additional unmarshalling happens in calling
-     * {@link GridCacheMapEntry#innerUpdateLocal(GridCacheVersion, GridCacheOperation, Object, Object[],
-     * boolean, boolean, boolean, boolean, ExpiryPolicy, boolean, boolean, CacheEntryPredicate[],
-     * boolean, UUID, String)}.
-     *
-     * @throws Exception
-     */
-    @Test
-    public void testUpdate() throws Exception {
-        // Goal is to check correct saving to store (no exception must be thrown)
-
-        final Ignite grid = startGrid();
-
-        final IgniteCache<TestObj, TestObj> cache = grid.createCache(CACHE_NAME);
-
-        final TestObj testObj = new TestObj(0);
-
-        cache.put(testObj, testObj);
-
-        assert testObj.equals(cache.get(testObj));
-        assert store.map.containsKey(testObj);
-
-        cache.remove(testObj);
-
-        assert cache.get(testObj) == null;
-        assert !store.map.containsKey(testObj);
-    }
-
-    /**
-     * Checks no additional unmarshalling happens in calling
-     * {@link GridCacheMapEntry#innerUpdateLocal(GridCacheVersion, GridCacheOperation, Object, Object[],
-     * boolean, boolean, boolean, boolean, ExpiryPolicy, boolean, boolean, CacheEntryPredicate[],
-     * boolean, UUID, String)} for binary objects.
-     *
-     * @throws Exception
-     */
-    @Test
-    public void testBinaryUpdate() throws Exception {
-        // Goal is to check correct saving to store (no exception must be thrown)
-        final Ignite grid = startGrid("binaryGrid");
-
-        final IgniteCache<BinaryObject, BinaryObject> cache = grid.createCache(CACHE_NAME).withKeepBinary();
-
-        final BinaryObjectBuilder builder = grid.binary().builder("custom_type");
-
-        final BinaryObject entity = builder.setField("id", 0).build();
-
-        cache.put(entity, entity);
-
-        assert entity.equals(cache.get(entity));
-        assert store.map.containsKey(entity);
-
-        cache.remove(entity);
-
-        assert cache.get(entity) == null;
-        assert !store.map.containsKey(entity);
-    }
-}
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheAtomicConcurrentUnorderedUpdateAllTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheAtomicConcurrentUnorderedUpdateAllTest.java
index 6b9b1f6..6eae635 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheAtomicConcurrentUnorderedUpdateAllTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheAtomicConcurrentUnorderedUpdateAllTest.java
@@ -35,7 +35,6 @@
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
-
 import static org.apache.ignite.cache.CacheAtomicityMode.ATOMIC;
 
 /** Test concurrent putAll/removeAll operations with unordered set of keys on atomic caches. */
@@ -61,9 +60,7 @@
             new Object[] {CacheMode.PARTITIONED, Boolean.TRUE, Boolean.FALSE},
             new Object[] {CacheMode.PARTITIONED, Boolean.FALSE, Boolean.TRUE},
             new Object[] {CacheMode.REPLICATED, Boolean.FALSE, Boolean.FALSE},
-            new Object[] {CacheMode.REPLICATED, Boolean.TRUE, Boolean.FALSE},
-            new Object[] {CacheMode.LOCAL, Boolean.FALSE, Boolean.FALSE},
-            new Object[] {CacheMode.LOCAL, Boolean.TRUE, Boolean.FALSE}
+            new Object[] {CacheMode.REPLICATED, Boolean.TRUE, Boolean.FALSE}
         );
     }
 
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheAtomicLocalInvokeTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheAtomicLocalInvokeTest.java
deleted file mode 100644
index f81693e..0000000
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheAtomicLocalInvokeTest.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache;
-
-import org.apache.ignite.cache.CacheAtomicityMode;
-import org.apache.ignite.cache.CacheMode;
-import org.apache.ignite.configuration.NearCacheConfiguration;
-
-import static org.apache.ignite.cache.CacheAtomicityMode.ATOMIC;
-import static org.apache.ignite.cache.CacheMode.LOCAL;
-
-/**
- *
- */
-public class IgniteCacheAtomicLocalInvokeTest extends IgniteCacheInvokeAbstractTest {
-    /** {@inheritDoc} */
-    @Override protected int gridCount() {
-        return 1;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected CacheMode cacheMode() {
-        return LOCAL;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected CacheAtomicityMode atomicityMode() {
-        return ATOMIC;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected NearCacheConfiguration nearConfiguration() {
-        return null;
-    }
-}
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheAtomicLocalPeekModesTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheAtomicLocalPeekModesTest.java
deleted file mode 100644
index b4aae1d..0000000
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheAtomicLocalPeekModesTest.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache;
-
-import org.apache.ignite.cache.CacheAtomicityMode;
-import org.apache.ignite.cache.CacheMode;
-
-import static org.apache.ignite.cache.CacheAtomicityMode.ATOMIC;
-import static org.apache.ignite.cache.CacheMode.LOCAL;
-
-/**
- *
- */
-public class IgniteCacheAtomicLocalPeekModesTest extends IgniteCachePeekModesAbstractTest {
-    /** {@inheritDoc} */
-    @Override protected CacheAtomicityMode atomicityMode() {
-        return ATOMIC;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected int gridCount() {
-        return 1;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected CacheMode cacheMode() {
-        return LOCAL;
-    }
-}
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheAtomicLocalStoreValueTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheAtomicLocalStoreValueTest.java
deleted file mode 100644
index 798f5b5..0000000
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheAtomicLocalStoreValueTest.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache;
-
-import org.apache.ignite.cache.CacheAtomicityMode;
-import org.apache.ignite.cache.CacheMode;
-import org.apache.ignite.configuration.NearCacheConfiguration;
-
-import static org.apache.ignite.cache.CacheAtomicityMode.ATOMIC;
-import static org.apache.ignite.cache.CacheMode.LOCAL;
-
-/**
- *
- */
-public class IgniteCacheAtomicLocalStoreValueTest extends IgniteCacheStoreValueAbstractTest {
-    /** {@inheritDoc} */
-    @Override protected int gridCount() {
-        return 1;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected CacheMode cacheMode() {
-        return LOCAL;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected CacheAtomicityMode atomicityMode() {
-        return ATOMIC;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected NearCacheConfiguration nearConfiguration() {
-        return null;
-    }
-}
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheAtomicLocalWithStoreInvokeTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheAtomicLocalWithStoreInvokeTest.java
deleted file mode 100644
index e6b83ae..0000000
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheAtomicLocalWithStoreInvokeTest.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache;
-
-import javax.cache.configuration.Factory;
-import org.apache.ignite.cache.store.CacheStore;
-
-/**
- *
- */
-public class IgniteCacheAtomicLocalWithStoreInvokeTest extends IgniteCacheAtomicLocalInvokeTest {
-    /** {@inheritDoc} */
-    @Override protected Factory<CacheStore> cacheStoreFactory() {
-        return new TestStoreFactory();
-    }
-}
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheConfigVariationsFullApiTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheConfigVariationsFullApiTest.java
index 1cbf532..dc9efb9 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheConfigVariationsFullApiTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheConfigVariationsFullApiTest.java
@@ -91,11 +91,9 @@
 import org.jetbrains.annotations.Nullable;
 import org.junit.Ignore;
 import org.junit.Test;
-
 import static java.util.concurrent.TimeUnit.MILLISECONDS;
 import static org.apache.ignite.cache.CacheAtomicityMode.ATOMIC;
 import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL;
-import static org.apache.ignite.cache.CacheMode.LOCAL;
 import static org.apache.ignite.cache.CacheMode.PARTITIONED;
 import static org.apache.ignite.cache.CacheMode.REPLICATED;
 import static org.apache.ignite.cache.CachePeekMode.ALL;
@@ -3300,7 +3298,7 @@
      */
     @Test
     public void testDeletedEntriesFlag() throws Exception {
-        if (cacheMode() != LOCAL && cacheMode() != REPLICATED) {
+        if (cacheMode() == PARTITIONED) {
             final int cnt = 3;
 
             IgniteCache<String, Integer> cache = jcache();
@@ -4548,13 +4546,6 @@
 
         IgniteCache srvNodeCache = serverNodeCache();
 
-        if (!isMultiJvmObject(srvNodeCache)) {
-            GridCacheAdapter internalCache = internalCache(srvNodeCache);
-
-            if (internalCache.isLocal())
-                return;
-        }
-
         assert c.get(key) == null;
 
         // Ensure that old TTL and expire time are not longer "visible".
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheEntryListenerAbstractTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheEntryListenerAbstractTest.java
index ad0e67b..05b9aa8 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheEntryListenerAbstractTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheEntryListenerAbstractTest.java
@@ -70,13 +70,11 @@
 import org.apache.ignite.testframework.MvccFeatureChecker;
 import org.jetbrains.annotations.Nullable;
 import org.junit.Test;
-
 import static java.util.concurrent.TimeUnit.MILLISECONDS;
 import static javax.cache.event.EventType.CREATED;
 import static javax.cache.event.EventType.EXPIRED;
 import static javax.cache.event.EventType.REMOVED;
 import static javax.cache.event.EventType.UPDATED;
-import static org.apache.ignite.cache.CacheMode.LOCAL;
 import static org.apache.ignite.cache.CacheMode.PARTITIONED;
 import static org.apache.ignite.cache.CacheMode.REPLICATED;
 
@@ -457,9 +455,6 @@
      */
     @Test
     public void testSerialization() throws Exception {
-        if (cacheMode() == LOCAL)
-            return;
-
         AtomicBoolean serialized = new AtomicBoolean();
 
         NonSerializableListener lsnr = new NonSerializableListener(serialized);
@@ -679,9 +674,6 @@
 
             log.info("Check filter for listener in configuration.");
 
-            if (cacheMode() == LOCAL)
-                cache.putAll(vals);
-
             checkFilter(cache, vals);
         }
         finally {
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheEntryListenerAtomicLocalTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheEntryListenerAtomicLocalTest.java
deleted file mode 100644
index e3d97d0..0000000
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheEntryListenerAtomicLocalTest.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache;
-
-import org.apache.ignite.cache.CacheAtomicityMode;
-import org.apache.ignite.cache.CacheMode;
-import org.apache.ignite.configuration.NearCacheConfiguration;
-
-import static org.apache.ignite.cache.CacheAtomicityMode.ATOMIC;
-import static org.apache.ignite.cache.CacheMode.LOCAL;
-
-/**
- *
- */
-public class IgniteCacheEntryListenerAtomicLocalTest extends IgniteCacheEntryListenerAbstractTest {
-    /** {@inheritDoc} */
-    @Override protected int gridCount() {
-        return 1;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected CacheMode cacheMode() {
-        return LOCAL;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected CacheAtomicityMode atomicityMode() {
-        return ATOMIC;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected NearCacheConfiguration nearConfiguration() {
-        return null;
-    }
-}
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheEntryListenerTxLocalTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheEntryListenerTxLocalTest.java
deleted file mode 100644
index 794d3d0..0000000
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheEntryListenerTxLocalTest.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache;
-
-import org.apache.ignite.cache.CacheAtomicityMode;
-import org.apache.ignite.cache.CacheMode;
-import org.apache.ignite.configuration.NearCacheConfiguration;
-import org.apache.ignite.testframework.MvccFeatureChecker;
-
-import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL;
-import static org.apache.ignite.cache.CacheMode.LOCAL;
-
-/**
- *
- */
-public class IgniteCacheEntryListenerTxLocalTest extends IgniteCacheEntryListenerAbstractTest {
-    /** {@inheritDoc} */
-    @Override protected void beforeTestsStarted() throws Exception {
-        MvccFeatureChecker.skipIfNotSupported(MvccFeatureChecker.Feature.LOCAL_CACHE);
-
-        super.beforeTestsStarted();
-    }
-
-    /** {@inheritDoc} */
-    @Override protected int gridCount() {
-        return 1;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected CacheMode cacheMode() {
-        return LOCAL;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected CacheAtomicityMode atomicityMode() {
-        return TRANSACTIONAL;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected NearCacheConfiguration nearConfiguration() {
-        return null;
-    }
-}
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheGroupsTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheGroupsTest.java
index d4322e6..892ce87 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheGroupsTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheGroupsTest.java
@@ -104,11 +104,9 @@
 import org.jetbrains.annotations.Nullable;
 import org.junit.Ignore;
 import org.junit.Test;
-
 import static org.apache.ignite.cache.CacheAtomicityMode.ATOMIC;
 import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL;
 import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL_SNAPSHOT;
-import static org.apache.ignite.cache.CacheMode.LOCAL;
 import static org.apache.ignite.cache.CacheMode.PARTITIONED;
 import static org.apache.ignite.cache.CacheMode.REPLICATED;
 import static org.apache.ignite.cache.CacheWriteSynchronizationMode.FULL_SYNC;
@@ -332,32 +330,6 @@
         scanQuery(REPLICATED, TRANSACTIONAL_SNAPSHOT);
     }
 
-
-    /**
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testScanQueryAtomicLocal() throws Exception {
-        scanQuery(LOCAL, ATOMIC);
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testScanQueryTxLocal() throws Exception {
-        scanQuery(LOCAL, TRANSACTIONAL);
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    @Ignore("https://issues.apache.org/jira/browse/IGNITE-9530")
-    @Test
-    public void testScanQueryMvccTxLocal() throws Exception {
-        scanQuery(LOCAL, TRANSACTIONAL_SNAPSHOT);
-    }
-
     /**
      * @throws Exception If failed.
      */
@@ -412,31 +384,6 @@
      * @throws Exception If failed.
      */
     @Test
-    public void testEntriesTtlAtomicLocal() throws Exception {
-        entriesTtl(LOCAL, ATOMIC);
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testEntriesTtlTxLocal() throws Exception {
-        entriesTtl(LOCAL, TRANSACTIONAL);
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    @Ignore("https://issues.apache.org/jira/browse/IGNITE-9530,https://issues.apache.org/jira/browse/IGNITE-7311")
-    @Test
-    public void testEntriesTtlMvccTxLocal() throws Exception {
-        entriesTtl(LOCAL, TRANSACTIONAL_SNAPSHOT);
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    @Test
     public void testCacheIteratorAtomicPartitioned() throws Exception {
         cacheIterator(PARTITIONED, ATOMIC);
     }
@@ -485,31 +432,6 @@
      * @throws Exception If failed.
      */
     @Test
-    public void testCacheIteratorAtomicLocal() throws Exception {
-        cacheIterator(LOCAL, ATOMIC);
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testCacheIteratorTxLocal() throws Exception {
-        cacheIterator(LOCAL, TRANSACTIONAL);
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    @Ignore("https://issues.apache.org/jira/browse/IGNITE-9530")
-    @Test
-    public void testCacheIteratorMvccTxLocal() throws Exception {
-        cacheIterator(LOCAL, TRANSACTIONAL_SNAPSHOT);
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    @Test
     public void testScanQueryMultiplePartitionsAtomicPartitioned() throws Exception {
         scanQueryMultiplePartitions(PARTITIONED, ATOMIC);
     }
@@ -590,23 +512,6 @@
      * @throws Exception If failed.
      */
     @Test
-    public void testContinuousQueryTxLocal() throws Exception {
-        continuousQuery(LOCAL, TRANSACTIONAL);
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    @Ignore("https://issues.apache.org/jira/browse/IGNITE-9530")
-    @Test
-    public void testContinuousQueryMvccTxLocal() throws Exception {
-        continuousQuery(LOCAL, TRANSACTIONAL_SNAPSHOT);
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    @Test
     public void testContinuousQueryAtomicReplicated() throws Exception {
         continuousQuery(REPLICATED, ATOMIC);
     }
@@ -620,14 +525,6 @@
     }
 
     /**
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testContinuousQueryAtomicLocal() throws Exception {
-        continuousQuery(LOCAL, ATOMIC);
-    }
-
-    /**
      * @param cacheMode Cache mode.
      * @param atomicityMode Cache atomicity mode.
      * @throws Exception If failed.
@@ -638,12 +535,7 @@
         Integer[] data1 = generateData(keys);
         Integer[] data2 = generateData(keys);
 
-        boolean loc = cacheMode == LOCAL;
-
-        if (loc)
-            startGrid(0);
-        else
-            startGridsMultiThreaded(4);
+        startGridsMultiThreaded(4);
 
         Ignite srv0 = ignite(0);
 
@@ -654,7 +546,7 @@
         IgniteCache<Integer, Integer> cache2;
 
         if (atomicityMode == TRANSACTIONAL) {
-            Ignite ignite = ignite(loc ? 0 : 1);
+            Ignite ignite = ignite(1);
 
             cache1 = ignite.cache(CACHE1);
             cache2 = ignite.cache(CACHE2);
@@ -675,8 +567,8 @@
             List<Callable<?>> cls = new ArrayList<>(ldrs * 2);
 
             for (int i = 0; i < ldrs; i++) {
-                cls.add(putOperation(loc ? 0 : 1, ldrs, i, CACHE1, data1));
-                cls.add(putOperation(loc ? 0 : 2, ldrs, i, CACHE2, data2));
+                cls.add(putOperation(1, ldrs, i, CACHE1, data1));
+                cls.add(putOperation(2, ldrs, i, CACHE2, data2));
             }
 
             GridTestUtils.runMultiThreaded(cls, "loaders");
@@ -686,7 +578,7 @@
 
         Set<Integer> keysSet = sequence(keys);
 
-        for (Cache.Entry<Integer, Integer> entry : ignite(loc ? 0 : 3).cache(CACHE1).query(qry)) {
+        for (Cache.Entry<Integer, Integer> entry : ignite(3).cache(CACHE1).query(qry)) {
             assertTrue(keysSet.remove(entry.getKey()));
             assertEquals(data1[entry.getKey()], entry.getValue());
         }
@@ -697,7 +589,7 @@
 
         keysSet = sequence(keys);
 
-        for (Cache.Entry<Integer, Integer> entry : ignite(loc ? 0 : 3).cache(CACHE2).query(qry)) {
+        for (Cache.Entry<Integer, Integer> entry : ignite(3).cache(CACHE2).query(qry)) {
             assertTrue(keysSet.remove(entry.getKey()));
             assertEquals(data2[entry.getKey()], entry.getValue());
         }
@@ -716,12 +608,7 @@
         Integer[] data1 = generateData(keys);
         Integer[] data2 = generateData(keys);
 
-        boolean loc = cacheMode == LOCAL;
-
-        if (loc)
-            startGrid(0);
-        else
-            startGridsMultiThreaded(4);
+        startGridsMultiThreaded(4);
 
         Ignite srv0 = ignite(0);
 
@@ -747,11 +634,11 @@
             }
         };
 
-        QueryCursor qry1 = ignite(loc ? 0 : 2).cache(CACHE1).query(new ContinuousQuery<>().setLocalListener(lsnr1));
-        QueryCursor qry2 = ignite(loc ? 0 : 3).cache(CACHE2).query(new ContinuousQuery<>().setLocalListener(lsnr2));
+        QueryCursor qry1 = ignite(2).cache(CACHE1).query(new ContinuousQuery<>().setLocalListener(lsnr1));
+        QueryCursor qry2 = ignite(3).cache(CACHE2).query(new ContinuousQuery<>().setLocalListener(lsnr2));
 
         if (atomicityMode == TRANSACTIONAL) {
-            Ignite ignite = ignite(loc ? 0 : 1);
+            Ignite ignite = ignite(1);
 
             IgniteCache<Integer, Integer> cache1 = ignite.cache(CACHE1);
             IgniteCache<Integer, Integer> cache2 = ignite.cache(CACHE2);
@@ -771,8 +658,8 @@
             List<Callable<?>> cls = new ArrayList<>(ldrs * 2);
 
             for (int i = 0; i < ldrs; i++) {
-                cls.add(putOperation(loc ? 0 : 1, ldrs, i, CACHE1, data1));
-                cls.add(putOperation(loc ? 0 : 2, ldrs, i, CACHE2, data2));
+                cls.add(putOperation(1, ldrs, i, CACHE1, data1));
+                cls.add(putOperation(2, ldrs, i, CACHE2, data2));
             }
 
             GridTestUtils.runMultiThreaded(cls, "loaders");
@@ -917,23 +804,17 @@
         Integer[] data1 = generateData(keys);
         Integer[] data2 = generateData(keys);
 
-        boolean loc = cacheMode == LOCAL;
-
-        if (loc)
-            startGrid(0);
-        else
-            startGridsMultiThreaded(4);
+        startGridsMultiThreaded(4);
 
         Ignite srv0 = ignite(0);
 
         srv0.createCache(cacheConfiguration(GROUP1, CACHE1, cacheMode, atomicityMode, 2, false));
         srv0.createCache(cacheConfiguration(GROUP1, CACHE2, cacheMode, atomicityMode, 2, false));
 
-        if (!loc)
-            awaitPartitionMapExchange();
+        awaitPartitionMapExchange();
 
         if (atomicityMode == TRANSACTIONAL) {
-            Ignite ignite = ignite(loc ? 0 : 1);
+            Ignite ignite = ignite(1);
 
             IgniteCache cache1 = ignite.cache(CACHE1);
             IgniteCache cache2 = ignite.cache(CACHE2);
@@ -954,8 +835,8 @@
             List<Callable<?>> cls = new ArrayList<>(ldrs * 2);
 
             for (int i = 0; i < ldrs; i++) {
-                cls.add(putOperation(loc ? 0 : 1, ldrs, i, CACHE1, data1));
-                cls.add(putOperation(loc ? 0 : 2, ldrs, i, CACHE2, data2));
+                cls.add(putOperation(1, ldrs, i, CACHE1, data1));
+                cls.add(putOperation(2, ldrs, i, CACHE2, data2));
             }
 
             GridTestUtils.runMultiThreaded(cls, "loaders");
@@ -963,7 +844,7 @@
 
         Set<Integer> keysSet = sequence(keys);
 
-        for (Cache.Entry<Integer, Integer> entry : ignite(loc ? 0 : 3).<Integer, Integer>cache(CACHE1)) {
+        for (Cache.Entry<Integer, Integer> entry : ignite(3).<Integer, Integer>cache(CACHE1)) {
             assertTrue(keysSet.remove(entry.getKey()));
             assertEquals(data1[entry.getKey()], entry.getValue());
         }
@@ -974,7 +855,7 @@
 
         keysSet = sequence(keys);
 
-        for (Cache.Entry<Integer, Integer> entry : ignite(loc ? 0 : 3).<Integer, Integer>cache(CACHE2)) {
+        for (Cache.Entry<Integer, Integer> entry : ignite(3).<Integer, Integer>cache(CACHE2)) {
             assertTrue(keysSet.remove(entry.getKey()));
             assertEquals(data2[entry.getKey()], entry.getValue());
         }
@@ -995,12 +876,7 @@
         Integer[] data1 = generateData(keys);
         Integer[] data2 = generateData(keys);
 
-        boolean loc = cacheMode == LOCAL;
-
-        if (loc)
-            startGrid(0);
-        else
-            startGridsMultiThreaded(4);
+        startGridsMultiThreaded(4);
 
         Ignite srv0 = ignite(0);
 
@@ -1013,11 +889,10 @@
 
         srv0.createCache(cacheConfiguration(GROUP1, CACHE2, cacheMode, atomicityMode, 2, false));
 
-        if (!loc)
-            awaitPartitionMapExchange();
+        awaitPartitionMapExchange();
 
         if (atomicityMode == TRANSACTIONAL) {
-            Ignite ignite = ignite(loc ? 0 : 1);
+            Ignite ignite = ignite(1);
 
             IgniteCache cache1 = ignite.cache(CACHE1);
             IgniteCache cache2 = ignite.cache(CACHE2);
@@ -1038,25 +913,25 @@
             List<Callable<?>> cls = new ArrayList<>(ldrs * 2);
 
             for (int i = 0; i < ldrs; i++) {
-                cls.add(putOperation(loc ? 0 : 1, ldrs, i, CACHE1, data1));
-                cls.add(putOperation(loc ? 0 : 2, ldrs, i, CACHE2, data2));
+                cls.add(putOperation(1, ldrs, i, CACHE1, data1));
+                cls.add(putOperation(2, ldrs, i, CACHE2, data2));
             }
 
             GridTestUtils.runMultiThreaded(cls, "loaders");
         }
 
-        checkData(loc ? 0 : 3, CACHE1, data1);
-        checkData(loc ? 0 : 3, CACHE2, data2);
+        checkData(3, CACHE1, data1);
+        checkData(3, CACHE2, data2);
 
         srv0.destroyCache(CACHE2);
 
-        checkData(loc ? 0 : 3, CACHE1, data1);
+        checkData(3, CACHE1, data1);
 
         // Wait for expiration
 
         Thread.sleep((long)(ttl * 1.2));
 
-        assertEquals(0, ignite(loc ? 0 : 3).cache(CACHE1).size());
+        assertEquals(0, ignite(3).cache(CACHE1).size());
     }
 
     /**
@@ -2908,31 +2783,6 @@
     }
 
     /**
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testLoadCacheAtomicLocal() throws Exception {
-        loadCache(LOCAL, ATOMIC);
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testLoadCacheTxLocal() throws Exception {
-        loadCache(LOCAL, TRANSACTIONAL);
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    @Ignore("https://issues.apache.org/jira/browse/IGNITE-9530")
-    @Test
-    public void testLoadCacheMvccTxLocal() throws Exception {
-        loadCache(LOCAL, TRANSACTIONAL_SNAPSHOT);
-    }
-
-    /**
      * @param cacheMode Cache mode.
      * @param atomicityMode Atomicity mode.
      * @throws Exception If failed.
@@ -2940,8 +2790,6 @@
     private void loadCache(CacheMode cacheMode, CacheAtomicityMode atomicityMode) throws Exception {
         int keys = 100;
 
-        boolean loc = cacheMode == LOCAL;
-
         Map<Integer, Integer> data1 = generateDataMap(keys);
         Map<Integer, Integer> data2 = generateDataMap(keys);
 
@@ -2957,7 +2805,7 @@
         CacheConfiguration ccfg2 = cacheConfiguration(GROUP1, CACHE2, cacheMode, atomicityMode, 1, false)
             .setCacheStoreFactory(fctr2);
 
-        Ignite node = startGrids(loc ? 1 : 4);
+        Ignite node = startGrids(4);
 
         node.createCaches(F.asList(ccfg1, ccfg2));
 
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheInterceptorSelfTestSuite.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheInterceptorSelfTestSuite.java
index 36ba4a3..3e9210e 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheInterceptorSelfTestSuite.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheInterceptorSelfTestSuite.java
@@ -43,12 +43,6 @@
     public static List<Class<?>> suite(Collection<Class> ignoredTests) {
         List<Class<?>> suite = new ArrayList<>();
 
-        GridTestUtils.addTestIfNeeded(suite, GridCacheInterceptorLocalSelfTest.class, ignoredTests);
-        GridTestUtils.addTestIfNeeded(suite, GridCacheInterceptorLocalWithStoreSelfTest.class, ignoredTests);
-
-        GridTestUtils.addTestIfNeeded(suite, GridCacheInterceptorLocalAtomicSelfTest.class, ignoredTests);
-        GridTestUtils.addTestIfNeeded(suite, GridCacheInterceptorLocalAtomicWithStoreSelfTest.class, ignoredTests);
-
         GridTestUtils.addTestIfNeeded(suite, GridCacheInterceptorAtomicSelfTest.class, ignoredTests);
         GridTestUtils.addTestIfNeeded(suite, GridCacheInterceptorAtomicNearEnabledSelfTest.class, ignoredTests);
         GridTestUtils.addTestIfNeeded(suite, GridCacheInterceptorAtomicWithStoreSelfTest.class, ignoredTests);
@@ -64,11 +58,9 @@
 
         GridTestUtils.addTestIfNeeded(suite, GridCacheOnCopyFlagTxPartitionedSelfTest.class, ignoredTests);
         GridTestUtils.addTestIfNeeded(suite, GridCacheOnCopyFlagReplicatedSelfTest.class, ignoredTests);
-        GridTestUtils.addTestIfNeeded(suite, GridCacheOnCopyFlagLocalSelfTest.class, ignoredTests);
         GridTestUtils.addTestIfNeeded(suite, GridCacheOnCopyFlagAtomicSelfTest.class, ignoredTests);
 
         GridTestUtils.addTestIfNeeded(suite, CacheInterceptorPartitionCounterRandomOperationsTest.class, ignoredTests);
-        GridTestUtils.addTestIfNeeded(suite, CacheInterceptorPartitionCounterLocalSanityTest.class, ignoredTests);
 
         GridTestUtils.addTestIfNeeded(suite, GridCacheInterceptorAtomicRebalanceTest.class, ignoredTests);
         GridTestUtils.addTestIfNeeded(suite, GridCacheInterceptorTransactionalRebalanceTest.class, ignoredTests);
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheInvokeReadThroughSingleNodeTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheInvokeReadThroughSingleNodeTest.java
index 836e2e2..5c3ffa3 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheInvokeReadThroughSingleNodeTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheInvokeReadThroughSingleNodeTest.java
@@ -20,11 +20,9 @@
 import org.apache.ignite.testframework.MvccFeatureChecker;
 import org.junit.Ignore;
 import org.junit.Test;
-
 import static org.apache.ignite.cache.CacheAtomicityMode.ATOMIC;
 import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL;
 import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL_SNAPSHOT;
-import static org.apache.ignite.cache.CacheMode.LOCAL;
 import static org.apache.ignite.cache.CacheMode.PARTITIONED;
 import static org.apache.ignite.cache.CacheMode.REPLICATED;
 
@@ -72,14 +70,6 @@
      * @throws Exception If failed.
      */
     @Test
-    public void testInvokeReadThroughAtomicLocal() throws Exception {
-        invokeReadThrough(cacheConfiguration(LOCAL, ATOMIC, 0, false));
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    @Test
     public void testInvokeReadThroughTx() throws Exception {
         invokeReadThrough(cacheConfiguration(PARTITIONED, TRANSACTIONAL, 1, false));
     }
@@ -103,14 +93,6 @@
     /**
      * @throws Exception If failed.
      */
-    @Test
-    public void testInvokeReadThroughTxLocal() throws Exception {
-        invokeReadThrough(cacheConfiguration(LOCAL, TRANSACTIONAL, 0, false));
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
     @Ignore("https://issues.apache.org/jira/browse/IGNITE-8582")
     @Test
     public void testInvokeReadThroughMvccTx() throws Exception {
@@ -134,13 +116,4 @@
     public void testInvokeReadThroughMvccTxReplicated() throws Exception {
         invokeReadThrough(cacheConfiguration(REPLICATED, TRANSACTIONAL_SNAPSHOT, 0, false));
     }
-
-    /**
-     * @throws Exception If failed.
-     */
-    @Ignore("https://issues.apache.org/jira/browse/IGNITE-8582")
-    @Test
-    public void testInvokeReadThroughMvccTxLocal() throws Exception {
-        invokeReadThrough(cacheConfiguration(LOCAL, TRANSACTIONAL_SNAPSHOT, 0, false));
-    }
 }
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCachePeekModesAbstractTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCachePeekModesAbstractTest.java
index e1004aa..e57aeb3 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCachePeekModesAbstractTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCachePeekModesAbstractTest.java
@@ -43,8 +43,6 @@
 import org.apache.ignite.internal.util.typedef.T2;
 import org.apache.ignite.spi.IgniteSpiCloseableIterator;
 import org.junit.Test;
-
-import static org.apache.ignite.cache.CacheMode.LOCAL;
 import static org.apache.ignite.cache.CacheMode.PARTITIONED;
 import static org.apache.ignite.cache.CacheMode.REPLICATED;
 import static org.apache.ignite.cache.CachePeekMode.ALL;
@@ -109,46 +107,13 @@
      */
     @Test
     public void testLocalPeek() throws Exception {
-        if (cacheMode() == LOCAL) {
-            checkAffinityLocalCache();
+        checkAffinityPeek(0);
 
-            checkStorage(0);
-        }
-        else {
-            checkAffinityPeek(0);
+        checkAffinityPeek(1);
 
-            checkAffinityPeek(1);
+        checkStorage(0);
 
-            checkStorage(0);
-
-            checkStorage(1);
-        }
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    private void checkAffinityLocalCache() throws Exception {
-        IgniteCache<Integer, String> cache0 = jcache(0);
-
-        final String val = "1";
-
-        for (int i = 0; i < HEAP_ENTRIES; i++)
-            cache0.put(i, val);
-
-        try {
-            for (int i = 0; i < HEAP_ENTRIES; i++) {
-                assertEquals(val, cache0.localPeek(i));
-                assertEquals(val, cache0.localPeek(i, ALL));
-                assertEquals(val, cache0.localPeek(i, PRIMARY));
-                assertEquals(val, cache0.localPeek(i, BACKUP));
-                assertEquals(val, cache0.localPeek(i, NEAR));
-            }
-        }
-        finally {
-            for (int i = 0; i < HEAP_ENTRIES; i++)
-                cache0.remove(i);
-        }
+        checkStorage(1);
     }
 
     /**
@@ -314,14 +279,8 @@
                 assertEquals(val, cache0.localPeek(key, PRIMARY, ONHEAP));
                 assertEquals(val, cache0.localPeek(key, PRIMARY, ONHEAP, OFFHEAP));
 
-                if (cacheMode() == LOCAL) {
-                    assertEquals(val, cache0.localPeek(key, BACKUP));
-                    assertEquals(val, cache0.localPeek(key, NEAR));
-                }
-                else {
-                    assertNull(cache0.localPeek(key, BACKUP));
-                    assertNull(cache0.localPeek(key, NEAR));
-                }
+                assertNull(cache0.localPeek(key, BACKUP));
+                assertNull(cache0.localPeek(key, NEAR));
 
                 assertNull(cache0.localPeek(key, ONHEAP));
                 assertNull(cache0.localPeek(key, OFFHEAP));
@@ -333,14 +292,8 @@
                 assertEquals(val, cache0.localPeek(key, ONHEAP, OFFHEAP));
                 assertEquals(val, cache0.localPeek(key, PRIMARY, OFFHEAP));
 
-                if (cacheMode() == LOCAL) {
-                    assertEquals(val, cache0.localPeek(key, OFFHEAP, BACKUP));
-                    assertEquals(val, cache0.localPeek(key, OFFHEAP, NEAR));
-                }
-                else {
-                    assertNull(cache0.localPeek(key, OFFHEAP, BACKUP));
-                    assertNull(cache0.localPeek(key, OFFHEAP, NEAR));
-                }
+                assertNull(cache0.localPeek(key, OFFHEAP, BACKUP));
+                assertNull(cache0.localPeek(key, OFFHEAP, NEAR));
 
                 assertNull(cache0.localPeek(key, ONHEAP));
                 assertNull(cache0.localPeek(key));
@@ -352,14 +305,8 @@
                 assertEquals(val, cache0.localPeek(key, OFFHEAP, ONHEAP));
                 assertEquals(val, cache0.localPeek(key, PRIMARY, ONHEAP));
 
-                if (cacheMode() == LOCAL) {
-                    assertEquals(val, cache0.localPeek(key, ONHEAP, BACKUP));
-                    assertEquals(val, cache0.localPeek(key, ONHEAP, NEAR));
-                }
-                else {
-                    assertNull(cache0.localPeek(key, ONHEAP, BACKUP));
-                    assertNull(cache0.localPeek(key, ONHEAP, NEAR));
-                }
+                assertNull(cache0.localPeek(key, ONHEAP, BACKUP));
+                assertNull(cache0.localPeek(key, ONHEAP, NEAR));
 
                 assertNull(cache0.localPeek(key));
                 assertNull(cache0.localPeek(key, OFFHEAP));
@@ -371,254 +318,6 @@
     }
 
     /**
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testSize() throws Exception {
-        checkEmpty();
-
-        if (cacheMode() == LOCAL) {
-            IgniteCache<Integer, String> cache0 = jcache(0);
-
-            for (int i = 0; i < HEAP_ENTRIES; i++) {
-                cache0.put(i, String.valueOf(i));
-
-                final int size = i + 1;
-
-                assertEquals(size, cache0.localSize());
-                assertEquals(size, cache0.localSize(PRIMARY));
-                assertEquals(size, cache0.localSize(BACKUP));
-                assertEquals(size, cache0.localSize(NEAR));
-                assertEquals(size, cache0.localSize(ALL));
-
-                assertEquals(size, cache0.size());
-                assertEquals(size, cache0.size(PRIMARY));
-                assertEquals(size, cache0.size(BACKUP));
-                assertEquals(size, cache0.size(NEAR));
-                assertEquals(size, cache0.size(ALL));
-
-                assertEquals(size, (int)cache0.sizeAsync().get());
-
-                assertEquals(size, (int)cache0.sizeAsync(PRIMARY).get());
-            }
-
-            for (int i = 0; i < HEAP_ENTRIES; i++) {
-                cache0.remove(i, String.valueOf(i));
-
-                final int size = HEAP_ENTRIES - i - 1;
-
-                assertEquals(size, cache0.localSize());
-                assertEquals(size, cache0.localSize(PRIMARY));
-                assertEquals(size, cache0.localSize(BACKUP));
-                assertEquals(size, cache0.localSize(NEAR));
-                assertEquals(size, cache0.localSize(ALL));
-
-                assertEquals(size, cache0.size());
-                assertEquals(size, cache0.size(PRIMARY));
-                assertEquals(size, cache0.size(BACKUP));
-                assertEquals(size, cache0.size(NEAR));
-                assertEquals(size, cache0.size(ALL));
-
-                assertEquals(size, (int)cache0.sizeAsync().get());
-            }
-
-            checkEmpty();
-
-            if (true) // TODO GG-11148.
-                return;
-
-            Set<Integer> keys = new HashSet<>();
-
-            for (int i = 0; i < 200; i++) {
-                cache0.put(i, "test_val");
-
-                keys.add(i);
-            }
-
-            try {
-                int totalKeys = 200;
-
-                T2<Integer, Integer> swapKeys = swapKeysCount(0);
-
-                T2<Integer, Integer> offheapKeys = offheapKeysCount(0);
-
-                int totalSwap = swapKeys.get1() + swapKeys.get2();
-                int totalOffheap = offheapKeys.get1() + offheapKeys.get2();
-
-                log.info("Keys [total=" + totalKeys + ", offheap=" + offheapKeys + ", swap=" + swapKeys + ']');
-
-                assertTrue(totalSwap + totalOffheap < totalKeys);
-
-                assertEquals(totalKeys, cache0.localSize());
-                assertEquals(totalKeys, cache0.localSize(ALL));
-
-                assertEquals(totalOffheap, cache0.localSize(OFFHEAP));
-                assertEquals(totalKeys - (totalSwap + totalOffheap), cache0.localSize(ONHEAP));
-
-                assertEquals(totalOffheap, cache0.size(OFFHEAP));
-                assertEquals(totalKeys - (totalSwap + totalOffheap), cache0.size(ONHEAP));
-
-                assertEquals(totalOffheap, cache0.localSize(OFFHEAP, PRIMARY));
-                assertEquals(totalKeys - (totalSwap + totalOffheap), cache0.localSize(ONHEAP, PRIMARY));
-
-                assertEquals(totalOffheap, cache0.localSize(OFFHEAP, BACKUP));
-                assertEquals(totalKeys - (totalSwap + totalOffheap), cache0.localSize(ONHEAP, BACKUP));
-            }
-            finally {
-                cache0.removeAll(keys);
-            }
-        }
-        else {
-            checkSizeAffinityFilter(0);
-
-            checkSizeAffinityFilter(1);
-
-            checkSizeStorageFilter(0);
-
-            checkSizeStorageFilter(1);
-        }
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testLocalPartitionSize() throws Exception {
-        if (cacheMode() != LOCAL)
-            return;
-
-        awaitPartitionMapExchange();
-        checkEmpty();
-        int part = 0;
-        IgniteCache<Integer, String> cache0 = jcache(0);
-
-        for (int i = 0; i < HEAP_ENTRIES; i++) {
-            cache0.put(i, String.valueOf(i));
-
-            final long size = i + 1;
-
-            assertEquals(size, cache0.localSize());
-            assertEquals(size, cache0.localSizeLong(part, PRIMARY));
-            assertEquals(size, cache0.localSizeLong(part, BACKUP));
-            assertEquals(size, cache0.localSizeLong(part, NEAR));
-            assertEquals(size, cache0.localSizeLong(part, ALL));
-
-            assertEquals(size, cache0.size());
-            assertEquals(size, cache0.sizeLong(part, PRIMARY));
-            assertEquals(size, cache0.sizeLong(part, BACKUP));
-            assertEquals(size, cache0.sizeLong(part, NEAR));
-            assertEquals(size, cache0.sizeLong(part, ALL));
-
-            assertEquals(size, (long)cache0.sizeAsync().get());
-
-            assertEquals(size, (long)cache0.sizeLongAsync(part, PRIMARY).get());
-        }
-
-        for (int i = 0; i < HEAP_ENTRIES; i++) {
-            cache0.remove(i, String.valueOf(i));
-
-            final int size = HEAP_ENTRIES - i - 1;
-
-            assertEquals(size, cache0.localSize());
-            assertEquals(size, cache0.localSizeLong(part, PRIMARY));
-            assertEquals(size, cache0.localSizeLong(part, BACKUP));
-            assertEquals(size, cache0.localSizeLong(part, NEAR));
-            assertEquals(size, cache0.localSizeLong(part, ALL));
-
-            assertEquals(size, cache0.size());
-            assertEquals(size, cache0.sizeLong(part, PRIMARY));
-            assertEquals(size, cache0.sizeLong(part, BACKUP));
-            assertEquals(size, cache0.sizeLong(part, NEAR));
-            assertEquals(size, cache0.sizeLong(part, ALL));
-
-            assertEquals(size, (long)cache0.sizeAsync().get());
-        }
-    }
-
-    /**
-     * @throws InterruptedException If failed.
-     */
-    @Test
-    public void testLocalPartitionSizeFlags() throws InterruptedException {
-        if (true) // TODO GG-11148.
-            return;
-
-        if (cacheMode() != LOCAL)
-            return;
-
-        awaitPartitionMapExchange();
-        checkEmpty();
-        int part = 0;
-        IgniteCache<Integer, String> cache0 = jcache(0);
-
-        Set<Integer> keys = new HashSet<>();
-
-        for (int i = 0; i < 200; i++) {
-            cache0.put(i, "test_val");
-
-            keys.add(i);
-        }
-
-        try {
-            int totalKeys = 200;
-
-            T2<Integer, Integer> swapKeys = swapKeysCount(0);
-
-            T2<Integer, Integer> offheapKeys = offheapKeysCount(0);
-
-            int totalSwap = swapKeys.get1() + swapKeys.get2();
-            int totalOffheap = offheapKeys.get1() + offheapKeys.get2();
-
-            log.info("Keys [total=" + totalKeys + ", offheap=" + offheapKeys + ", swap=" + swapKeys + ']');
-
-            assertTrue(totalSwap + totalOffheap < totalKeys);
-
-            assertEquals(totalKeys, cache0.localSize());
-            assertEquals(totalKeys, cache0.localSizeLong(part, ALL));
-
-            assertEquals(totalOffheap, cache0.localSizeLong(part, OFFHEAP));
-            assertEquals(totalSwap, cache0.localSizeLong(part));
-            assertEquals(totalKeys - (totalSwap + totalOffheap), cache0.localSizeLong(part, ONHEAP));
-
-            assertEquals(totalOffheap, cache0.sizeLong(part, OFFHEAP));
-            assertEquals(totalSwap, cache0.sizeLong(part));
-            assertEquals(totalKeys - (totalSwap + totalOffheap), cache0.sizeLong(part, ONHEAP));
-
-            assertEquals(totalOffheap, cache0.localSizeLong(part, OFFHEAP, PRIMARY));
-            assertEquals(totalSwap, cache0.localSizeLong(part, PRIMARY));
-            assertEquals(totalKeys - (totalSwap + totalOffheap), cache0.localSizeLong(part, ONHEAP, PRIMARY));
-
-            assertEquals(totalOffheap, cache0.localSizeLong(part, OFFHEAP, BACKUP));
-            assertEquals(totalSwap, cache0.localSizeLong(part, BACKUP));
-            assertEquals(totalKeys - (totalSwap + totalOffheap), cache0.localSizeLong(part, ONHEAP, BACKUP));
-        }
-        finally {
-            cache0.removeAll(keys);
-        }
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testNonLocalPartitionSize() throws Exception {
-        if (true) // TODO GG-11148.
-            return;
-
-        if (cacheMode() == LOCAL)
-            return;
-
-        awaitPartitionMapExchange(true, true, null);
-
-        checkEmpty();
-
-        for (int i = 0; i < gridCount(); i++) {
-            checkPartitionSizeAffinityFilter(i);
-            checkPartitionSizeStorageFilter(i);
-        }
-    }
-
-    /**
      * @param nodeIdx Node index.
      * @throws Exception If failed.
      */
@@ -1121,9 +820,7 @@
 
             int backups;
 
-            if (cacheMode() == LOCAL)
-                backups = 0;
-            else if (cacheMode() == PARTITIONED)
+            if (cacheMode() == PARTITIONED)
                 backups = 1;
             else // REPLICATED.
                 backups = gridCount() - 1;
@@ -1219,9 +916,7 @@
 
             int backups;
 
-            if (cacheMode() == LOCAL)
-                backups = 0;
-            else if (cacheMode() == PARTITIONED)
+            if (cacheMode() == PARTITIONED)
                 backups = 1;
             else // REPLICATED.
                 backups = gridCount() - 1;
@@ -1283,112 +978,6 @@
     }
 
     /**
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testLocalEntries() throws Exception {
-        if (cacheMode() == LOCAL) {
-            IgniteCache<Integer, String> cache0 = jcache(0);
-
-            Set<Integer> keys = new HashSet<>();
-
-            try {
-                for (int i = 0; i < HEAP_ENTRIES; i++) {
-                    cache0.put(i, String.valueOf(i));
-
-                    keys.add(i);
-                }
-
-                checkLocalEntries(cache0.localEntries(), keys);
-                checkLocalEntries(cache0.localEntries(ALL), keys);
-                checkLocalEntries(cache0.localEntries(NEAR), keys);
-                checkLocalEntries(cache0.localEntries(PRIMARY), keys);
-                checkLocalEntries(cache0.localEntries(BACKUP), keys);
-            }
-            finally {
-                cache0.removeAll(keys);
-            }
-
-            checkLocalEntries(cache0.localEntries());
-
-            if (true) // TODO GG-11148.
-                return;
-
-            final String val = "test-val-";
-
-            keys = new HashSet<>();
-
-            for (int i = 0; i < 200; i++) {
-                cache0.put(i, val + i);
-
-                keys.add(i);
-            }
-
-            try {
-                int totalKeys = 200;
-
-                T2<List<Integer>, List<Integer>> swapKeys = swapKeys(0);
-
-                T2<List<Integer>, List<Integer>> offheapKeys = offheapKeys(0);
-
-                List<Integer> swap = new ArrayList<>();
-
-                swap.addAll(swapKeys.get1());
-                swap.addAll(swapKeys.get2());
-
-                assertFalse(swap.isEmpty());
-
-                List<Integer> offheap = new ArrayList<>();
-
-                offheap.addAll(offheapKeys.get1());
-                offheap.addAll(offheapKeys.get2());
-
-                assertFalse(offheap.isEmpty());
-
-                log.info("Keys [total=" + totalKeys +
-                    ", offheap=" + offheap.size() +
-                    ", swap=" + swap.size() + ']');
-
-                assertTrue(swap.size() + offheap.size() < totalKeys);
-
-                List<Integer> heap = new ArrayList<>(keys);
-
-                heap.removeAll(swap);
-                heap.removeAll(offheap);
-
-                assertFalse(heap.isEmpty());
-
-                checkLocalEntries(cache0.localEntries(), val, keys);
-                checkLocalEntries(cache0.localEntries(ALL), val, keys);
-
-                checkLocalEntries(cache0.localEntries(OFFHEAP), val, offheap);
-                checkLocalEntries(cache0.localEntries(ONHEAP), val, heap);
-
-                checkLocalEntries(cache0.localEntries(OFFHEAP, PRIMARY), val, offheap);
-                checkLocalEntries(cache0.localEntries(ONHEAP, PRIMARY), val, heap);
-
-                checkLocalEntries(cache0.localEntries(OFFHEAP, BACKUP), val, offheap);
-                checkLocalEntries(cache0.localEntries(ONHEAP, BACKUP), val, heap);
-
-                checkLocalEntries(cache0.localEntries(OFFHEAP, NEAR), val, offheap);
-                checkLocalEntries(cache0.localEntries(ONHEAP, NEAR), val, heap);
-            }
-            finally {
-                cache0.removeAll(keys);
-            }
-        }
-        else {
-            checkLocalEntriesAffinityFilter(0);
-
-            checkLocalEntriesAffinityFilter(1);
-
-            checkLocalEntriesStorageFilter(0);
-
-            checkLocalEntriesStorageFilter(1);
-        }
-    }
-
-    /**
      * @param nodeIdx Node index.
      * @throws Exception If failed.
      */
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCachePutStackOverflowSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCachePutStackOverflowSelfTest.java
index 4cc2596..5b539e1 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCachePutStackOverflowSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCachePutStackOverflowSelfTest.java
@@ -43,14 +43,6 @@
      * @throws Exception if failed.
      */
     @Test
-    public void testStackLocal() throws Exception {
-        checkCache(CacheMode.LOCAL);
-    }
-
-    /**
-     * @throws Exception if failed.
-     */
-    @Test
     public void testStackPartitioned() throws Exception {
         checkCache(CacheMode.PARTITIONED);
     }
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheStoreValueAbstractTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheStoreValueAbstractTest.java
index 268637e..770f749 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheStoreValueAbstractTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheStoreValueAbstractTest.java
@@ -32,7 +32,6 @@
 import org.apache.ignite.IgniteDataStreamer;
 import org.apache.ignite.cache.CacheEntryProcessor;
 import org.apache.ignite.cache.CacheInterceptorAdapter;
-import org.apache.ignite.cache.CacheMode;
 import org.apache.ignite.cache.CachePeekMode;
 import org.apache.ignite.cache.affinity.Affinity;
 import org.apache.ignite.cache.store.CacheStoreAdapter;
@@ -46,7 +45,6 @@
 import org.apache.ignite.lang.IgniteBiInClosure;
 import org.apache.ignite.testframework.GridTestUtils;
 import org.junit.Test;
-
 import static org.apache.ignite.cache.CacheWriteSynchronizationMode.FULL_SYNC;
 
 /**
@@ -74,8 +72,7 @@
     @Override protected CacheConfiguration cacheConfiguration(String igniteInstanceName) throws Exception {
         CacheConfiguration ccfg = super.cacheConfiguration(igniteInstanceName);
 
-        if (ccfg.getCacheMode() != CacheMode.LOCAL)
-            assertEquals(1, ccfg.getBackups());
+        assertEquals(1, ccfg.getBackups());
 
         assertTrue(ccfg.isCopyOnRead());
 
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheTxLocalInvokeTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheTxLocalInvokeTest.java
deleted file mode 100644
index 6a04abc..0000000
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheTxLocalInvokeTest.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache;
-
-import org.apache.ignite.cache.CacheAtomicityMode;
-import org.apache.ignite.cache.CacheMode;
-import org.apache.ignite.configuration.NearCacheConfiguration;
-import org.apache.ignite.testframework.MvccFeatureChecker;
-
-import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL;
-import static org.apache.ignite.cache.CacheMode.LOCAL;
-
-/**
- *
- */
-public class IgniteCacheTxLocalInvokeTest extends IgniteCacheInvokeAbstractTest {
-    /** {@inheritDoc} */
-    @Override protected void beforeTestsStarted() throws Exception {
-        MvccFeatureChecker.skipIfNotSupported(MvccFeatureChecker.Feature.LOCAL_CACHE);
-
-        super.beforeTestsStarted();
-    }
-
-    /** {@inheritDoc} */
-    @Override protected int gridCount() {
-        return 1;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected CacheMode cacheMode() {
-        return LOCAL;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected CacheAtomicityMode atomicityMode() {
-        return TRANSACTIONAL;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected NearCacheConfiguration nearConfiguration() {
-        return null;
-    }
-}
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheTxLocalPeekModesTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheTxLocalPeekModesTest.java
deleted file mode 100644
index 85ef646..0000000
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheTxLocalPeekModesTest.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache;
-
-import org.apache.ignite.cache.CacheAtomicityMode;
-import org.apache.ignite.cache.CacheMode;
-import org.apache.ignite.configuration.CacheConfiguration;
-import org.apache.ignite.testframework.MvccFeatureChecker;
-import org.junit.Before;
-
-import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL;
-import static org.apache.ignite.cache.CacheMode.LOCAL;
-
-/**
- *
- */
-public class IgniteCacheTxLocalPeekModesTest extends IgniteCachePeekModesAbstractTest {
-    /** */
-    @Before
-    public void beforeIgniteCacheTxLocalPeekModesTest() {
-        MvccFeatureChecker.skipIfNotSupported(MvccFeatureChecker.Feature.LOCAL_CACHE);
-    }
-
-    /** {@inheritDoc} */
-    @Override protected CacheConfiguration cacheConfiguration(String igniteInstanceName) throws Exception {
-        MvccFeatureChecker.skipIfNotSupported(MvccFeatureChecker.Feature.LOCAL_CACHE);
-
-        return super.cacheConfiguration(igniteInstanceName);
-    }
-
-    /** {@inheritDoc} */
-    @Override protected CacheAtomicityMode atomicityMode() {
-        return TRANSACTIONAL;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected int gridCount() {
-        return 1;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected CacheMode cacheMode() {
-        return LOCAL;
-    }
-}
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheTxLocalStoreValueTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheTxLocalStoreValueTest.java
deleted file mode 100644
index 9a5fd9f..0000000
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheTxLocalStoreValueTest.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache;
-
-import org.apache.ignite.cache.CacheAtomicityMode;
-import org.apache.ignite.cache.CacheMode;
-import org.apache.ignite.configuration.NearCacheConfiguration;
-import org.apache.ignite.testframework.MvccFeatureChecker;
-import org.junit.Before;
-
-import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL;
-import static org.apache.ignite.cache.CacheMode.LOCAL;
-
-/**
- *
- */
-public class IgniteCacheTxLocalStoreValueTest extends IgniteCacheStoreValueAbstractTest {
-    /** */
-    @Before
-    public void beforeIgniteCacheTxLocalStoreValueTest() {
-        MvccFeatureChecker.skipIfNotSupported(MvccFeatureChecker.Feature.CACHE_STORE);
-    }
-
-    /** {@inheritDoc} */
-    @Override protected int gridCount() {
-        return 1;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected CacheMode cacheMode() {
-        return LOCAL;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected CacheAtomicityMode atomicityMode() {
-        return TRANSACTIONAL;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected NearCacheConfiguration nearConfiguration() {
-        return null;
-    }
-}
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteTxExceptionAbstractSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteTxExceptionAbstractSelfTest.java
index 8833f95..a5f3e9d 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteTxExceptionAbstractSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteTxExceptionAbstractSelfTest.java
@@ -50,8 +50,6 @@
 import org.jetbrains.annotations.Nullable;
 import org.junit.Assume;
 import org.junit.Test;
-
-import static org.apache.ignite.cache.CacheMode.LOCAL;
 import static org.apache.ignite.cache.CacheMode.REPLICATED;
 
 /**
@@ -626,9 +624,6 @@
     private Integer keyForNode(ClusterNode node, int type) {
         IgniteCache<Integer, Integer> cache = grid(0).cache(DEFAULT_CACHE_NAME);
 
-        if (cache.getConfiguration(CacheConfiguration.class).getCacheMode() == LOCAL)
-            return ++lastKey;
-
         if (cache.getConfiguration(CacheConfiguration.class).getCacheMode() == REPLICATED && type == NOT_PRIMARY_AND_BACKUP)
             return ++lastKey;
 
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteTxStoreExceptionAbstractSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteTxStoreExceptionAbstractSelfTest.java
index dde3653..865e4dc 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteTxStoreExceptionAbstractSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteTxStoreExceptionAbstractSelfTest.java
@@ -44,8 +44,6 @@
 import org.apache.ignite.transactions.TransactionRollbackException;
 import org.jetbrains.annotations.Nullable;
 import org.junit.Test;
-
-import static org.apache.ignite.cache.CacheMode.LOCAL;
 import static org.apache.ignite.cache.CacheMode.REPLICATED;
 
 /**
@@ -586,9 +584,6 @@
     private Integer keyForNode(ClusterNode node, int type) {
         IgniteCache<Integer, Integer> cache = grid(0).cache(DEFAULT_CACHE_NAME);
 
-        if (cache.getConfiguration(CacheConfiguration.class).getCacheMode() == LOCAL)
-            return ++lastKey;
-
         if (cache.getConfiguration(CacheConfiguration.class).getCacheMode() == REPLICATED && type == NOT_PRIMARY_AND_BACKUP)
             return ++lastKey;
 
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/WalModeChangeAbstractSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/WalModeChangeAbstractSelfTest.java
index 3382573..b6242b3 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/WalModeChangeAbstractSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/WalModeChangeAbstractSelfTest.java
@@ -27,12 +27,9 @@
 import org.apache.ignite.internal.IgniteEx;
 import org.apache.ignite.internal.util.lang.IgniteInClosureX;
 import org.apache.ignite.internal.util.typedef.internal.U;
-import org.apache.ignite.testframework.MvccFeatureChecker;
 import org.junit.Test;
-
 import static org.apache.ignite.cache.CacheAtomicityMode.ATOMIC;
 import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL;
-import static org.apache.ignite.cache.CacheMode.LOCAL;
 import static org.apache.ignite.cache.CacheMode.PARTITIONED;
 import static org.apache.ignite.cache.CacheMode.REPLICATED;
 
@@ -184,44 +181,6 @@
     }
 
     /**
-     * Negative case: LOCAL cache.
-     *
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testLocalCache() throws Exception {
-        if (jdbc)
-            // Doesn't make sense for JDBC.
-            return;
-
-        MvccFeatureChecker.skipIfNotSupported(MvccFeatureChecker.Feature.LOCAL_CACHE);
-
-        forAllNodes(new IgniteInClosureX<Ignite>() {
-            @Override public void applyx(Ignite ignite) throws IgniteCheckedException {
-                createCache(ignite, cacheConfig(LOCAL).setDataRegionName(REGION_VOLATILE));
-
-                assertThrows(new Callable<Void>() {
-                    @Override public Void call() throws Exception {
-                        walDisable(ignite, CACHE_NAME);
-
-                        return null;
-                    }
-                }, IgniteException.class, "WAL mode cannot be changed for LOCAL cache(s)");
-
-                assertThrows(new Callable<Void>() {
-                    @Override public Void call() throws Exception {
-                        walEnable(ignite, CACHE_NAME);
-
-                        return null;
-                    }
-                }, IgniteException.class, "WAL mode cannot be changed for LOCAL cache(s)");
-
-                assert !ignite.cluster().isWalEnabled(CACHE_NAME);
-            }
-        });
-    }
-
-    /**
      * Test enable/disable for PARTITIONED ATOMIC cache.
      *
      * @throws Exception If failed.
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/binary/GridCacheBinaryObjectsAbstractSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/binary/GridCacheBinaryObjectsAbstractSelfTest.java
index 148e2fa..d2be385 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/binary/GridCacheBinaryObjectsAbstractSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/binary/GridCacheBinaryObjectsAbstractSelfTest.java
@@ -76,7 +76,6 @@
 import org.jetbrains.annotations.Nullable;
 import org.junit.Ignore;
 import org.junit.Test;
-
 import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL;
 import static org.apache.ignite.cache.CacheWriteSynchronizationMode.FULL_SYNC;
 import static org.apache.ignite.transactions.TransactionConcurrency.PESSIMISTIC;
@@ -1210,12 +1209,10 @@
 
         checkTransform(primaryKey(c));
 
-        if (cacheMode() != CacheMode.LOCAL) {
-            checkTransform(backupKey(c));
+        checkTransform(backupKey(c));
 
-            if (nearConfiguration() != null)
-                checkTransform(nearKey(c));
-        }
+        if (nearConfiguration() != null)
+            checkTransform(nearKey(c));
     }
 
     /**
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/binary/local/GridCacheBinaryObjectsAtomicLocalSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/binary/local/GridCacheBinaryObjectsAtomicLocalSelfTest.java
deleted file mode 100644
index 4e4ae75..0000000
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/binary/local/GridCacheBinaryObjectsAtomicLocalSelfTest.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache.binary.local;
-
-import org.apache.ignite.cache.CacheAtomicityMode;
-
-import static org.apache.ignite.cache.CacheAtomicityMode.ATOMIC;
-
-/**
- *
- */
-public class GridCacheBinaryObjectsAtomicLocalSelfTest extends GridCacheBinaryObjectsLocalSelfTest {
-    /** {@inheritDoc} */
-    @Override protected CacheAtomicityMode atomicityMode() {
-        return ATOMIC;
-    }
-}
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/binary/local/GridCacheBinaryObjectsLocalOnheapSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/binary/local/GridCacheBinaryObjectsLocalOnheapSelfTest.java
deleted file mode 100644
index 47dbb84..0000000
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/binary/local/GridCacheBinaryObjectsLocalOnheapSelfTest.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package org.apache.ignite.internal.processors.cache.binary.local;
-
-import org.junit.Ignore;
-
-/**
- * Test for binary objects stored in cache with enabled on-heap cache.
- */
-@Ignore("https://issues.apache.org/jira/browse/IGNITE-9214")
-public class GridCacheBinaryObjectsLocalOnheapSelfTest extends GridCacheBinaryObjectsLocalSelfTest {
-    /** {@inheritDoc} */
-    @Override protected boolean onheapCacheEnabled() {
-        return true;
-    }
-}
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/binary/local/GridCacheBinaryObjectsLocalSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/binary/local/GridCacheBinaryObjectsLocalSelfTest.java
deleted file mode 100644
index 2712181..0000000
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/binary/local/GridCacheBinaryObjectsLocalSelfTest.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache.binary.local;
-
-import org.apache.ignite.cache.CacheAtomicityMode;
-import org.apache.ignite.cache.CacheMode;
-import org.apache.ignite.configuration.NearCacheConfiguration;
-import org.apache.ignite.internal.processors.cache.binary.GridCacheBinaryObjectsAbstractSelfTest;
-
-import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL;
-import static org.apache.ignite.cache.CacheMode.LOCAL;
-
-/**
- * Test for binary objects stored in cache.
- */
-public class GridCacheBinaryObjectsLocalSelfTest extends GridCacheBinaryObjectsAbstractSelfTest {
-    /** {@inheritDoc} */
-    @Override protected CacheMode cacheMode() {
-        return LOCAL;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected CacheAtomicityMode atomicityMode() {
-        return TRANSACTIONAL;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected NearCacheConfiguration nearConfiguration() {
-        return null;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected int gridCount() {
-        return 1;
-    }
-}
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/GridCacheSetAbstractSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/GridCacheSetAbstractSelfTest.java
index 432e9b9..d9a2340 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/GridCacheSetAbstractSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/GridCacheSetAbstractSelfTest.java
@@ -54,10 +54,8 @@
 import org.apache.ignite.testframework.GridTestUtils;
 import org.apache.ignite.transactions.Transaction;
 import org.junit.Test;
-
 import static org.apache.ignite.cache.CacheAtomicityMode.ATOMIC;
 import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL;
-import static org.apache.ignite.cache.CacheMode.LOCAL;
 import static org.apache.ignite.cache.CacheMode.PARTITIONED;
 import static org.apache.ignite.cache.CacheWriteSynchronizationMode.FULL_SYNC;
 
@@ -538,7 +536,7 @@
      * @param collocated Collocation flag.
      * @throws Exception If failed.
      */
-    @SuppressWarnings({"BusyWait", "ErrorNotRethrown"})
+    @SuppressWarnings("ErrorNotRethrown")
     private void testIteratorClose(boolean collocated) throws Exception {
         CollectionConfiguration colCfg = config(collocated);
 
@@ -610,9 +608,6 @@
      */
     @Test
     public void testNodeJoinsAndLeaves() throws Exception {
-        if (collectionCacheMode() == LOCAL)
-            return;
-
         testNodeJoinsAndLeaves(false);
     }
 
@@ -621,9 +616,6 @@
      */
     @Test
     public void testNodeJoinsAndLeavesCollocated() throws Exception {
-        if (collectionCacheMode() == LOCAL)
-            return;
-
         testNodeJoinsAndLeaves(true);
     }
 
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/IgniteDataStructuresTestUtils.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/IgniteDataStructuresTestUtils.java
index fa7beec4f..ad3d79d 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/IgniteDataStructuresTestUtils.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/IgniteDataStructuresTestUtils.java
@@ -75,11 +75,6 @@
 
         for (int backups : Arrays.asList(0, 1)) {
             for (CacheMode cacheMode : CacheMode.values()) {
-                if (cacheMode == CacheMode.LOCAL) {
-                    // TODO: https://issues.apache.org/jira/browse/IGNITE-13076
-                    continue;
-                }
-
                 AtomicConfiguration cfg = new AtomicConfiguration()
                     .setBackups(backups)
                     .setCacheMode(cacheMode)
@@ -104,11 +99,6 @@
             for (CacheAtomicityMode atomicityMode : Arrays.asList(TRANSACTIONAL, ATOMIC)) {
                 for (int backups : Arrays.asList(0, 1)) {
                     for (CacheMode cacheMode : CacheMode.values()) {
-                        if (cacheMode == CacheMode.LOCAL) {
-                            // TODO: https://issues.apache.org/jira/browse/IGNITE-13076
-                            continue;
-                        }
-
                         CollectionConfiguration cfg = new CollectionConfiguration()
                             .setCollocated(collocated)
                             .setAtomicityMode(atomicityMode)
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/IgniteLockAbstractSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/IgniteLockAbstractSelfTest.java
index 77cd9cb..1d31bac 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/IgniteLockAbstractSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/IgniteLockAbstractSelfTest.java
@@ -60,12 +60,10 @@
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.ExpectedException;
-
 import static java.util.concurrent.TimeUnit.MICROSECONDS;
 import static java.util.concurrent.TimeUnit.MILLISECONDS;
 import static java.util.concurrent.TimeUnit.MINUTES;
 import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL;
-import static org.apache.ignite.cache.CacheMode.LOCAL;
 import static org.apache.ignite.cache.CacheWriteSynchronizationMode.FULL_SYNC;
 
 /**
@@ -106,9 +104,6 @@
      */
     @Test
     public void testFailover() throws Exception {
-        if (atomicsCacheMode() == LOCAL)
-            return;
-
         checkFailover(true, false);
 
         checkFailover(false, false);
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/IgniteSemaphoreAbstractSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/IgniteSemaphoreAbstractSelfTest.java
index a0504b78..f683f86 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/IgniteSemaphoreAbstractSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/IgniteSemaphoreAbstractSelfTest.java
@@ -27,7 +27,6 @@
 import java.util.concurrent.Callable;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
-
 import org.apache.ignite.Ignite;
 import org.apache.ignite.IgniteCache;
 import org.apache.ignite.IgniteCheckedException;
@@ -54,12 +53,10 @@
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.ExpectedException;
-
 import static java.util.concurrent.TimeUnit.MICROSECONDS;
 import static java.util.concurrent.TimeUnit.MILLISECONDS;
 import static java.util.concurrent.TimeUnit.MINUTES;
 import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL;
-import static org.apache.ignite.cache.CacheMode.LOCAL;
 import static org.apache.ignite.cache.CacheWriteSynchronizationMode.FULL_SYNC;
 
 /**
@@ -99,9 +96,6 @@
      */
     @Test
     public void testFailover() throws Exception {
-        if (atomicsCacheMode() == LOCAL)
-            return;
-
         checkFailover(true);
         checkFailover(false);
     }
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/local/GridCacheLocalAtomicQueueApiSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/local/GridCacheLocalAtomicQueueApiSelfTest.java
deleted file mode 100644
index 72fc680..0000000
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/local/GridCacheLocalAtomicQueueApiSelfTest.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache.datastructures.local;
-
-import org.apache.ignite.cache.CacheAtomicityMode;
-
-import static org.apache.ignite.cache.CacheAtomicityMode.ATOMIC;
-
-/**
- * Queue tests with local atomic cache.
- */
-public class GridCacheLocalAtomicQueueApiSelfTest extends GridCacheLocalQueueApiSelfTest {
-    /** {@inheritDoc} */
-    @Override protected CacheAtomicityMode collectionCacheAtomicityMode() {
-        return ATOMIC;
-    }
-}
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/local/GridCacheLocalAtomicSetSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/local/GridCacheLocalAtomicSetSelfTest.java
deleted file mode 100644
index 0e30619..0000000
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/local/GridCacheLocalAtomicSetSelfTest.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache.datastructures.local;
-
-import org.apache.ignite.cache.CacheAtomicityMode;
-import org.apache.ignite.cache.CacheMode;
-import org.apache.ignite.internal.processors.cache.datastructures.GridCacheSetAbstractSelfTest;
-
-import static org.apache.ignite.cache.CacheAtomicityMode.ATOMIC;
-import static org.apache.ignite.cache.CacheMode.LOCAL;
-
-/**
- * Set tests.
- */
-public class GridCacheLocalAtomicSetSelfTest extends GridCacheSetAbstractSelfTest {
-    /** {@inheritDoc} */
-    @Override protected int gridCount() {
-        return 1;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected CacheMode collectionCacheMode() {
-        return LOCAL;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected CacheAtomicityMode collectionCacheAtomicityMode() {
-        return ATOMIC;
-    }
-}
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/local/GridCacheLocalQueueApiSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/local/GridCacheLocalQueueApiSelfTest.java
deleted file mode 100644
index 40ceb46..0000000
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/local/GridCacheLocalQueueApiSelfTest.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache.datastructures.local;
-
-import org.apache.ignite.cache.CacheAtomicityMode;
-import org.apache.ignite.cache.CacheMode;
-import org.apache.ignite.internal.processors.cache.datastructures.GridCacheQueueApiSelfAbstractTest;
-
-import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL;
-import static org.apache.ignite.cache.CacheMode.LOCAL;
-
-/**
- * Queue tests with local cache.
- */
-public class GridCacheLocalQueueApiSelfTest extends GridCacheQueueApiSelfAbstractTest {
-    /** {@inheritDoc} */
-    @Override protected CacheMode collectionCacheMode() {
-        return LOCAL;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected CacheAtomicityMode collectionCacheAtomicityMode() {
-        return TRANSACTIONAL;
-    }
-}
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/local/GridCacheLocalSequenceApiSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/local/GridCacheLocalSequenceApiSelfTest.java
deleted file mode 100644
index f807128..0000000
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/local/GridCacheLocalSequenceApiSelfTest.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache.datastructures.local;
-
-import org.apache.ignite.cache.CacheMode;
-import org.apache.ignite.internal.processors.cache.datastructures.GridCacheSequenceApiSelfAbstractTest;
-
-import static org.apache.ignite.cache.CacheMode.LOCAL;
-
-/**
- * Cache sequence basic tests.
- */
-public class GridCacheLocalSequenceApiSelfTest extends GridCacheSequenceApiSelfAbstractTest {
-    /** {@inheritDoc} */
-    @Override protected CacheMode atomicsCacheMode() {
-        return LOCAL;
-    }
-}
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/local/GridCacheLocalSetSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/local/GridCacheLocalSetSelfTest.java
deleted file mode 100644
index f3e5c9c..0000000
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/local/GridCacheLocalSetSelfTest.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache.datastructures.local;
-
-import org.apache.ignite.cache.CacheAtomicityMode;
-import org.apache.ignite.cache.CacheMode;
-import org.apache.ignite.internal.processors.cache.datastructures.GridCacheSetAbstractSelfTest;
-
-import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL;
-import static org.apache.ignite.cache.CacheMode.LOCAL;
-
-/**
- * Set tests.
- */
-public class GridCacheLocalSetSelfTest extends GridCacheSetAbstractSelfTest {
-    /** {@inheritDoc} */
-    @Override protected int gridCount() {
-        return 1;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected CacheMode collectionCacheMode() {
-        return LOCAL;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected CacheAtomicityMode collectionCacheAtomicityMode() {
-        return TRANSACTIONAL;
-    }
-}
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/local/IgniteLocalAtomicLongApiSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/local/IgniteLocalAtomicLongApiSelfTest.java
deleted file mode 100644
index b22f60c..0000000
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/local/IgniteLocalAtomicLongApiSelfTest.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache.datastructures.local;
-
-import org.apache.ignite.cache.CacheMode;
-import org.apache.ignite.internal.processors.cache.datastructures.IgniteAtomicLongApiAbstractSelfTest;
-
-import static org.apache.ignite.cache.CacheMode.LOCAL;
-
-/**
- *
- */
-public class IgniteLocalAtomicLongApiSelfTest extends IgniteAtomicLongApiAbstractSelfTest {
-    /** {@inheritDoc} */
-    @Override protected CacheMode atomicsCacheMode() {
-        return LOCAL;
-    }
-}
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/local/IgniteLocalCountDownLatchSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/local/IgniteLocalCountDownLatchSelfTest.java
deleted file mode 100644
index a03fb65..0000000
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/local/IgniteLocalCountDownLatchSelfTest.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache.datastructures.local;
-
-import java.util.concurrent.Callable;
-import org.apache.ignite.IgniteCountDownLatch;
-import org.apache.ignite.cache.CacheMode;
-import org.apache.ignite.internal.IgniteInternalFuture;
-import org.apache.ignite.internal.processors.cache.datastructures.IgniteCountDownLatchAbstractSelfTest;
-import org.apache.ignite.testframework.GridTestUtils;
-import org.jetbrains.annotations.Nullable;
-import org.junit.Test;
-
-import static java.util.concurrent.TimeUnit.MINUTES;
-import static java.util.concurrent.TimeUnit.SECONDS;
-import static org.apache.ignite.cache.CacheMode.LOCAL;
-
-/**
- *
- */
-public class IgniteLocalCountDownLatchSelfTest extends IgniteCountDownLatchAbstractSelfTest {
-    /** {@inheritDoc} */
-    @Override protected CacheMode atomicsCacheMode() {
-        return LOCAL;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected int gridCount() {
-        return 1;
-    }
-
-    /** {@inheritDoc} */
-    @Test
-    @Override public void testLatch() throws Exception {
-        // Test main functionality.
-        IgniteCountDownLatch latch = grid(0).countDownLatch("latch", 2, false, true);
-
-        assertNotNull(latch);
-
-        assertEquals(2, latch.count());
-
-        IgniteInternalFuture<?> fut = GridTestUtils.runMultiThreadedAsync(
-            new Callable<Object>() {
-                @Nullable @Override public Object call() throws Exception {
-                    IgniteCountDownLatch latch = grid(0).countDownLatch("latch", 2, false, true);
-
-                    assert latch != null && latch.count() == 2;
-
-                    info("Thread is going to wait on latch: " + Thread.currentThread().getName());
-
-                    assert latch.await(1, MINUTES);
-
-                    info("Thread is again runnable: " + Thread.currentThread().getName());
-
-                    return null;
-                }
-            },
-            THREADS_CNT,
-            "test-thread"
-        );
-
-        Thread.sleep(3000);
-
-        assert latch.countDown() == 1;
-
-        assert latch.countDown() == 0;
-
-        assert latch.await(1, SECONDS);
-
-        // Ensure there are no hangs.
-        fut.get();
-
-        // Test operations on removed latch.
-        IgniteCountDownLatch latch0 = grid(0).countDownLatch("latch", 0, false, false);
-
-        assertNotNull(latch0);
-
-        latch0.close();
-
-        checkRemovedLatch(latch);
-    }
-}
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/local/IgniteLocalLockSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/local/IgniteLocalLockSelfTest.java
deleted file mode 100644
index 6ff3935..0000000
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/local/IgniteLocalLockSelfTest.java
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache.datastructures.local;
-
-import java.util.concurrent.Callable;
-import org.apache.ignite.IgniteLock;
-import org.apache.ignite.cache.CacheMode;
-import org.apache.ignite.internal.IgniteInternalFuture;
-import org.apache.ignite.internal.processors.cache.datastructures.IgniteLockAbstractSelfTest;
-import org.apache.ignite.testframework.GridTestUtils;
-import org.jetbrains.annotations.Nullable;
-import org.junit.Test;
-
-import static java.util.concurrent.TimeUnit.MINUTES;
-import static org.apache.ignite.cache.CacheMode.LOCAL;
-
-/**
- *
- */
-public class IgniteLocalLockSelfTest extends IgniteLockAbstractSelfTest {
-    /** {@inheritDoc} */
-    @Override protected CacheMode atomicsCacheMode() {
-        return LOCAL;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected int gridCount() {
-        return 1;
-    }
-
-    /** {@inheritDoc} */
-    @Test
-    @Override public void testReentrantLock() throws Exception {
-        // Test main functionality.
-        IgniteLock lock = grid(0).reentrantLock("lock", true, false, true);
-
-        assertNotNull(lock);
-
-        assertEquals(0, lock.getHoldCount());
-
-        lock.lock();
-
-        IgniteInternalFuture<?> fut = GridTestUtils.runMultiThreadedAsync(
-            new Callable<Object>() {
-                @Nullable @Override public Object call() throws Exception {
-                    IgniteLock lock = grid(0).reentrantLock("lock", true, false, true);
-
-                    assert lock != null;
-
-                    info("Thread is going to wait on lock: " + Thread.currentThread().getName());
-
-                    assert lock.tryLock(1, MINUTES);
-
-                    info("Thread is again runnable: " + Thread.currentThread().getName());
-
-                    lock.unlock();
-
-                    return null;
-                }
-            },
-            THREADS_CNT,
-            "test-thread"
-        );
-
-        Thread.sleep(3000);
-
-        assert lock.isLocked();
-
-        assert lock.getHoldCount() == 1;
-
-        lock.lock();
-
-        assert lock.isLocked();
-
-        assert lock.getHoldCount() == 2;
-
-        lock.unlock();
-
-        assert lock.isLocked();
-
-        assert lock.getHoldCount() == 1;
-
-        lock.unlock();
-
-        // Ensure there are no hangs.
-        fut.get();
-
-        // Test operations on removed lock.
-        IgniteLock lock0 = grid(0).reentrantLock("lock", true, false, false);
-
-        assertNotNull(lock0);
-
-        lock0.close();
-
-        checkRemovedReentrantLock(lock0);
-    }
-}
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/local/IgniteLocalSemaphoreSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/local/IgniteLocalSemaphoreSelfTest.java
deleted file mode 100644
index 7d4659d..0000000
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/datastructures/local/IgniteLocalSemaphoreSelfTest.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache.datastructures.local;
-
-import java.util.concurrent.Callable;
-import org.apache.ignite.IgniteSemaphore;
-import org.apache.ignite.cache.CacheMode;
-import org.apache.ignite.internal.IgniteInternalFuture;
-import org.apache.ignite.internal.processors.cache.datastructures.IgniteSemaphoreAbstractSelfTest;
-import org.apache.ignite.testframework.GridTestUtils;
-import org.jetbrains.annotations.Nullable;
-import org.junit.Test;
-
-import static java.util.concurrent.TimeUnit.MINUTES;
-import static org.apache.ignite.cache.CacheMode.LOCAL;
-
-/**
- *
- */
-public class IgniteLocalSemaphoreSelfTest extends IgniteSemaphoreAbstractSelfTest {
-    /** {@inheritDoc} */
-    @Override protected CacheMode atomicsCacheMode() {
-        return LOCAL;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected int gridCount() {
-        return 1;
-    }
-
-    /** {@inheritDoc} */
-    @Test
-    @Override public void testSemaphore() throws Exception {
-        // Test main functionality.
-        IgniteSemaphore semaphore = grid(0).semaphore("semaphore", -2, false, true);
-
-        assertNotNull(semaphore);
-
-        assertEquals(-2, semaphore.availablePermits());
-
-        IgniteInternalFuture<?> fut = GridTestUtils.runMultiThreadedAsync(
-            new Callable<Object>() {
-                @Nullable @Override public Object call() throws Exception {
-                    IgniteSemaphore semaphore = grid(0).semaphore("semaphore", -2, false, true);
-
-                    assert semaphore != null && semaphore.availablePermits() == -2;
-
-                    info("Thread is going to wait on semaphore: " + Thread.currentThread().getName());
-
-                    assert semaphore.tryAcquire(1, 1, MINUTES);
-
-                    info("Thread is again runnable: " + Thread.currentThread().getName());
-
-                    semaphore.release();
-
-                    return null;
-                }
-            },
-            THREADS_CNT,
-            "test-thread"
-        );
-
-        Thread.sleep(3000);
-
-        assert semaphore.availablePermits() == -2;
-
-        semaphore.release(2);
-
-        assert semaphore.availablePermits() == 0;
-
-        semaphore.release();
-
-        // Ensure there are no hangs.
-        fut.get();
-
-        // Test operations on removed latch.
-        IgniteSemaphore semaphore0 = grid(0).semaphore("semaphore", 0, false, false);
-
-        assertNotNull(semaphore0);
-
-        semaphore0.close();
-
-        checkRemovedSemaphore(semaphore0);
-    }
-}
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/GridCacheTransformEventSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/GridCacheTransformEventSelfTest.java
index 5b94828..0090594 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/GridCacheTransformEventSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/GridCacheTransformEventSelfTest.java
@@ -45,11 +45,9 @@
 import org.apache.ignite.transactions.TransactionIsolation;
 import org.junit.Ignore;
 import org.junit.Test;
-
 import static org.apache.ignite.cache.CacheAtomicityMode.ATOMIC;
 import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL;
 import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL_SNAPSHOT;
-import static org.apache.ignite.cache.CacheMode.LOCAL;
 import static org.apache.ignite.cache.CacheMode.PARTITIONED;
 import static org.apache.ignite.cache.CacheMode.REPLICATED;
 import static org.apache.ignite.cache.CacheWriteSynchronizationMode.FULL_SYNC;
@@ -266,77 +264,6 @@
     }
 
     /**
-     * Test TRANSACTIONAL LOCAL cache with OPTIMISTIC/REPEATABLE_READ transaction.
-     *
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testTxLocalOptimisticRepeatableRead() throws Exception {
-        checkTx(LOCAL, OPTIMISTIC, REPEATABLE_READ);
-    }
-
-    /**
-     * Test TRANSACTIONAL LOCAL cache with OPTIMISTIC/READ_COMMITTED transaction.
-     *
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testTxLocalOptimisticReadCommitted() throws Exception {
-        checkTx(LOCAL, OPTIMISTIC, READ_COMMITTED);
-    }
-
-    /**
-     * Test TRANSACTIONAL LOCAL cache with OPTIMISTIC/SERIALIZABLE transaction.
-     *
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testTxLocalOptimisticSerializable() throws Exception {
-        checkTx(LOCAL, OPTIMISTIC, SERIALIZABLE);
-    }
-
-    /**
-     * Test TRANSACTIONAL LOCAL cache with PESSIMISTIC/REPEATABLE_READ transaction.
-     *
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testTxLocalPessimisticRepeatableRead() throws Exception {
-        checkTx(LOCAL, PESSIMISTIC, REPEATABLE_READ);
-    }
-
-    /**
-     * Test TRANSACTIONAL LOCAL cache with PESSIMISTIC/READ_COMMITTED transaction.
-     *
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testTxLocalPessimisticReadCommitted() throws Exception {
-        checkTx(LOCAL, PESSIMISTIC, READ_COMMITTED);
-    }
-
-    /**
-     * Test TRANSACTIONAL LOCAL cache with PESSIMISTIC/SERIALIZABLE transaction.
-     *
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testTxLocalPessimisticSerializable() throws Exception {
-        checkTx(LOCAL, PESSIMISTIC, SERIALIZABLE);
-    }
-
-    /**
-     * Test TRANSACTIONAL_SNAPSHOT LOCAL cache with PESSIMISTIC/REPEATABLE_READ transaction.
-     *
-     * @throws Exception If failed.
-     */
-    @Ignore("https://issues.apache.org/jira/browse/IGNITE-9530")
-    @Test
-    public void testMvccTxLocalPessimisticRepeatableRead() throws Exception {
-        checkMvccTx(LOCAL, PESSIMISTIC, REPEATABLE_READ);
-    }
-
-    /**
      * Test TRANSACTIONAL PARTITIONED cache with OPTIMISTIC/REPEATABLE_READ transaction.
      *
      * @throws Exception If failed.
@@ -480,16 +407,6 @@
     }
 
     /**
-     * Test ATOMIC LOCAL cache.
-     *
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testAtomicLocal() throws Exception {
-        checkAtomic(LOCAL);
-    }
-
-    /**
      * Test ATOMIC PARTITIONED cache.
      *
      * @throws Exception If failed.
@@ -637,11 +554,7 @@
     private UUID[] idsForKeys(boolean primaryOnly, int... keys) {
         List<UUID> res = new ArrayList<>();
 
-        if (cacheMode == LOCAL) {
-            for (int key : keys)
-                res.add(ids[0]); // Perform PUTs from the node with index 0.
-        }
-        else if (cacheMode == PARTITIONED) {
+        if (cacheMode == PARTITIONED) {
             for (int key : keys) {
                 for (int i = 0; i < GRID_CNT; i++) {
                     if (primary(i, key) || (!primaryOnly && backup(i, key)))
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteAbstractTxSuspendResumeTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteAbstractTxSuspendResumeTest.java
index 6687a53..bcc4745 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteAbstractTxSuspendResumeTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteAbstractTxSuspendResumeTest.java
@@ -41,9 +41,7 @@
 import org.apache.ignite.transactions.TransactionIsolation;
 import org.apache.ignite.transactions.TransactionTimeoutException;
 import org.junit.Test;
-
 import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL;
-import static org.apache.ignite.cache.CacheMode.LOCAL;
 import static org.apache.ignite.cache.CacheMode.PARTITIONED;
 import static org.apache.ignite.cache.CacheMode.REPLICATED;
 import static org.apache.ignite.cache.CacheWriteSynchronizationMode.FULL_SYNC;
@@ -121,7 +119,7 @@
 
             awaitCacheOnClient(client, ccfg.getName());
 
-            if (ccfg.getCacheMode() != LOCAL && !FORCE_MVCC)
+            if (!FORCE_MVCC)
                 client.createNearCache(ccfg.getName(), new NearCacheConfiguration<>());
         }
 
@@ -223,11 +221,6 @@
     public void testCrossCacheTxInAnotherThread() throws Exception {
         executeTestForAllCaches(new CI2Exc<Ignite, IgniteCache<Integer, Integer>>() {
             @Override public void applyx(Ignite ignite, final IgniteCache<Integer, Integer> cache) throws Exception {
-                // TODO: IGNITE-9110 Optimistic tx hangs in cross-cache operations with LOCAL and non LOCAL caches.
-                if (transactionConcurrency() == TransactionConcurrency.OPTIMISTIC
-                    && cache.getConfiguration(CacheConfiguration.class).getCacheMode() == LOCAL)
-                    return;
-
                 for (TransactionIsolation isolation : TransactionIsolation.values()) {
                     final IgniteCache<Integer, Integer> otherCache = ignite.getOrCreateCache(
                         cacheConfiguration("otherCache", PARTITIONED, 0, false));
@@ -600,9 +593,6 @@
         cfgs.add(cacheConfiguration("cache3", PARTITIONED, 1, true));
         cfgs.add(cacheConfiguration("cache4", REPLICATED, 0, false));
 
-        if (!FORCE_MVCC)
-            cfgs.add(cacheConfiguration("cache5", LOCAL, 0, false));
-
         return cfgs;
     }
 
@@ -644,7 +634,7 @@
             log.info(">>> Run test for node [node=" + locNode.id() + ", client=" + locNode.isClient() + ']');
 
             for (CacheConfiguration ccfg : cacheConfigurations()) {
-                if (locNode.isClient() && ccfg.getCacheMode() == LOCAL)
+                if (locNode.isClient())
                     continue;
 
                 log.info(">>>> Run test for cache " + ccfg.getName());
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteCacheTxIteratorSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteCacheTxIteratorSelfTest.java
index 4e27125..167ebca 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteCacheTxIteratorSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteCacheTxIteratorSelfTest.java
@@ -134,8 +134,7 @@
         boolean useEvicPlc
     ) throws Exception {
         if (atomMode == CacheAtomicityMode.TRANSACTIONAL_SNAPSHOT) {
-            if (!MvccFeatureChecker.isSupported(mode) ||
-                (nearEnabled && !MvccFeatureChecker.isSupported(Feature.NEAR_CACHE)) ||
+            if ((nearEnabled && !MvccFeatureChecker.isSupported(Feature.NEAR_CACHE)) ||
                 (useEvicPlc && !MvccFeatureChecker.isSupported(Feature.EVICTION)))
                 return; // Nothing to do. Mode is not supported.
         }
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteOptimisticTxSuspendResumeTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteOptimisticTxSuspendResumeTest.java
index b020ba0..93e85de 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteOptimisticTxSuspendResumeTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteOptimisticTxSuspendResumeTest.java
@@ -31,8 +31,6 @@
 import org.apache.ignite.transactions.TransactionConcurrency;
 import org.apache.ignite.transactions.TransactionIsolation;
 import org.junit.Test;
-
-import static org.apache.ignite.cache.CacheMode.LOCAL;
 import static org.apache.ignite.cache.CacheMode.PARTITIONED;
 import static org.apache.ignite.cache.CacheMode.REPLICATED;
 import static org.apache.ignite.transactions.TransactionConcurrency.OPTIMISTIC;
@@ -253,9 +251,6 @@
 
             // Generate different keys: 0 - primary, 1 - backup, 2 - neither primary nor backup.
             for (int type = 0; type < 3; type++) {
-                if (cfg.getCacheMode() == LOCAL)
-                    continue;
-
                 if (type == 1 && cfg.getCacheMode() == PARTITIONED && cfg.getBackups() == 0)
                     continue;
 
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridCacheDhtPreloadMultiThreadedSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridCacheDhtPreloadMultiThreadedSelfTest.java
index 93052cc..4d88e9d 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridCacheDhtPreloadMultiThreadedSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridCacheDhtPreloadMultiThreadedSelfTest.java
@@ -30,7 +30,6 @@
 import org.apache.ignite.internal.util.typedef.G;
 import org.apache.ignite.lang.IgnitePredicate;
 import org.apache.ignite.testframework.GridTestUtils;
-import org.apache.ignite.testframework.MvccFeatureChecker;
 import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
 import org.jetbrains.annotations.Nullable;
 import org.junit.Test;
@@ -136,8 +135,6 @@
      */
     @Test
     public void testConcurrentNodesStartStop() throws Exception {
-        MvccFeatureChecker.skipIfNotSupported(MvccFeatureChecker.Feature.LOCAL_CACHE);
-
         try {
             multithreadedAsync(
                 new Callable<Object>() {
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/GridCacheGetStoreErrorSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/GridCacheGetStoreErrorSelfTest.java
index 4cf75bc..d8b60f2 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/GridCacheGetStoreErrorSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/GridCacheGetStoreErrorSelfTest.java
@@ -32,9 +32,7 @@
 import org.apache.ignite.testframework.MvccFeatureChecker;
 import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
 import org.junit.Test;
-
 import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL;
-import static org.apache.ignite.cache.CacheMode.LOCAL;
 import static org.apache.ignite.cache.CacheMode.PARTITIONED;
 import static org.apache.ignite.cache.CacheMode.REPLICATED;
 import static org.apache.ignite.events.EventType.EVT_JOB_MAPPED;
@@ -105,12 +103,6 @@
         checkGetError(false, REPLICATED);
     }
 
-    /** @throws Exception If failed. */
-    @Test
-    public void testGetErrorLocal() throws Exception {
-        checkGetError(false, LOCAL);
-    }
-
     /**
      * @param nearEnabled Near cache flag.
      * @param cacheMode Cache mode.
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/rebalancing/GridCacheRebalancingSyncSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/rebalancing/GridCacheRebalancingSyncSelfTest.java
index df87cfa..ad25344 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/rebalancing/GridCacheRebalancingSyncSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/rebalancing/GridCacheRebalancingSyncSelfTest.java
@@ -63,8 +63,6 @@
 import org.apache.ignite.testframework.MvccFeatureChecker;
 import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
 import org.junit.Test;
-
-import static org.apache.ignite.cache.CacheMode.LOCAL;
 import static org.apache.ignite.cache.CacheRebalanceMode.NONE;
 
 /**
@@ -411,7 +409,7 @@
             for (IgniteCacheProxy<?, ?> c : g0.context().cache().jcaches()) {
                 CacheConfiguration cfg = c.context().config();
 
-                if (cfg.getCacheMode() != LOCAL && cfg.getRebalanceMode() != NONE) {
+                if (cfg.getRebalanceMode() != NONE) {
                     GridDhtCacheAdapter<?, ?> dht = dht(c);
 
                     GridDhtPartitionTopology top = dht.topology();
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/EvictionAbstractTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/EvictionAbstractTest.java
index 6191f4d..132f901 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/EvictionAbstractTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/EvictionAbstractTest.java
@@ -42,9 +42,7 @@
 import org.apache.ignite.transactions.Transaction;
 import org.jetbrains.annotations.Nullable;
 import org.junit.Test;
-
 import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL;
-import static org.apache.ignite.cache.CacheMode.LOCAL;
 import static org.apache.ignite.cache.CacheMode.PARTITIONED;
 import static org.apache.ignite.cache.CacheMode.REPLICATED;
 import static org.apache.ignite.cache.CacheWriteSynchronizationMode.FULL_ASYNC;
@@ -298,44 +296,6 @@
     }
 
     /**
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testMaxSizePut() throws Exception {
-        plcMax = 100;
-        plcBatchSize = 1;
-        plcMaxMemSize = 0;
-
-        doTestPut(plcMax);
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testMaxSizePutWithBatch() throws Exception {
-        plcMax = 100;
-        plcBatchSize = 2;
-        plcMaxMemSize = 0;
-
-        doTestPut(plcMax);
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testMaxMemSizePut() throws Exception {
-        int max = 100;
-
-        plcMax = 0;
-        plcBatchSize = 2;
-        plcMaxMemSize = max * PUT_ENTRY_SIZE;
-
-        doTestPut(max);
-    }
-
-    /**
      * Tests policy behaviour.
      *
      * @throws Exception If failed.
@@ -474,71 +434,6 @@
     }
 
     /**
-     * @throws Exception If failed.
-     */
-    protected void doTestPut(int max) throws Exception {
-        mode = LOCAL;
-        syncCommit = true;
-
-        try {
-            Ignite ignite = startGrid();
-
-            IgniteCache<Object, Object> cache = ignite.cache(DEFAULT_CACHE_NAME);
-
-            int cnt = 500;
-
-            int min = Integer.MAX_VALUE;
-
-            int minIdx = 0;
-
-            for (int i = 0; i < cnt; i++) {
-                cache.put(i, i);
-
-                int cacheSize = cache.size();
-
-                if (i > max && cacheSize < min) {
-                    min = cacheSize;
-                    minIdx = i;
-                }
-            }
-
-            assertTrue("Min cache size is too small: " + min, min >= max);
-
-            check(max, PUT_ENTRY_SIZE);
-
-            info("Min cache size [min=" + min + ", idx=" + minIdx + ']');
-            info("Current cache size " + cache.size());
-            info("Current cache key size " + cache.size());
-
-            min = Integer.MAX_VALUE;
-
-            minIdx = 0;
-
-            // Touch.
-            for (int i = cnt; --i > cnt - max;) {
-                cache.get(i);
-
-                int cacheSize = cache.size();
-
-                if (cacheSize < min) {
-                    min = cacheSize;
-                    minIdx = i;
-                }
-            }
-
-            info("----");
-            info("Min cache size [min=" + min + ", idx=" + minIdx + ']');
-            info("Current cache size " + cache.size());
-            info("Current cache key size " + cache.size());
-
-            check(max, PUT_ENTRY_SIZE);
-        }
-        finally {
-            stopAllGrids();
-        }
-    }
-
-    /**
      * @param arr Array.
      * @param idx Index.
      * @return Entry at the index.
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/EvictionPolicyFactoryAbstractTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/EvictionPolicyFactoryAbstractTest.java
index ae3f15f..13ddd5e 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/EvictionPolicyFactoryAbstractTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/EvictionPolicyFactoryAbstractTest.java
@@ -25,7 +25,6 @@
 import java.util.concurrent.atomic.AtomicInteger;
 import javax.cache.Cache;
 import javax.cache.configuration.Factory;
-import org.apache.ignite.Ignite;
 import org.apache.ignite.IgniteCache;
 import org.apache.ignite.cache.CacheMode;
 import org.apache.ignite.cache.eviction.EvictableEntry;
@@ -45,9 +44,7 @@
 import org.apache.ignite.transactions.Transaction;
 import org.jetbrains.annotations.Nullable;
 import org.junit.Test;
-
 import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL;
-import static org.apache.ignite.cache.CacheMode.LOCAL;
 import static org.apache.ignite.cache.CacheMode.PARTITIONED;
 import static org.apache.ignite.cache.CacheMode.REPLICATED;
 import static org.apache.ignite.cache.CacheWriteSynchronizationMode.FULL_ASYNC;
@@ -313,44 +310,6 @@
     }
 
     /**
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testMaxSizePut() throws Exception {
-        plcMax = 100;
-        plcBatchSize = 1;
-        plcMaxMemSize = 0;
-
-        doTestPut(plcMax);
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testMaxSizePutWithBatch() throws Exception {
-        plcMax = 100;
-        plcBatchSize = 2;
-        plcMaxMemSize = 0;
-
-        doTestPut(plcMax);
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testMaxMemSizePut() throws Exception {
-        int max = 100;
-
-        plcMax = 0;
-        plcBatchSize = 2;
-        plcMaxMemSize = max * PUT_ENTRY_SIZE;
-
-        doTestPut(max);
-    }
-
-    /**
      * Tests policy behaviour.
      *
      * @throws Exception If failed.
@@ -495,73 +454,6 @@
     }
 
     /**
-     * @throws Exception If failed.
-     */
-    protected void doTestPut(int max) throws Exception {
-        mode = LOCAL;
-        syncCommit = true;
-
-        policyFactory = createPolicyFactory();
-
-        try {
-            Ignite ignite = startGrid();
-
-            IgniteCache<Object, Object> cache = ignite.cache(DEFAULT_CACHE_NAME);
-
-            int cnt = 500;
-
-            int min = Integer.MAX_VALUE;
-
-            int minIdx = 0;
-
-            for (int i = 0; i < cnt; i++) {
-                cache.put(i, i);
-
-                int cacheSize = cache.size();
-
-                if (i > max && cacheSize < min) {
-                    min = cacheSize;
-                    minIdx = i;
-                }
-            }
-
-            assertTrue("Min cache size is too small: " + min, min >= max);
-
-            check(max, PUT_ENTRY_SIZE);
-
-            info("Min cache size [min=" + min + ", idx=" + minIdx + ']');
-            info("Current cache size " + cache.size());
-            info("Current cache key size " + cache.size());
-
-            min = Integer.MAX_VALUE;
-
-            minIdx = 0;
-
-            // Touch.
-            for (int i = cnt; --i > cnt - max;) {
-                cache.get(i);
-
-                int cacheSize = cache.size();
-
-                if (cacheSize < min) {
-                    min = cacheSize;
-                    minIdx = i;
-                }
-            }
-
-            info("----");
-            info("Min cache size [min=" + min + ", idx=" + minIdx + ']');
-            info("Current cache size " + cache.size());
-            info("Current cache key size " + cache.size());
-
-            check(max, PUT_ENTRY_SIZE);
-        }
-        finally {
-            stopAllGrids();
-        }
-    }
-
-    /**
      * @param arr Array.
      * @param idx Index.
      * @return Entry at the index.
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/GridCacheConcurrentEvictionConsistencySelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/GridCacheConcurrentEvictionConsistencySelfTest.java
index 60cb7b24..928707c 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/GridCacheConcurrentEvictionConsistencySelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/GridCacheConcurrentEvictionConsistencySelfTest.java
@@ -39,9 +39,6 @@
 import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
 import org.apache.ignite.transactions.Transaction;
 import org.junit.Test;
-
-import static org.apache.ignite.cache.CacheMode.LOCAL;
-import static org.apache.ignite.cache.CacheWriteSynchronizationMode.FULL_SYNC;
 import static org.apache.ignite.transactions.TransactionConcurrency.PESSIMISTIC;
 import static org.apache.ignite.transactions.TransactionIsolation.REPEATABLE_READ;
 
@@ -66,8 +63,6 @@
 
     /** {@inheritDoc} */
     @Override protected IgniteConfiguration getConfiguration(String igniteInstanceName) throws Exception {
-        MvccFeatureChecker.skipIfNotSupported(MvccFeatureChecker.Feature.LOCAL_CACHE);
-
         IgniteConfiguration c = super.getConfiguration(igniteInstanceName);
 
         c.getTransactionConfiguration().setDefaultTxConcurrency(PESSIMISTIC);
@@ -75,12 +70,7 @@
 
         CacheConfiguration cc = defaultCacheConfiguration();
 
-        cc.setCacheMode(LOCAL);
-
-        cc.setWriteSynchronizationMode(FULL_SYNC);
-
         cc.setNearConfiguration(null);
-
         cc.setEvictionPolicy(plc);
         cc.setOnheapCacheEnabled(true);
 
@@ -90,13 +80,6 @@
     }
 
     /** {@inheritDoc} */
-    @Override protected void beforeTestsStarted() throws Exception {
-        MvccFeatureChecker.skipIfNotSupported(MvccFeatureChecker.Feature.LOCAL_CACHE);
-
-        super.beforeTestsStarted();
-    }
-
-    /** {@inheritDoc} */
     @Override protected long getTestTimeout() {
         return 5 * 60 * 1000; // 5 min.
     }
@@ -105,7 +88,7 @@
      * @throws Exception If failed.
      */
     @Test
-    public void testPolicyConsistencyFifoLocalTwoKeys() throws Exception {
+    public void testPolicyConsistencyFifoTwoKeys() throws Exception {
         FifoEvictionPolicy<Object, Object> plc = new FifoEvictionPolicy<>();
         plc.setMaxSize(1);
 
@@ -121,7 +104,7 @@
      * @throws Exception If failed.
      */
     @Test
-    public void testPolicyConsistencyLruLocalTwoKeys() throws Exception {
+    public void testPolicyConsistencyLruTwoKeys() throws Exception {
         LruEvictionPolicy<Object, Object> plc = new LruEvictionPolicy<>();
         plc.setMaxSize(1);
 
@@ -137,7 +120,7 @@
      * @throws Exception If failed.
      */
     @Test
-    public void testPolicyConsistencySortedLocalTwoKeys() throws Exception {
+    public void testPolicyConsistencySortedTwoKeys() throws Exception {
         SortedEvictionPolicy<Object, Object> plc = new SortedEvictionPolicy<>();
         plc.setMaxSize(1);
 
@@ -153,7 +136,7 @@
      * @throws Exception If failed.
      */
     @Test
-    public void testPolicyConsistencyFifoLocalFewKeys() throws Exception {
+    public void testPolicyConsistencyFifoFewKeys() throws Exception {
         FifoEvictionPolicy<Object, Object> plc = new FifoEvictionPolicy<>();
         plc.setMaxSize(POLICY_QUEUE_SIZE);
 
@@ -168,7 +151,7 @@
      * @throws Exception If failed.
      */
     @Test
-    public void testPolicyConsistencyLruLocalFewKeys() throws Exception {
+    public void testPolicyConsistencyLruFewKeys() throws Exception {
         LruEvictionPolicy<Object, Object> plc = new LruEvictionPolicy<>();
         plc.setMaxSize(POLICY_QUEUE_SIZE);
 
@@ -183,7 +166,7 @@
      * @throws Exception If failed.
      */
     @Test
-    public void testPolicyConsistencySortedLocalFewKeys() throws Exception {
+    public void testPolicyConsistencySortedFewKeys() throws Exception {
         SortedEvictionPolicy<Object, Object> plc = new SortedEvictionPolicy<>();
         plc.setMaxSize(POLICY_QUEUE_SIZE);
 
@@ -198,7 +181,7 @@
      * @throws Exception If failed.
      */
     @Test
-    public void testPolicyConsistencyFifoLocal() throws Exception {
+    public void testPolicyConsistencyFifo() throws Exception {
         FifoEvictionPolicy<Object, Object> plc = new FifoEvictionPolicy<>();
         plc.setMaxSize(POLICY_QUEUE_SIZE);
 
@@ -213,7 +196,7 @@
      * @throws Exception If failed.
      */
     @Test
-    public void testPolicyConsistencyLruLocal() throws Exception {
+    public void testPolicyConsistencyLru() throws Exception {
         LruEvictionPolicy<Object, Object> plc = new LruEvictionPolicy<>();
         plc.setMaxSize(POLICY_QUEUE_SIZE);
 
@@ -228,7 +211,7 @@
      * @throws Exception If failed.
      */
     @Test
-    public void testPolicyConsistencySortedLocal() throws Exception {
+    public void testPolicyConsistencySorted() throws Exception {
         SortedEvictionPolicy<Object, Object> plc = new SortedEvictionPolicy<>();
         plc.setMaxSize(POLICY_QUEUE_SIZE);
 
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/GridCacheConcurrentEvictionsSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/GridCacheConcurrentEvictionsSelfTest.java
index f055d27..0e2a24c 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/GridCacheConcurrentEvictionsSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/GridCacheConcurrentEvictionsSelfTest.java
@@ -21,7 +21,6 @@
 import java.util.concurrent.atomic.AtomicInteger;
 import org.apache.ignite.Ignite;
 import org.apache.ignite.IgniteCache;
-import org.apache.ignite.cache.CacheMode;
 import org.apache.ignite.cache.CachePeekMode;
 import org.apache.ignite.cache.eviction.EvictionPolicy;
 import org.apache.ignite.cache.eviction.fifo.FifoEvictionPolicy;
@@ -31,13 +30,8 @@
 import org.apache.ignite.configuration.IgniteConfiguration;
 import org.apache.ignite.internal.IgniteInternalFuture;
 import org.apache.ignite.testframework.GridTestUtils.SF;
-import org.apache.ignite.testframework.MvccFeatureChecker;
 import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
 import org.junit.Test;
-
-import static org.apache.ignite.cache.CacheMode.LOCAL;
-import static org.apache.ignite.cache.CacheMode.REPLICATED;
-import static org.apache.ignite.cache.CacheWriteSynchronizationMode.FULL_SYNC;
 import static org.apache.ignite.transactions.TransactionConcurrency.PESSIMISTIC;
 import static org.apache.ignite.transactions.TransactionIsolation.REPEATABLE_READ;
 
@@ -45,9 +39,6 @@
  *
  */
 public class GridCacheConcurrentEvictionsSelfTest extends GridCommonAbstractTest {
-    /** Replicated cache. */
-    private CacheMode mode = REPLICATED;
-
     /** */
     private EvictionPolicy<?, ?> plc;
 
@@ -59,8 +50,6 @@
 
     /** {@inheritDoc} */
     @Override protected IgniteConfiguration getConfiguration(String igniteInstanceName) throws Exception {
-        MvccFeatureChecker.skipIfNotSupported(MvccFeatureChecker.Feature.LOCAL_CACHE);
-
         IgniteConfiguration c = super.getConfiguration(igniteInstanceName);
 
         c.getTransactionConfiguration().setDefaultTxConcurrency(PESSIMISTIC);
@@ -68,10 +57,6 @@
 
         CacheConfiguration<?, ?> cc = defaultCacheConfiguration();
 
-        cc.setCacheMode(mode);
-
-        cc.setWriteSynchronizationMode(FULL_SYNC);
-
         cc.setNearConfiguration(null);
 
         cc.setEvictionPolicy(plc);
@@ -89,20 +74,11 @@
         plc = null;
     }
 
-    /** {@inheritDoc} */
-    @Override protected void beforeTestsStarted() throws Exception {
-        MvccFeatureChecker.skipIfNotSupported(MvccFeatureChecker.Feature.LOCAL_CACHE);
-
-        super.beforeTestsStarted();
-    }
-
     /**
      * @throws Exception If failed.
      */
     @Test
-    public void testConcurrentPutsFifoLocal() throws Exception {
-        mode = LOCAL;
-
+    public void testConcurrentPutsFifo() throws Exception {
         FifoEvictionPolicy plc = new FifoEvictionPolicy();
         plc.setMaxSize(1000);
 
@@ -117,9 +93,7 @@
      * @throws Exception If failed.
      */
     @Test
-    public void testConcurrentPutsLruLocal() throws Exception {
-        mode = LOCAL;
-
+    public void testConcurrentPutsLru() throws Exception {
         LruEvictionPolicy plc = new LruEvictionPolicy();
         plc.setMaxSize(1000);
 
@@ -134,9 +108,7 @@
      * @throws Exception If failed.
      */
     @Test
-    public void testConcurrentPutsSortedLocal() throws Exception {
-        mode = LOCAL;
-
+    public void testConcurrentPutsSorted() throws Exception {
         SortedEvictionPolicy plc = new SortedEvictionPolicy();
         plc.setMaxSize(1000);
 
@@ -160,7 +132,7 @@
             for (int i = 0; i < warmUpPutsCnt; i++) {
                 cache.put(i, i);
 
-                if (i != 0 && i % 1000 == 0)
+                if (i != 0 && i % 10000 == 0)
                     info("Warm up puts count: " + i);
             }
 
@@ -182,7 +154,7 @@
 
                             cache.put(j, j);
 
-                            if (i != 0 && i % 1000 == 0)
+                            if (i != 0 && i % 10000 == 0)
                                 // info("Puts count: " + i);
                                 info("Stats [putsCnt=" + i + ", size=" + cache.size(CachePeekMode.ONHEAP) + ']');
                         }
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/GridCacheEmptyEntriesLocalSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/GridCacheEmptyEntriesLocalSelfTest.java
deleted file mode 100644
index 750f01f..0000000
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/GridCacheEmptyEntriesLocalSelfTest.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache.eviction;
-
-import org.apache.ignite.Ignite;
-import org.apache.ignite.cache.CacheMode;
-import org.apache.ignite.testframework.MvccFeatureChecker;
-import org.junit.Test;
-
-/**
- *
- */
-public class GridCacheEmptyEntriesLocalSelfTest extends GridCacheEmptyEntriesAbstractSelfTest {
-    /** {@inheritDoc} */
-    @Override protected Ignite startGrids() throws Exception {
-        return startGrid();
-    }
-
-    /** {@inheritDoc} */
-    @Override protected CacheMode cacheMode() {
-        return CacheMode.LOCAL;
-    }
-
-    /** {@inheritDoc} */
-    @Test
-    @Override public void testFifo() throws Exception {
-        super.testFifo();
-    }
-
-
-    /** {@inheritDoc} */
-    @Override protected void beforeTest() throws Exception {
-        MvccFeatureChecker.skipIfNotSupported(MvccFeatureChecker.Feature.CACHE_STORE);
-        MvccFeatureChecker.skipIfNotSupported(MvccFeatureChecker.Feature.LOCAL_CACHE);
-    }
-}
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/GridCacheEvictionFilterSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/GridCacheEvictionFilterSelfTest.java
index 216c870..7b8730e 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/GridCacheEvictionFilterSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/GridCacheEvictionFilterSelfTest.java
@@ -35,9 +35,7 @@
 import org.apache.ignite.testframework.MvccFeatureChecker;
 import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
 import org.junit.Test;
-
 import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL;
-import static org.apache.ignite.cache.CacheMode.LOCAL;
 import static org.apache.ignite.cache.CacheMode.PARTITIONED;
 import static org.apache.ignite.cache.CacheMode.REPLICATED;
 import static org.apache.ignite.cache.CacheRebalanceMode.SYNC;
@@ -95,16 +93,6 @@
 
     /** @throws Exception If failed. */
     @Test
-    public void testLocal() throws Exception {
-        MvccFeatureChecker.skipIfNotSupported(MvccFeatureChecker.Feature.LOCAL_CACHE);
-
-        mode = LOCAL;
-
-        checkEvictionFilter();
-    }
-
-    /** @throws Exception If failed. */
-    @Test
     public void testReplicated() throws Exception {
         mode = REPLICATED;
 
@@ -132,7 +120,6 @@
     }
 
     /** @throws Exception If failed. */
-    @SuppressWarnings("BusyWait")
     private void checkEvictionFilter() throws Exception {
         filter = new EvictionFilter();
 
@@ -150,7 +137,7 @@
 
             Map<Object, AtomicInteger> cnts = filter.counts();
 
-            int exp = mode == LOCAL ? 1 : mode == REPLICATED ? 2 : nearEnabled ? 3 : 2;
+            int exp = mode == REPLICATED ? 2 : nearEnabled ? 3 : 2;
 
             for (int j = 0; j < 3; j++) {
                 boolean success = true;
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/GridCacheEvictionLockUnlockSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/GridCacheEvictionLockUnlockSelfTest.java
index ddae9ed..4ca5361 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/GridCacheEvictionLockUnlockSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/GridCacheEvictionLockUnlockSelfTest.java
@@ -34,10 +34,8 @@
 import org.apache.ignite.testframework.MvccFeatureChecker;
 import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
 import org.junit.Test;
-
 import static java.util.concurrent.TimeUnit.SECONDS;
 import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL;
-import static org.apache.ignite.cache.CacheMode.LOCAL;
 import static org.apache.ignite.cache.CacheMode.PARTITIONED;
 import static org.apache.ignite.cache.CacheMode.REPLICATED;
 import static org.apache.ignite.events.EventType.EVT_CACHE_ENTRY_EVICTED;
@@ -63,7 +61,6 @@
 
     /** {@inheritDoc} */
     @Override protected IgniteConfiguration getConfiguration(String igniteInstanceName) throws Exception {
-        MvccFeatureChecker.skipIfNotSupported(MvccFeatureChecker.Feature.LOCAL_CACHE);
         MvccFeatureChecker.skipIfNotSupported(MvccFeatureChecker.Feature.ENTRY_LOCK);
 
         IgniteConfiguration c = super.getConfiguration(igniteInstanceName);
@@ -93,7 +90,6 @@
 
     /** {@inheritDoc} */
     @Override protected void beforeTestsStarted() throws Exception {
-        MvccFeatureChecker.skipIfNotSupported(MvccFeatureChecker.Feature.LOCAL_CACHE);
         MvccFeatureChecker.skipIfNotSupported(MvccFeatureChecker.Feature.ENTRY_LOCK);
 
         super.beforeTestsStarted();
@@ -101,15 +97,6 @@
 
     /** @throws Exception If failed. */
     @Test
-    public void testLocal() throws Exception {
-        mode = LOCAL;
-        gridCnt = 1;
-
-        doTest();
-    }
-
-    /** @throws Exception If failed. */
-    @Test
     public void testReplicated() throws Exception {
         mode = REPLICATED;
         gridCnt = 3;
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/paged/PageEvictionPagesRecyclingAndReusingTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/paged/PageEvictionPagesRecyclingAndReusingTest.java
index 13e54eb..47e1266 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/paged/PageEvictionPagesRecyclingAndReusingTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/paged/PageEvictionPagesRecyclingAndReusingTest.java
@@ -68,14 +68,6 @@
      * @throws Exception If failed.
      */
     @Test
-    public void testPagesRecyclingAndReusingAtomicLocal() throws Exception {
-        testPagesRecyclingAndReusing(CacheAtomicityMode.ATOMIC, CacheMode.LOCAL);
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    @Test
     public void testPagesRecyclingAndReusingTxReplicated() throws Exception {
         testPagesRecyclingAndReusing(CacheAtomicityMode.TRANSACTIONAL, CacheMode.REPLICATED);
     }
@@ -83,14 +75,6 @@
     /**
      * @throws Exception If failed.
      */
-    @Test
-    public void testPagesRecyclingAndReusingTxLocal() throws Exception {
-        testPagesRecyclingAndReusing(CacheAtomicityMode.TRANSACTIONAL, CacheMode.LOCAL);
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
     @Ignore("https://issues.apache.org/jira/browse/IGNITE-10738")
     @Test
     public void testPagesRecyclingAndReusingMvccTxPartitioned() throws Exception {
@@ -108,15 +92,6 @@
     }
 
     /**
-     * @throws Exception If failed.
-     */
-    @Ignore("https://issues.apache.org/jira/browse/IGNITE-7956,https://issues.apache.org/jira/browse/IGNITE-9530")
-    @Test
-    public void testPagesRecyclingAndReusingMvccTxLocal() throws Exception {
-        testPagesRecyclingAndReusing(CacheAtomicityMode.TRANSACTIONAL_SNAPSHOT, CacheMode.LOCAL);
-    }
-
-    /**
      * @param atomicityMode Atomicity mode.
      * @param cacheMode Cache mode.
      */
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/paged/PageEvictionReadThroughTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/paged/PageEvictionReadThroughTest.java
index 5664ddc..2e0d6ad 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/paged/PageEvictionReadThroughTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/paged/PageEvictionReadThroughTest.java
@@ -53,14 +53,6 @@
      * @throws Exception If failed.
      */
     @Test
-    public void testEvictionWithReadThroughAtomicLocal() throws Exception {
-        testEvictionWithReadThrough(CacheAtomicityMode.ATOMIC, CacheMode.LOCAL);
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    @Test
     public void testEvictionWithReadThroughTxReplicated() throws Exception {
         testEvictionWithReadThrough(CacheAtomicityMode.TRANSACTIONAL, CacheMode.REPLICATED);
     }
@@ -68,14 +60,6 @@
     /**
      * @throws Exception If failed.
      */
-    @Test
-    public void testEvictionWithReadThroughTxLocal() throws Exception {
-        testEvictionWithReadThrough(CacheAtomicityMode.TRANSACTIONAL, CacheMode.LOCAL);
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
     @Ignore("https://issues.apache.org/jira/browse/IGNITE-8582,https://issues.apache.org/jira/browse/IGNITE-7956")
     @Test
     public void testEvictionWithReadThroughMvccTxReplicated() throws Exception {
@@ -92,16 +76,6 @@
     }
 
     /**
-     * @throws Exception If failed.
-     */
-    @Ignore("https://issues.apache.org/jira/browse/IGNITE-8582,https://issues.apache.org/jira/browse/IGNITE-7956,"
-        + "https://issues.apache.org/jira/browse/IGNITE-9530")
-    @Test
-    public void testEvictionWithReadThroughMvccTxLocal() throws Exception {
-        testEvictionWithReadThrough(CacheAtomicityMode.TRANSACTIONAL_SNAPSHOT, CacheMode.LOCAL);
-    }
-
-    /**
      * @param atomicityMode Atomicity mode.
      * @param cacheMode Cache mode.
      * @throws Exception If failed.
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/paged/PageEvictionTouchOrderTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/paged/PageEvictionTouchOrderTest.java
index 12a2097..a8af7aa 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/paged/PageEvictionTouchOrderTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/paged/PageEvictionTouchOrderTest.java
@@ -56,14 +56,6 @@
      * @throws Exception If failed.
      */
     @Test
-    public void testTouchOrderWithFairFifoEvictionAtomicLocal() throws Exception {
-        testTouchOrderWithFairFifoEviction(CacheAtomicityMode.ATOMIC, CacheMode.LOCAL);
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    @Test
     public void testTouchOrderWithFairFifoEvictionTxReplicated() throws Exception {
         testTouchOrderWithFairFifoEviction(CacheAtomicityMode.TRANSACTIONAL, CacheMode.REPLICATED);
     }
@@ -71,14 +63,6 @@
     /**
      * @throws Exception If failed.
      */
-    @Test
-    public void testTouchOrderWithFairFifoEvictionTxLocal() throws Exception {
-        testTouchOrderWithFairFifoEviction(CacheAtomicityMode.TRANSACTIONAL, CacheMode.LOCAL);
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
     @Ignore("https://issues.apache.org/jira/browse/IGNITE-10738,https://issues.apache.org/jira/browse/IGNITE-7956")
     @Test
     public void testTouchOrderWithFairFifoEvictionMvccTxReplicated() throws Exception {
@@ -95,15 +79,6 @@
     }
 
     /**
-     * @throws Exception If failed.
-     */
-    @Ignore("https://issues.apache.org/jira/browse/IGNITE-7956,https://issues.apache.org/jira/browse/IGNITE-9530")
-    @Test
-    public void testTouchOrderWithFairFifoEvictionMvccTxLocal() throws Exception {
-        testTouchOrderWithFairFifoEviction(CacheAtomicityMode.TRANSACTIONAL_SNAPSHOT, CacheMode.LOCAL);
-    }
-
-    /**
      * @param atomicityMode Atomicity mode.
      * @param cacheMode Cache mode.
      * @throws Exception If failed.
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/expiry/IgniteCacheAtomicLocalExpiryPolicyTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/expiry/IgniteCacheAtomicLocalExpiryPolicyTest.java
deleted file mode 100644
index a12d508..0000000
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/expiry/IgniteCacheAtomicLocalExpiryPolicyTest.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache.expiry;
-
-import org.apache.ignite.cache.CacheAtomicityMode;
-import org.apache.ignite.cache.CacheMode;
-import org.apache.ignite.configuration.NearCacheConfiguration;
-import org.junit.Ignore;
-
-import static org.apache.ignite.cache.CacheAtomicityMode.ATOMIC;
-import static org.apache.ignite.cache.CacheMode.LOCAL;
-
-/**
- *
- */
-// Test have a special version for Binary Marshaller.
-@Ignore("https://issues.apache.org/jira/browse/IGNITE-9214")
-public class IgniteCacheAtomicLocalExpiryPolicyTest extends IgniteCacheExpiryPolicyAbstractTest {
-    /** {@inheritDoc} */
-    @Override protected int gridCount() {
-        return 1;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected CacheMode cacheMode() {
-        return LOCAL;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected CacheAtomicityMode atomicityMode() {
-        return ATOMIC;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected NearCacheConfiguration nearConfiguration() {
-        return null;
-    }
-}
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/expiry/IgniteCacheAtomicLocalOnheapExpiryPolicyTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/expiry/IgniteCacheAtomicLocalOnheapExpiryPolicyTest.java
deleted file mode 100644
index 90aca1c..0000000
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/expiry/IgniteCacheAtomicLocalOnheapExpiryPolicyTest.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package org.apache.ignite.internal.processors.cache.expiry;
-
-import org.junit.Ignore;
-
-/**
- *
- */
-@Ignore("https://issues.apache.org/jira/browse/IGNITE-9214")
-public class IgniteCacheAtomicLocalOnheapExpiryPolicyTest extends IgniteCacheAtomicLocalExpiryPolicyTest {
-    /** {@inheritDoc} */
-    @Override protected boolean onheapCacheEnabled() {
-        return true;
-    }
-}
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/expiry/IgniteCacheExpiryPolicyTestSuite.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/expiry/IgniteCacheExpiryPolicyTestSuite.java
index 4bf608c..4900dad 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/expiry/IgniteCacheExpiryPolicyTestSuite.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/expiry/IgniteCacheExpiryPolicyTestSuite.java
@@ -31,14 +31,11 @@
 @Suite.SuiteClasses({
     IgniteCacheLargeValueExpireTest.class,
 
-    IgniteCacheAtomicLocalExpiryPolicyTest.class,
-    IgniteCacheAtomicLocalOnheapExpiryPolicyTest.class,
     IgniteCacheAtomicExpiryPolicyTest.class,
     IgniteCacheAtomicOnheapExpiryPolicyTest.class,
     IgniteCacheAtomicWithStoreExpiryPolicyTest.class,
     IgniteCacheAtomicReplicatedExpiryPolicyTest.class,
 
-    IgniteCacheTxLocalExpiryPolicyTest.class,
     IgniteCacheTxExpiryPolicyTest.class,
     IgniteCacheTxWithStoreExpiryPolicyTest.class,
     IgniteCacheTxReplicatedExpiryPolicyTest.class,
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/expiry/IgniteCacheTxLocalExpiryPolicyTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/expiry/IgniteCacheTxLocalExpiryPolicyTest.java
deleted file mode 100644
index 7295493..0000000
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/expiry/IgniteCacheTxLocalExpiryPolicyTest.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache.expiry;
-
-import org.apache.ignite.cache.CacheAtomicityMode;
-import org.apache.ignite.cache.CacheMode;
-import org.apache.ignite.configuration.NearCacheConfiguration;
-
-import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL;
-import static org.apache.ignite.cache.CacheMode.LOCAL;
-
-/**
- *
- */
-public class IgniteCacheTxLocalExpiryPolicyTest extends IgniteCacheExpiryPolicyAbstractTest {
-    /** {@inheritDoc} */
-    @Override protected int gridCount() {
-        return 1;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected CacheMode cacheMode() {
-        return LOCAL;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected CacheAtomicityMode atomicityMode() {
-        return TRANSACTIONAL;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected NearCacheConfiguration nearConfiguration() {
-        return null;
-    }
-}
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/integration/IgniteCacheAtomicLocalLoadAllTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/integration/IgniteCacheAtomicLocalLoadAllTest.java
deleted file mode 100644
index e7d1d72..0000000
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/integration/IgniteCacheAtomicLocalLoadAllTest.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache.integration;
-
-import org.apache.ignite.cache.CacheAtomicityMode;
-import org.apache.ignite.cache.CacheMode;
-import org.apache.ignite.configuration.NearCacheConfiguration;
-
-import static org.apache.ignite.cache.CacheAtomicityMode.ATOMIC;
-import static org.apache.ignite.cache.CacheMode.LOCAL;
-
-/**
- *
- */
-public class IgniteCacheAtomicLocalLoadAllTest extends IgniteCacheLoadAllAbstractTest {
-    /** {@inheritDoc} */
-    @Override protected int gridCount() {
-        return 1;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected CacheMode cacheMode() {
-        return LOCAL;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected CacheAtomicityMode atomicityMode() {
-        return ATOMIC;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected NearCacheConfiguration nearConfiguration() {
-        return null;
-    }
-}
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/integration/IgniteCacheAtomicLocalNoLoadPreviousValueTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/integration/IgniteCacheAtomicLocalNoLoadPreviousValueTest.java
deleted file mode 100644
index 78597ce..0000000
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/integration/IgniteCacheAtomicLocalNoLoadPreviousValueTest.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache.integration;
-
-import org.apache.ignite.cache.CacheAtomicityMode;
-import org.apache.ignite.cache.CacheMode;
-import org.apache.ignite.configuration.NearCacheConfiguration;
-
-import static org.apache.ignite.cache.CacheAtomicityMode.ATOMIC;
-import static org.apache.ignite.cache.CacheMode.LOCAL;
-
-/**
- *
- */
-public class IgniteCacheAtomicLocalNoLoadPreviousValueTest extends IgniteCacheNoLoadPreviousValueAbstractTest {
-    /** {@inheritDoc} */
-    @Override protected int gridCount() {
-        return 1;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected CacheMode cacheMode() {
-        return LOCAL;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected CacheAtomicityMode atomicityMode() {
-        return ATOMIC;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected NearCacheConfiguration nearConfiguration() {
-        return null;
-    }
-}
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/integration/IgniteCacheAtomicLocalNoReadThroughTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/integration/IgniteCacheAtomicLocalNoReadThroughTest.java
deleted file mode 100644
index 843fe9f..0000000
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/integration/IgniteCacheAtomicLocalNoReadThroughTest.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache.integration;
-
-import org.apache.ignite.cache.CacheAtomicityMode;
-import org.apache.ignite.cache.CacheMode;
-import org.apache.ignite.configuration.NearCacheConfiguration;
-
-import static org.apache.ignite.cache.CacheAtomicityMode.ATOMIC;
-import static org.apache.ignite.cache.CacheMode.LOCAL;
-
-/**
- *
- */
-public class IgniteCacheAtomicLocalNoReadThroughTest extends IgniteCacheNoReadThroughAbstractTest {
-    /** {@inheritDoc} */
-    @Override protected int gridCount() {
-        return 1;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected CacheMode cacheMode() {
-        return LOCAL;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected CacheAtomicityMode atomicityMode() {
-        return ATOMIC;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected NearCacheConfiguration nearConfiguration() {
-        return null;
-    }
-}
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/integration/IgniteCacheAtomicLocalNoWriteThroughTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/integration/IgniteCacheAtomicLocalNoWriteThroughTest.java
deleted file mode 100644
index e6b31635..0000000
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/integration/IgniteCacheAtomicLocalNoWriteThroughTest.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache.integration;
-
-import org.apache.ignite.cache.CacheAtomicityMode;
-import org.apache.ignite.cache.CacheMode;
-import org.apache.ignite.configuration.NearCacheConfiguration;
-
-import static org.apache.ignite.cache.CacheAtomicityMode.ATOMIC;
-import static org.apache.ignite.cache.CacheMode.LOCAL;
-
-/**
- *
- */
-public class IgniteCacheAtomicLocalNoWriteThroughTest extends IgniteCacheNoWriteThroughAbstractTest {
-    /** {@inheritDoc} */
-    @Override protected int gridCount() {
-        return 1;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected CacheMode cacheMode() {
-        return LOCAL;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected CacheAtomicityMode atomicityMode() {
-        return ATOMIC;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected NearCacheConfiguration nearConfiguration() {
-        return null;
-    }
-}
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/integration/IgniteCacheTxLocalLoadAllTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/integration/IgniteCacheTxLocalLoadAllTest.java
deleted file mode 100644
index 07a109b..0000000
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/integration/IgniteCacheTxLocalLoadAllTest.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache.integration;
-
-import org.apache.ignite.cache.CacheAtomicityMode;
-import org.apache.ignite.cache.CacheMode;
-import org.apache.ignite.configuration.NearCacheConfiguration;
-import org.apache.ignite.testframework.MvccFeatureChecker;
-import org.junit.Before;
-
-import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL;
-import static org.apache.ignite.cache.CacheMode.LOCAL;
-
-/**
- *
- */
-public class IgniteCacheTxLocalLoadAllTest extends IgniteCacheLoadAllAbstractTest {
-    /** */
-    @Before
-    public void beforeIgniteCacheTxLocalLoadAllTest() {
-        MvccFeatureChecker.skipIfNotSupported(MvccFeatureChecker.Feature.LOCAL_CACHE);
-    }
-
-    /** {@inheritDoc} */
-    @Override protected int gridCount() {
-        return 1;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected CacheMode cacheMode() {
-        return LOCAL;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected CacheAtomicityMode atomicityMode() {
-        return TRANSACTIONAL;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected NearCacheConfiguration nearConfiguration() {
-        return null;
-    }
-}
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/integration/IgniteCacheTxLocalNoLoadPreviousValueTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/integration/IgniteCacheTxLocalNoLoadPreviousValueTest.java
deleted file mode 100644
index 24a1bf1..0000000
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/integration/IgniteCacheTxLocalNoLoadPreviousValueTest.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache.integration;
-
-import org.apache.ignite.cache.CacheAtomicityMode;
-import org.apache.ignite.cache.CacheMode;
-import org.apache.ignite.configuration.CacheConfiguration;
-import org.apache.ignite.configuration.NearCacheConfiguration;
-import org.apache.ignite.testframework.MvccFeatureChecker;
-import org.junit.Before;
-
-import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL;
-import static org.apache.ignite.cache.CacheMode.LOCAL;
-
-/**
- *
- */
-public class IgniteCacheTxLocalNoLoadPreviousValueTest extends IgniteCacheNoLoadPreviousValueAbstractTest {
-    /** */
-    @Before
-    public void beforeIgniteCacheTxLocalNoLoadPreviousValueTest() {
-        MvccFeatureChecker.skipIfNotSupported(MvccFeatureChecker.Feature.LOCAL_CACHE);
-    }
-
-    /** {@inheritDoc} */
-    @Override protected CacheConfiguration cacheConfiguration(String igniteInstanceName) throws Exception {
-        MvccFeatureChecker.skipIfNotSupported(MvccFeatureChecker.Feature.LOCAL_CACHE);
-
-        return super.cacheConfiguration(igniteInstanceName);
-    }
-
-    /** {@inheritDoc} */
-    @Override protected int gridCount() {
-        return 1;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected CacheMode cacheMode() {
-        return LOCAL;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected CacheAtomicityMode atomicityMode() {
-        return TRANSACTIONAL;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected NearCacheConfiguration nearConfiguration() {
-        return null;
-    }
-}
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/integration/IgniteCacheTxLocalNoReadThroughTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/integration/IgniteCacheTxLocalNoReadThroughTest.java
deleted file mode 100644
index a979443..0000000
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/integration/IgniteCacheTxLocalNoReadThroughTest.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache.integration;
-
-import org.apache.ignite.cache.CacheAtomicityMode;
-import org.apache.ignite.cache.CacheMode;
-import org.apache.ignite.configuration.CacheConfiguration;
-import org.apache.ignite.configuration.NearCacheConfiguration;
-import org.apache.ignite.testframework.MvccFeatureChecker;
-import org.junit.Before;
-
-import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL;
-import static org.apache.ignite.cache.CacheMode.LOCAL;
-
-/**
- *
- */
-public class IgniteCacheTxLocalNoReadThroughTest extends IgniteCacheNoReadThroughAbstractTest {
-    /** */
-    @Before
-    public void beforeIgniteCacheTxLocalNoReadThroughTest() {
-        MvccFeatureChecker.skipIfNotSupported(MvccFeatureChecker.Feature.LOCAL_CACHE);
-    }
-
-    /** {@inheritDoc} */
-    @Override protected CacheConfiguration cacheConfiguration(String igniteInstanceName) throws Exception {
-        MvccFeatureChecker.skipIfNotSupported(MvccFeatureChecker.Feature.LOCAL_CACHE);
-
-        return super.cacheConfiguration(igniteInstanceName);
-    }
-
-    /** {@inheritDoc} */
-    @Override protected int gridCount() {
-        return 1;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected CacheMode cacheMode() {
-        return LOCAL;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected CacheAtomicityMode atomicityMode() {
-        return TRANSACTIONAL;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected NearCacheConfiguration nearConfiguration() {
-        return null;
-    }
-}
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/integration/IgniteCacheTxLocalNoWriteThroughTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/integration/IgniteCacheTxLocalNoWriteThroughTest.java
deleted file mode 100644
index 0ed03c7..0000000
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/integration/IgniteCacheTxLocalNoWriteThroughTest.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache.integration;
-
-import org.apache.ignite.cache.CacheAtomicityMode;
-import org.apache.ignite.cache.CacheMode;
-import org.apache.ignite.configuration.CacheConfiguration;
-import org.apache.ignite.configuration.NearCacheConfiguration;
-import org.apache.ignite.testframework.MvccFeatureChecker;
-import org.junit.Before;
-
-import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL;
-import static org.apache.ignite.cache.CacheMode.LOCAL;
-
-/**
- *
- */
-public class IgniteCacheTxLocalNoWriteThroughTest extends IgniteCacheNoWriteThroughAbstractTest {
-    /** */
-    @Before
-    public void beforeIgniteCacheTxLocalNoWriteThroughTest() {
-        MvccFeatureChecker.skipIfNotSupported(MvccFeatureChecker.Feature.LOCAL_CACHE);
-    }
-
-    /** {@inheritDoc} */
-    @Override protected CacheConfiguration cacheConfiguration(String igniteInstanceName) throws Exception {
-        MvccFeatureChecker.skipIfNotSupported(MvccFeatureChecker.Feature.LOCAL_CACHE);
-
-        return super.cacheConfiguration(igniteInstanceName);
-    }
-
-    /** {@inheritDoc} */
-    @Override protected int gridCount() {
-        return 1;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected CacheMode cacheMode() {
-        return LOCAL;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected CacheAtomicityMode atomicityMode() {
-        return TRANSACTIONAL;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected NearCacheConfiguration nearConfiguration() {
-        return null;
-    }
-}
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
deleted file mode 100644
index e302973..0000000
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheAtomicLocalMetricsNoStoreSelfTest.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache.local;
-
-import org.apache.ignite.configuration.CacheConfiguration;
-
-/**
- * Local atomic cache metrics test.
- */
-public class GridCacheAtomicLocalMetricsNoStoreSelfTest extends GridCacheAtomicLocalMetricsSelfTest {
-    /** {@inheritDoc} */
-    @Override protected CacheConfiguration cacheConfiguration(String igniteInstanceName) throws Exception {
-        CacheConfiguration ccfg = super.cacheConfiguration(igniteInstanceName);
-
-        ccfg.setReadThrough(false);
-        ccfg.setWriteThrough(false);
-        ccfg.setCacheStoreFactory(null);
-
-        return ccfg;
-    }
-}
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheAtomicLocalMetricsSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheAtomicLocalMetricsSelfTest.java
deleted file mode 100644
index 8aac196..0000000
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheAtomicLocalMetricsSelfTest.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache.local;
-
-import org.apache.ignite.configuration.CacheConfiguration;
-import org.apache.ignite.internal.processors.cache.GridCacheAbstractMetricsSelfTest;
-
-import static org.apache.ignite.cache.CacheAtomicityMode.ATOMIC;
-import static org.apache.ignite.cache.CacheMode.LOCAL;
-
-/**
- * Local atomic cache metrics test.
- */
-public class GridCacheAtomicLocalMetricsSelfTest extends GridCacheAbstractMetricsSelfTest {
-    /** */
-    private static final int GRID_CNT = 1;
-
-    /** {@inheritDoc} */
-    @Override protected CacheConfiguration cacheConfiguration(String igniteInstanceName) throws Exception {
-        CacheConfiguration cfg = super.cacheConfiguration(igniteInstanceName);
-
-        cfg.setCacheMode(LOCAL);
-        cfg.setAtomicityMode(ATOMIC);
-
-        return cfg;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected int gridCount() {
-        return GRID_CNT;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected int expectedReadsPerPut(boolean isPrimary) {
-        return 1;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected int expectedMissesPerPut(boolean isPrimary) {
-        return 1;
-    }
-}
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheAtomicLocalTckMetricsSelfTestImpl.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheAtomicLocalTckMetricsSelfTestImpl.java
deleted file mode 100644
index c87957b..0000000
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheAtomicLocalTckMetricsSelfTestImpl.java
+++ /dev/null
@@ -1,188 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache.local;
-
-import javax.cache.processor.EntryProcessor;
-import javax.cache.processor.EntryProcessorException;
-import javax.cache.processor.MutableEntry;
-import org.apache.ignite.IgniteCache;
-import org.junit.Test;
-
-/**
- * Local atomic cache metrics test with tck specific.
- */
-public class GridCacheAtomicLocalTckMetricsSelfTestImpl extends GridCacheAtomicLocalMetricsSelfTest {
-    /**
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testEntryProcessorRemove() throws Exception {
-        IgniteCache<Integer, Integer> cache = grid(0).cache(DEFAULT_CACHE_NAME);
-
-        cache.put(1, 20);
-
-        int result = cache.invoke(1, new EntryProcessor<Integer, Integer, Integer>() {
-            @Override public Integer process(MutableEntry<Integer, Integer> entry, Object... arguments)
-                    throws EntryProcessorException {
-                Integer result = entry.getValue();
-
-                entry.remove();
-
-                return result;
-            }
-        });
-
-        assertEquals(1L, cache.localMetrics().getCachePuts());
-
-        assertEquals(20, result);
-        assertEquals(1L, cache.localMetrics().getCacheHits());
-        assertEquals(100.0f, cache.localMetrics().getCacheHitPercentage());
-        assertEquals(0L, cache.localMetrics().getCacheMisses());
-        assertEquals(0f, cache.localMetrics().getCacheMissPercentage());
-        assertEquals(1L, cache.localMetrics().getCachePuts());
-        assertEquals(1L, cache.localMetrics().getCacheRemovals());
-        assertEquals(0L, cache.localMetrics().getCacheEvictions());
-        assert cache.localMetrics().getAveragePutTime() >= 0;
-        assert cache.localMetrics().getAverageGetTime() >= 0;
-        assert cache.localMetrics().getAverageRemoveTime() >= 0;
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testCacheStatistics() throws Exception {
-        IgniteCache<Integer, Integer> cache = grid(0).cache(DEFAULT_CACHE_NAME);
-
-        cache.put(1, 10);
-
-        assertEquals(0, cache.localMetrics().getCacheRemovals());
-        assertEquals(1, cache.localMetrics().getCachePuts());
-
-        cache.remove(1);
-
-        assertEquals(0, cache.localMetrics().getCacheHits());
-        assertEquals(1, cache.localMetrics().getCacheRemovals());
-        assertEquals(1, cache.localMetrics().getCachePuts());
-
-        cache.remove(1);
-
-        assertEquals(0, cache.localMetrics().getCacheHits());
-        assertEquals(0, cache.localMetrics().getCacheMisses());
-        assertEquals(1, cache.localMetrics().getCacheRemovals());
-        assertEquals(1, cache.localMetrics().getCachePuts());
-
-        cache.put(1, 10);
-        assertTrue(cache.remove(1, 10));
-
-        assertEquals(1, cache.localMetrics().getCacheHits());
-        assertEquals(0, cache.localMetrics().getCacheMisses());
-        assertEquals(2, cache.localMetrics().getCacheRemovals());
-        assertEquals(2, cache.localMetrics().getCachePuts());
-
-        assertFalse(cache.remove(1, 10));
-
-        assertEquals(1, cache.localMetrics().getCacheHits());
-        assertEquals(1, cache.localMetrics().getCacheMisses());
-        assertEquals(2, cache.localMetrics().getCacheRemovals());
-        assertEquals(2, cache.localMetrics().getCachePuts());
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testConditionReplace() throws Exception {
-        IgniteCache<Integer, Integer> cache = grid(0).cache(DEFAULT_CACHE_NAME);
-
-        long hitCount = 0;
-        long missCount = 0;
-        long putCount = 0;
-
-        boolean result = cache.replace(1, 0, 10);
-
-        ++missCount;
-        assertFalse(result);
-
-        assertEquals(missCount, cache.localMetrics().getCacheMisses());
-        assertEquals(hitCount, cache.localMetrics().getCacheHits());
-        assertEquals(putCount, cache.localMetrics().getCachePuts());
-
-        assertNull(cache.localPeek(1));
-
-        cache.put(1, 10);
-        ++putCount;
-
-        assertEquals(missCount, cache.localMetrics().getCacheMisses());
-        assertEquals(hitCount, cache.localMetrics().getCacheHits());
-        assertEquals(putCount, cache.localMetrics().getCachePuts());
-
-        assertNotNull(cache.localPeek(1));
-
-        result = cache.replace(1, 10, 20);
-
-        assertTrue(result);
-        ++hitCount;
-        ++putCount;
-
-        assertEquals(missCount, cache.localMetrics().getCacheMisses());
-        assertEquals(hitCount, cache.localMetrics().getCacheHits());
-        assertEquals(putCount, cache.localMetrics().getCachePuts());
-
-        result = cache.replace(1, 40, 50);
-
-        assertFalse(result);
-        ++hitCount;
-
-        assertEquals(hitCount, cache.localMetrics().getCacheHits());
-        assertEquals(putCount, cache.localMetrics().getCachePuts());
-        assertEquals(missCount, cache.localMetrics().getCacheMisses());
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testPutIfAbsent() throws Exception {
-        IgniteCache<Integer, Integer> cache = grid(0).cache(DEFAULT_CACHE_NAME);
-
-        long hitCount = 0;
-        long missCount = 0;
-        long putCount = 0;
-
-        boolean result = cache.putIfAbsent(1, 1);
-
-        ++putCount;
-        ++missCount;
-
-        assertTrue(result);
-
-        assertEquals(missCount, cache.localMetrics().getCacheMisses());
-        assertEquals(hitCount, cache.localMetrics().getCacheHits());
-        assertEquals(putCount, cache.localMetrics().getCachePuts());
-
-        result = cache.putIfAbsent(1, 1);
-
-        ++hitCount;
-
-        assertFalse(result);
-        assertEquals(hitCount, cache.localMetrics().getCacheHits());
-        assertEquals(putCount, cache.localMetrics().getCachePuts());
-        assertEquals(missCount, cache.localMetrics().getCacheMisses());
-    }
-}
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheDaemonNodeLocalSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheDaemonNodeLocalSelfTest.java
deleted file mode 100644
index 84b0e11..0000000
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheDaemonNodeLocalSelfTest.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache.local;
-
-import org.apache.ignite.cache.CacheMode;
-import org.apache.ignite.internal.processors.cache.GridCacheDaemonNodeAbstractSelfTest;
-import org.apache.ignite.testframework.MvccFeatureChecker;
-
-import static org.apache.ignite.cache.CacheMode.LOCAL;
-
-/**
- * Tests local cache with daemon node.
- */
-public class GridCacheDaemonNodeLocalSelfTest extends GridCacheDaemonNodeAbstractSelfTest {
-    /** {@inheritDoc} */
-    @Override protected void beforeTest() throws Exception {
-        MvccFeatureChecker.skipIfNotSupported(MvccFeatureChecker.Feature.LOCAL_CACHE);
-
-        super.beforeTest();
-    }
-
-    /** {@inheritDoc} */
-    @Override protected CacheMode cacheMode() {
-        return LOCAL;
-    }
-}
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheLocalAtomicBasicStoreSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheLocalAtomicBasicStoreSelfTest.java
deleted file mode 100644
index bc63a25..0000000
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheLocalAtomicBasicStoreSelfTest.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache.local;
-
-import org.apache.ignite.cache.CacheAtomicityMode;
-
-import static org.apache.ignite.cache.CacheAtomicityMode.ATOMIC;
-
-/**
- * Test store with local cache in atomic mode.
- */
-public class GridCacheLocalAtomicBasicStoreSelfTest extends GridCacheLocalBasicStoreSelfTest {
-    /** {@inheritDoc} */
-    @Override protected CacheAtomicityMode atomicityMode() {
-        return ATOMIC;
-    }
-}
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheLocalAtomicFullApiSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheLocalAtomicFullApiSelfTest.java
deleted file mode 100644
index cf6af69..0000000
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheLocalAtomicFullApiSelfTest.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache.local;
-
-import org.apache.ignite.cache.CacheAtomicityMode;
-
-import static org.apache.ignite.cache.CacheAtomicityMode.ATOMIC;
-
-/**
- * Tests for local atomic cache.
- */
-public class GridCacheLocalAtomicFullApiSelfTest extends GridCacheLocalFullApiSelfTest {
-    /** {@inheritDoc} */
-    @Override protected CacheAtomicityMode atomicityMode() {
-        return ATOMIC;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected boolean txEnabled() {
-        return false;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected boolean lockingEnabled() {
-        return false;
-    }
-}
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheLocalAtomicGetAndTransformStoreSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheLocalAtomicGetAndTransformStoreSelfTest.java
deleted file mode 100644
index e516589..0000000
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheLocalAtomicGetAndTransformStoreSelfTest.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache.local;
-
-import org.apache.ignite.cache.CacheAtomicityMode;
-
-import static org.apache.ignite.cache.CacheAtomicityMode.ATOMIC;
-
-/**
- * Test get and transform fro store with local cache in atomic mode.
- */
-public class GridCacheLocalAtomicGetAndTransformStoreSelfTest
-    extends GridCacheLocalGetAndTransformStoreSelfTest {
-    /** {@inheritDoc} */
-    @Override protected CacheAtomicityMode atomicityMode() {
-        return ATOMIC;
-    }
-}
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheLocalAtomicMetricsNoReadThroughSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheLocalAtomicMetricsNoReadThroughSelfTest.java
deleted file mode 100644
index 76f0842..0000000
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheLocalAtomicMetricsNoReadThroughSelfTest.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache.local;
-
-import org.apache.ignite.cache.CacheAtomicityMode;
-import org.apache.ignite.configuration.CacheConfiguration;
-import org.apache.ignite.internal.processors.cache.GridCacheAbstractMetricsSelfTest;
-
-import static org.apache.ignite.cache.CacheMode.LOCAL;
-
-/**
- * Local cache metrics test in ATOMIC mode without readthrough.
- */
-public class GridCacheLocalAtomicMetricsNoReadThroughSelfTest extends GridCacheAbstractMetricsSelfTest {
-    /** */
-    private static final int GRID_CNT = 1;
-
-    /** {@inheritDoc} */
-    @Override protected CacheConfiguration cacheConfiguration(String igniteInstanceName) throws Exception {
-        CacheConfiguration cfg = super.cacheConfiguration(igniteInstanceName);
-
-        cfg.setAtomicityMode(CacheAtomicityMode.ATOMIC);
-        cfg.setCacheMode(LOCAL);
-        cfg.setReadThrough(false);
-
-        return cfg;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected int gridCount() {
-        return GRID_CNT;
-    }
-}
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheLocalAtomicWithGroupFullApiSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheLocalAtomicWithGroupFullApiSelfTest.java
deleted file mode 100644
index 46fd3a8..0000000
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheLocalAtomicWithGroupFullApiSelfTest.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache.local;
-
-import org.apache.ignite.configuration.CacheConfiguration;
-
-/**
- *
- */
-public class GridCacheLocalAtomicWithGroupFullApiSelfTest extends GridCacheLocalAtomicFullApiSelfTest {
-    /** {@inheritDoc} */
-    @Override protected CacheConfiguration cacheConfiguration(String igniteInstanceName) throws Exception {
-        CacheConfiguration ccfg = super.cacheConfiguration(igniteInstanceName);
-
-        ccfg.setGroupName("group1");
-
-        return ccfg;
-    }
-}
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheLocalBasicApiSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheLocalBasicApiSelfTest.java
deleted file mode 100644
index a02d35e..0000000
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheLocalBasicApiSelfTest.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache.local;
-
-import org.apache.ignite.configuration.CacheConfiguration;
-import org.apache.ignite.configuration.IgniteConfiguration;
-import org.apache.ignite.internal.processors.cache.GridCacheBasicApiAbstractTest;
-import org.apache.ignite.testframework.MvccFeatureChecker;
-import org.junit.Before;
-
-import static org.apache.ignite.cache.CacheMode.LOCAL;
-
-/**
- * Basic API tests.
- */
-public class GridCacheLocalBasicApiSelfTest extends GridCacheBasicApiAbstractTest {
-    /** */
-    @Before
-    public void beforeGridCacheLocalBasicApiSelfTest() {
-        MvccFeatureChecker.skipIfNotSupported(MvccFeatureChecker.Feature.LOCAL_CACHE);
-    }
-
-    /** {@inheritDoc} */
-    @Override protected IgniteConfiguration getConfiguration(String igniteInstanceName) throws Exception {
-        MvccFeatureChecker.skipIfNotSupported(MvccFeatureChecker.Feature.LOCAL_CACHE);
-
-        IgniteConfiguration cfg = super.getConfiguration(igniteInstanceName);
-
-        CacheConfiguration cacheCfg = defaultCacheConfiguration();
-
-        cacheCfg.setCacheMode(LOCAL);
-
-        cfg.setCacheConfiguration(cacheCfg);
-
-        return cfg;
-    }
-}
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheLocalBasicStoreMultithreadedSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheLocalBasicStoreMultithreadedSelfTest.java
deleted file mode 100644
index 4497c3e..0000000
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheLocalBasicStoreMultithreadedSelfTest.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache.local;
-
-import org.apache.ignite.cache.CacheMode;
-import org.apache.ignite.internal.processors.cache.GridCacheBasicStoreMultithreadedAbstractTest;
-
-/**
- * Local test.
- */
-public class GridCacheLocalBasicStoreMultithreadedSelfTest extends GridCacheBasicStoreMultithreadedAbstractTest {
-    /** {@inheritDoc} */
-    @Override protected CacheMode cacheMode() {
-        return CacheMode.LOCAL;
-    }
-}
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheLocalBasicStoreSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheLocalBasicStoreSelfTest.java
deleted file mode 100644
index e7156ac..0000000
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheLocalBasicStoreSelfTest.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache.local;
-
-import org.apache.ignite.cache.CacheMode;
-import org.apache.ignite.configuration.IgniteConfiguration;
-import org.apache.ignite.internal.processors.cache.GridCacheBasicStoreAbstractTest;
-import org.apache.ignite.testframework.MvccFeatureChecker;
-import org.junit.Before;
-
-import static org.apache.ignite.cache.CacheMode.LOCAL;
-
-/**
- * Test store with local cache.
- */
-public class GridCacheLocalBasicStoreSelfTest extends GridCacheBasicStoreAbstractTest {
-    /** */
-    @Before
-    public void beforeGridCacheLocalBasicStoreSelfTest() {
-        MvccFeatureChecker.skipIfNotSupported(MvccFeatureChecker.Feature.LOCAL_CACHE);
-    }
-
-    /** {@inheritDoc} */
-    @Override protected IgniteConfiguration getConfiguration(String igniteInstanceName) throws Exception {
-        MvccFeatureChecker.skipIfNotSupported(MvccFeatureChecker.Feature.LOCAL_CACHE);
-
-        return super.getConfiguration(igniteInstanceName);
-    }
-
-    /** {@inheritDoc} */
-    @Override protected CacheMode cacheMode() {
-        return LOCAL;
-    }
-}
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheLocalByteArrayValuesSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheLocalByteArrayValuesSelfTest.java
deleted file mode 100644
index f0ba8fa..0000000
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheLocalByteArrayValuesSelfTest.java
+++ /dev/null
@@ -1,214 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache.local;
-
-import java.util.Arrays;
-import java.util.Collections;
-import org.apache.ignite.Ignite;
-import org.apache.ignite.IgniteCache;
-import org.apache.ignite.cache.CachePeekMode;
-import org.apache.ignite.configuration.CacheConfiguration;
-import org.apache.ignite.configuration.IgniteConfiguration;
-import org.apache.ignite.internal.processors.cache.GridCacheAbstractByteArrayValuesSelfTest;
-import org.apache.ignite.internal.util.typedef.F;
-import org.apache.ignite.testframework.MvccFeatureChecker;
-import org.apache.ignite.transactions.Transaction;
-import org.apache.ignite.transactions.TransactionConcurrency;
-import org.jetbrains.annotations.Nullable;
-import org.junit.Before;
-import org.junit.Test;
-
-import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL;
-import static org.apache.ignite.cache.CacheMode.LOCAL;
-import static org.apache.ignite.cache.CacheWriteSynchronizationMode.FULL_SYNC;
-import static org.apache.ignite.transactions.TransactionConcurrency.OPTIMISTIC;
-import static org.apache.ignite.transactions.TransactionConcurrency.PESSIMISTIC;
-import static org.apache.ignite.transactions.TransactionIsolation.REPEATABLE_READ;
-
-/**
- * Byte values test for LOCAL cache.
- */
-public class GridCacheLocalByteArrayValuesSelfTest extends GridCacheAbstractByteArrayValuesSelfTest {
-    /** Grid. */
-    private static Ignite ignite;
-
-    /** Regular cache. */
-    private static IgniteCache<Integer, Object> cache;
-
-    /** {@inheritDoc} */
-    @Override protected IgniteConfiguration getConfiguration(String igniteInstanceName) throws Exception {
-        MvccFeatureChecker.skipIfNotSupported(MvccFeatureChecker.Feature.LOCAL_CACHE);
-
-        IgniteConfiguration c = super.getConfiguration(igniteInstanceName);
-
-        c.getTransactionConfiguration().setTxSerializableEnabled(true);
-
-        CacheConfiguration ccfg = new CacheConfiguration(DEFAULT_CACHE_NAME);
-
-        ccfg.setAtomicityMode(TRANSACTIONAL);
-        ccfg.setCacheMode(LOCAL);
-        ccfg.setWriteSynchronizationMode(FULL_SYNC);
-
-        c.setCacheConfiguration(ccfg);
-
-        return c;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected void beforeTestsStarted() throws Exception {
-        ignite = startGrid(1);
-
-        cache = ignite.cache(DEFAULT_CACHE_NAME);
-    }
-    /** */
-
-    @Before
-    public void beforeGridCacheLocalByteArrayValuesSelfTest() {
-        MvccFeatureChecker.skipIfNotSupported(MvccFeatureChecker.Feature.LOCAL_CACHE);
-    }
-
-    /** {@inheritDoc} */
-    @Override protected void afterTestsStopped() throws Exception {
-        cache = null;
-        ignite = null;
-    }
-
-    /**
-     * Check whether cache with byte array entry works correctly in PESSIMISTIC transaction.
-     *
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testPessimistic() throws Exception {
-        testTransaction(cache, PESSIMISTIC, KEY_1, wrap(1));
-    }
-
-    /**
-     * Check whether cache with byte array entry works correctly in PESSIMISTIC transaction.
-     *
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testPessimisticMixed() throws Exception {
-        testTransactionMixed(cache, PESSIMISTIC, KEY_1, wrap(1), KEY_2, 1);
-    }
-
-    /**
-     * Check whether cache with byte array entry works correctly in OPTIMISTIC transaction.
-     *
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testOptimistic() throws Exception {
-        testTransaction(cache, OPTIMISTIC, KEY_1, wrap(1));
-    }
-
-    /**
-     * Check whether cache with byte array entry works correctly in OPTIMISTIC transaction.
-     *
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testOptimisticMixed() throws Exception {
-        testTransactionMixed(cache, OPTIMISTIC, KEY_1, wrap(1), KEY_2, 1);
-    }
-
-    /**
-     * Test byte array entry swapping.
-     *
-     * @throws Exception If failed.
-     */
-    @SuppressWarnings("TooBroadScope")
-    @Test
-    public void testSwap() throws Exception {
-        // TODO GG-11148.
-        // assert cache.getConfiguration(CacheConfiguration.class).isSwapEnabled();
-
-        byte[] val1 = wrap(1);
-        Object val2 = 2;
-
-        cache.put(KEY_1, val1);
-        cache.put(KEY_2, val2);
-
-        assert Arrays.equals(val1, (byte[])cache.get(KEY_1));
-        assert F.eq(val2, cache.get(KEY_2));
-
-        cache.localEvict(Collections.singleton(KEY_1));
-        cache.localEvict(Collections.singleton(KEY_2));
-
-        assert cache.localPeek(KEY_1, CachePeekMode.ONHEAP) == null;
-        assert cache.localPeek(KEY_2, CachePeekMode.ONHEAP) == null;
-    }
-
-    /**
-     * Test transaction behavior.
-     *
-     * @param cache Cache.
-     * @param concurrency Concurrency.
-     * @param key Key.
-     * @param val Value.
-     * @throws Exception If failed.
-     */
-    private void testTransaction(IgniteCache<Integer, Object> cache, TransactionConcurrency concurrency,
-        Integer key, byte[] val) throws Exception {
-        testTransactionMixed(cache, concurrency, key, val, null, null);
-    }
-
-    /**
-     * Test transaction behavior.
-     *
-     * @param cache Cache.
-     * @param concurrency Concurrency.
-     * @param key1 Key 1.
-     * @param val1 Value 1.
-     * @param key2 Key 2.
-     * @param val2 Value 2.
-     * @throws Exception If failed.
-     */
-    private void testTransactionMixed(IgniteCache<Integer, Object> cache, TransactionConcurrency concurrency,
-        Integer key1, byte[] val1, @Nullable Integer key2, @Nullable Object val2) throws Exception {
-
-        Transaction tx = ignite.transactions().txStart(concurrency, REPEATABLE_READ);
-
-        try {
-            cache.put(key1, val1);
-
-            if (key2 != null)
-                cache.put(key2, val2);
-
-            tx.commit();
-        }
-        finally {
-            tx.close();
-        }
-
-        tx = ignite.transactions().txStart(concurrency, REPEATABLE_READ);
-
-        try {
-            assert Arrays.equals(val1, (byte[])cache.get(key1));
-
-            if (key2 != null)
-                assert F.eq(val2, cache.get(key2));
-
-            tx.commit();
-        }
-        finally {
-            tx.close();
-        }
-    }
-}
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheLocalEventSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheLocalEventSelfTest.java
deleted file mode 100644
index 3680833..0000000
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheLocalEventSelfTest.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache.local;
-
-import org.apache.ignite.cache.CacheMode;
-import org.apache.ignite.configuration.CacheConfiguration;
-import org.apache.ignite.internal.processors.cache.distributed.GridCacheEventAbstractTest;
-import org.apache.ignite.testframework.MvccFeatureChecker;
-import org.junit.Before;
-
-import static org.apache.ignite.cache.CacheMode.LOCAL;
-
-/**
- * Tests events.
- */
-public class GridCacheLocalEventSelfTest extends GridCacheEventAbstractTest {
-    /** */
-    @Before
-    public void beforeGridCacheLocalEventSelfTest() {
-        MvccFeatureChecker.skipIfNotSupported(MvccFeatureChecker.Feature.LOCAL_CACHE);
-        MvccFeatureChecker.skipIfNotSupported(MvccFeatureChecker.Feature.CACHE_EVENTS);
-    }
-
-    /** {@inheritDoc} */
-    @Override protected CacheConfiguration cacheConfiguration(String igniteInstanceName) throws Exception {
-        MvccFeatureChecker.skipIfNotSupported(MvccFeatureChecker.Feature.LOCAL_CACHE);
-        MvccFeatureChecker.skipIfNotSupported(MvccFeatureChecker.Feature.CACHE_EVENTS);
-
-        return super.cacheConfiguration(igniteInstanceName);
-    }
-
-    /** {@inheritDoc} */
-    @Override protected CacheMode cacheMode() {
-        return LOCAL;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected int gridCount() {
-        return 1;
-    }
-}
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheLocalEvictionEventSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheLocalEvictionEventSelfTest.java
deleted file mode 100644
index 6c1a30c..0000000
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheLocalEvictionEventSelfTest.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache.local;
-
-import org.apache.ignite.cache.CacheAtomicityMode;
-import org.apache.ignite.cache.CacheMode;
-import org.apache.ignite.configuration.IgniteConfiguration;
-import org.apache.ignite.internal.processors.cache.GridCacheEvictionEventAbstractTest;
-import org.apache.ignite.testframework.MvccFeatureChecker;
-import org.junit.Before;
-
-import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL;
-
-/**
- * Tests local cache eviction event.
- */
-public class GridCacheLocalEvictionEventSelfTest extends GridCacheEvictionEventAbstractTest {
-    /** */
-    @Before
-    public void beforeGridCacheLocalEvictionEventSelfTest() {
-        MvccFeatureChecker.skipIfNotSupported(MvccFeatureChecker.Feature.LOCAL_CACHE);
-    }
-
-    /** {@inheritDoc} */
-    @Override protected IgniteConfiguration getConfiguration() throws Exception {
-        MvccFeatureChecker.skipIfNotSupported(MvccFeatureChecker.Feature.LOCAL_CACHE);
-
-        return super.getConfiguration();
-    }
-
-    /** {@inheritDoc} */
-    @Override protected CacheMode cacheMode() {
-        return CacheMode.LOCAL;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected CacheAtomicityMode atomicityMode() {
-        return TRANSACTIONAL;
-    }
-}
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheLocalFullApiMultithreadedSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheLocalFullApiMultithreadedSelfTest.java
deleted file mode 100644
index 29ddaf0..0000000
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheLocalFullApiMultithreadedSelfTest.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache.local;
-
-import org.apache.ignite.cache.CacheMode;
-import org.apache.ignite.internal.processors.cache.GridCacheAbstractFullApiMultithreadedSelfTest;
-
-import static org.apache.ignite.cache.CacheMode.LOCAL;
-
-/**
- * Multithreaded local cache API tests.
- */
-public class GridCacheLocalFullApiMultithreadedSelfTest extends GridCacheAbstractFullApiMultithreadedSelfTest {
-    /** {@inheritDoc} */
-    @Override protected int gridCount() {
-        return 1;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected CacheMode cacheMode() {
-        return LOCAL;
-    }
-}
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheLocalFullApiSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheLocalFullApiSelfTest.java
deleted file mode 100644
index 788e65c..0000000
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheLocalFullApiSelfTest.java
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache.local;
-
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.Map;
-import org.apache.ignite.IgniteCache;
-import org.apache.ignite.cache.CacheMode;
-import org.apache.ignite.cluster.ClusterNode;
-import org.apache.ignite.configuration.IgniteConfiguration;
-import org.apache.ignite.internal.processors.cache.GridCacheAbstractFullApiSelfTest;
-import org.apache.ignite.internal.util.typedef.F;
-import org.junit.Test;
-
-import static org.apache.ignite.cache.CacheMode.LOCAL;
-
-/**
- * Tests for local cache.
- */
-public class GridCacheLocalFullApiSelfTest extends GridCacheAbstractFullApiSelfTest {
-    /** {@inheritDoc} */
-    @Override protected CacheMode cacheMode() {
-        return LOCAL;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected IgniteConfiguration getConfiguration(String igniteInstanceName) throws Exception {
-        IgniteConfiguration c = super.getConfiguration(igniteInstanceName);
-
-        c.getTransactionConfiguration().setTxSerializableEnabled(true);
-
-        return c;
-    }
-
-    /**
-     * @throws Exception In case of error.
-     */
-    @Test
-    public void testMapKeysToNodes() throws Exception {
-        IgniteCache<String, Integer> cache = jcache();
-
-        cache.put("key1", 1);
-        cache.put("key2", 2);
-
-        Map<ClusterNode, Collection<String>> map = grid(0).<String>affinity(DEFAULT_CACHE_NAME).mapKeysToNodes(F.asList("key1", "key2"));
-
-        assert map.size() == 1;
-
-        Collection<String> keys = map.get(dfltIgnite.cluster().localNode());
-
-        assert keys != null;
-        assert keys.size() == 2;
-
-        for (String key : keys)
-            assert "key1".equals(key) || "key2".equals(key);
-
-        map = grid(0).<String>affinity(DEFAULT_CACHE_NAME).mapKeysToNodes(F.asList("key1", "key2"));
-
-        assert map.size() == 1;
-
-        keys = map.get(dfltIgnite.cluster().localNode());
-
-        assert keys != null;
-        assert keys.size() == 2;
-
-        for (String key : keys)
-            assert "key1".equals(key) || "key2".equals(key);
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testLocalClearAsync() throws Exception {
-        localCacheClear(true);
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testLocalClear() throws Exception {
-        localCacheClear(false);
-    }
-
-    /**
-     * @param async If {@code true} uses async method.
-     * @throws Exception If failed.
-     */
-    private void localCacheClear(boolean async) throws Exception {
-        // In addition to the existing tests, it confirms the data is cleared only on one node,
-        // not on all nodes that have local caches with same names.
-        try {
-            startGrid(1);
-
-            IgniteCache<String, Integer> cache = jcache();
-
-            for (int i = 0; i < 5; i++) {
-                cache.put(String.valueOf(i), i);
-                jcache(1).put(String.valueOf(i), i);
-            }
-
-            if (async)
-                cache.clearAsync("4").get();
-            else
-                cache.clear("4");
-
-            assertNull(peek(cache, "4"));
-            assertNotNull(peek(jcache(1), "4"));
-
-            if (async)
-                cache.clearAllAsync(new HashSet<>(Arrays.asList("2", "3"))).get();
-            else
-                cache.clearAll(new HashSet<>(Arrays.asList("2", "3")));
-
-            for (int i = 2; i < 4; i++) {
-                assertNull(peek(cache, String.valueOf(i)));
-                assertNotNull(peek(jcache(1), String.valueOf(i)));
-            }
-
-            if (async)
-                cache.clearAsync().get();
-            else
-                cache.clear();
-
-            for (int i = 0; i < 2; i++) {
-                assertNull(peek(cache, String.valueOf(i)));
-                assertNotNull(peek(jcache(1), String.valueOf(i)));
-            }
-
-            if (async)
-                jcache(1).clearAsync().get();
-            else
-                jcache(1).clear();
-
-            for (int i = 0; i < 2; i++)
-                assert jcache(i).localSize() == 0;
-        }
-        finally {
-            stopGrid(1);
-        }
-    }
-}
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheLocalGetAndTransformStoreSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheLocalGetAndTransformStoreSelfTest.java
deleted file mode 100644
index 1d56ddc..0000000
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheLocalGetAndTransformStoreSelfTest.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache.local;
-
-import org.apache.ignite.cache.CacheMode;
-import org.apache.ignite.configuration.IgniteConfiguration;
-import org.apache.ignite.internal.processors.cache.GridCacheGetAndTransformStoreAbstractTest;
-import org.apache.ignite.testframework.MvccFeatureChecker;
-import org.junit.Before;
-
-import static org.apache.ignite.cache.CacheMode.LOCAL;
-
-/**
- * Test get and transform for store with local cache.
- */
-public class GridCacheLocalGetAndTransformStoreSelfTest extends GridCacheGetAndTransformStoreAbstractTest {
-    /** */
-    @Before
-    public void beforeGridCacheLocalGetAndTransformStoreSelfTest() {
-        MvccFeatureChecker.skipIfNotSupported(MvccFeatureChecker.Feature.LOCAL_CACHE);
-    }
-
-    /** {@inheritDoc} */
-    @Override protected IgniteConfiguration getConfiguration(String igniteInstanceName) throws Exception {
-        MvccFeatureChecker.skipIfNotSupported(MvccFeatureChecker.Feature.LOCAL_CACHE);
-
-        return super.getConfiguration(igniteInstanceName);
-    }
-
-    /** {@inheritDoc} */
-    @Override protected CacheMode cacheMode() {
-        return LOCAL;
-    }
-}
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheLocalIsolatedNodesSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheLocalIsolatedNodesSelfTest.java
deleted file mode 100644
index a58ff85..0000000
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheLocalIsolatedNodesSelfTest.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache.local;
-
-import java.util.UUID;
-import org.apache.ignite.Ignite;
-import org.apache.ignite.IgniteCache;
-import org.apache.ignite.cluster.ClusterNode;
-import org.apache.ignite.configuration.CacheConfiguration;
-import org.apache.ignite.lang.IgnitePredicate;
-import org.apache.ignite.testframework.MvccFeatureChecker;
-import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
-import org.junit.Test;
-
-import static org.apache.ignite.cache.CacheMode.LOCAL;
-
-/**
- * Isolated nodes LOCAL cache self test.
- */
-public class GridCacheLocalIsolatedNodesSelfTest extends GridCommonAbstractTest {
-    /**
-     *
-     */
-    public GridCacheLocalIsolatedNodesSelfTest() {
-        super(false);
-    }
-
-    /** {@inheritDoc} */
-    @Override protected void beforeTest() throws Exception {
-        MvccFeatureChecker.skipIfNotSupported(MvccFeatureChecker.Feature.LOCAL_CACHE);
-
-        startGrids(3);
-    }
-
-    /** {@inheritDoc} */
-    @Override protected void afterTest() throws Exception {
-        stopAllGrids();
-    }
-
-    /**
-     *
-     * @throws Exception If test failed.
-     */
-    @Test
-    public void testIsolatedNodes() throws Exception {
-        Ignite g1 = grid(0);
-        UUID nid1 = g1.cluster().localNode().id();
-
-        Ignite g2 = grid(1);
-        UUID nid2 = g2.cluster().localNode().id();
-
-        Ignite g3 = grid(2);
-        UUID nid3 = g3.cluster().localNode().id();
-
-        assert !nid1.equals(nid2);
-        assert !nid1.equals(nid3);
-
-        // Local cache on first node only.
-        CacheConfiguration<String, String> ccfg1 = new CacheConfiguration<>("A1");
-        ccfg1.setCacheMode(LOCAL);
-        ccfg1.setNodeFilter(new NodeIdFilter(nid1));
-
-        IgniteCache<String, String> c1 = g1.createCache(ccfg1);
-        c1.put("g1", "c1");
-
-        // Local cache on second node only.
-        CacheConfiguration<String, String> ccfg2 = new CacheConfiguration<>("A2");
-        ccfg2.setCacheMode(LOCAL);
-        ccfg2.setNodeFilter(new NodeIdFilter(nid2));
-
-        IgniteCache<String, String> c2 = g2.createCache(ccfg2);
-        c2.put("g2", "c2");
-
-        // Local cache on third node only.
-        CacheConfiguration<String, String> ccfg3 = new CacheConfiguration<>("A3");
-        ccfg3.setCacheMode(LOCAL);
-        ccfg3.setNodeFilter(new NodeIdFilter(nid3));
-
-        IgniteCache<String, String> c3 = g3.createCache(ccfg3);
-        c3.put("g3", "c3");
-
-        assertNull(c1.get("g2"));
-        assertNull(c1.get("g3"));
-        assertNull(c2.get("g1"));
-        assertNull(c2.get("g3"));
-        assertNull(c3.get("g1"));
-        assertNull(c3.get("g2"));
-    }
-
-    /** Filter by node ID. */
-    private static class NodeIdFilter implements IgnitePredicate<ClusterNode> {
-        /** */
-        private final UUID nid;
-
-        /**
-         * @param nid Node ID where cache should be started.
-         */
-        NodeIdFilter(UUID nid) {
-            this.nid = nid;
-        }
-
-        /** {@inheritDoc} */
-        @Override public boolean apply(ClusterNode n) {
-            return n.id().equals(nid);
-        }
-    }
-
-}
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheLocalIteratorsSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheLocalIteratorsSelfTest.java
deleted file mode 100644
index c736a07..0000000
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheLocalIteratorsSelfTest.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache.local;
-
-import org.apache.ignite.cache.CacheMode;
-import org.apache.ignite.internal.processors.cache.GridCacheAbstractIteratorsSelfTest;
-import org.apache.ignite.testframework.MvccFeatureChecker;
-
-import static org.apache.ignite.cache.CacheMode.LOCAL;
-
-/**
- * Tests for local cache iterators.
- */
-public class GridCacheLocalIteratorsSelfTest extends GridCacheAbstractIteratorsSelfTest {
-    /** {@inheritDoc} */
-    @Override protected int gridCount() {
-        return 1;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected CacheMode cacheMode() {
-        return LOCAL;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected int entryCount() {
-        return 1000;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected void beforeTestsStarted() throws Exception {
-        MvccFeatureChecker.skipIfNotSupported(MvccFeatureChecker.Feature.LOCAL_CACHE);
-
-        super.beforeTestsStarted();
-    }
-}
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheLocalLoadAllSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheLocalLoadAllSelfTest.java
deleted file mode 100644
index cf5948f..0000000
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheLocalLoadAllSelfTest.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache.local;
-
-import java.util.Collections;
-import java.util.Map;
-import javax.cache.Cache;
-import org.apache.ignite.Ignite;
-import org.apache.ignite.cache.store.CacheStoreAdapter;
-import org.apache.ignite.configuration.CacheConfiguration;
-import org.apache.ignite.configuration.IgniteConfiguration;
-import org.apache.ignite.internal.util.typedef.F;
-import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;
-import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder;
-import org.apache.ignite.testframework.MvccFeatureChecker;
-import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
-import org.junit.Before;
-import org.junit.Test;
-
-import static org.apache.ignite.cache.CacheMode.LOCAL;
-
-/**
- * Load-All self test.
- */
-public class GridCacheLocalLoadAllSelfTest extends GridCommonAbstractTest {
-    /** */
-    @Before
-    public void beforeGridCacheLocalLoadAllSelfTest() {
-        MvccFeatureChecker.skipIfNotSupported(MvccFeatureChecker.Feature.LOCAL_CACHE);
-    }
-
-    /**
-     *
-     */
-    public GridCacheLocalLoadAllSelfTest() {
-        super(true);
-    }
-
-    /**
-     *
-     * @throws Exception If test failed.
-     */
-    @Test
-    public void testCacheGetAll() throws Exception {
-        Ignite ignite = grid();
-
-        assert ignite != null;
-
-        ignite.cache("test-cache").getAll(Collections.singleton(1));
-    }
-
-    /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
-    @Override protected IgniteConfiguration getConfiguration(String igniteInstanceName) throws Exception {
-        MvccFeatureChecker.skipIfNotSupported(MvccFeatureChecker.Feature.LOCAL_CACHE);
-
-        IgniteConfiguration cfg = super.getConfiguration(igniteInstanceName);
-
-        TcpDiscoverySpi disco = new TcpDiscoverySpi();
-
-        disco.setIpFinder(new TcpDiscoveryVmIpFinder(true));
-
-        cfg.setDiscoverySpi(disco);
-
-        CacheConfiguration ccfg = defaultCacheConfiguration();
-
-        ccfg.setName("test-cache");
-        ccfg.setCacheMode(LOCAL);
-        ccfg.setCacheStoreFactory(singletonFactory(new TestStore()));
-        ccfg.setReadThrough(true);
-        ccfg.setWriteThrough(true);
-        ccfg.setLoadPreviousValue(true);
-
-        cfg.setCacheConfiguration(ccfg);
-
-        return cfg;
-    }
-
-    /**
-     *
-     */
-    private static class TestStore extends CacheStoreAdapter<Integer, Integer> {
-        /** {@inheritDoc} */
-        @Override public Map<Integer, Integer> loadAll(Iterable<? extends Integer> keys) {
-            assert keys != null;
-
-            return F.asMap(1, 1, 2, 2, 3, 3);
-        }
-
-        /** {@inheritDoc} */
-        @Override public Integer load(Integer key) {
-            // No-op.
-
-            return null;
-        }
-
-        /** {@inheritDoc} */
-        @Override public void write(Cache.Entry<? extends Integer, ? extends Integer> e) {
-            // No-op.
-        }
-
-        /** {@inheritDoc} */
-        @Override public void delete(Object key) {
-            // No-op.
-        }
-    }
-}
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheLocalLockSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheLocalLockSelfTest.java
deleted file mode 100644
index 412d42f..0000000
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheLocalLockSelfTest.java
+++ /dev/null
@@ -1,335 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache.local;
-
-import java.util.concurrent.Callable;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.locks.Lock;
-import org.apache.ignite.Ignite;
-import org.apache.ignite.IgniteCache;
-import org.apache.ignite.IgniteCheckedException;
-import org.apache.ignite.configuration.CacheConfiguration;
-import org.apache.ignite.configuration.IgniteConfiguration;
-import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;
-import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder;
-import org.apache.ignite.testframework.GridTestThread;
-import org.apache.ignite.testframework.MvccFeatureChecker;
-import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
-import org.jetbrains.annotations.Nullable;
-import org.junit.Before;
-import org.junit.Test;
-
-import static org.apache.ignite.cache.CacheMode.LOCAL;
-
-/**
- * Test cases for multi-threaded tests.
- */
-public class GridCacheLocalLockSelfTest extends GridCommonAbstractTest {
-    /** Grid. */
-    private static Ignite ignite;
-
-    /**
-     *
-     */
-    public GridCacheLocalLockSelfTest() {
-        super(true /*start grid. */);
-    }
-
-    /** */
-    @Before
-    public void beforeGridCacheLocalLockSelfTest() {
-        MvccFeatureChecker.skipIfNotSupported(MvccFeatureChecker.Feature.LOCAL_CACHE);
-    }
-
-    /** {@inheritDoc} */
-    @Override protected void beforeTest() throws Exception {
-        ignite = grid();
-    }
-
-    /** {@inheritDoc} */
-    @Override protected void afterTest() throws Exception {
-        ignite = null;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected IgniteConfiguration getConfiguration() throws Exception {
-        MvccFeatureChecker.skipIfNotSupported(MvccFeatureChecker.Feature.LOCAL_CACHE);
-
-        IgniteConfiguration cfg = super.getConfiguration();
-
-        TcpDiscoverySpi disco = new TcpDiscoverySpi();
-
-        disco.setIpFinder(new TcpDiscoveryVmIpFinder(true));
-
-        cfg.setDiscoverySpi(disco);
-
-        CacheConfiguration cacheCfg = defaultCacheConfiguration();
-
-        cacheCfg.setCacheMode(LOCAL);
-
-        cfg.setCacheConfiguration(cacheCfg);
-
-        return cfg;
-    }
-
-    /**
-     * @throws IgniteCheckedException If test failed.
-     */
-    @Test
-    public void testLockReentry() throws IgniteCheckedException {
-        IgniteCache<Integer, String> cache = ignite.cache(DEFAULT_CACHE_NAME);
-
-        assert !cache.isLocalLocked(1, false);
-        assert !cache.isLocalLocked(1, true);
-
-        Lock lock = cache.lock(1);
-
-        lock.lock();
-
-        assert cache.isLocalLocked(1, false);
-        assert cache.isLocalLocked(1, true);
-
-        try {
-            assert cache.get(1) == null;
-            assert cache.getAndPut(1, "1") == null;
-            assert "1".equals(cache.get(1));
-
-            // Reentry.
-            lock.lock();
-
-            assert cache.isLocalLocked(1, false);
-            assert cache.isLocalLocked(1, true);
-
-            try {
-                assert "1".equals(cache.getAndRemove(1));
-            }
-            finally {
-                lock.unlock();
-            }
-
-            assert cache.isLocalLocked(1, false);
-            assert cache.isLocalLocked(1, true);
-        }
-        finally {
-            lock.unlock();
-        }
-
-        assert !cache.isLocalLocked(1, false);
-        assert !cache.isLocalLocked(1, true);
-    }
-
-    /**
-     * @throws Exception If test failed.
-     */
-    @Test
-    public void testLock() throws Throwable {
-        final IgniteCache<Integer, String> cache = ignite.cache(DEFAULT_CACHE_NAME);
-
-        final CountDownLatch latch1 = new CountDownLatch(1);
-        final CountDownLatch latch2 = new CountDownLatch(1);
-        final CountDownLatch latch3 = new CountDownLatch(1);
-
-        final Lock lock = cache.lock(1);
-
-        GridTestThread t1 = new GridTestThread(new Callable<Object>() {
-            @Nullable @Override public Object call() throws Exception {
-                info("Before lock for.key 1");
-
-                lock.lock();
-
-                info("After lock for key 1");
-
-                try {
-                    assert cache.isLocalLocked(1, false);
-                    assert cache.isLocalLocked(1, true);
-
-                    latch1.countDown();
-
-                    info("Let thread2 proceed.");
-
-                    cache.put(1, "1");
-
-                    info("Put 1='1' key pair into cache.");
-
-                    latch2.await();
-
-                    info("Waited for latch 2");
-                }
-                finally {
-                    lock.unlock();
-
-                    info("Unlocked entry for key 1.");
-
-                    latch3.countDown();
-                }
-
-                return null;
-            }
-        });
-
-        GridTestThread t2 = new GridTestThread(new Callable<Object>() {
-            @Nullable @Override public Object call() throws Exception {
-                info("Waiting for latch1...");
-
-                latch1.await();
-
-                info("Latch1 released.");
-
-                assert !lock.tryLock();
-
-                assert cache.isLocalLocked(1, false);
-                assert !cache.isLocalLocked(1, true);
-
-                info("Tried to lock cache for key1");
-
-                latch2.countDown();
-
-                info("Released latch2");
-
-                latch3.await();
-
-                assert lock.tryLock();
-
-                assert cache.isLocalLocked(1, false);
-                assert cache.isLocalLocked(1, true);
-
-                try {
-                    info("Locked cache for key 1");
-
-                    assert "1".equals(cache.get(1));
-
-                    info("Read value for key 1");
-
-                    assert "1".equals(cache.getAndRemove(1));
-
-                    info("Removed value for key 1");
-
-                    assert cache.isLocalLocked(1, false);
-                    assert cache.isLocalLocked(1, true);
-
-                    info("Checked that cache is locked for key 1");
-                }
-                finally {
-                    lock.unlock();
-
-                    info("Unlocked cache for key 1");
-                }
-
-                assert !cache.isLocalLocked(1, false);
-                assert !cache.isLocalLocked(1, true);
-
-                return null;
-            }
-        });
-
-        t1.start();
-        t2.start();
-
-        t1.join();
-        t2.join();
-
-        t1.checkError();
-        t2.checkError();
-
-        assert !cache.isLocalLocked(1, true);
-        assert !cache.isLocalLocked(1, false);
-    }
-
-    /**
-     * @throws Exception If test failed.
-     */
-    @Test
-    public void testLockAndPut() throws Throwable {
-        final IgniteCache<Integer, String> cache = ignite.cache(DEFAULT_CACHE_NAME);
-
-        final CountDownLatch latch1 = new CountDownLatch(1);
-
-        GridTestThread t1 = new GridTestThread(new Callable<Object>() {
-            @Nullable @Override public Object call() throws Exception {
-                Lock lock = cache.lock(1);
-
-                lock.lock();
-
-                info("Locked cache key: 1");
-
-                try {
-                    assert cache.isLocalLocked(1, true);
-                    assert cache.isLocalLocked(1, false);
-
-                    info("Verified that cache key is locked: 1");
-
-                    cache.put(1, "1");
-
-                    info("Put key value pair into cache: 1='1'");
-
-                    latch1.countDown();
-
-                    info("Released latch1");
-
-                    // Hold lock for a bit.
-                    Thread.sleep(50);
-
-                    info("Woke up from sleep.");
-                }
-                finally {
-                    lock.unlock();
-
-                    info("Unlocked cache key: 1");
-                }
-
-                return null;
-            }
-        });
-
-        GridTestThread t2 = new GridTestThread(new Callable<Object>() {
-            @Nullable @Override public Object call() throws Exception {
-                info("Beginning to await on latch 1");
-
-                latch1.await();
-
-                info("Finished awaiting on latch 1");
-
-                assert "1".equals(cache.get(1));
-
-                info("Retrieved value from cache for key: 1");
-
-                cache.put(1, "2");
-
-                info("Put key-value pair into cache: 1='2'");
-
-                assert "2".equals(cache.getAndRemove(1));
-
-                info("Removed key from cache: 1");
-
-                return null;
-            }
-        });
-
-        t1.start();
-        t2.start();
-
-        t1.join();
-        t2.join();
-
-        t1.checkError();
-        t2.checkError();
-
-        assert !cache.isLocalLocked(1, true);
-        assert !cache.isLocalLocked(1, false);
-    }
-}
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheLocalMetricsSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheLocalMetricsSelfTest.java
deleted file mode 100644
index d0abbc0..0000000
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheLocalMetricsSelfTest.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache.local;
-
-import org.apache.ignite.configuration.CacheConfiguration;
-import org.apache.ignite.configuration.IgniteConfiguration;
-import org.apache.ignite.internal.processors.cache.GridCacheTransactionalAbstractMetricsSelfTest;
-import org.apache.ignite.testframework.MvccFeatureChecker;
-
-import static org.apache.ignite.cache.CacheMode.LOCAL;
-
-/**
- * Local cache metrics test.
- */
-public class GridCacheLocalMetricsSelfTest extends GridCacheTransactionalAbstractMetricsSelfTest {
-    /** */
-    private static final int GRID_CNT = 1;
-
-    /** {@inheritDoc} */
-    @Override protected void beforeTestsStarted() throws Exception {
-        MvccFeatureChecker.skipIfNotSupported(MvccFeatureChecker.Feature.LOCAL_CACHE);
-        MvccFeatureChecker.skipIfNotSupported(MvccFeatureChecker.Feature.METRICS);
-
-        super.beforeTestsStarted();
-    }
-
-    /** {@inheritDoc} */
-    @Override protected IgniteConfiguration getConfiguration(String igniteInstanceName) throws Exception {
-        IgniteConfiguration c = super.getConfiguration(igniteInstanceName);
-
-        c.getTransactionConfiguration().setTxSerializableEnabled(true);
-
-        return c;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected CacheConfiguration cacheConfiguration(String igniteInstanceName) throws Exception {
-        MvccFeatureChecker.skipIfNotSupported(MvccFeatureChecker.Feature.LOCAL_CACHE);
-        MvccFeatureChecker.skipIfNotSupported(MvccFeatureChecker.Feature.METRICS);
-
-        CacheConfiguration cfg = super.cacheConfiguration(igniteInstanceName);
-
-        cfg.setCacheMode(LOCAL);
-
-        return cfg;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected int gridCount() {
-        return GRID_CNT;
-    }
-}
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheLocalMultithreadedSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheLocalMultithreadedSelfTest.java
deleted file mode 100644
index 4a3db82..0000000
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheLocalMultithreadedSelfTest.java
+++ /dev/null
@@ -1,369 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache.local;
-
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Set;
-import java.util.concurrent.Callable;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.atomic.AtomicInteger;
-import java.util.concurrent.locks.Lock;
-import com.google.common.collect.Sets;
-import org.apache.ignite.Ignite;
-import org.apache.ignite.IgniteCache;
-import org.apache.ignite.configuration.CacheConfiguration;
-import org.apache.ignite.configuration.IgniteConfiguration;
-import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;
-import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder;
-import org.apache.ignite.testframework.GridTestThread;
-import org.apache.ignite.testframework.GridTestUtils;
-import org.apache.ignite.testframework.MvccFeatureChecker;
-import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
-import org.junit.Before;
-import org.junit.Test;
-
-import static org.apache.ignite.cache.CacheMode.LOCAL;
-
-/**
- * Multithreaded local cache locking test.
- */
-public class GridCacheLocalMultithreadedSelfTest extends GridCommonAbstractTest {
-    /** Cache. */
-    private static IgniteCache<Integer, String> cache;
-
-    /**
-     * Start grid by default.
-     */
-    public GridCacheLocalMultithreadedSelfTest() {
-        super(true /*start grid. */);
-    }
-
-    /** */
-    @Before
-    public void beforeGridCacheLocalMultithreadedSelfTest() {
-        MvccFeatureChecker.skipIfNotSupported(MvccFeatureChecker.Feature.LOCAL_CACHE);
-    }
-
-    /** {@inheritDoc} */
-    @Override protected void beforeTest() throws Exception {
-        Ignite ignite = grid();
-
-        cache = ignite.cache(DEFAULT_CACHE_NAME);
-    }
-
-    /** {@inheritDoc} */
-    @Override protected void afterTest() throws Exception {
-        super.afterTest();
-
-        cache = null;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected IgniteConfiguration getConfiguration() throws Exception {
-        MvccFeatureChecker.skipIfNotSupported(MvccFeatureChecker.Feature.LOCAL_CACHE);
-
-        IgniteConfiguration cfg = super.getConfiguration();
-
-        TcpDiscoverySpi disco = new TcpDiscoverySpi();
-
-        disco.setIpFinder(new TcpDiscoveryVmIpFinder(true));
-
-        cfg.setDiscoverySpi(disco);
-
-        CacheConfiguration cacheCfg = defaultCacheConfiguration();
-
-        cacheCfg.setCacheMode(LOCAL);
-
-        cfg.setCacheConfiguration(cacheCfg);
-
-        return cfg;
-    }
-
-    /**
-     * @throws Exception If test fails.
-     */
-    @Test
-    public void testBasicLocks() throws Throwable {
-        GridTestUtils.runMultiThreaded(new Callable<Object>() {
-            /** {@inheritDoc} */
-            @Override public Object call() throws Exception {
-                Lock lock = cache.lock(1);
-
-                assert lock.tryLock(1000L, TimeUnit.MILLISECONDS);
-
-                info("Locked key from thread: " + thread());
-
-                Thread.sleep(50);
-
-                info("Unlocking key from thread: " + thread());
-
-                lock.unlock();
-
-                info("Unlocked key from thread: " + thread());
-
-                return null;
-            }
-        }, 10, "basic-lock-thread");
-    }
-
-    /**
-     * @throws Exception If test fails.
-     */
-    @Test
-    public void testMultiLocks() throws Throwable {
-        GridTestUtils.runMultiThreaded(new Callable<Object>() {
-            /** {@inheritDoc} */
-            @Override public Object call() throws Exception {
-                Set<Integer> keys = Sets.newHashSet(1, 2, 3);
-
-                Lock lock = cache.lockAll(keys);
-
-                lock.lock();
-
-                info("Locked keys from thread [keys=" + keys + ", thread=" + thread() + ']');
-
-                Thread.sleep(50);
-
-                info("Unlocking key from thread: " + thread());
-
-                lock.unlock();
-
-                info("Unlocked keys from thread: " + thread());
-
-                return null;
-            }
-        }, 10, "multi-lock-thread");
-    }
-
-    /**
-     * @throws Exception If test fails.
-     */
-    @Test
-    public void testSlidingKeysLocks() throws Throwable {
-        final AtomicInteger cnt = new AtomicInteger();
-
-        GridTestUtils.runMultiThreaded(new Callable<Object>() {
-            /** {@inheritDoc} */
-            @Override public Object call() throws Exception {
-                int idx = cnt.incrementAndGet();
-
-                Set<Integer> keys = Sets.newHashSet(idx, idx + 1, idx + 2, idx + 3);
-
-                Lock lock = cache.lockAll(keys);
-
-                lock.lock();
-
-                info("Locked keys from thread [keys=" + keys + ", thread=" + thread() + ']');
-
-                Thread.sleep(50);
-
-                info("Unlocking key from thread [keys=" + keys + ", thread=" + thread() + ']');
-
-                lock.unlock();
-
-                info("Unlocked keys from thread [keys=" + keys + ", thread=" + thread() + ']');
-
-                return null;
-            }
-        }, 10, "multi-lock-thread");
-    }
-
-    /**
-     * @throws Exception If test fails.
-     */
-    @Test
-    public void testSingleLockTimeout() throws Exception {
-        final CountDownLatch l1 = new CountDownLatch(1);
-        final CountDownLatch l2 = new CountDownLatch(1);
-
-        final Lock lock = cache.lock(1);
-
-        GridTestThread t1 = new GridTestThread(new Callable<Object>() {
-            /** {@inheritDoc} */
-            @Override public Object call() throws Exception {
-                assert !cache.isLocalLocked(1, false);
-
-                lock.lock();
-
-                assert cache.isLocalLocked(1, true);
-                assert cache.isLocalLocked(1, false);
-
-                l1.countDown();
-
-                l2.await();
-
-                lock.unlock();
-
-                assert !cache.isLocalLocked(1, true);
-                assert !cache.isLocalLocked(1, false);
-
-                return null;
-            }
-        }, "lock-timeout-1");
-
-        GridTestThread t2 = new GridTestThread(new Callable<Object>() {
-            /** {@inheritDoc} */
-            @Override public Object call() throws Exception {
-                l1.await();
-
-                assert cache.isLocalLocked(1, false);
-                assert !cache.isLocalLocked(1, true);
-
-                assert !lock.tryLock(100L, TimeUnit.MILLISECONDS);
-
-                assert cache.isLocalLocked(1, false);
-                assert !cache.isLocalLocked(1, true);
-
-                l2.countDown();
-
-                info("Checked lockedByThread.");
-
-                return null;
-            }
-        }, "lock-timeout-2");
-
-        t1.start();
-        t2.start();
-
-        t1.join();
-        t2.join();
-
-        t1.checkError();
-        t2.checkError();
-
-        assert !cache.isLocalLocked(1, false);
-        assert !cache.isLocalLocked(1, true);
-    }
-
-    /**
-     * @throws Exception If test fails.
-     */
-    @Test
-    public void testMultiLockTimeout() throws Exception {
-        final CountDownLatch l1 = new CountDownLatch(1);
-        final CountDownLatch l2 = new CountDownLatch(1);
-        final CountDownLatch l3 = new CountDownLatch(1);
-
-        final AtomicInteger cnt = new AtomicInteger();
-
-        final Set<Integer> keys1 = new HashSet<>();
-        final Set<Integer> keys2 = new HashSet<>();
-
-        GridTestThread t1 = new GridTestThread(new Callable<Object>() {
-            /** {@inheritDoc} */
-            @Override public Object call() throws Exception {
-                int idx = cnt.incrementAndGet();
-
-                assert !cache.isLocalLocked(1, false);
-
-                Collections.addAll(keys1, idx, idx + 1, idx + 2, idx + 3);
-
-                Lock lock = cache.lockAll(keys1);
-
-                lock.lock();
-
-                for (Integer key : keys1) {
-                    assert cache.isLocalLocked(key, false) : "Failed to acquire lock for key: " + key;
-                    assert cache.isLocalLocked(key, true) : "Failed to acquire lock for key: " + key;
-                }
-
-                l1.countDown();
-
-                l2.await();
-
-                lock.unlock();
-
-                for (Integer key : keys1) {
-                    assert !cache.isLocalLocked(key, false);
-                    assert !cache.isLocalLocked(key, true);
-                }
-
-                l3.countDown();
-
-                return null;
-            }
-        }, "lock-timeout-1");
-
-        GridTestThread t2 = new GridTestThread(new Callable<Object>() {
-            /** {@inheritDoc} */
-            @Override public Object call() throws Exception {
-                int idx = cnt.incrementAndGet();
-
-                Collections.addAll(keys2, idx, idx + 1, idx + 2, idx + 3);
-
-                l1.await();
-
-                for (Integer key : keys1) {
-                    assert cache.isLocalLocked(key, false);
-                    assert !cache.isLocalLocked(key, true);
-                }
-
-                // Lock won't be acquired due to timeout.
-                assert !cache.lockAll(keys2).tryLock(100, TimeUnit.MILLISECONDS);
-
-                for (Integer key : keys2) {
-                    boolean locked = cache.isLocalLocked(key, false);
-
-                    assert locked == keys1.contains(key) : "Lock failure for key [key=" + key +
-                        ", locked=" + locked + ", keys1=" + keys1 + ']';
-
-                    assert !cache.isLocalLocked(key, true);
-                }
-
-                l2.countDown();
-
-                l3.await();
-
-                for (Integer key : keys2) {
-                    assert !cache.isLocalLocked(key, false);
-                    assert !cache.isLocalLocked(key, true);
-                }
-
-                return null;
-            }
-        }, "lock-timeout-2");
-
-        t1.start();
-        t2.start();
-
-        t1.join();
-        t2.join();
-
-        t1.checkError();
-        t2.checkError();
-
-        for (Integer key : keys1) {
-            assert !cache.isLocalLocked(key, false);
-            assert !cache.isLocalLocked(key, true);
-        }
-
-        for (Integer key : keys2) {
-            assert !cache.isLocalLocked(key, false);
-            assert !cache.isLocalLocked(key, true);
-        }
-    }
-
-    /**
-     * @return Formatted string for current thread.
-     */
-    private String thread() {
-        return "Thread [id=" + Thread.currentThread().getId() + ", name=" + Thread.currentThread().getName() + ']';
-    }
-}
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheLocalTxExceptionSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheLocalTxExceptionSelfTest.java
deleted file mode 100644
index b943ae8..0000000
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheLocalTxExceptionSelfTest.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache.local;
-
-import org.apache.ignite.cache.CacheMode;
-import org.apache.ignite.internal.processors.cache.IgniteTxExceptionAbstractSelfTest;
-import org.apache.ignite.testframework.MvccFeatureChecker;
-
-import static org.apache.ignite.cache.CacheMode.LOCAL;
-
-/**
- * Tests local cache.
- */
-public class GridCacheLocalTxExceptionSelfTest extends IgniteTxExceptionAbstractSelfTest {
-    /** {@inheritDoc} */
-    @Override protected void beforeTestsStarted() throws Exception {
-        MvccFeatureChecker.skipIfNotSupported(MvccFeatureChecker.Feature.LOCAL_CACHE);
-
-        super.beforeTestsStarted();
-    }
-
-    /** {@inheritDoc} */
-    @Override protected int gridCount() {
-        return 1;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected CacheMode cacheMode() {
-        return LOCAL;
-    }
-}
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheLocalTxMultiThreadedSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheLocalTxMultiThreadedSelfTest.java
deleted file mode 100644
index 00b2f7e..0000000
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheLocalTxMultiThreadedSelfTest.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache.local;
-
-import org.apache.ignite.configuration.CacheConfiguration;
-import org.apache.ignite.configuration.IgniteConfiguration;
-import org.apache.ignite.internal.processors.cache.GridCacheProcessor;
-import org.apache.ignite.internal.processors.cache.IgniteTxMultiThreadedAbstractTest;
-import org.apache.ignite.testframework.MvccFeatureChecker;
-import org.apache.logging.log4j.Level;
-import org.apache.logging.log4j.core.config.Configurator;
-import org.junit.Before;
-
-import static org.apache.ignite.cache.CacheMode.LOCAL;
-
-/**
- * Tests for local transactions.
- */
-public class GridCacheLocalTxMultiThreadedSelfTest extends IgniteTxMultiThreadedAbstractTest {
-    /** Cache debug flag. */
-    private static final boolean CACHE_DEBUG = false;
-
-    /** */
-    @Before
-    public void beforeGridCacheLocalEvictionEventSelfTest() {
-        MvccFeatureChecker.skipIfNotSupported(MvccFeatureChecker.Feature.LOCAL_CACHE);
-    }
-
-    /** {@inheritDoc} */
-    @Override protected IgniteConfiguration getConfiguration(String igniteInstanceName) throws Exception {
-        MvccFeatureChecker.skipIfNotSupported(MvccFeatureChecker.Feature.LOCAL_CACHE);
-
-        IgniteConfiguration c = super.getConfiguration(igniteInstanceName);
-
-        c.getTransactionConfiguration().setTxSerializableEnabled(true);
-
-        CacheConfiguration cc = defaultCacheConfiguration();
-
-        cc.setCacheMode(LOCAL);
-
-        cc.setEvictionPolicy(null);
-
-        c.setCacheConfiguration(cc);
-
-        // Disable log4j debug by default.
-        Configurator.setLevel(GridCacheProcessor.class.getPackage().getName(), CACHE_DEBUG ? Level.DEBUG : Level.INFO);
-
-        return c;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected int gridCount() {
-        return 1;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected int keyCount() {
-        return 3;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected int maxKeyValue() {
-        return 3;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected int threadCount() {
-        return 2;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected int iterations() {
-        return 1000;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected boolean isTestDebug() {
-        return false;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected boolean printMemoryStats() {
-        return true;
-    }
-}
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheLocalTxReadTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheLocalTxReadTest.java
deleted file mode 100644
index 5b0d0dc..0000000
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheLocalTxReadTest.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache.local;
-
-import org.apache.ignite.cache.CacheMode;
-import org.apache.ignite.internal.processors.cache.GridCacheAbstractTxReadTest;
-
-/**
- * Checks transactional reads for local cache.
- */
-public class GridCacheLocalTxReadTest extends GridCacheAbstractTxReadTest {
-    /**
-     * @return {@code LOCAL} for this test.
-     */
-    @Override protected CacheMode cacheMode() {
-        return CacheMode.LOCAL;
-    }
-}
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheLocalTxSingleThreadedSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheLocalTxSingleThreadedSelfTest.java
deleted file mode 100644
index 14aeacf..0000000
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheLocalTxSingleThreadedSelfTest.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache.local;
-
-import org.apache.ignite.configuration.CacheConfiguration;
-import org.apache.ignite.configuration.IgniteConfiguration;
-import org.apache.ignite.internal.processors.cache.GridCacheProcessor;
-import org.apache.ignite.internal.processors.cache.IgniteTxSingleThreadedAbstractTest;
-import org.apache.ignite.testframework.MvccFeatureChecker;
-import org.apache.logging.log4j.Level;
-import org.apache.logging.log4j.core.config.Configurator;
-import org.junit.Before;
-
-import static org.apache.ignite.cache.CacheMode.LOCAL;
-
-/**
- * Tests for local transactions.
- */
-public class GridCacheLocalTxSingleThreadedSelfTest extends IgniteTxSingleThreadedAbstractTest {
-    /** */
-    @Before
-    public void beforeGridCacheLocalTxSingleThreadedSelfTest() {
-        MvccFeatureChecker.skipIfNotSupported(MvccFeatureChecker.Feature.LOCAL_CACHE);
-    }
-
-    /** Cache debug flag. */
-    private static final boolean CACHE_DEBUG = false;
-
-    /** {@inheritDoc} */
-    @Override protected IgniteConfiguration getConfiguration(String igniteInstanceName) throws Exception {
-        MvccFeatureChecker.skipIfNotSupported(MvccFeatureChecker.Feature.LOCAL_CACHE);
-
-        IgniteConfiguration c = super.getConfiguration(igniteInstanceName);
-
-        c.getTransactionConfiguration().setTxSerializableEnabled(true);
-
-        CacheConfiguration cc = defaultCacheConfiguration();
-
-        cc.setCacheMode(LOCAL);
-
-        cc.setEvictionPolicy(null);
-
-        c.setCacheConfiguration(cc);
-
-        // Disable log4j debug by default.
-        Configurator.setLevel(GridCacheProcessor.class.getPackage().getName(), CACHE_DEBUG ? Level.DEBUG : Level.INFO);
-
-        return c;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected int gridCount() {
-        return 1;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected int keyCount() {
-        return 3;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected int maxKeyValue() {
-        return 3;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected int iterations() {
-        return 20;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected boolean isTestDebug() {
-        return false;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected boolean printMemoryStats() {
-        return true;
-    }
-}
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheLocalTxTimeoutSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheLocalTxTimeoutSelfTest.java
deleted file mode 100644
index 866f6af..0000000
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheLocalTxTimeoutSelfTest.java
+++ /dev/null
@@ -1,185 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache.local;
-
-import org.apache.ignite.Ignite;
-import org.apache.ignite.IgniteCache;
-import org.apache.ignite.IgniteCheckedException;
-import org.apache.ignite.configuration.CacheConfiguration;
-import org.apache.ignite.configuration.IgniteConfiguration;
-import org.apache.ignite.internal.util.typedef.X;
-import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;
-import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder;
-import org.apache.ignite.testframework.MvccFeatureChecker;
-import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
-import org.apache.ignite.transactions.Transaction;
-import org.apache.ignite.transactions.TransactionConcurrency;
-import org.apache.ignite.transactions.TransactionIsolation;
-import org.apache.ignite.transactions.TransactionTimeoutException;
-import org.junit.Before;
-import org.junit.Test;
-
-import static org.apache.ignite.cache.CacheMode.LOCAL;
-import static org.apache.ignite.transactions.TransactionConcurrency.OPTIMISTIC;
-import static org.apache.ignite.transactions.TransactionConcurrency.PESSIMISTIC;
-import static org.apache.ignite.transactions.TransactionIsolation.READ_COMMITTED;
-import static org.apache.ignite.transactions.TransactionIsolation.REPEATABLE_READ;
-import static org.apache.ignite.transactions.TransactionIsolation.SERIALIZABLE;
-
-/**
- *
- */
-public class GridCacheLocalTxTimeoutSelfTest extends GridCommonAbstractTest {
-    /** Grid. */
-    private static Ignite ignite;
-
-    /**
-     * Start grid by default.
-     */
-    public GridCacheLocalTxTimeoutSelfTest() {
-        super(true /*start grid. */);
-    }
-
-    /** */
-    @Before
-    public void beforeGridCacheLocalTxTimeoutSelfTest() {
-        MvccFeatureChecker.skipIfNotSupported(MvccFeatureChecker.Feature.LOCAL_CACHE);
-    }
-
-    /** {@inheritDoc} */
-    @Override protected IgniteConfiguration getConfiguration() throws Exception {
-        MvccFeatureChecker.skipIfNotSupported(MvccFeatureChecker.Feature.LOCAL_CACHE);
-
-        IgniteConfiguration c = super.getConfiguration();
-
-        c.getTransactionConfiguration().setTxSerializableEnabled(true);
-        c.getTransactionConfiguration().setDefaultTxTimeout(50);
-
-        TcpDiscoverySpi disco = new TcpDiscoverySpi();
-
-        disco.setIpFinder(new TcpDiscoveryVmIpFinder(true));
-
-        c.setDiscoverySpi(disco);
-
-        CacheConfiguration cc = defaultCacheConfiguration();
-
-        cc.setCacheMode(LOCAL);
-
-        c.setCacheConfiguration(cc);
-
-        c.setNetworkTimeout(1000);
-
-        return c;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected void beforeTest() throws Exception {
-        ignite = grid();
-    }
-
-    /** {@inheritDoc} */
-    @Override protected void afterTest() throws Exception {
-        ignite = null;
-    }
-
-    /**
-     * @throws IgniteCheckedException If test failed.
-     */
-    @Test
-    public void testPessimisticReadCommitted() throws Exception {
-        checkTransactionTimeout(PESSIMISTIC, READ_COMMITTED);
-    }
-
-    /**
-     * @throws IgniteCheckedException If test failed.
-     */
-    @Test
-    public void testPessimisticRepeatableRead() throws Exception {
-        checkTransactionTimeout(PESSIMISTIC, REPEATABLE_READ);
-    }
-
-    /**
-     * @throws IgniteCheckedException If test failed.
-     */
-    @Test
-    public void testPessimisticSerializable() throws Exception {
-        checkTransactionTimeout(PESSIMISTIC, SERIALIZABLE);
-    }
-
-    /**
-     * @throws IgniteCheckedException If test failed.
-     */
-    @Test
-    public void testOptimisticReadCommitted() throws Exception {
-        checkTransactionTimeout(OPTIMISTIC, READ_COMMITTED);
-    }
-
-    /**
-     * @throws IgniteCheckedException If test failed.
-     */
-    @Test
-    public void testOptimisticRepeatableRead() throws Exception {
-        checkTransactionTimeout(OPTIMISTIC, REPEATABLE_READ);
-    }
-
-    /**
-     * @throws IgniteCheckedException If test failed.
-     */
-    @Test
-    public void testOptimisticSerializable() throws Exception {
-        checkTransactionTimeout(OPTIMISTIC, SERIALIZABLE);
-    }
-
-    /**
-     * @param concurrency Concurrency.
-     * @param isolation Isolation.
-     * @throws IgniteCheckedException If test failed.
-     */
-    private void checkTransactionTimeout(TransactionConcurrency concurrency,
-        TransactionIsolation isolation) throws Exception {
-
-        boolean wasEx = false;
-
-        Transaction tx = null;
-
-        try {
-            IgniteCache<Integer, String> cache = ignite.cache(DEFAULT_CACHE_NAME);
-
-            tx = ignite.transactions().txStart(concurrency, isolation, 50, 0);
-
-            cache.put(1, "1");
-
-            Thread.sleep(100);
-
-            cache.put(1, "2");
-
-            tx.commit();
-        }
-        catch (Exception e) {
-            assertTrue(X.hasCause(e, TransactionTimeoutException.class));
-
-            info("Received expected optimistic exception: " + e.getMessage());
-
-            wasEx = true;
-
-            tx.rollback();
-        }
-
-        assert wasEx;
-    }
-}
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheLocalWithGroupFullApiSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheLocalWithGroupFullApiSelfTest.java
deleted file mode 100644
index 4ad4be8..0000000
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheLocalWithGroupFullApiSelfTest.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache.local;
-
-import org.apache.ignite.configuration.CacheConfiguration;
-
-/**
- *
- */
-public class GridCacheLocalWithGroupFullApiSelfTest extends GridCacheLocalFullApiSelfTest {
-    /** {@inheritDoc} */
-    @Override protected CacheConfiguration cacheConfiguration(String igniteInstanceName) throws Exception {
-        CacheConfiguration ccfg = super.cacheConfiguration(igniteInstanceName);
-
-        ccfg.setGroupName("group1");
-
-        return ccfg;
-    }
-}
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/mvcc/CacheMvccConfigurationValidationTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/mvcc/CacheMvccConfigurationValidationTest.java
index f864bc6..1cc0abe 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/mvcc/CacheMvccConfigurationValidationTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/mvcc/CacheMvccConfigurationValidationTest.java
@@ -24,13 +24,11 @@
 import javax.cache.CacheException;
 import javax.cache.configuration.Factory;
 import javax.cache.expiry.ExpiryPolicy;
-
 import org.apache.ignite.Ignite;
 import org.apache.ignite.IgniteCache;
 import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.cache.CacheAtomicityMode;
 import org.apache.ignite.cache.CacheInterceptor;
-import org.apache.ignite.cache.CacheMode;
 import org.apache.ignite.cache.CacheRebalanceMode;
 import org.apache.ignite.configuration.CacheConfiguration;
 import org.apache.ignite.configuration.DataRegionConfiguration;
@@ -43,11 +41,9 @@
 import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
 import org.jetbrains.annotations.Nullable;
 import org.junit.Test;
-
 import static org.apache.ignite.cache.CacheAtomicityMode.ATOMIC;
 import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL;
 import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL_SNAPSHOT;
-import static org.apache.ignite.cache.CacheMode.LOCAL;
 import static org.apache.ignite.configuration.DataPageEvictionMode.RANDOM_2_LRU;
 import static org.apache.ignite.configuration.DataPageEvictionMode.RANDOM_LRU;
 
@@ -111,7 +107,6 @@
     /**
      * @throws Exception If failed.
      */
-    @SuppressWarnings("ThrowableNotThrown")
     @Test
     public void testMvccLocalCacheDisabled() throws Exception {
         final Ignite node1 = startGrid(1);
@@ -124,15 +119,6 @@
         cache1.put(2, 2);
         cache1.put(2, 2);
 
-        GridTestUtils.assertThrows(log, new Callable<Void>() {
-            @Override public Void call() {
-                node1.createCache(new CacheConfiguration("cache2").setCacheMode(CacheMode.LOCAL)
-                    .setAtomicityMode(TRANSACTIONAL_SNAPSHOT));
-
-                return null;
-            }
-        }, CacheException.class, null);
-
         IgniteCache cache3 = node2.createCache(new CacheConfiguration("cache3")
             .setAtomicityMode(TRANSACTIONAL));
 
@@ -282,11 +268,6 @@
     @Test
     public void testTransactionalSnapshotLimitations() throws Exception {
         assertCannotStart(
-            mvccCacheConfig().setCacheMode(LOCAL),
-            "LOCAL cache mode cannot be used with TRANSACTIONAL_SNAPSHOT atomicity mode"
-        );
-
-        assertCannotStart(
             mvccCacheConfig().setRebalanceMode(CacheRebalanceMode.NONE),
             "Rebalance mode NONE cannot be used with TRANSACTIONAL_SNAPSHOT atomicity mode"
         );
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/IgnitePdsDestroyCacheAbstractTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/IgnitePdsDestroyCacheAbstractTest.java
index a59e952..55e1f02 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/IgnitePdsDestroyCacheAbstractTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/IgnitePdsDestroyCacheAbstractTest.java
@@ -24,7 +24,6 @@
 import org.apache.ignite.Ignite;
 import org.apache.ignite.IgniteCache;
 import org.apache.ignite.IgniteDataStreamer;
-import org.apache.ignite.cache.CacheMode;
 import org.apache.ignite.cache.affinity.rendezvous.RendezvousAffinityFunction;
 import org.apache.ignite.configuration.CacheConfiguration;
 import org.apache.ignite.configuration.DataRegionConfiguration;
@@ -34,8 +33,6 @@
 import org.apache.ignite.internal.util.typedef.G;
 import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
 
-import static org.apache.ignite.cache.CacheMode.LOCAL;
-
 /**
  * Base class for  {@link IgnitePdsDestroyCacheTest} and {@link IgnitePdsDestroyCacheWithoutCheckpointsTest}
  */
@@ -188,18 +185,10 @@
      * @param ignite Ignite instance.
      */
     protected void startGroupCachesDynamically(Ignite ignite) {
-        startGroupCachesDynamically(ignite, false);
-    }
-
-    /**
-     * @param ignite Ignite instance.
-     * @param loc {@code True} for local caches.
-     */
-    protected void startGroupCachesDynamically(Ignite ignite, boolean loc) {
         List<CacheConfiguration> ccfg = new ArrayList<>(CACHES);
 
         for (int i = 0; i < CACHES; i++)
-            ccfg.add(new CacheConfiguration<>(cacheName(i)).setCacheMode(loc ? LOCAL : CacheMode.PARTITIONED)
+            ccfg.add(new CacheConfiguration<>(cacheName(i))
                 .setGroupName(i % 2 == 0 ? "grp-even" : "grp-odd")
                 .setBackups(1)
                 .setAffinity(new RendezvousAffinityFunction(false, 32)));
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/IgnitePdsDestroyCacheTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/IgnitePdsDestroyCacheTest.java
index db8266d..8dbf150 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/IgnitePdsDestroyCacheTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/IgnitePdsDestroyCacheTest.java
@@ -131,28 +131,20 @@
      */
     @Test
     public void testDestroyCacheOperationNotBlockingCheckpointTest() throws Exception {
-        doTestDestroyCacheOperationNotBlockingCheckpointTest(false);
-    }
-
-    /**
-     * Tests if a checkpoint is not blocked forever by concurrent cache destroying (local).
-     */
-    @Test
-    public void testDestroyCacheOperationNotBlockingCheckpointTest_LocalCache() throws Exception {
-        doTestDestroyCacheOperationNotBlockingCheckpointTest(true);
+        doTestDestroyCacheOperationNotBlockingCheckpointTest();
     }
 
     /**
      *
      */
-    private void doTestDestroyCacheOperationNotBlockingCheckpointTest(boolean loc) throws Exception {
+    private void doTestDestroyCacheOperationNotBlockingCheckpointTest() throws Exception {
         final IgniteEx ignite = startGrids(1);
 
         ignite.cluster().active(true);
 
-        startGroupCachesDynamically(ignite, loc);
+        startGroupCachesDynamically(ignite);
 
-        loadCaches(ignite, !loc);
+        loadCaches(ignite, true);
 
         // It's important to clear cache in group having > 1 caches.
         final String cacheName = cacheName(0);
@@ -208,10 +200,7 @@
             return null;
         });
 
-        if (loc)
-            ignite.cache(cacheName).close();
-        else
-            ignite.destroyCache(cacheName);
+        ignite.destroyCache(cacheName);
 
         fut.get();
     }
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/IgnitePdsDynamicCacheTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/IgnitePdsDynamicCacheTest.java
index e008516..78f2015 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/IgnitePdsDynamicCacheTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/IgnitePdsDynamicCacheTest.java
@@ -21,7 +21,6 @@
 import org.apache.ignite.Ignite;
 import org.apache.ignite.IgniteCache;
 import org.apache.ignite.cache.CacheAtomicityMode;
-import org.apache.ignite.cache.CacheMode;
 import org.apache.ignite.cache.CacheRebalanceMode;
 import org.apache.ignite.cache.CacheWriteSynchronizationMode;
 import org.apache.ignite.cache.affinity.rendezvous.RendezvousAffinityFunction;
@@ -114,15 +113,8 @@
         else
             ccfg2.setRebalanceMode(CacheRebalanceMode.NONE);
 
-        CacheConfiguration ccfg3 = new CacheConfiguration();
-
-        ccfg3.setName("cache3");
-        ccfg3.setAtomicityMode(CacheAtomicityMode.ATOMIC);
-        ccfg3.setCacheMode(CacheMode.LOCAL);
-
         ignite.createCache(ccfg1);
         ignite.createCache(ccfg2);
-        ignite.createCache(ccfg3).put(2, 3);
 
         int iterations = 20;
 
@@ -143,9 +135,6 @@
 
             ignite.getOrCreateCache(ccfg2);
 
-            assertEquals(1, ignite.cache(ccfg3.getName()).size());
-            assertEquals(3, ignite.cache(ccfg3.getName()).get(2));
-
             ignite.destroyCache(ccfg2.getName());
 
             ignite.getOrCreateCache(ccfg2);
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/IgnitePdsPartitionPreloadTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/IgnitePdsPartitionPreloadTest.java
index 3507f6f..775838f 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/IgnitePdsPartitionPreloadTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/IgnitePdsPartitionPreloadTest.java
@@ -38,13 +38,10 @@
 import org.apache.ignite.internal.util.typedef.internal.CU;
 import org.apache.ignite.lang.IgnitePredicate;
 import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
-import org.junit.Ignore;
 import org.junit.Test;
-
 import static org.apache.ignite.cache.CacheAtomicityMode.ATOMIC;
 import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL;
 import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL_SNAPSHOT;
-import static org.apache.ignite.cache.CacheMode.LOCAL;
 
 /**
  * Test partition preload for varios cache modes.
@@ -545,44 +542,6 @@
             () -> G.allGrids().stream().filter(BackupNodePredicate.INSTANCE).findFirst().get(), PreloadMode.ASYNC);
     }
 
-    /** */
-    @Test
-    public void testPreloadLocalTransactionalSync() throws Exception {
-        cfgFactory = () -> cacheConfiguration(TRANSACTIONAL).setCacheMode(LOCAL);
-
-        preloadPartition(
-            () -> G.allGrids().stream().filter(PrimaryNodePredicate.INSTANCE).findFirst().get(), PreloadMode.SYNC);
-    }
-
-    /** */
-    @Ignore("https://issues.apache.org/jira/browse/IGNITE-9530")
-    @Test
-    public void testPreloadLocalTransactionalSyncMvcc() throws Exception {
-        cfgFactory = () -> cacheConfiguration(TRANSACTIONAL_SNAPSHOT).setCacheMode(LOCAL);
-
-        preloadPartition(
-            () -> G.allGrids().stream().filter(PrimaryNodePredicate.INSTANCE).findFirst().get(), PreloadMode.SYNC);
-    }
-
-    /** */
-    @Test
-    public void testPreloadLocalTransactionalAsync() throws Exception {
-        cfgFactory = () -> cacheConfiguration(TRANSACTIONAL).setCacheMode(LOCAL);
-
-        preloadPartition(
-            () -> G.allGrids().stream().filter(PrimaryNodePredicate.INSTANCE).findFirst().get(), PreloadMode.ASYNC);
-    }
-
-    /** */
-    @Ignore("https://issues.apache.org/jira/browse/IGNITE-9530")
-    @Test
-    public void testPreloadLocalTransactionalAsyncMvcc() throws Exception {
-        cfgFactory = () -> cacheConfiguration(TRANSACTIONAL_SNAPSHOT).setCacheMode(LOCAL);
-
-        preloadPartition(
-            () -> G.allGrids().stream().filter(PrimaryNodePredicate.INSTANCE).findFirst().get(), PreloadMode.ASYNC);
-    }
-
     /**
      * @param execNodeFactory Test node factory.
      * @param preloadMode Preload mode.
@@ -596,8 +555,6 @@
 
         assertEquals(PRIMARY_NODE, testNode.cluster().localNode().consistentId());
 
-        boolean locCacheMode = testNode.cache(DEFAULT_CACHE_NAME).getConfiguration(CacheConfiguration.class).getCacheMode() == LOCAL;
-
         Integer key = primaryKey(testNode.cache(DEFAULT_CACHE_NAME));
 
         int preloadPart = crd.affinity(DEFAULT_CACHE_NAME).partition(key);
@@ -627,8 +584,7 @@
         testNode = G.allGrids().stream().
             filter(ignite -> PRIMARY_NODE.equals(ignite.cluster().localNode().consistentId())).findFirst().get();
 
-        if (!locCacheMode)
-            assertEquals(testNode, primaryNode(key, DEFAULT_CACHE_NAME));
+        assertEquals(testNode, primaryNode(key, DEFAULT_CACHE_NAME));
 
         Ignite execNode = execNodeFactory.get();
 
@@ -636,20 +592,10 @@
             case SYNC:
                 execNode.cache(DEFAULT_CACHE_NAME).preloadPartition(preloadPart);
 
-                if (locCacheMode) {
-                    testNode = G.allGrids().stream().filter(ignite ->
-                        ignite.cluster().localNode().consistentId().equals(consistentId)).findFirst().get();
-                }
-
                 break;
             case ASYNC:
                 execNode.cache(DEFAULT_CACHE_NAME).preloadPartitionAsync(preloadPart).get();
 
-                if (locCacheMode) {
-                    testNode = G.allGrids().stream().filter(ignite ->
-                        ignite.cluster().localNode().consistentId().equals(consistentId)).findFirst().get();
-                }
-
                 break;
             case LOCAL:
                 assertTrue(execNode.cache(DEFAULT_CACHE_NAME).localPreloadPartition(preloadPart));
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/IgnitePdsWithTtlTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/IgnitePdsWithTtlTest.java
index 69d467e..8287d89 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/IgnitePdsWithTtlTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/IgnitePdsWithTtlTest.java
@@ -31,7 +31,6 @@
 import org.apache.ignite.IgniteCache;
 import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.IgniteSystemProperties;
-import org.apache.ignite.cache.CacheMode;
 import org.apache.ignite.cache.CachePeekMode;
 import org.apache.ignite.cache.CacheRebalanceMode;
 import org.apache.ignite.cache.CacheWriteSynchronizationMode;
@@ -66,7 +65,6 @@
 import org.apache.ignite.testframework.junits.WithSystemProperty;
 import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
 import org.junit.Test;
-
 import static org.apache.ignite.cache.CacheAtomicityMode.ATOMIC;
 import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL;
 import static org.apache.ignite.cluster.ClusterState.ACTIVE;
@@ -90,12 +88,6 @@
     private static final String CACHE_NAME_TX = "expirable-cache-tx";
 
     /** */
-    private static final String CACHE_NAME_LOCAL_ATOMIC = "expirable-cache-local-atomic";
-
-    /** */
-    private static final String CACHE_NAME_LOCAL_TX = "expirable-cache-local-tx";
-
-    /** */
     private static final String CACHE_NAME_NEAR_ATOMIC = "expirable-cache-near-atomic";
 
     /** */
@@ -163,8 +155,6 @@
         cfg.setCacheConfiguration(
             getCacheConfiguration(CACHE_NAME_ATOMIC).setAtomicityMode(ATOMIC),
             getCacheConfiguration(CACHE_NAME_TX).setAtomicityMode(TRANSACTIONAL),
-            getCacheConfiguration(CACHE_NAME_LOCAL_ATOMIC).setAtomicityMode(ATOMIC).setCacheMode(CacheMode.LOCAL),
-            getCacheConfiguration(CACHE_NAME_LOCAL_TX).setAtomicityMode(TRANSACTIONAL).setCacheMode(CacheMode.LOCAL),
             getCacheConfiguration(CACHE_NAME_NEAR_ATOMIC).setAtomicityMode(ATOMIC)
                 .setNearConfiguration(new NearCacheConfiguration<>()),
             getCacheConfiguration(CACHE_NAME_NEAR_TX).setAtomicityMode(TRANSACTIONAL)
@@ -327,8 +317,6 @@
             List<IgniteCache<Object, Object>> caches = F.asList(
                 srv.cache(CACHE_NAME_ATOMIC),
                 srv.cache(CACHE_NAME_TX),
-                srv.cache(CACHE_NAME_LOCAL_ATOMIC),
-                srv.cache(CACHE_NAME_LOCAL_TX),
                 srv.cache(CACHE_NAME_NEAR_ATOMIC),
                 srv.cache(CACHE_NAME_NEAR_TX)
             );
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/pagemem/PageMemoryLazyAllocationTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/pagemem/PageMemoryLazyAllocationTest.java
index f5b408e..24386e5 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/pagemem/PageMemoryLazyAllocationTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/pagemem/PageMemoryLazyAllocationTest.java
@@ -154,32 +154,6 @@
 
     /** @throws Exception If failed. */
     @Test
-    public void testLocalCacheOnClientNodeWithLazyAllocation() throws Exception {
-        lazyAllocation = true;
-
-        IgniteEx srv = startSrv()[0];
-
-        IgniteCacheDatabaseSharedManager srvDb = srv.context().cache().context().database();
-
-        checkMemoryAllocated(srvDb.dataRegion(EAGER_REGION).pageMemory());
-        checkMemoryNotAllocated(srvDb.dataRegion(LAZY_REGION).pageMemory());
-
-        IgniteEx clnt = startClientGrid(2);
-
-        IgniteCacheDatabaseSharedManager clntDb = clnt.context().cache().context().database();
-
-        checkMemoryNotAllocated(clntDb.dataRegion(EAGER_REGION).pageMemory());
-        checkMemoryNotAllocated(clntDb.dataRegion(LAZY_REGION).pageMemory());
-
-        createCacheAndPut(clnt, CacheMode.LOCAL);
-
-        checkMemoryNotAllocated(clntDb.dataRegion(EAGER_REGION).pageMemory());
-        //LOCAL Cache was created in LAZY_REGION so it has to be allocated on client node.
-        checkMemoryAllocated(clntDb.dataRegion(LAZY_REGION).pageMemory());
-    }
-
-    /** @throws Exception If failed. */
-    @Test
     public void testStopNotAllocatedRegions() throws Exception {
         IgniteEx srv = startSrv()[0];
 
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/pagemem/PageMemoryLazyAllocationWithPDSTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/pagemem/PageMemoryLazyAllocationWithPDSTest.java
index 0417d33..71c1913 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/pagemem/PageMemoryLazyAllocationWithPDSTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/pagemem/PageMemoryLazyAllocationWithPDSTest.java
@@ -23,9 +23,7 @@
 import org.apache.ignite.failure.StopNodeFailureHandler;
 import org.apache.ignite.internal.IgniteEx;
 import org.jetbrains.annotations.NotNull;
-import org.junit.Ignore;
 import org.junit.Test;
-
 import static org.apache.ignite.internal.util.IgniteUtils.GB;
 
 /** */
@@ -33,12 +31,6 @@
     /** */
     public static final long PETA_BYTE = 1024 * GB;
 
-    /** {@inheritDoc} */
-    @Ignore("https://issues.apache.org/jira/browse/IGNITE-11677")
-    @Override public void testLocalCacheOnClientNodeWithLazyAllocation() throws Exception {
-        // No-op.
-    }
-
     /** */
     @Test
     public void testNodeRestart() throws Exception {
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/query/CacheScanQueryFailoverTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/query/CacheScanQueryFailoverTest.java
index 776ab5c..06235b6 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/query/CacheScanQueryFailoverTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/query/CacheScanQueryFailoverTest.java
@@ -47,8 +47,6 @@
 import org.apache.ignite.testframework.GridTestUtils;
 import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
 import org.junit.Test;
-
-import static org.apache.ignite.cache.CacheMode.LOCAL;
 import static org.apache.ignite.cache.CacheMode.PARTITIONED;
 import static org.apache.ignite.internal.processors.cache.distributed.dht.topology.GridDhtPartitionState.EVICTED;
 
@@ -56,9 +54,6 @@
  * ScanQuery failover test. Tests scenario where user supplied closures throw unhandled errors.
  */
 public class CacheScanQueryFailoverTest extends GridCommonAbstractTest {
-    /** */
-    private static final String LOCAL_CACHE_NAME = "local";
-
     /** {@inheritDoc} */
     @Override protected void beforeTest() throws Exception {
         super.beforeTest();
@@ -104,18 +99,6 @@
     }
 
     /**
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testScanQueryOverLocalCacheWithFailedClosures() throws Exception {
-        Ignite srv = startGridsMultiThreaded(4);
-
-        queryCachesWithFailedPredicates(srv, new CacheConfiguration(LOCAL_CACHE_NAME).setCacheMode(LOCAL));
-
-        assertEquals(srv.cluster().nodes().size(), 4);
-    }
-
-    /**
      * Test scan query when partitions are concurrently evicting.
      */
     @Test
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/query/continuous/CacheContinuousQueryCounterAbstractTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/query/continuous/CacheContinuousQueryCounterAbstractTest.java
index 19c0656..c86030e 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/query/continuous/CacheContinuousQueryCounterAbstractTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/query/continuous/CacheContinuousQueryCounterAbstractTest.java
@@ -52,10 +52,8 @@
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 import org.junit.Test;
-
 import static java.util.concurrent.TimeUnit.MILLISECONDS;
 import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL;
-import static org.apache.ignite.cache.CacheMode.LOCAL;
 import static org.apache.ignite.cache.CacheRebalanceMode.ASYNC;
 import static org.apache.ignite.cache.CacheWriteSynchronizationMode.FULL_SYNC;
 
@@ -234,9 +232,6 @@
      */
     @Test
     public void testTwoQueryListener() throws Exception {
-        if (cacheMode() == LOCAL)
-            return;
-
         final IgniteCache<Integer, Integer> cache = grid(0).cache(CACHE_NAME);
         final IgniteCache<Integer, Integer> cache1 = grid(1).cache(CACHE_NAME);
 
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/query/continuous/CacheContinuousQueryExecuteInPrimaryTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/query/continuous/CacheContinuousQueryExecuteInPrimaryTest.java
index ada36cb..50ad61c 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/query/continuous/CacheContinuousQueryExecuteInPrimaryTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/query/continuous/CacheContinuousQueryExecuteInPrimaryTest.java
@@ -44,14 +44,11 @@
 import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
 import org.apache.ignite.transactions.Transaction;
 import org.jetbrains.annotations.NotNull;
-import org.junit.Ignore;
 import org.junit.Test;
-
 import static java.util.concurrent.TimeUnit.MILLISECONDS;
 import static org.apache.ignite.cache.CacheAtomicityMode.ATOMIC;
 import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL;
 import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL_SNAPSHOT;
-import static org.apache.ignite.cache.CacheMode.LOCAL;
 import static org.apache.ignite.cache.CacheMode.PARTITIONED;
 import static org.apache.ignite.cache.CacheMode.REPLICATED;
 import static org.apache.ignite.cache.CacheWriteSynchronizationMode.FULL_SYNC;
@@ -98,17 +95,6 @@
      * @throws Exception If failed.
      */
     @Test
-    public void testLocalCache() throws Exception {
-        CacheConfiguration<Integer, String> ccfg = cacheConfiguration(ATOMIC, LOCAL);
-
-        doTestWithoutEventsEntries(ccfg);
-        doTestWithEventsEntries(ccfg);
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    @Test
     public void testReplicatedCache() throws Exception {
         CacheConfiguration<Integer, String> ccfg = cacheConfiguration(ATOMIC, REPLICATED);
 
@@ -131,17 +117,6 @@
      * @throws Exception If failed.
      */
     @Test
-    public void testTransactionLocalCache() throws Exception {
-        CacheConfiguration<Integer, String> ccfg = cacheConfiguration(TRANSACTIONAL, LOCAL);
-
-        doTestWithoutEventsEntries(ccfg);
-        doTestWithEventsEntries(ccfg);
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    @Test
     public void testTransactionReplicatedCache() throws Exception {
         CacheConfiguration<Integer, String> ccfg = cacheConfiguration(TRANSACTIONAL, REPLICATED);
 
@@ -163,18 +138,6 @@
     /**
      * @throws Exception If failed.
      */
-    @Ignore("https://issues.apache.org/jira/browse/IGNITE-9530")
-    @Test
-    public void testMvccTransactionLocalCache() throws Exception {
-        CacheConfiguration<Integer, String> ccfg = cacheConfiguration(TRANSACTIONAL_SNAPSHOT, LOCAL);
-
-        doTestWithoutEventsEntries(ccfg);
-        doTestWithEventsEntries(ccfg);
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
     @Test
     public void testMvccTransactionReplicatedCache() throws Exception {
         CacheConfiguration<Integer, String> ccfg = cacheConfiguration(TRANSACTIONAL_SNAPSHOT, REPLICATED);
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/query/continuous/CacheContinuousWithTransformerLocalSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/query/continuous/CacheContinuousWithTransformerLocalSelfTest.java
deleted file mode 100644
index f01764f..0000000
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/query/continuous/CacheContinuousWithTransformerLocalSelfTest.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache.query.continuous;
-
-import org.apache.ignite.cache.CacheMode;
-
-/**
- */
-public class CacheContinuousWithTransformerLocalSelfTest extends CacheContinuousWithTransformerReplicatedSelfTest {
-    /** {@inheritDoc} */
-    @Override protected CacheMode cacheMode() {
-        return CacheMode.LOCAL;
-    }
-}
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/query/continuous/GridCacheContinuousQueryAbstractSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/query/continuous/GridCacheContinuousQueryAbstractSelfTest.java
index acd8c80..0fa0540 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/query/continuous/GridCacheContinuousQueryAbstractSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/query/continuous/GridCacheContinuousQueryAbstractSelfTest.java
@@ -75,13 +75,11 @@
 import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
 import org.jetbrains.annotations.Nullable;
 import org.junit.Test;
-
 import static java.util.concurrent.TimeUnit.MILLISECONDS;
 import static java.util.concurrent.TimeUnit.SECONDS;
 import static org.apache.ignite.cache.CacheAtomicityMode.ATOMIC;
 import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL;
 import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL_SNAPSHOT;
-import static org.apache.ignite.cache.CacheMode.LOCAL;
 import static org.apache.ignite.cache.CacheMode.PARTITIONED;
 import static org.apache.ignite.cache.CacheMode.REPLICATED;
 import static org.apache.ignite.cache.CacheRebalanceMode.ASYNC;
@@ -401,9 +399,6 @@
      */
     @Test
     public void testTwoQueryListener() throws Exception {
-        if (cacheMode() == LOCAL)
-            return;
-
         IgniteCache<Integer, Integer> cache = grid(0).cache(DEFAULT_CACHE_NAME);
         IgniteCache<Integer, Integer> cache1 = grid(1).cache(DEFAULT_CACHE_NAME);
 
@@ -482,9 +477,6 @@
      */
     @Test
     public void testRestartQuery() throws Exception {
-        if (cacheMode() == LOCAL)
-            return;
-
         IgniteCache<Integer, Integer> cache = grid(0).cache(DEFAULT_CACHE_NAME);
 
         final int parts = grid(0).affinity(DEFAULT_CACHE_NAME).partitions();
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/query/continuous/GridCacheContinuousQueryLocalAtomicSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/query/continuous/GridCacheContinuousQueryLocalAtomicSelfTest.java
deleted file mode 100644
index 5aa2e56..0000000
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/query/continuous/GridCacheContinuousQueryLocalAtomicSelfTest.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache.query.continuous;
-
-import org.apache.ignite.cache.CacheAtomicityMode;
-
-import static org.apache.ignite.cache.CacheAtomicityMode.ATOMIC;
-
-/**
- * Continuous queries tests for local cache in atomic mode.
- */
-public class GridCacheContinuousQueryLocalAtomicSelfTest extends GridCacheContinuousQueryLocalSelfTest {
-    /** {@inheritDoc} */
-    @Override protected CacheAtomicityMode atomicityMode() {
-        return ATOMIC;
-    }
-}
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/query/continuous/GridCacheContinuousQueryLocalSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/query/continuous/GridCacheContinuousQueryLocalSelfTest.java
deleted file mode 100644
index e909f86..0000000
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/query/continuous/GridCacheContinuousQueryLocalSelfTest.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache.query.continuous;
-
-import org.apache.ignite.cache.CacheMode;
-
-import static org.apache.ignite.cache.CacheMode.LOCAL;
-
-/**
- * Continuous queries tests for local cache.
- */
-public class GridCacheContinuousQueryLocalSelfTest extends GridCacheContinuousQueryAbstractSelfTest {
-    /** {@inheritDoc} */
-    @Override protected CacheMode cacheMode() {
-        return LOCAL;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected int gridCount() {
-        return 1;
-    }
-}
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/store/GridCacheWriteBehindStoreLocalTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/store/GridCacheWriteBehindStoreLocalTest.java
deleted file mode 100644
index d23b687..0000000
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/store/GridCacheWriteBehindStoreLocalTest.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache.store;
-
-import org.apache.ignite.cache.CacheMode;
-import org.apache.ignite.configuration.IgniteConfiguration;
-import org.apache.ignite.testframework.MvccFeatureChecker;
-import org.junit.Before;
-
-/**
- * Tests {@link org.apache.ignite.internal.processors.cache.store.GridCacheWriteBehindStore} in grid configuration.
- */
-public class GridCacheWriteBehindStoreLocalTest extends GridCacheWriteBehindStoreAbstractTest {
-    /** */
-    @Before
-    public void beforeGridCacheWriteBehindStoreLocalTest() {
-        MvccFeatureChecker.skipIfNotSupported(MvccFeatureChecker.Feature.LOCAL_CACHE);
-    }
-
-    /** {@inheritDoc} */
-    @Override protected final IgniteConfiguration getConfiguration() throws Exception {
-        MvccFeatureChecker.skipIfNotSupported(MvccFeatureChecker.Feature.LOCAL_CACHE);
-
-        return super.getConfiguration();
-    }
-
-    /** {@inheritDoc} */
-    @Override protected CacheMode cacheMode() {
-        return CacheMode.LOCAL;
-    }
-}
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/transactions/TxLocalDhtMixedCacheModesTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/transactions/TxLocalDhtMixedCacheModesTest.java
deleted file mode 100644
index 72bca53..0000000
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/transactions/TxLocalDhtMixedCacheModesTest.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache.transactions;
-
-import org.apache.ignite.IgniteCache;
-import org.apache.ignite.configuration.CacheConfiguration;
-import org.apache.ignite.configuration.IgniteConfiguration;
-import org.apache.ignite.internal.IgniteEx;
-import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
-import org.apache.ignite.transactions.Transaction;
-import org.junit.Test;
-
-import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL;
-import static org.apache.ignite.cache.CacheMode.LOCAL;
-
-/**
- * Test tx spanning multiple tx and dht caches.
- */
-public class TxLocalDhtMixedCacheModesTest extends GridCommonAbstractTest {
-    /** {@inheritDoc} */
-    @Override protected IgniteConfiguration getConfiguration(String igniteInstanceName) throws Exception {
-        IgniteConfiguration cfg = super.getConfiguration(igniteInstanceName);
-
-        cfg.setCacheConfiguration(new CacheConfiguration().
-            setName(DEFAULT_CACHE_NAME).
-            setCacheMode(LOCAL).
-            setAtomicityMode(TRANSACTIONAL));
-
-        return cfg;
-    }
-
-    /**
-     *
-     */
-    @Test
-    public void testTxLocalDhtMixedCacheModes() throws Exception {
-        try {
-            IgniteEx g0 = startGrid(0);
-
-            IgniteCache cache1 = g0.cache(DEFAULT_CACHE_NAME);
-            IgniteCache cache2 = g0.getOrCreateCache(new CacheConfiguration<>(DEFAULT_CACHE_NAME + 1).
-                setAtomicityMode(TRANSACTIONAL));
-
-            cache1.put(1, 1);
-            cache2.put(1, 2);
-
-            // Commit.
-            try (Transaction tx = g0.transactions().txStart()) {
-                cache1.put(1, 10);
-                cache2.put(1, 20);
-
-                tx.commit();
-            }
-
-            assertEquals(10, cache1.get(1));
-            assertEquals(20, cache2.get(1));
-
-            // Rollback.
-            try (Transaction tx = g0.transactions().txStart()) {
-                cache1.put(1, 100);
-                cache2.put(1, 200);
-            }
-
-            assertEquals(10, cache1.get(1));
-            assertEquals(20, cache2.get(1));
-        }
-        finally {
-            stopAllGrids();
-        }
-    }
-}
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/transactions/TxPessimisticDeadlockDetectionTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/transactions/TxPessimisticDeadlockDetectionTest.java
index 1480b98..395457c 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/transactions/TxPessimisticDeadlockDetectionTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/transactions/TxPessimisticDeadlockDetectionTest.java
@@ -49,8 +49,6 @@
 import org.apache.ignite.transactions.TransactionDeadlockException;
 import org.apache.ignite.transactions.TransactionTimeoutException;
 import org.junit.Test;
-
-import static org.apache.ignite.cache.CacheMode.LOCAL;
 import static org.apache.ignite.cache.CacheMode.PARTITIONED;
 import static org.apache.ignite.cache.CacheMode.REPLICATED;
 import static org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion.NONE;
@@ -141,29 +139,6 @@
     }
 
     /**
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testDeadlocksLocal() throws Exception {
-        for (CacheWriteSynchronizationMode syncMode : CacheWriteSynchronizationMode.values()) {
-            IgniteCache cache = null;
-
-            try {
-                cache = createCache(LOCAL, syncMode, false);
-
-                awaitPartitionMapExchange();
-
-                doTestDeadlock(2, true, true, false, ORDINAL_START_KEY);
-                doTestDeadlock(2, true, true, false, CUSTOM_START_KEY);
-            }
-            finally {
-                if (cache != null)
-                    cache.destroy();
-            }
-        }
-    }
-
-    /**
      * @param cacheMode Cache mode.
      * @param syncMode Write sync mode.
      * @param near Near.
@@ -184,9 +159,6 @@
         ccfg.setNearConfiguration(near ? new NearCacheConfiguration() : null);
         ccfg.setWriteSynchronizationMode(syncMode);
 
-        if (cacheMode == LOCAL)
-            ccfg.setDataRegionName("dfltPlc");
-
         IgniteCache cache = ignite(0).createCache(ccfg);
 
         if (near) {
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/version/CacheVersionedEntryLocalAtomicSwapDisabledSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/version/CacheVersionedEntryLocalAtomicSwapDisabledSelfTest.java
deleted file mode 100644
index 04cf784..0000000
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/version/CacheVersionedEntryLocalAtomicSwapDisabledSelfTest.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache.version;
-
-import org.apache.ignite.cache.CacheAtomicityMode;
-import org.apache.ignite.cache.CacheMode;
-
-/**
- *
- */
-public class CacheVersionedEntryLocalAtomicSwapDisabledSelfTest extends CacheVersionedEntryAbstractTest {
-    /** {@inheritDoc} */
-    @Override protected int gridCount() {
-        return 1;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected CacheMode cacheMode() {
-        return CacheMode.LOCAL;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected CacheAtomicityMode atomicityMode() {
-        return CacheAtomicityMode.ATOMIC;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected boolean swapEnabled() {
-        return false;
-    }
-}
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/version/CacheVersionedEntryLocalTransactionalSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/version/CacheVersionedEntryLocalTransactionalSelfTest.java
deleted file mode 100644
index f120994..0000000
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/version/CacheVersionedEntryLocalTransactionalSelfTest.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache.version;
-
-import org.apache.ignite.cache.CacheAtomicityMode;
-import org.apache.ignite.cache.CacheMode;
-import org.apache.ignite.configuration.CacheConfiguration;
-import org.apache.ignite.testframework.MvccFeatureChecker;
-import org.junit.Before;
-
-/**
- *
- */
-public class CacheVersionedEntryLocalTransactionalSelfTest extends CacheVersionedEntryAbstractTest {
-    /** {@inheritDoc} */
-    @Override protected int gridCount() {
-        return 1;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected CacheMode cacheMode() {
-        return CacheMode.LOCAL;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected CacheAtomicityMode atomicityMode() {
-        return CacheAtomicityMode.TRANSACTIONAL;
-    }
-
-    /** */
-    @Before
-    public void beforeCacheVersionedEntryLocalTransactionalSelfTest() {
-        MvccFeatureChecker.skipIfNotSupported(MvccFeatureChecker.Feature.LOCAL_CACHE);
-    }
-
-    /** {@inheritDoc} */
-    @Override protected CacheConfiguration cacheConfiguration(String igniteInstanceName) throws Exception {
-        MvccFeatureChecker.skipIfNotSupported(MvccFeatureChecker.Feature.LOCAL_CACHE);
-
-        return super.cacheConfiguration(igniteInstanceName);
-    }
-}
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/datastreamer/DataStreamProcessorMvccSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/datastreamer/DataStreamProcessorMvccSelfTest.java
index 31da903..1430194 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/datastreamer/DataStreamProcessorMvccSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/datastreamer/DataStreamProcessorMvccSelfTest.java
@@ -22,7 +22,6 @@
 import org.apache.ignite.configuration.IgniteConfiguration;
 import org.junit.Ignore;
 import org.junit.Test;
-
 import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL_SNAPSHOT;
 
 /**
@@ -67,13 +66,6 @@
     }
 
     /** {@inheritDoc} */
-    @Ignore("https://issues.apache.org/jira/browse/IGNITE-9530")
-    @Test
-    @Override public void testLocal() throws Exception {
-        super.testLocal();
-    }
-
-    /** {@inheritDoc} */
     @Test
     @Override public void testTryFlush() throws Exception {
         super.testTryFlush();
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/datastreamer/DataStreamProcessorSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/datastreamer/DataStreamProcessorSelfTest.java
index 6598e3e..c328491 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/datastreamer/DataStreamProcessorSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/datastreamer/DataStreamProcessorSelfTest.java
@@ -29,7 +29,6 @@
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.atomic.AtomicInteger;
 import javax.cache.Cache;
-import javax.cache.CacheException;
 import org.apache.ignite.Ignite;
 import org.apache.ignite.IgniteCache;
 import org.apache.ignite.IgniteDataStreamer;
@@ -69,10 +68,8 @@
 import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
 import org.jetbrains.annotations.Nullable;
 import org.junit.Test;
-
 import static java.util.concurrent.TimeUnit.MILLISECONDS;
 import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL;
-import static org.apache.ignite.cache.CacheMode.LOCAL;
 import static org.apache.ignite.cache.CacheMode.PARTITIONED;
 import static org.apache.ignite.cache.CacheMode.REPLICATED;
 import static org.apache.ignite.cache.CacheWriteSynchronizationMode.FULL_SYNC;
@@ -217,26 +214,6 @@
     /**
      * @throws Exception If failed.
      */
-    @Test
-    public void testLocal() throws Exception {
-        MvccFeatureChecker.skipIfNotSupported(MvccFeatureChecker.Feature.LOCAL_CACHE);
-
-        mode = LOCAL;
-
-        try {
-            checkDataStreamer();
-
-            assert false;
-        }
-        catch (CacheException e) {
-            // Cannot load local cache configured remotely.
-            info("Caught expected exception: " + e);
-        }
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
     private void checkDataStreamer() throws Exception {
         try {
             useCache = true;
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/query/ScanQueriesTopologyMappingTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/query/ScanQueriesTopologyMappingTest.java
index ef65191..52ebc84 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/query/ScanQueriesTopologyMappingTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/query/ScanQueriesTopologyMappingTest.java
@@ -83,35 +83,6 @@
     }
 
     /** */
-    @Test
-    public void testLocalCacheQueryMapping() throws Exception {
-        IgniteEx ign0 = startGrid(0);
-
-        IgniteCache<Object, Object> cache = ign0.createCache(new CacheConfiguration<>(GridAbstractTest.DEFAULT_CACHE_NAME)
-            .setCacheMode(CacheMode.LOCAL));
-
-        cache.put(1, 2);
-
-        startGrid(1);
-
-        ScanQuery<Object, Object> qry = new ScanQuery<>();
-
-        {
-            List<Cache.Entry<Object, Object>> res0 = grid(0).cache(GridAbstractTest.DEFAULT_CACHE_NAME).query(qry).getAll();
-
-            assertEquals(1, res0.size());
-            assertEquals(1, res0.get(0).getKey());
-            assertEquals(2, res0.get(0).getValue());
-        }
-
-        {
-            List<Cache.Entry<Object, Object>> res1 = grid(1).cache(GridAbstractTest.DEFAULT_CACHE_NAME).query(qry).getAll();
-
-            assertTrue(res1.isEmpty());
-        }
-    }
-
-    /** */
     private void checkQueryWithRebalance(CacheMode cacheMode) throws Exception {
         IgniteEx ign0 = startGrid(0);
 
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/rest/handlers/cache/GridCacheCommandHandlerSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/rest/handlers/cache/GridCacheCommandHandlerSelfTest.java
index fade4f5..f4e290d 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/rest/handlers/cache/GridCacheCommandHandlerSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/rest/handlers/cache/GridCacheCommandHandlerSelfTest.java
@@ -71,7 +71,7 @@
         // Cache config.
         CacheConfiguration cacheCfg = defaultCacheConfiguration();
 
-        cacheCfg.setCacheMode(CacheMode.LOCAL);
+        cacheCfg.setCacheMode(CacheMode.REPLICATED);
 
         cacheCfg.setAtomicityMode(atomicityMode());
 
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/rest/handlers/top/CacheTopologyCommandHandlerTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/rest/handlers/top/CacheTopologyCommandHandlerTest.java
index 1e4a47b..d3fb7db 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/rest/handlers/top/CacheTopologyCommandHandlerTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/rest/handlers/top/CacheTopologyCommandHandlerTest.java
@@ -48,7 +48,7 @@
 
         // Cache config.
         CacheConfiguration ccfg = new CacheConfiguration("cache*")
-            .setCacheMode(CacheMode.LOCAL)
+            .setCacheMode(CacheMode.REPLICATED)
             .setAtomicityMode(CacheAtomicityMode.ATOMIC);
 
         ConnectorConfiguration clnCfg = new ConnectorConfiguration()
diff --git a/modules/core/src/test/java/org/apache/ignite/loadtests/hashmap/GridCacheTestContext.java b/modules/core/src/test/java/org/apache/ignite/loadtests/hashmap/GridCacheTestContext.java
index 0d765c1..018fccb 100644
--- a/modules/core/src/test/java/org/apache/ignite/loadtests/hashmap/GridCacheTestContext.java
+++ b/modules/core/src/test/java/org/apache/ignite/loadtests/hashmap/GridCacheTestContext.java
@@ -44,7 +44,7 @@
 import org.apache.ignite.internal.processors.cache.jta.CacheNoopJtaManager;
 import org.apache.ignite.internal.processors.cache.persistence.IgniteCacheDatabaseSharedManager;
 import org.apache.ignite.internal.processors.cache.persistence.snapshot.IgniteCacheSnapshotManager;
-import org.apache.ignite.internal.processors.cache.query.GridCacheLocalQueryManager;
+import org.apache.ignite.internal.processors.cache.query.GridCacheDistributedQueryManager;
 import org.apache.ignite.internal.processors.cache.query.continuous.CacheContinuousQueryManager;
 import org.apache.ignite.internal.processors.cache.store.CacheOsStoreManager;
 import org.apache.ignite.internal.processors.cache.transactions.IgniteTxManager;
@@ -52,7 +52,6 @@
 import org.apache.ignite.internal.processors.plugin.CachePluginManager;
 import org.apache.ignite.lang.IgniteUuid;
 import org.apache.ignite.testframework.junits.GridTestKernalContext;
-
 import static org.apache.ignite.testframework.junits.GridAbstractTest.defaultCacheConfiguration;
 
 /**
@@ -102,7 +101,7 @@
             new GridCacheEventManager(),
             new CacheOsStoreManager(null, new CacheConfiguration()),
             new GridCacheEvictionManager(),
-            new GridCacheLocalQueryManager<K, V>(),
+            new GridCacheDistributedQueryManager<>(),
             new CacheContinuousQueryManager(),
             new CacheDataStructuresManager(),
             new GridCacheTtlManager(),
diff --git a/modules/core/src/test/java/org/apache/ignite/testframework/MvccFeatureChecker.java b/modules/core/src/test/java/org/apache/ignite/testframework/MvccFeatureChecker.java
index 4296187..3b6c1ed 100644
--- a/modules/core/src/test/java/org/apache/ignite/testframework/MvccFeatureChecker.java
+++ b/modules/core/src/test/java/org/apache/ignite/testframework/MvccFeatureChecker.java
@@ -19,13 +19,11 @@
 
 import javax.cache.CacheException;
 import org.apache.ignite.IgniteSystemProperties;
-import org.apache.ignite.cache.CacheMode;
 import org.apache.ignite.internal.util.typedef.X;
 import org.apache.ignite.transactions.TransactionConcurrency;
 import org.apache.ignite.transactions.TransactionIsolation;
 import org.apache.ignite.transactions.TransactionSerializationException;
 import org.junit.Assume;
-
 import static org.apache.ignite.IgniteSystemProperties.IGNITE_FORCE_MVCC_MODE_IN_TESTS;
 import static org.junit.Assert.fail;
 
@@ -46,9 +44,6 @@
         NEAR_CACHE,
 
         /** */
-        LOCAL_CACHE,
-
-        /** */
         ENTRY_LOCK,
 
         /** */
@@ -129,16 +124,6 @@
     }
 
     /**
-     * Check if Cache mode is supported.
-     *
-     * @param mode Cache mode.
-     * @return {@code True} if feature is supported, {@code False} otherwise.
-     */
-    public static boolean isSupported(CacheMode mode) {
-        return mode != CacheMode.LOCAL || isSupported(Feature.LOCAL_CACHE);
-    }
-
-    /**
      * Checks if given exception was caused by MVCC write conflict.
      *
      * @param e Exception.
@@ -163,9 +148,6 @@
             case NEAR_CACHE:
                 return "https://issues.apache.org/jira/browse/IGNITE-7187";
 
-            case LOCAL_CACHE:
-                return "https://issues.apache.org/jira/browse/IGNITE-9530";
-
             case CACHE_STORE:
                 return "https://issues.apache.org/jira/browse/IGNITE-8582";
 
diff --git a/modules/core/src/test/java/org/apache/ignite/testframework/junits/common/GridCommonAbstractTest.java b/modules/core/src/test/java/org/apache/ignite/testframework/junits/common/GridCommonAbstractTest.java
index 6c52d1e..2400c79 100755
--- a/modules/core/src/test/java/org/apache/ignite/testframework/junits/common/GridCommonAbstractTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/testframework/junits/common/GridCommonAbstractTest.java
@@ -106,7 +106,6 @@
 import org.apache.ignite.internal.processors.cache.distributed.dht.topology.GridDhtPartitionState;
 import org.apache.ignite.internal.processors.cache.distributed.dht.topology.GridDhtPartitionTopology;
 import org.apache.ignite.internal.processors.cache.distributed.near.GridNearCacheAdapter;
-import org.apache.ignite.internal.processors.cache.local.GridLocalCache;
 import org.apache.ignite.internal.processors.cache.persistence.GridCacheDatabaseSharedManager;
 import org.apache.ignite.internal.processors.cache.persistence.IgniteCacheDatabaseSharedManager;
 import org.apache.ignite.internal.processors.cache.persistence.metastorage.MetaStorage;
@@ -147,11 +146,9 @@
 import org.apache.ignite.transactions.TransactionRollbackException;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
-
 import static java.util.Collections.emptyList;
 import static java.util.stream.Collectors.toList;
 import static java.util.stream.Collectors.toSet;
-import static org.apache.ignite.cache.CacheMode.LOCAL;
 import static org.apache.ignite.cache.CacheRebalanceMode.NONE;
 import static org.apache.ignite.configuration.IgniteConfiguration.DFLT_NETWORK_TIMEOUT;
 import static org.apache.ignite.configuration.IgniteConfiguration.DFLT_SNAPSHOT_DIRECTORY;
@@ -341,13 +338,6 @@
     }
 
     /**
-     * @return Cache.
-     */
-    protected <K, V> GridLocalCache<K, V> local() {
-        return (GridLocalCache<K, V>)((IgniteKernal)grid()).<K, V>internalCache(DEFAULT_CACHE_NAME);
-    }
-
-    /**
      * @param cache Cache.
      * @return DHT cache.
      */
@@ -702,8 +692,7 @@
                 if (cfg == null || cacheNames != null && !cacheNames.contains(cfg.getName()))
                     continue;
 
-                if (cfg.getCacheMode() != LOCAL &&
-                    cfg.getRebalanceMode() != NONE &&
+                if (cfg.getRebalanceMode() != NONE &&
                     g.cluster().nodes().size() > 1) {
                     AffinityFunction aff = cfg.getAffinity();
 
diff --git a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBinaryCacheTestSuite.java b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBinaryCacheTestSuite.java
index 15881cd..3f513f3 100644
--- a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBinaryCacheTestSuite.java
+++ b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBinaryCacheTestSuite.java
@@ -36,7 +36,6 @@
 import org.apache.ignite.internal.processors.cache.binary.distributed.dht.GridCacheAtomicPartitionedOnlyBinaryMultithreadedSelfTest;
 import org.apache.ignite.internal.processors.cache.binary.distributed.dht.GridCacheBinariesNearPartitionedByteArrayValuesSelfTest;
 import org.apache.ignite.internal.processors.cache.binary.distributed.dht.GridCacheBinariesPartitionedOnlyByteArrayValuesSelfTest;
-import org.apache.ignite.internal.processors.cache.expiry.IgniteCacheAtomicLocalExpiryPolicyTest;
 import org.apache.ignite.testframework.GridTestUtils;
 import org.apache.ignite.testframework.junits.DynamicSuite;
 import org.junit.runner.RunWith;
@@ -62,7 +61,6 @@
 
         // Tests below have a special version for Binary Marshaller
         GridTestUtils.addTestIfNeeded(suite, GridCacheAffinityRoutingSelfTest.class, ignoredTests);
-        GridTestUtils.addTestIfNeeded(suite, IgniteCacheAtomicLocalExpiryPolicyTest.class, ignoredTests);
         GridTestUtils.addTestIfNeeded(suite, GridCacheEntryMemorySizeSelfTest.class, ignoredTests);
 
         // Tests that are not ready to be used with BinaryMarshaller
diff --git a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBinaryObjectsTestSuite.java b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBinaryObjectsTestSuite.java
index 07034f1..5bb3a4a 100644
--- a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBinaryObjectsTestSuite.java
+++ b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteBinaryObjectsTestSuite.java
@@ -83,9 +83,6 @@
 import org.apache.ignite.internal.processors.cache.binary.distributed.dht.GridCacheBinaryObjectsPartitionedOnheapSelfTest;
 import org.apache.ignite.internal.processors.cache.binary.distributed.dht.GridCacheBinaryObjectsPartitionedSelfTest;
 import org.apache.ignite.internal.processors.cache.binary.distributed.replicated.GridCacheBinaryObjectsReplicatedSelfTest;
-import org.apache.ignite.internal.processors.cache.binary.local.GridCacheBinaryObjectsAtomicLocalSelfTest;
-import org.apache.ignite.internal.processors.cache.binary.local.GridCacheBinaryObjectsLocalOnheapSelfTest;
-import org.apache.ignite.internal.processors.cache.binary.local.GridCacheBinaryObjectsLocalSelfTest;
 import org.apache.ignite.internal.processors.cache.distributed.IgniteBinaryMetadataUpdateChangingTopologySelfTest;
 import org.junit.runner.RunWith;
 import org.junit.runners.Suite;
@@ -142,9 +139,6 @@
     BinaryFooterOffsetsHeapNonCompactSelfTest.class,
     BinaryFooterOffsetsOffheapNonCompactSelfTest.class,
 
-    GridCacheBinaryObjectsLocalSelfTest.class,
-    GridCacheBinaryObjectsLocalOnheapSelfTest.class,
-    GridCacheBinaryObjectsAtomicLocalSelfTest.class,
     GridCacheBinaryObjectsReplicatedSelfTest.class,
     GridCacheBinaryObjectsPartitionedSelfTest.class,
     GridCacheBinaryObjectsPartitionedNearDisabledSelfTest.class,
diff --git a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheDataStructuresBinarySelfTestSuite.java b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheDataStructuresBinarySelfTestSuite.java
index 8654cf6..2fd808a 100644
--- a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheDataStructuresBinarySelfTestSuite.java
+++ b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheDataStructuresBinarySelfTestSuite.java
@@ -18,8 +18,6 @@
 package org.apache.ignite.testsuites;
 
 import org.apache.ignite.internal.processors.cache.datastructures.GridCacheQueueApiSelfAbstractTest;
-import org.apache.ignite.internal.processors.cache.datastructures.local.GridCacheLocalAtomicQueueApiSelfTest;
-import org.apache.ignite.internal.processors.cache.datastructures.local.GridCacheLocalQueueApiSelfTest;
 import org.apache.ignite.internal.processors.cache.datastructures.partitioned.GridCachePartitionedAtomicQueueApiSelfTest;
 import org.apache.ignite.internal.processors.cache.datastructures.partitioned.GridCachePartitionedQueueApiSelfTest;
 import org.apache.ignite.internal.processors.cache.datastructures.partitioned.IgnitePartitionedQueueNoBackupsTest;
@@ -33,8 +31,6 @@
  */
 @RunWith(Suite.class)
 @Suite.SuiteClasses({
-    GridCacheLocalQueueApiSelfTest.class,
-    GridCacheLocalAtomicQueueApiSelfTest.class,
     GridCacheReplicatedQueueApiSelfTest.class,
     GridCachePartitionedQueueApiSelfTest.class,
     GridCachePartitionedAtomicQueueApiSelfTest.class,
diff --git a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheDataStructuresSelfTestSuite.java b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheDataStructuresSelfTestSuite.java
index 895e841..364f6d9 100644
--- a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheDataStructuresSelfTestSuite.java
+++ b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheDataStructuresSelfTestSuite.java
@@ -38,15 +38,6 @@
 import org.apache.ignite.internal.processors.cache.datastructures.OutOfMemoryVolatileRegionTest;
 import org.apache.ignite.internal.processors.cache.datastructures.SemaphoreFailoverNoWaitingAcquirerTest;
 import org.apache.ignite.internal.processors.cache.datastructures.SemaphoreFailoverSafeReleasePermitsTest;
-import org.apache.ignite.internal.processors.cache.datastructures.local.GridCacheLocalAtomicQueueApiSelfTest;
-import org.apache.ignite.internal.processors.cache.datastructures.local.GridCacheLocalAtomicSetSelfTest;
-import org.apache.ignite.internal.processors.cache.datastructures.local.GridCacheLocalQueueApiSelfTest;
-import org.apache.ignite.internal.processors.cache.datastructures.local.GridCacheLocalSequenceApiSelfTest;
-import org.apache.ignite.internal.processors.cache.datastructures.local.GridCacheLocalSetSelfTest;
-import org.apache.ignite.internal.processors.cache.datastructures.local.IgniteLocalAtomicLongApiSelfTest;
-import org.apache.ignite.internal.processors.cache.datastructures.local.IgniteLocalCountDownLatchSelfTest;
-import org.apache.ignite.internal.processors.cache.datastructures.local.IgniteLocalLockSelfTest;
-import org.apache.ignite.internal.processors.cache.datastructures.local.IgniteLocalSemaphoreSelfTest;
 import org.apache.ignite.internal.processors.cache.datastructures.partitioned.GridCachePartitionedAtomicQueueApiSelfTest;
 import org.apache.ignite.internal.processors.cache.datastructures.partitioned.GridCachePartitionedAtomicQueueCreateMultiNodeSelfTest;
 import org.apache.ignite.internal.processors.cache.datastructures.partitioned.GridCachePartitionedAtomicQueueFailoverDataConsistencySelfTest;
@@ -109,15 +100,6 @@
     GridCachePartitionedQueueFailoverDataConsistencySelfTest.class,
     GridCachePartitionedAtomicQueueFailoverDataConsistencySelfTest.class,
 
-    GridCacheLocalSequenceApiSelfTest.class,
-    GridCacheLocalSetSelfTest.class,
-    GridCacheLocalAtomicSetSelfTest.class,
-    GridCacheLocalQueueApiSelfTest.class,
-    GridCacheLocalAtomicQueueApiSelfTest.class,
-    IgniteLocalCountDownLatchSelfTest.class,
-    IgniteLocalSemaphoreSelfTest.class,
-    IgniteLocalLockSelfTest.class,
-
     GridCacheReplicatedSequenceApiSelfTest.class,
     GridCacheReplicatedSequenceMultiNodeSelfTest.class,
     GridCacheReplicatedQueueApiSelfTest.class,
@@ -168,7 +150,6 @@
     GridCachePartitionedDataStructuresFailoverSelfTest.class,
     GridCacheQueueMultiNodeConsistencySelfTest.class,
 
-    IgniteLocalAtomicLongApiSelfTest.class,
     IgnitePartitionedAtomicLongApiSelfTest.class,
     IgniteReplicatedAtomicLongApiSelfTest.class,
 
diff --git a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheEvictionSelfTestSuite.java b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheEvictionSelfTestSuite.java
index 077b0a3..466c544 100644
--- a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheEvictionSelfTestSuite.java
+++ b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheEvictionSelfTestSuite.java
@@ -27,7 +27,6 @@
 import org.apache.ignite.internal.processors.cache.eviction.EvictionPolicyFailureHandlerTest;
 import org.apache.ignite.internal.processors.cache.eviction.GridCacheConcurrentEvictionConsistencySelfTest;
 import org.apache.ignite.internal.processors.cache.eviction.GridCacheConcurrentEvictionsSelfTest;
-import org.apache.ignite.internal.processors.cache.eviction.GridCacheEmptyEntriesLocalSelfTest;
 import org.apache.ignite.internal.processors.cache.eviction.GridCacheEmptyEntriesPartitionedSelfTest;
 import org.apache.ignite.internal.processors.cache.eviction.GridCacheEvictableEntryEqualsSelfTest;
 import org.apache.ignite.internal.processors.cache.eviction.GridCacheEvictionFilterSelfTest;
@@ -82,7 +81,6 @@
         GridTestUtils.addTestIfNeeded(suite, GridCacheEvictionLockUnlockSelfTest.class, ignoredTests);
         GridTestUtils.addTestIfNeeded(suite, GridCachePreloadingEvictionsSelfTest.class, ignoredTests);
         GridTestUtils.addTestIfNeeded(suite, GridCacheEmptyEntriesPartitionedSelfTest.class, ignoredTests);
-        GridTestUtils.addTestIfNeeded(suite, GridCacheEmptyEntriesLocalSelfTest.class, ignoredTests);
         GridTestUtils.addTestIfNeeded(suite, GridCacheEvictableEntryEqualsSelfTest.class, ignoredTests);
         GridTestUtils.addTestIfNeeded(suite, EvictionPolicyFailureHandlerTest.class, ignoredTests);
 
diff --git a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheFullApiSelfTestSuite.java b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheFullApiSelfTestSuite.java
index 67142a9..4199308 100644
--- a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheFullApiSelfTestSuite.java
+++ b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheFullApiSelfTestSuite.java
@@ -77,11 +77,6 @@
 import org.apache.ignite.internal.processors.cache.distributed.replicated.GridCacheReplicatedMultiNodeFullApiSelfTest;
 import org.apache.ignite.internal.processors.cache.distributed.replicated.GridCacheReplicatedMultiNodeP2PDisabledFullApiSelfTest;
 import org.apache.ignite.internal.processors.cache.distributed.replicated.GridCacheReplicatedNearOnlyMultiNodeFullApiSelfTest;
-import org.apache.ignite.internal.processors.cache.local.GridCacheLocalAtomicFullApiSelfTest;
-import org.apache.ignite.internal.processors.cache.local.GridCacheLocalAtomicWithGroupFullApiSelfTest;
-import org.apache.ignite.internal.processors.cache.local.GridCacheLocalFullApiMultithreadedSelfTest;
-import org.apache.ignite.internal.processors.cache.local.GridCacheLocalFullApiSelfTest;
-import org.apache.ignite.internal.processors.cache.local.GridCacheLocalWithGroupFullApiSelfTest;
 import org.apache.ignite.internal.processors.cache.persistence.standbycluster.extended.GridActivateExtensionTest;
 import org.junit.runner.RunWith;
 import org.junit.runners.Suite;
@@ -91,8 +86,6 @@
  */
 @RunWith(Suite.class)
 @Suite.SuiteClasses({
-    GridCacheLocalFullApiSelfTest.class,
-    GridCacheLocalAtomicFullApiSelfTest.class,
     GridCacheReplicatedFullApiSelfTest.class,
     GridCachePartitionedFullApiSelfTest.class,
     GridCacheAtomicFullApiSelfTest.class,
@@ -156,15 +149,12 @@
     GridCacheAtomicOnheapMultiNodeFullApiSelfTest.class,
 
     // Multithreaded.
-    GridCacheLocalFullApiMultithreadedSelfTest.class,
     GridCacheReplicatedFullApiMultithreadedSelfTest.class,
     GridCachePartitionedFullApiMultithreadedSelfTest.class,
 
     // Other.
     GridCacheClearSelfTest.class,
 
-    GridCacheLocalWithGroupFullApiSelfTest.class,
-    GridCacheLocalAtomicWithGroupFullApiSelfTest.class,
     GridCacheAtomicMultiNodeWithGroupFullApiSelfTest.class,
     GridCacheAtomicNearEnabledMultiNodeWithGroupFullApiSelfTest.class,
     GridCachePartitionedMultiNodeWithGroupFullApiSelfTest.class,
diff --git a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheIteratorsSelfTestSuite.java b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheIteratorsSelfTestSuite.java
index d10c7bf..e1ca694 100644
--- a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheIteratorsSelfTestSuite.java
+++ b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheIteratorsSelfTestSuite.java
@@ -22,7 +22,6 @@
 import java.util.List;
 import org.apache.ignite.internal.processors.cache.distributed.near.GridCachePartitionedIteratorsSelfTest;
 import org.apache.ignite.internal.processors.cache.distributed.replicated.GridCacheReplicatedIteratorsSelfTest;
-import org.apache.ignite.internal.processors.cache.local.GridCacheLocalIteratorsSelfTest;
 import org.apache.ignite.testframework.GridTestUtils;
 
 /**
@@ -36,7 +35,6 @@
     public static List<Class<?>> suite(Collection<Class> ignoredTests) {
         List<Class<?>> suite = new ArrayList<>();
 
-        GridTestUtils.addTestIfNeeded(suite, GridCacheLocalIteratorsSelfTest.class, ignoredTests);
         GridTestUtils.addTestIfNeeded(suite, GridCacheReplicatedIteratorsSelfTest.class, ignoredTests);
         GridTestUtils.addTestIfNeeded(suite, GridCachePartitionedIteratorsSelfTest.class, ignoredTests);
 
diff --git a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheMetricsSelfTestSuite.java b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheMetricsSelfTestSuite.java
index ea62772..8a3a07e 100644
--- a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheMetricsSelfTestSuite.java
+++ b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheMetricsSelfTestSuite.java
@@ -36,11 +36,6 @@
 import org.apache.ignite.internal.processors.cache.distributed.near.GridCachePartitionedMetricsSelfTest;
 import org.apache.ignite.internal.processors.cache.distributed.replicated.GridCacheAtomicReplicatedMetricsSelfTest;
 import org.apache.ignite.internal.processors.cache.distributed.replicated.GridCacheReplicatedMetricsSelfTest;
-import org.apache.ignite.internal.processors.cache.local.GridCacheAtomicLocalMetricsNoStoreSelfTest;
-import org.apache.ignite.internal.processors.cache.local.GridCacheAtomicLocalMetricsSelfTest;
-import org.apache.ignite.internal.processors.cache.local.GridCacheAtomicLocalTckMetricsSelfTestImpl;
-import org.apache.ignite.internal.processors.cache.local.GridCacheLocalAtomicMetricsNoReadThroughSelfTest;
-import org.apache.ignite.internal.processors.cache.local.GridCacheLocalMetricsSelfTest;
 import org.apache.ignite.testframework.GridTestUtils;
 
 /**
@@ -54,8 +49,6 @@
     public static List<Class<?>> suite(Collection<Class> ignoredTests) {
         List<Class<?>> suite = new ArrayList<>();
 
-        GridTestUtils.addTestIfNeeded(suite, GridCacheLocalMetricsSelfTest.class, ignoredTests);
-        GridTestUtils.addTestIfNeeded(suite, GridCacheLocalAtomicMetricsNoReadThroughSelfTest.class, ignoredTests);
         GridTestUtils.addTestIfNeeded(suite, GridCacheNearMetricsSelfTest.class, ignoredTests);
         GridTestUtils.addTestIfNeeded(suite, GridCacheNearAtomicMetricsSelfTest.class, ignoredTests);
         GridTestUtils.addTestIfNeeded(suite, GridCacheReplicatedMetricsSelfTest.class, ignoredTests);
@@ -63,12 +56,9 @@
         GridTestUtils.addTestIfNeeded(suite, GridCachePartitionedHitsAndMissesSelfTest.class, ignoredTests);
 
         // Atomic cache.
-        GridTestUtils.addTestIfNeeded(suite, GridCacheAtomicLocalMetricsSelfTest.class, ignoredTests);
-        GridTestUtils.addTestIfNeeded(suite, GridCacheAtomicLocalMetricsNoStoreSelfTest.class, ignoredTests);
         GridTestUtils.addTestIfNeeded(suite, GridCacheAtomicReplicatedMetricsSelfTest.class, ignoredTests);
         GridTestUtils.addTestIfNeeded(suite, GridCacheAtomicPartitionedMetricsSelfTest.class, ignoredTests);
         GridTestUtils.addTestIfNeeded(suite, GridCacheAtomicPartitionedTckMetricsSelfTestImpl.class, ignoredTests);
-        GridTestUtils.addTestIfNeeded(suite, GridCacheAtomicLocalTckMetricsSelfTestImpl.class, ignoredTests);
 
         GridTestUtils.addTestIfNeeded(suite, CacheGroupsMetricsRebalanceTest.class, ignoredTests);
         GridTestUtils.addTestIfNeeded(suite, CacheValidatorMetricsTest.class, ignoredTests);
diff --git a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheMvccTestSuite1.java b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheMvccTestSuite1.java
index 326ed80..b08c818 100755
--- a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheMvccTestSuite1.java
+++ b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheMvccTestSuite1.java
@@ -47,7 +47,6 @@
 import org.apache.ignite.internal.processors.cache.GridCacheAffinityMapperSelfTest;
 import org.apache.ignite.internal.processors.cache.GridCacheAffinityRoutingSelfTest;
 import org.apache.ignite.internal.processors.cache.GridCacheAsyncOperationsLimitSelfTest;
-import org.apache.ignite.internal.processors.cache.GridCacheConcurrentMapSelfTest;
 import org.apache.ignite.internal.processors.cache.GridCacheConfigurationConsistencySelfTest;
 import org.apache.ignite.internal.processors.cache.GridCacheConfigurationValidationSelfTest;
 import org.apache.ignite.internal.processors.cache.GridCacheLifecycleAwareSelfTest;
@@ -65,12 +64,9 @@
 import org.apache.ignite.internal.processors.cache.GridDataStorageConfigurationConsistencySelfTest;
 import org.apache.ignite.internal.processors.cache.IgniteCacheAtomicConcurrentUnorderedUpdateAllTest;
 import org.apache.ignite.internal.processors.cache.IgniteCacheAtomicInvokeTest;
-import org.apache.ignite.internal.processors.cache.IgniteCacheAtomicLocalInvokeTest;
-import org.apache.ignite.internal.processors.cache.IgniteCacheAtomicLocalWithStoreInvokeTest;
 import org.apache.ignite.internal.processors.cache.IgniteCacheAtomicNearEnabledInvokeTest;
 import org.apache.ignite.internal.processors.cache.IgniteCacheAtomicStopBusySelfTest;
 import org.apache.ignite.internal.processors.cache.IgniteCacheAtomicWithStoreInvokeTest;
-import org.apache.ignite.internal.processors.cache.IgniteCacheEntryListenerAtomicLocalTest;
 import org.apache.ignite.internal.processors.cache.IgniteCacheEntryListenerAtomicReplicatedTest;
 import org.apache.ignite.internal.processors.cache.IgniteCacheEntryListenerAtomicTest;
 import org.apache.ignite.internal.processors.cache.IgniteCacheEntryProcessorCallTest;
@@ -108,7 +104,6 @@
 import org.apache.ignite.internal.processors.cache.distributed.dht.GridCacheAtomicNearCacheSelfTest;
 import org.apache.ignite.internal.processors.cache.distributed.dht.GridCachePartitionsStateValidatorSelfTest;
 import org.apache.ignite.internal.processors.cache.distributed.dht.GridCachePartitionsUpdateCountersAndSizeTest;
-import org.apache.ignite.internal.processors.cache.expiry.IgniteCacheAtomicLocalExpiryPolicyTest;
 import org.apache.ignite.internal.processors.cache.query.continuous.CacheEntryProcessorExternalizableFailedTest;
 import org.apache.ignite.internal.processors.cache.query.continuous.CacheEntryProcessorNonSerializableTest;
 import org.apache.ignite.testframework.junits.DynamicSuite;
@@ -146,13 +141,9 @@
         // Atomic caches.
         ignoredTests.add(IgniteCacheEntryListenerAtomicTest.class);
         ignoredTests.add(IgniteCacheEntryListenerAtomicReplicatedTest.class);
-        ignoredTests.add(IgniteCacheEntryListenerAtomicLocalTest.class);
-        ignoredTests.add(IgniteCacheAtomicLocalExpiryPolicyTest.class);
         ignoredTests.add(IgniteCacheAtomicInvokeTest.class);
         ignoredTests.add(IgniteCacheAtomicNearEnabledInvokeTest.class);
         ignoredTests.add(IgniteCacheAtomicWithStoreInvokeTest.class);
-        ignoredTests.add(IgniteCacheAtomicLocalInvokeTest.class);
-        ignoredTests.add(IgniteCacheAtomicLocalWithStoreInvokeTest.class);
         ignoredTests.add(IgniteCacheAtomicConcurrentUnorderedUpdateAllTest.class);
         ignoredTests.add(GridCachePartitionedLocalStoreSelfTest.class);
         ignoredTests.add(GridCacheReplicatedLocalStoreSelfTest.class);
@@ -194,7 +185,6 @@
         ignoredTests.add(GridCacheAffinityRoutingSelfTest.class);
         ignoredTests.add(GridCacheAffinityRoutingBinarySelfTest.class);
         ignoredTests.add(IgniteClientAffinityAssignmentSelfTest.class);
-        ignoredTests.add(GridCacheConcurrentMapSelfTest.class);
         ignoredTests.add(CacheAffinityCallSelfTest.class);
         ignoredTests.add(GridCacheAffinityMapperSelfTest.class);
         ignoredTests.add(GridCacheAffinityApiSelfTest.class);
diff --git a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheMvccTestSuite2.java b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheMvccTestSuite2.java
index 49a1779..b6fb69f 100644
--- a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheMvccTestSuite2.java
+++ b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheMvccTestSuite2.java
@@ -100,10 +100,6 @@
 import org.apache.ignite.internal.processors.cache.distributed.near.NearCacheSyncUpdateTest;
 import org.apache.ignite.internal.processors.cache.distributed.near.NoneRebalanceModeSelfTest;
 import org.apache.ignite.internal.processors.cache.distributed.replicated.GridCacheReplicatedJobExecutionTest;
-import org.apache.ignite.internal.processors.cache.local.GridCacheLocalAtomicBasicStoreSelfTest;
-import org.apache.ignite.internal.processors.cache.local.GridCacheLocalAtomicGetAndTransformStoreSelfTest;
-import org.apache.ignite.internal.processors.cache.local.GridCacheLocalBasicStoreMultithreadedSelfTest;
-import org.apache.ignite.internal.processors.cache.local.GridCacheLocalTxReadTest;
 import org.apache.ignite.internal.processors.cache.persistence.MemoryPolicyInitializationTest;
 import org.apache.ignite.internal.processors.continuous.IgniteContinuousQueryMetadataUpdateTest;
 import org.apache.ignite.internal.processors.continuous.IgniteNoCustomEventsOnNodeStart;
@@ -145,8 +141,6 @@
         ignoredTests.add(GridCachePartitionedMultiThreadedPutGetSelfTest.class); // On-heap test.
 
         // Atomic cache tests.
-        ignoredTests.add(GridCacheLocalAtomicBasicStoreSelfTest.class);
-        ignoredTests.add(GridCacheLocalAtomicGetAndTransformStoreSelfTest.class);
         ignoredTests.add(GridCacheAtomicNearMultiNodeSelfTest.class);
         ignoredTests.add(GridCacheAtomicNearReadersSelfTest.class);
         ignoredTests.add(GridCachePartitionedAtomicGetAndTransformStoreSelfTest.class);
@@ -210,8 +204,6 @@
         ignoredTests.add(GridCacheColocatedDebugTest.class);
         ignoredTests.add(GridCacheDhtEvictionNearReadersSelfTest.class);
         ignoredTests.add(GridCacheDhtPreloadMessageCountTest.class);
-        ignoredTests.add(GridCacheLocalBasicStoreMultithreadedSelfTest.class);
-        ignoredTests.add(GridCacheLocalTxReadTest.class);
         ignoredTests.add(NearCacheMultithreadedUpdateTest.class);
         ignoredTests.add(GridCachePartitionedEvictionSelfTest.class);
         ignoredTests.add(GridCachePartitionedNearDisabledMetricsSelfTest.class);
diff --git a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheMvccTestSuite3.java b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheMvccTestSuite3.java
index 5899504..0828a15 100644
--- a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheMvccTestSuite3.java
+++ b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheMvccTestSuite3.java
@@ -21,7 +21,6 @@
 import java.util.HashSet;
 import java.util.List;
 import org.apache.ignite.IgniteSystemProperties;
-import org.apache.ignite.internal.processors.cache.CacheInterceptorPartitionCounterLocalSanityTest;
 import org.apache.ignite.internal.processors.cache.CacheInterceptorPartitionCounterRandomOperationsTest;
 import org.apache.ignite.internal.processors.cache.GridCacheAtomicEntryProcessorDeploymentSelfTest;
 import org.apache.ignite.internal.processors.cache.GridCacheEntryVersionSelfTest;
@@ -31,8 +30,6 @@
 import org.apache.ignite.internal.processors.cache.GridCacheInterceptorAtomicSelfTest;
 import org.apache.ignite.internal.processors.cache.GridCacheInterceptorAtomicWithStoreReplicatedSelfTest;
 import org.apache.ignite.internal.processors.cache.GridCacheInterceptorAtomicWithStoreSelfTest;
-import org.apache.ignite.internal.processors.cache.GridCacheInterceptorLocalAtomicSelfTest;
-import org.apache.ignite.internal.processors.cache.GridCacheInterceptorLocalAtomicWithStoreSelfTest;
 import org.apache.ignite.internal.processors.cache.GridCacheValueBytesPreloadingSelfTest;
 import org.apache.ignite.internal.processors.cache.GridCacheVersionSelfTest;
 import org.apache.ignite.internal.processors.cache.GridCacheVersionTopologyChangeTest;
@@ -77,7 +74,6 @@
         ignoredTests.add(GridCacheEntryVersionSelfTest.class);
         ignoredTests.add(GridCacheVersionTopologyChangeTest.class);
         ignoredTests.add(CacheAsyncOperationsTest.class);
-        ignoredTests.add(CacheInterceptorPartitionCounterLocalSanityTest.class);
         ignoredTests.add(CacheInterceptorPartitionCounterRandomOperationsTest.class);
         ignoredTests.add(IgniteCacheGroupsTest.class);
 
@@ -97,8 +93,6 @@
         ignoredTests.add(IgnteCacheClientWriteBehindStoreAtomicTest.class);
         ignoredTests.add(IgnteCacheClientWriteBehindStoreNonCoalescingTest.class);
 
-        ignoredTests.add(GridCacheInterceptorLocalAtomicSelfTest.class);
-        ignoredTests.add(GridCacheInterceptorLocalAtomicWithStoreSelfTest.class);
         ignoredTests.add(GridCacheInterceptorAtomicSelfTest.class);
         ignoredTests.add(GridCacheInterceptorAtomicNearEnabledSelfTest.class);
         ignoredTests.add(GridCacheInterceptorAtomicWithStoreSelfTest.class);
diff --git a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheMvccTestSuite4.java b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheMvccTestSuite4.java
index 005677f..44843e5 100644
--- a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheMvccTestSuite4.java
+++ b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheMvccTestSuite4.java
@@ -32,7 +32,6 @@
 import org.apache.ignite.internal.processors.cache.CacheGetRemoveSkipStoreTest;
 import org.apache.ignite.internal.processors.cache.CacheOffheapMapEntrySelfTest;
 import org.apache.ignite.internal.processors.cache.CacheReadThroughAtomicRestartSelfTest;
-import org.apache.ignite.internal.processors.cache.CacheReadThroughLocalAtomicRestartSelfTest;
 import org.apache.ignite.internal.processors.cache.CacheReadThroughReplicatedAtomicRestartSelfTest;
 import org.apache.ignite.internal.processors.cache.CacheStoreUsageMultinodeDynamicStartAtomicTest;
 import org.apache.ignite.internal.processors.cache.CacheStoreUsageMultinodeStaticStartAtomicTest;
@@ -41,8 +40,6 @@
 import org.apache.ignite.internal.processors.cache.GridCacheMultinodeUpdateAtomicSelfTest;
 import org.apache.ignite.internal.processors.cache.GridCacheVersionMultinodeTest;
 import org.apache.ignite.internal.processors.cache.IgniteCacheAtomicCopyOnReadDisabledTest;
-import org.apache.ignite.internal.processors.cache.IgniteCacheAtomicLocalPeekModesTest;
-import org.apache.ignite.internal.processors.cache.IgniteCacheAtomicLocalStoreValueTest;
 import org.apache.ignite.internal.processors.cache.IgniteCacheAtomicNearEnabledStoreValueTest;
 import org.apache.ignite.internal.processors.cache.IgniteCacheAtomicNearPeekModesTest;
 import org.apache.ignite.internal.processors.cache.IgniteCacheAtomicPeekModesTest;
@@ -76,10 +73,6 @@
 import org.apache.ignite.internal.processors.cache.distributed.dht.IgniteCrossCacheTxSelfTest;
 import org.apache.ignite.internal.processors.cache.integration.IgniteCacheAtomicLoadAllTest;
 import org.apache.ignite.internal.processors.cache.integration.IgniteCacheAtomicLoaderWriterTest;
-import org.apache.ignite.internal.processors.cache.integration.IgniteCacheAtomicLocalLoadAllTest;
-import org.apache.ignite.internal.processors.cache.integration.IgniteCacheAtomicLocalNoLoadPreviousValueTest;
-import org.apache.ignite.internal.processors.cache.integration.IgniteCacheAtomicLocalNoReadThroughTest;
-import org.apache.ignite.internal.processors.cache.integration.IgniteCacheAtomicLocalNoWriteThroughTest;
 import org.apache.ignite.internal.processors.cache.integration.IgniteCacheAtomicNearEnabledNoLoadPreviousValueTest;
 import org.apache.ignite.internal.processors.cache.integration.IgniteCacheAtomicNearEnabledNoReadThroughTest;
 import org.apache.ignite.internal.processors.cache.integration.IgniteCacheAtomicNearEnabledNoWriteThroughTest;
@@ -89,7 +82,6 @@
 import org.apache.ignite.internal.processors.cache.integration.IgniteCacheAtomicStoreSessionTest;
 import org.apache.ignite.internal.processors.cache.integration.IgniteCacheAtomicStoreSessionWriteBehindTest;
 import org.apache.ignite.internal.processors.cache.integration.IgniteCacheJdbcBlobStoreNodeRestartTest;
-import org.apache.ignite.internal.processors.cache.version.CacheVersionedEntryLocalAtomicSwapDisabledSelfTest;
 import org.apache.ignite.internal.processors.cache.version.CacheVersionedEntryPartitionedAtomicSelfTest;
 import org.apache.ignite.internal.processors.cache.version.CacheVersionedEntryReplicatedAtomicSelfTest;
 import org.apache.ignite.testframework.junits.DynamicSuite;
@@ -137,26 +129,20 @@
         ignoredTests.add(GridCacheMultinodeUpdateAtomicSelfTest.class);
         ignoredTests.add(GridCacheMultinodeUpdateAtomicNearEnabledSelfTest.class);
         ignoredTests.add(IgniteCacheAtomicLoadAllTest.class);
-        ignoredTests.add(IgniteCacheAtomicLocalLoadAllTest.class);
         ignoredTests.add(IgniteCacheAtomicLoaderWriterTest.class);
         ignoredTests.add(IgniteCacheAtomicStoreSessionTest.class);
         ignoredTests.add(IgniteCacheAtomicStoreSessionWriteBehindTest.class);
         ignoredTests.add(IgniteCacheAtomicNoReadThroughTest.class);
         ignoredTests.add(IgniteCacheAtomicNearEnabledNoReadThroughTest.class);
-        ignoredTests.add(IgniteCacheAtomicLocalNoReadThroughTest.class);
         ignoredTests.add(CacheGetRemoveSkipStoreTest.class);
         ignoredTests.add(IgniteCacheAtomicNoLoadPreviousValueTest.class);
         ignoredTests.add(IgniteCacheAtomicNearEnabledNoLoadPreviousValueTest.class);
-        ignoredTests.add(IgniteCacheAtomicLocalNoLoadPreviousValueTest.class);
         ignoredTests.add(IgniteCacheAtomicNoWriteThroughTest.class);
         ignoredTests.add(IgniteCacheAtomicNearEnabledNoWriteThroughTest.class);
-        ignoredTests.add(IgniteCacheAtomicLocalNoWriteThroughTest.class);
         ignoredTests.add(IgniteCacheAtomicPeekModesTest.class);
         ignoredTests.add(IgniteCacheAtomicNearPeekModesTest.class);
         ignoredTests.add(IgniteCacheAtomicReplicatedPeekModesTest.class);
-        ignoredTests.add(IgniteCacheAtomicLocalPeekModesTest.class);
         ignoredTests.add(IgniteCacheAtomicCopyOnReadDisabledTest.class);
-        ignoredTests.add(IgniteCacheAtomicLocalStoreValueTest.class);
         ignoredTests.add(IgniteCacheAtomicStoreValueTest.class);
         ignoredTests.add(IgniteCacheAtomicNearEnabledStoreValueTest.class);
         ignoredTests.add(CacheStoreListenerRWThroughDisabledAtomicCacheTest.class);
@@ -164,9 +150,7 @@
         ignoredTests.add(CacheStoreUsageMultinodeDynamicStartAtomicTest.class);
         ignoredTests.add(IgniteStartCacheInTransactionAtomicSelfTest.class);
         ignoredTests.add(CacheReadThroughReplicatedAtomicRestartSelfTest.class);
-        ignoredTests.add(CacheReadThroughLocalAtomicRestartSelfTest.class);
         ignoredTests.add(CacheReadThroughAtomicRestartSelfTest.class);
-        ignoredTests.add(CacheVersionedEntryLocalAtomicSwapDisabledSelfTest.class);
         ignoredTests.add(CacheVersionedEntryPartitionedAtomicSelfTest.class);
         ignoredTests.add(CacheGetFutureHangsSelfTest.class);
         ignoredTests.add(IgniteCacheContainsKeyAtomicTest.class);
diff --git a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheMvccTestSuite5.java b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheMvccTestSuite5.java
index f0c96f3..a48dc5c 100644
--- a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheMvccTestSuite5.java
+++ b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheMvccTestSuite5.java
@@ -25,7 +25,6 @@
 import org.apache.ignite.cache.affinity.AffinityClientNodeSelfTest;
 import org.apache.ignite.cache.affinity.AffinityDistributionLoggingTest;
 import org.apache.ignite.cache.affinity.AffinityHistoryCleanupTest;
-import org.apache.ignite.cache.affinity.local.LocalAffinityFunctionTest;
 import org.apache.ignite.internal.GridCachePartitionExchangeManagerHistSizeTest;
 import org.apache.ignite.internal.processors.cache.CacheCreateDestroyClusterReadOnlyModeTest;
 import org.apache.ignite.internal.processors.cache.CacheSerializableTransactionsTest;
@@ -103,7 +102,6 @@
         ignoredTests.add(GridCacheAffinityBackupsSelfTest.class);
         ignoredTests.add(IgniteCacheAffinitySelfTest.class);
         ignoredTests.add(AffinityClientNodeSelfTest.class);
-        ignoredTests.add(LocalAffinityFunctionTest.class);
         ignoredTests.add(AffinityHistoryCleanupTest.class);
         ignoredTests.add(AffinityDistributionLoggingTest.class);
         ignoredTests.add(PartitionsExchangeOnDiscoveryHistoryOverflowTest.class);
diff --git a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheMvccTestSuite6.java b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheMvccTestSuite6.java
index e7278bd..a54d65a 100644
--- a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheMvccTestSuite6.java
+++ b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheMvccTestSuite6.java
@@ -44,7 +44,6 @@
 import org.apache.ignite.internal.processors.cache.distributed.OnePhaseCommitAndNodeLeftTest;
 import org.apache.ignite.internal.processors.cache.distributed.PartitionsExchangeAwareTest;
 import org.apache.ignite.internal.processors.cache.distributed.dht.preloader.latch.ExchangeLatchManagerTest;
-import org.apache.ignite.internal.processors.cache.transactions.TxLocalDhtMixedCacheModesTest;
 import org.apache.ignite.internal.processors.cache.transactions.TxOptimisticOnPartitionExchangeTest;
 import org.apache.ignite.internal.processors.cache.transactions.TxOptimisticPrepareOnUnstableTopologyTest;
 import org.apache.ignite.internal.processors.cache.transactions.TxOptimisticReadThroughTest;
@@ -95,9 +94,6 @@
         ignoredTests.add(CacheIgniteOutOfMemoryExceptionTest.class);
         ignoredTests.add(OnePhaseCommitAndNodeLeftTest.class);
 
-        // Mixed local/dht tx test.
-        ignoredTests.add(TxLocalDhtMixedCacheModesTest.class);
-
         // Skip tests that has Mvcc clones.
         // See PartitionedMvccTxPessimisticCacheGetsDistributionTest.
         ignoredTests.add(PartitionedTransactionalPessimisticCacheGetsDistributionTest.class);
diff --git a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheMvccTestSuite8.java b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheMvccTestSuite8.java
index c4d5efd..5b9a176 100644
--- a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheMvccTestSuite8.java
+++ b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheMvccTestSuite8.java
@@ -55,10 +55,6 @@
 import org.apache.ignite.internal.processors.cache.eviction.paged.RandomLruPageEvictionWithRebalanceTest;
 import org.apache.ignite.internal.processors.cache.eviction.sorted.SortedEvictionPolicyFactorySelfTest;
 import org.apache.ignite.internal.processors.cache.eviction.sorted.SortedEvictionPolicySelfTest;
-import org.apache.ignite.internal.processors.cache.local.GridCacheAtomicLocalMetricsNoStoreSelfTest;
-import org.apache.ignite.internal.processors.cache.local.GridCacheAtomicLocalMetricsSelfTest;
-import org.apache.ignite.internal.processors.cache.local.GridCacheAtomicLocalTckMetricsSelfTestImpl;
-import org.apache.ignite.internal.processors.cache.local.GridCacheLocalAtomicMetricsNoReadThroughSelfTest;
 import org.apache.ignite.testframework.junits.DynamicSuite;
 import org.junit.runner.RunWith;
 
@@ -92,14 +88,10 @@
         ignoredTests.add(GridCacheEvictableEntryEqualsSelfTest.class);
 
         // Atomic cache tests.
-        ignoredTests.add(GridCacheLocalAtomicMetricsNoReadThroughSelfTest.class);
         ignoredTests.add(GridCacheNearAtomicMetricsSelfTest.class);
-        ignoredTests.add(GridCacheAtomicLocalMetricsSelfTest.class);
-        ignoredTests.add(GridCacheAtomicLocalMetricsNoStoreSelfTest.class);
         ignoredTests.add(GridCacheAtomicReplicatedMetricsSelfTest.class);
         ignoredTests.add(GridCacheAtomicPartitionedMetricsSelfTest.class);
         ignoredTests.add(GridCacheAtomicPartitionedTckMetricsSelfTestImpl.class);
-        ignoredTests.add(GridCacheAtomicLocalTckMetricsSelfTestImpl.class);
         ignoredTests.add(IgniteTopologyValidatorPartitionedAtomicCacheTest.class);
         ignoredTests.add(IgniteTopologyValidatorNearPartitionedAtomicCacheTest.class);
         ignoredTests.add(IgniteTopologyValidatorReplicatedAtomicCacheTest.class);
diff --git a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheTestSuite.java b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheTestSuite.java
index f6186b3..b1d8b7d 100755
--- a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheTestSuite.java
+++ b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheTestSuite.java
@@ -61,21 +61,16 @@
 import org.apache.ignite.internal.processors.cache.GridDataStorageConfigurationConsistencySelfTest;
 import org.apache.ignite.internal.processors.cache.IgniteCacheAtomicConcurrentUnorderedUpdateAllTest;
 import org.apache.ignite.internal.processors.cache.IgniteCacheAtomicInvokeTest;
-import org.apache.ignite.internal.processors.cache.IgniteCacheAtomicLocalInvokeTest;
-import org.apache.ignite.internal.processors.cache.IgniteCacheAtomicLocalWithStoreInvokeTest;
 import org.apache.ignite.internal.processors.cache.IgniteCacheAtomicNearEnabledInvokeTest;
 import org.apache.ignite.internal.processors.cache.IgniteCacheAtomicWithStoreInvokeTest;
-import org.apache.ignite.internal.processors.cache.IgniteCacheEntryListenerAtomicLocalTest;
 import org.apache.ignite.internal.processors.cache.IgniteCacheEntryListenerAtomicReplicatedTest;
 import org.apache.ignite.internal.processors.cache.IgniteCacheEntryListenerAtomicTest;
 import org.apache.ignite.internal.processors.cache.IgniteCacheEntryListenerEagerTtlDisabledTest;
-import org.apache.ignite.internal.processors.cache.IgniteCacheEntryListenerTxLocalTest;
 import org.apache.ignite.internal.processors.cache.IgniteCacheEntryListenerTxReplicatedTest;
 import org.apache.ignite.internal.processors.cache.IgniteCacheEntryListenerTxTest;
 import org.apache.ignite.internal.processors.cache.IgniteCacheEntryProcessorCallTest;
 import org.apache.ignite.internal.processors.cache.IgniteCacheManyAsyncOperationsTest;
 import org.apache.ignite.internal.processors.cache.IgniteCacheTxInvokeTest;
-import org.apache.ignite.internal.processors.cache.IgniteCacheTxLocalInvokeTest;
 import org.apache.ignite.internal.processors.cache.IgniteCacheTxNearEnabledInvokeTest;
 import org.apache.ignite.internal.processors.cache.IgniteClientAffinityAssignmentSelfTest;
 import org.apache.ignite.internal.processors.cache.IgnitePutAllLargeBatchSelfTest;
@@ -127,10 +122,8 @@
 
         GridTestUtils.addTestIfNeeded(suite, IgniteCacheEntryListenerAtomicTest.class, ignoredTests);
         GridTestUtils.addTestIfNeeded(suite, IgniteCacheEntryListenerAtomicReplicatedTest.class, ignoredTests);
-        GridTestUtils.addTestIfNeeded(suite, IgniteCacheEntryListenerAtomicLocalTest.class, ignoredTests);
         GridTestUtils.addTestIfNeeded(suite, IgniteCacheEntryListenerTxTest.class, ignoredTests);
         GridTestUtils.addTestIfNeeded(suite, IgniteCacheEntryListenerTxReplicatedTest.class, ignoredTests);
-        GridTestUtils.addTestIfNeeded(suite, IgniteCacheEntryListenerTxLocalTest.class, ignoredTests);
         GridTestUtils.addTestIfNeeded(suite, IgniteCacheEntryListenerEagerTtlDisabledTest.class, ignoredTests);
 
         GridTestUtils.addTestIfNeeded(suite, IgniteClientAffinityAssignmentSelfTest.class, ignoredTests);
@@ -138,15 +131,12 @@
         GridTestUtils.addTestIfNeeded(suite, IgniteCacheAtomicInvokeTest.class, ignoredTests);
         GridTestUtils.addTestIfNeeded(suite, IgniteCacheAtomicNearEnabledInvokeTest.class, ignoredTests);
         GridTestUtils.addTestIfNeeded(suite, IgniteCacheAtomicWithStoreInvokeTest.class, ignoredTests);
-        GridTestUtils.addTestIfNeeded(suite, IgniteCacheAtomicLocalInvokeTest.class, ignoredTests);
-        GridTestUtils.addTestIfNeeded(suite, IgniteCacheAtomicLocalWithStoreInvokeTest.class, ignoredTests);
         GridTestUtils.addTestIfNeeded(suite, IgniteCacheAtomicConcurrentUnorderedUpdateAllTest.class, ignoredTests);
         GridTestUtils.addTestIfNeeded(suite, IgniteCacheTxInvokeTest.class, ignoredTests);
         GridTestUtils.addTestIfNeeded(suite, CacheEntryProcessorNonSerializableTest.class, ignoredTests);
         GridTestUtils.addTestIfNeeded(suite, CacheEntryProcessorExternalizableFailedTest.class, ignoredTests);
         GridTestUtils.addTestIfNeeded(suite, IgniteCacheEntryProcessorCallTest.class, ignoredTests);
         GridTestUtils.addTestIfNeeded(suite, IgniteCacheTxNearEnabledInvokeTest.class, ignoredTests);
-        GridTestUtils.addTestIfNeeded(suite, IgniteCacheTxLocalInvokeTest.class, ignoredTests);
         GridTestUtils.addTestIfNeeded(suite, IgniteCrossCacheTxStoreSelfTest.class, ignoredTests);
         GridTestUtils.addTestIfNeeded(suite, IgniteCacheEntryProcessorSequentialCallTest.class, ignoredTests);
 
diff --git a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheTestSuite10.java b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheTestSuite10.java
index e8cbf2d..f21f30c 100755
--- a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheTestSuite10.java
+++ b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheTestSuite10.java
@@ -49,7 +49,6 @@
 import org.apache.ignite.internal.processors.cache.GridCacheConcurrentGetCacheOnClientTest;
 import org.apache.ignite.internal.processors.cache.GridCacheLeakTest;
 import org.apache.ignite.internal.processors.cache.GridCacheLifecycleAwareSelfTest;
-import org.apache.ignite.internal.processors.cache.GridCacheLocalTxStoreExceptionSelfTest;
 import org.apache.ignite.internal.processors.cache.GridCacheMissingCommitVersionSelfTest;
 import org.apache.ignite.internal.processors.cache.GridCacheMixedPartitionExchangeSelfTest;
 import org.apache.ignite.internal.processors.cache.GridCacheMvccFlagsTest;
@@ -102,7 +101,6 @@
 import org.apache.ignite.internal.processors.cache.distributed.near.GridCacheNearTxExceptionSelfTest;
 import org.apache.ignite.internal.processors.cache.distributed.near.GridCachePartitionedStorePutSelfTest;
 import org.apache.ignite.internal.processors.cache.distributed.replicated.GridCacheReplicatedTxExceptionSelfTest;
-import org.apache.ignite.internal.processors.cache.local.GridCacheLocalTxExceptionSelfTest;
 import org.apache.ignite.testframework.GridTestUtils;
 import org.apache.ignite.testframework.junits.DynamicSuite;
 import org.junit.runner.RunWith;
@@ -138,7 +136,6 @@
         GridTestUtils.addTestIfNeeded(suite, GridCacheOffHeapAtomicMultiThreadedUpdateSelfTest.class, ignoredTests);
         GridTestUtils.addTestIfNeeded(suite, GridCacheColocatedTxStoreExceptionSelfTest.class, ignoredTests);
         GridTestUtils.addTestIfNeeded(suite, GridCacheReplicatedTxStoreExceptionSelfTest.class, ignoredTests);
-        GridTestUtils.addTestIfNeeded(suite, GridCacheLocalTxStoreExceptionSelfTest.class, ignoredTests);
         GridTestUtils.addTestIfNeeded(suite, GridCacheNearTxStoreExceptionSelfTest.class, ignoredTests);
         GridTestUtils.addTestIfNeeded(suite, GridCacheMissingCommitVersionSelfTest.class, ignoredTests);
         GridTestUtils.addTestIfNeeded(suite, GridCacheEntrySetIterationPreloadingSelfTest.class, ignoredTests);
@@ -169,7 +166,6 @@
         // Heuristic exception handling.
         GridTestUtils.addTestIfNeeded(suite, GridCacheColocatedTxExceptionSelfTest.class, ignoredTests);
         GridTestUtils.addTestIfNeeded(suite, GridCacheReplicatedTxExceptionSelfTest.class, ignoredTests);
-        GridTestUtils.addTestIfNeeded(suite, GridCacheLocalTxExceptionSelfTest.class, ignoredTests);
         GridTestUtils.addTestIfNeeded(suite, GridCacheNearTxExceptionSelfTest.class, ignoredTests);
         GridTestUtils.addTestIfNeeded(suite, GridCacheStopSelfTest.class, ignoredTests);
 
diff --git a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheTestSuite11.java b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheTestSuite11.java
index 0a79d1f..c6bdb37 100644
--- a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheTestSuite11.java
+++ b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheTestSuite11.java
@@ -25,7 +25,6 @@
 import org.apache.ignite.cache.affinity.AffinityClientNodeSelfTest;
 import org.apache.ignite.cache.affinity.AffinityDistributionLoggingTest;
 import org.apache.ignite.cache.affinity.AffinityHistoryCleanupTest;
-import org.apache.ignite.cache.affinity.local.LocalAffinityFunctionTest;
 import org.apache.ignite.internal.GridCacheHashMapPutAllWarningsTest;
 import org.apache.ignite.internal.GridCachePartitionExchangeManagerHistSizeTest;
 import org.apache.ignite.internal.GridCachePartitionExchangeManagerWarningsTest;
@@ -64,7 +63,6 @@
         GridTestUtils.addTestIfNeeded(suite, GridCacheAffinityBackupsSelfTest.class, ignoredTests);
         GridTestUtils.addTestIfNeeded(suite, IgniteCacheAffinitySelfTest.class, ignoredTests);
         GridTestUtils.addTestIfNeeded(suite, AffinityClientNodeSelfTest.class, ignoredTests);
-        GridTestUtils.addTestIfNeeded(suite, LocalAffinityFunctionTest.class, ignoredTests);
         GridTestUtils.addTestIfNeeded(suite, AffinityHistoryCleanupTest.class, ignoredTests);
 
         GridTestUtils.addTestIfNeeded(suite, AffinityDistributionLoggingTest.class, ignoredTests);
diff --git a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheTestSuite2.java b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheTestSuite2.java
index 87ef591..b3ca245 100644
--- a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheTestSuite2.java
+++ b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheTestSuite2.java
@@ -40,6 +40,7 @@
 import org.apache.ignite.internal.processors.cache.CrossCacheTxNearEnabledRandomOperationsTest;
 import org.apache.ignite.internal.processors.cache.CrossCacheTxRandomOperationsTest;
 import org.apache.ignite.internal.processors.cache.GridCacheAtomicMessageCountSelfTest;
+import org.apache.ignite.internal.processors.cache.GridCacheFastNodeLeftForTransactionTest;
 import org.apache.ignite.internal.processors.cache.GridCacheFinishPartitionsSelfTest;
 import org.apache.ignite.internal.processors.cache.GridCacheOffheapUpdateSelfTest;
 import org.apache.ignite.internal.processors.cache.GridCachePartitionedGetSelfTest;
@@ -158,23 +159,6 @@
 import org.apache.ignite.internal.processors.cache.distributed.near.NearCacheSyncUpdateTest;
 import org.apache.ignite.internal.processors.cache.distributed.near.NoneRebalanceModeSelfTest;
 import org.apache.ignite.internal.processors.cache.distributed.replicated.GridCacheReplicatedJobExecutionTest;
-import org.apache.ignite.internal.processors.cache.local.GridCacheFastNodeLeftForTransactionTest;
-import org.apache.ignite.internal.processors.cache.local.GridCacheLocalAtomicBasicStoreSelfTest;
-import org.apache.ignite.internal.processors.cache.local.GridCacheLocalAtomicGetAndTransformStoreSelfTest;
-import org.apache.ignite.internal.processors.cache.local.GridCacheLocalBasicApiSelfTest;
-import org.apache.ignite.internal.processors.cache.local.GridCacheLocalBasicStoreMultithreadedSelfTest;
-import org.apache.ignite.internal.processors.cache.local.GridCacheLocalBasicStoreSelfTest;
-import org.apache.ignite.internal.processors.cache.local.GridCacheLocalEventSelfTest;
-import org.apache.ignite.internal.processors.cache.local.GridCacheLocalEvictionEventSelfTest;
-import org.apache.ignite.internal.processors.cache.local.GridCacheLocalGetAndTransformStoreSelfTest;
-import org.apache.ignite.internal.processors.cache.local.GridCacheLocalIsolatedNodesSelfTest;
-import org.apache.ignite.internal.processors.cache.local.GridCacheLocalLoadAllSelfTest;
-import org.apache.ignite.internal.processors.cache.local.GridCacheLocalLockSelfTest;
-import org.apache.ignite.internal.processors.cache.local.GridCacheLocalMultithreadedSelfTest;
-import org.apache.ignite.internal.processors.cache.local.GridCacheLocalTxMultiThreadedSelfTest;
-import org.apache.ignite.internal.processors.cache.local.GridCacheLocalTxReadTest;
-import org.apache.ignite.internal.processors.cache.local.GridCacheLocalTxSingleThreadedSelfTest;
-import org.apache.ignite.internal.processors.cache.local.GridCacheLocalTxTimeoutSelfTest;
 import org.apache.ignite.internal.processors.cache.persistence.MemoryPolicyInitializationTest;
 import org.apache.ignite.internal.processors.continuous.IgniteContinuousQueryMetadataUpdateTest;
 import org.apache.ignite.internal.processors.continuous.IgniteNoCustomEventsOnNodeStart;
@@ -201,25 +185,7 @@
     public static List<Class<?>> suite(Collection<Class> ignoredTests) {
         List<Class<?>> suite = new ArrayList<>();
 
-        // Local cache.
-        GridTestUtils.addTestIfNeeded(suite, GridCacheLocalBasicApiSelfTest.class, ignoredTests);
-        GridTestUtils.addTestIfNeeded(suite, GridCacheLocalBasicStoreSelfTest.class, ignoredTests);
-        GridTestUtils.addTestIfNeeded(suite, GridCacheLocalBasicStoreMultithreadedSelfTest.class, ignoredTests);
-        GridTestUtils.addTestIfNeeded(suite, GridCacheLocalAtomicBasicStoreSelfTest.class, ignoredTests);
-        GridTestUtils.addTestIfNeeded(suite, GridCacheLocalGetAndTransformStoreSelfTest.class, ignoredTests);
-        GridTestUtils.addTestIfNeeded(suite, GridCacheLocalAtomicGetAndTransformStoreSelfTest.class, ignoredTests);
-        GridTestUtils.addTestIfNeeded(suite, GridCacheLocalLoadAllSelfTest.class, ignoredTests);
-        GridTestUtils.addTestIfNeeded(suite, GridCacheLocalLockSelfTest.class, ignoredTests);
-        GridTestUtils.addTestIfNeeded(suite, GridCacheLocalMultithreadedSelfTest.class, ignoredTests);
-        GridTestUtils.addTestIfNeeded(suite, GridCacheLocalTxSingleThreadedSelfTest.class, ignoredTests);
-        GridTestUtils.addTestIfNeeded(suite, GridCacheLocalTxReadTest.class, ignoredTests);
-        GridTestUtils.addTestIfNeeded(suite, GridCacheLocalTxTimeoutSelfTest.class, ignoredTests);
-        GridTestUtils.addTestIfNeeded(suite, GridCacheLocalEventSelfTest.class, ignoredTests);
-        GridTestUtils.addTestIfNeeded(suite, GridCacheLocalEvictionEventSelfTest.class, ignoredTests);
-        GridTestUtils.addTestIfNeeded(suite, GridCacheLocalTxMultiThreadedSelfTest.class, ignoredTests);
-        GridTestUtils.addTestIfNeeded(suite, GridCacheLocalIsolatedNodesSelfTest.class, ignoredTests);
         GridTestUtils.addTestIfNeeded(suite, GridCacheFastNodeLeftForTransactionTest.class, ignoredTests);
-
         GridTestUtils.addTestIfNeeded(suite, GridCacheTransformEventSelfTest.class, ignoredTests);
 
         // Partitioned cache.
diff --git a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheTestSuite3.java b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheTestSuite3.java
index 49c7280..ecd25c6 100644
--- a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheTestSuite3.java
+++ b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheTestSuite3.java
@@ -82,8 +82,6 @@
 import org.apache.ignite.internal.processors.cache.distributed.replicated.preloader.GridCacheReplicatedPreloadLifecycleSelfTest;
 import org.apache.ignite.internal.processors.cache.distributed.replicated.preloader.GridCacheReplicatedPreloadSelfTest;
 import org.apache.ignite.internal.processors.cache.distributed.replicated.preloader.GridCacheReplicatedPreloadStartStopEventsSelfTest;
-import org.apache.ignite.internal.processors.cache.local.GridCacheDaemonNodeLocalSelfTest;
-import org.apache.ignite.internal.processors.cache.local.GridCacheLocalByteArrayValuesSelfTest;
 import org.apache.ignite.testframework.GridTestUtils;
 import org.apache.ignite.testframework.junits.DynamicSuite;
 import org.junit.runner.RunWith;
@@ -161,7 +159,6 @@
         GridTestUtils.addTestIfNeeded(suite, IgniteTxExceptionNodeFailTest.class, ignoredTests);
 
         // Test for byte array value special case.
-        GridTestUtils.addTestIfNeeded(suite, GridCacheLocalByteArrayValuesSelfTest.class, ignoredTests);
         GridTestUtils.addTestIfNeeded(suite, GridCacheNearPartitionedP2PEnabledByteArrayValuesSelfTest.class, ignoredTests);
         GridTestUtils.addTestIfNeeded(suite, GridCacheNearPartitionedP2PDisabledByteArrayValuesSelfTest.class, ignoredTests);
         GridTestUtils.addTestIfNeeded(suite, GridCachePartitionedOnlyP2PEnabledByteArrayValuesSelfTest.class, ignoredTests);
@@ -173,7 +170,6 @@
         suite.addAll(IgniteCacheNearOnlySelfTestSuite.suite(ignoredTests));
 
         // Test cache with daemon nodes.
-        GridTestUtils.addTestIfNeeded(suite, GridCacheDaemonNodeLocalSelfTest.class, ignoredTests);
         GridTestUtils.addTestIfNeeded(suite, GridCacheDaemonNodePartitionedSelfTest.class, ignoredTests);
         GridTestUtils.addTestIfNeeded(suite, GridCacheDaemonNodeReplicatedSelfTest.class, ignoredTests);
 
diff --git a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheTestSuite4.java b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheTestSuite4.java
index fec1b9b..e9c7454 100644
--- a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheTestSuite4.java
+++ b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheTestSuite4.java
@@ -38,8 +38,6 @@
 import org.apache.ignite.internal.processors.cache.CacheGetRemoveSkipStoreTest;
 import org.apache.ignite.internal.processors.cache.CacheOffheapMapEntrySelfTest;
 import org.apache.ignite.internal.processors.cache.CacheReadThroughAtomicRestartSelfTest;
-import org.apache.ignite.internal.processors.cache.CacheReadThroughLocalAtomicRestartSelfTest;
-import org.apache.ignite.internal.processors.cache.CacheReadThroughLocalRestartSelfTest;
 import org.apache.ignite.internal.processors.cache.CacheReadThroughReplicatedAtomicRestartSelfTest;
 import org.apache.ignite.internal.processors.cache.CacheReadThroughReplicatedRestartSelfTest;
 import org.apache.ignite.internal.processors.cache.CacheReadThroughRestartSelfTest;
@@ -60,10 +58,7 @@
 import org.apache.ignite.internal.processors.cache.GridCacheProcessorActiveTxTest;
 import org.apache.ignite.internal.processors.cache.GridCacheStoreManagerDeserializationTest;
 import org.apache.ignite.internal.processors.cache.GridCacheVersionMultinodeTest;
-import org.apache.ignite.internal.processors.cache.GridLocalCacheStoreManagerDeserializationTest;
 import org.apache.ignite.internal.processors.cache.IgniteCacheAtomicCopyOnReadDisabledTest;
-import org.apache.ignite.internal.processors.cache.IgniteCacheAtomicLocalPeekModesTest;
-import org.apache.ignite.internal.processors.cache.IgniteCacheAtomicLocalStoreValueTest;
 import org.apache.ignite.internal.processors.cache.IgniteCacheAtomicNearEnabledStoreValueTest;
 import org.apache.ignite.internal.processors.cache.IgniteCacheAtomicNearPeekModesTest;
 import org.apache.ignite.internal.processors.cache.IgniteCacheAtomicPeekModesTest;
@@ -78,8 +73,6 @@
 import org.apache.ignite.internal.processors.cache.IgniteCacheReadThroughStoreCallTest;
 import org.apache.ignite.internal.processors.cache.IgniteCacheStartTest;
 import org.apache.ignite.internal.processors.cache.IgniteCacheTxCopyOnReadDisabledTest;
-import org.apache.ignite.internal.processors.cache.IgniteCacheTxLocalPeekModesTest;
-import org.apache.ignite.internal.processors.cache.IgniteCacheTxLocalStoreValueTest;
 import org.apache.ignite.internal.processors.cache.IgniteCacheTxNearEnabledStoreValueTest;
 import org.apache.ignite.internal.processors.cache.IgniteCacheTxNearPeekModesTest;
 import org.apache.ignite.internal.processors.cache.IgniteCacheTxPeekModesTest;
@@ -125,10 +118,6 @@
 import org.apache.ignite.internal.processors.cache.distributed.replicated.GridReplicatedTxPreloadTest;
 import org.apache.ignite.internal.processors.cache.integration.IgniteCacheAtomicLoadAllTest;
 import org.apache.ignite.internal.processors.cache.integration.IgniteCacheAtomicLoaderWriterTest;
-import org.apache.ignite.internal.processors.cache.integration.IgniteCacheAtomicLocalLoadAllTest;
-import org.apache.ignite.internal.processors.cache.integration.IgniteCacheAtomicLocalNoLoadPreviousValueTest;
-import org.apache.ignite.internal.processors.cache.integration.IgniteCacheAtomicLocalNoReadThroughTest;
-import org.apache.ignite.internal.processors.cache.integration.IgniteCacheAtomicLocalNoWriteThroughTest;
 import org.apache.ignite.internal.processors.cache.integration.IgniteCacheAtomicNearEnabledNoLoadPreviousValueTest;
 import org.apache.ignite.internal.processors.cache.integration.IgniteCacheAtomicNearEnabledNoReadThroughTest;
 import org.apache.ignite.internal.processors.cache.integration.IgniteCacheAtomicNearEnabledNoWriteThroughTest;
@@ -140,10 +129,6 @@
 import org.apache.ignite.internal.processors.cache.integration.IgniteCacheJdbcBlobStoreNodeRestartTest;
 import org.apache.ignite.internal.processors.cache.integration.IgniteCacheTxLoadAllTest;
 import org.apache.ignite.internal.processors.cache.integration.IgniteCacheTxLoaderWriterTest;
-import org.apache.ignite.internal.processors.cache.integration.IgniteCacheTxLocalLoadAllTest;
-import org.apache.ignite.internal.processors.cache.integration.IgniteCacheTxLocalNoLoadPreviousValueTest;
-import org.apache.ignite.internal.processors.cache.integration.IgniteCacheTxLocalNoReadThroughTest;
-import org.apache.ignite.internal.processors.cache.integration.IgniteCacheTxLocalNoWriteThroughTest;
 import org.apache.ignite.internal.processors.cache.integration.IgniteCacheTxNearEnabledNoLoadPreviousValueTest;
 import org.apache.ignite.internal.processors.cache.integration.IgniteCacheTxNearEnabledNoReadThroughTest;
 import org.apache.ignite.internal.processors.cache.integration.IgniteCacheTxNearEnabledNoWriteThroughTest;
@@ -153,8 +138,6 @@
 import org.apache.ignite.internal.processors.cache.integration.IgniteCacheTxStoreSessionTest;
 import org.apache.ignite.internal.processors.cache.integration.IgniteCacheTxStoreSessionWriteBehindCoalescingTest;
 import org.apache.ignite.internal.processors.cache.integration.IgniteCacheTxStoreSessionWriteBehindTest;
-import org.apache.ignite.internal.processors.cache.version.CacheVersionedEntryLocalAtomicSwapDisabledSelfTest;
-import org.apache.ignite.internal.processors.cache.version.CacheVersionedEntryLocalTransactionalSelfTest;
 import org.apache.ignite.internal.processors.cache.version.CacheVersionedEntryPartitionedAtomicSelfTest;
 import org.apache.ignite.internal.processors.cache.version.CacheVersionedEntryPartitionedTransactionalSelfTest;
 import org.apache.ignite.internal.processors.cache.version.CacheVersionedEntryReplicatedAtomicSelfTest;
@@ -191,9 +174,7 @@
         GridTestUtils.addTestIfNeeded(suite, GridCacheMultinodeUpdateAtomicNearEnabledSelfTest.class, ignoredTests);
 
         GridTestUtils.addTestIfNeeded(suite, IgniteCacheAtomicLoadAllTest.class, ignoredTests);
-        GridTestUtils.addTestIfNeeded(suite, IgniteCacheAtomicLocalLoadAllTest.class, ignoredTests);
         GridTestUtils.addTestIfNeeded(suite, IgniteCacheTxLoadAllTest.class, ignoredTests);
-        GridTestUtils.addTestIfNeeded(suite, IgniteCacheTxLocalLoadAllTest.class, ignoredTests);
 
         GridTestUtils.addTestIfNeeded(suite, IgniteCacheAtomicLoaderWriterTest.class, ignoredTests);
         GridTestUtils.addTestIfNeeded(suite, IgniteCacheTxLoaderWriterTest.class, ignoredTests);
@@ -206,33 +187,25 @@
 
         GridTestUtils.addTestIfNeeded(suite, IgniteCacheAtomicNoReadThroughTest.class, ignoredTests);
         GridTestUtils.addTestIfNeeded(suite, IgniteCacheAtomicNearEnabledNoReadThroughTest.class, ignoredTests);
-        GridTestUtils.addTestIfNeeded(suite, IgniteCacheAtomicLocalNoReadThroughTest.class, ignoredTests);
         GridTestUtils.addTestIfNeeded(suite, IgniteCacheTxNoReadThroughTest.class, ignoredTests);
         GridTestUtils.addTestIfNeeded(suite, IgniteCacheTxNearEnabledNoReadThroughTest.class, ignoredTests);
-        GridTestUtils.addTestIfNeeded(suite, IgniteCacheTxLocalNoReadThroughTest.class, ignoredTests);
         GridTestUtils.addTestIfNeeded(suite, CacheGetRemoveSkipStoreTest.class, ignoredTests);
 
         GridTestUtils.addTestIfNeeded(suite, IgniteCacheAtomicNoLoadPreviousValueTest.class, ignoredTests);
         GridTestUtils.addTestIfNeeded(suite, IgniteCacheAtomicNearEnabledNoLoadPreviousValueTest.class, ignoredTests);
-        GridTestUtils.addTestIfNeeded(suite, IgniteCacheAtomicLocalNoLoadPreviousValueTest.class, ignoredTests);
         GridTestUtils.addTestIfNeeded(suite, IgniteCacheTxNoLoadPreviousValueTest.class, ignoredTests);
         GridTestUtils.addTestIfNeeded(suite, IgniteCacheTxNearEnabledNoLoadPreviousValueTest.class, ignoredTests);
-        GridTestUtils.addTestIfNeeded(suite, IgniteCacheTxLocalNoLoadPreviousValueTest.class, ignoredTests);
 
         GridTestUtils.addTestIfNeeded(suite, IgniteCacheAtomicNoWriteThroughTest.class, ignoredTests);
         GridTestUtils.addTestIfNeeded(suite, IgniteCacheAtomicNearEnabledNoWriteThroughTest.class, ignoredTests);
-        GridTestUtils.addTestIfNeeded(suite, IgniteCacheAtomicLocalNoWriteThroughTest.class, ignoredTests);
         GridTestUtils.addTestIfNeeded(suite, IgniteCacheTxNoWriteThroughTest.class, ignoredTests);
         GridTestUtils.addTestIfNeeded(suite, IgniteCacheTxNearEnabledNoWriteThroughTest.class, ignoredTests);
-        GridTestUtils.addTestIfNeeded(suite, IgniteCacheTxLocalNoWriteThroughTest.class, ignoredTests);
 
         GridTestUtils.addTestIfNeeded(suite, IgniteCacheAtomicPeekModesTest.class, ignoredTests);
         GridTestUtils.addTestIfNeeded(suite, IgniteCacheAtomicNearPeekModesTest.class, ignoredTests);
         GridTestUtils.addTestIfNeeded(suite, IgniteCacheAtomicReplicatedPeekModesTest.class, ignoredTests);
-        GridTestUtils.addTestIfNeeded(suite, IgniteCacheAtomicLocalPeekModesTest.class, ignoredTests);
         GridTestUtils.addTestIfNeeded(suite, IgniteCacheTxPeekModesTest.class, ignoredTests);
         GridTestUtils.addTestIfNeeded(suite, IgniteCacheTxNearPeekModesTest.class, ignoredTests);
-        GridTestUtils.addTestIfNeeded(suite, IgniteCacheTxLocalPeekModesTest.class, ignoredTests);
         GridTestUtils.addTestIfNeeded(suite, IgniteCacheTxReplicatedPeekModesTest.class, ignoredTests);
 
         GridTestUtils.addTestIfNeeded(suite, IgniteCacheInvokeReadThroughSingleNodeTest.class, ignoredTests);
@@ -274,10 +247,8 @@
 
         GridTestUtils.addTestIfNeeded(suite, IgniteCacheJdbcBlobStoreNodeRestartTest.class, ignoredTests);
 
-        GridTestUtils.addTestIfNeeded(suite, IgniteCacheAtomicLocalStoreValueTest.class, ignoredTests);
         GridTestUtils.addTestIfNeeded(suite, IgniteCacheAtomicStoreValueTest.class, ignoredTests);
         GridTestUtils.addTestIfNeeded(suite, IgniteCacheAtomicNearEnabledStoreValueTest.class, ignoredTests);
-        GridTestUtils.addTestIfNeeded(suite, IgniteCacheTxLocalStoreValueTest.class, ignoredTests);
         GridTestUtils.addTestIfNeeded(suite, IgniteCacheTxStoreValueTest.class, ignoredTests);
         GridTestUtils.addTestIfNeeded(suite, IgniteCacheTxNearEnabledStoreValueTest.class, ignoredTests);
 
@@ -318,7 +289,6 @@
         GridTestUtils.addTestIfNeeded(suite, CacheConnectionLeakStoreTxTest.class, ignoredTests);
 
         GridTestUtils.addTestIfNeeded(suite, GridCacheStoreManagerDeserializationTest.class, ignoredTests);
-        GridTestUtils.addTestIfNeeded(suite, GridLocalCacheStoreManagerDeserializationTest.class, ignoredTests);
 
         GridTestUtils.addTestIfNeeded(suite, IgniteStartCacheInTransactionSelfTest.class, ignoredTests);
         GridTestUtils.addTestIfNeeded(suite, IgniteStartCacheInTransactionAtomicSelfTest.class, ignoredTests);
@@ -326,13 +296,9 @@
         GridTestUtils.addTestIfNeeded(suite, CacheReadThroughRestartSelfTest.class, ignoredTests);
         GridTestUtils.addTestIfNeeded(suite, CacheReadThroughReplicatedRestartSelfTest.class, ignoredTests);
         GridTestUtils.addTestIfNeeded(suite, CacheReadThroughReplicatedAtomicRestartSelfTest.class, ignoredTests);
-        GridTestUtils.addTestIfNeeded(suite, CacheReadThroughLocalRestartSelfTest.class, ignoredTests);
-        GridTestUtils.addTestIfNeeded(suite, CacheReadThroughLocalAtomicRestartSelfTest.class, ignoredTests);
         GridTestUtils.addTestIfNeeded(suite, CacheReadThroughAtomicRestartSelfTest.class, ignoredTests);
 
         // Versioned entry tests
-        GridTestUtils.addTestIfNeeded(suite, CacheVersionedEntryLocalAtomicSwapDisabledSelfTest.class, ignoredTests);
-        GridTestUtils.addTestIfNeeded(suite, CacheVersionedEntryLocalTransactionalSelfTest.class, ignoredTests);
         GridTestUtils.addTestIfNeeded(suite, CacheVersionedEntryPartitionedAtomicSelfTest.class, ignoredTests);
         GridTestUtils.addTestIfNeeded(suite, CacheVersionedEntryPartitionedTransactionalSelfTest.class, ignoredTests);
         GridTestUtils.addTestIfNeeded(suite, CacheVersionedEntryReplicatedAtomicSelfTest.class, ignoredTests);
diff --git a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheTestSuite6.java b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheTestSuite6.java
index b46fc6f..1da50af 100644
--- a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheTestSuite6.java
+++ b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheTestSuite6.java
@@ -53,7 +53,6 @@
 import org.apache.ignite.internal.processors.cache.distributed.rebalancing.GridCacheRebalancingOrderingTest;
 import org.apache.ignite.internal.processors.cache.transactions.StartImplicitlyTxOnStopCacheTest;
 import org.apache.ignite.internal.processors.cache.transactions.TxLabelTest;
-import org.apache.ignite.internal.processors.cache.transactions.TxLocalDhtMixedCacheModesTest;
 import org.apache.ignite.internal.processors.cache.transactions.TxMultiCacheAsyncOpsTest;
 import org.apache.ignite.internal.processors.cache.transactions.TxOnCachesStartTest;
 import org.apache.ignite.internal.processors.cache.transactions.TxOnCachesStopTest;
@@ -154,8 +153,6 @@
 
         GridTestUtils.addTestIfNeeded(suite, CachePartitionLossWithRestartsTest.class, ignoredTests);
 
-        GridTestUtils.addTestIfNeeded(suite, TxLocalDhtMixedCacheModesTest.class, ignoredTests);
-
         GridTestUtils.addTestIfNeeded(suite, CacheClientsConcurrentStartTest.class, ignoredTests);
         GridTestUtils.addTestIfNeeded(suite, GridCacheRebalancingOrderingTest.class, ignoredTests);
         GridTestUtils.addTestIfNeeded(suite, IgniteCacheClientMultiNodeUpdateTopologyLockTest.class, ignoredTests);
diff --git a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheWriteBehindTestSuite.java b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheWriteBehindTestSuite.java
index 7476ce7..2bb37a9 100644
--- a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheWriteBehindTestSuite.java
+++ b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteCacheWriteBehindTestSuite.java
@@ -21,7 +21,6 @@
 import java.util.Collection;
 import java.util.List;
 import org.apache.ignite.internal.processors.cache.GridCachePartitionedWritesTest;
-import org.apache.ignite.internal.processors.cache.store.GridCacheWriteBehindStoreLocalTest;
 import org.apache.ignite.internal.processors.cache.store.GridCacheWriteBehindStoreMultithreadedSelfTest;
 import org.apache.ignite.internal.processors.cache.store.GridCacheWriteBehindStorePartitionedMultiNodeSelfTest;
 import org.apache.ignite.internal.processors.cache.store.GridCacheWriteBehindStorePartitionedTest;
@@ -56,7 +55,6 @@
         // Write-behind tests.
         GridTestUtils.addTestIfNeeded(suite, GridCacheWriteBehindStoreSelfTest.class, ignoredTests);
         GridTestUtils.addTestIfNeeded(suite, GridCacheWriteBehindStoreMultithreadedSelfTest.class, ignoredTests);
-        GridTestUtils.addTestIfNeeded(suite, GridCacheWriteBehindStoreLocalTest.class, ignoredTests);
         GridTestUtils.addTestIfNeeded(suite, GridCacheWriteBehindStoreReplicatedTest.class, ignoredTests);
         GridTestUtils.addTestIfNeeded(suite, GridCacheWriteBehindStorePartitionedTest.class, ignoredTests);
         GridTestUtils.addTestIfNeeded(suite, GridCacheWriteBehindStorePartitionedMultiNodeSelfTest.class, ignoredTests);
diff --git a/modules/core/src/test/java/org/apache/ignite/util/TestStorageUtils.java b/modules/core/src/test/java/org/apache/ignite/util/TestStorageUtils.java
index 535b1cb..9c696e8 100644
--- a/modules/core/src/test/java/org/apache/ignite/util/TestStorageUtils.java
+++ b/modules/core/src/test/java/org/apache/ignite/util/TestStorageUtils.java
@@ -48,8 +48,6 @@
         boolean breakCntr,
         boolean breakData
     ) throws IgniteCheckedException {
-        assert !ctx.isLocal();
-
         int partId = ctx.affinity().partition(key);
         GridDhtLocalPartition locPart = ctx.topology().localPartition(partId);
 
diff --git a/modules/core/src/test/webapp/META-INF/ignite-webapp-config.xml b/modules/core/src/test/webapp/META-INF/ignite-webapp-config.xml
index 66db1ed..e535f4c 100644
--- a/modules/core/src/test/webapp/META-INF/ignite-webapp-config.xml
+++ b/modules/core/src/test/webapp/META-INF/ignite-webapp-config.xml
@@ -154,17 +154,6 @@
                     <!-- Set synchronous rebalancing (default is asynchronous). -->
                     <property name="rebalanceMode" value="SYNC"/>
                 </bean>
-
-                <!--
-                    Local cache example configuration.
-                -->
-                <bean class="org.apache.ignite.configuration.CacheConfiguration">
-                    <!-- Cache name is 'local'. -->
-                    <property name="name" value="local"/>
-
-                    <!-- LOCAL cache mode. -->
-                    <property name="cacheMode" value="LOCAL"/>
-                </bean>
             </list>
         </property>
 
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/CommandProcessor.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/CommandProcessor.java
index 70aaed7..85de47b 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/CommandProcessor.java
+++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/CommandProcessor.java
@@ -308,8 +308,6 @@
 
                 assert tbl.rowDescriptor() != null;
 
-                ensureDdlSupported(tbl.cacheInfo());
-
                 QueryIndex newIdx = new QueryIndex();
 
                 newIdx.setName(cmd.index().getName());
@@ -343,8 +341,6 @@
                 GridH2Table tbl = schemaMgr.dataTableForIndex(cmd.schemaName(), cmd.indexName());
 
                 if (tbl != null) {
-                    ensureDdlSupported(tbl.cacheInfo());
-
                     fut = ctx.query().dynamicIndexDrop(tbl.cacheName(), cmd.schemaName(), cmd.indexName(),
                         cmd.ifExists());
                 }
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/IgniteH2Indexing.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/IgniteH2Indexing.java
index 3ff5f3c..5afe9e9 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/IgniteH2Indexing.java
+++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/IgniteH2Indexing.java
@@ -1057,7 +1057,7 @@
         GridSqlStatement cmdH2 = cmd.commandH2();
 
         if (qryDesc.local()) {
-            throw new IgniteSQLException("DDL statements are not supported for LOCAL caches",
+            throw new IgniteSQLException("DDL statements are not supported for execution on local nodes only",
                 IgniteQueryErrorCode.UNSUPPORTED_OPERATION);
         }
 
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/twostep/PartitionReservationManager.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/twostep/PartitionReservationManager.java
index d2436bc..d092c3c 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/twostep/PartitionReservationManager.java
+++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/twostep/PartitionReservationManager.java
@@ -143,7 +143,7 @@
                             ctx.localNodeId(), nodeId, reqId, topVer, cacheIds.get(i)));
                 }
 
-                if (cctx.isLocal() || !cctx.rebalanceEnabled())
+                if (!cctx.rebalanceEnabled())
                     continue;
 
                 // For replicated cache topology version does not make sense.
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/twostep/ReducePartitionMapper.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/twostep/ReducePartitionMapper.java
index 84fa47d..0ede054 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/twostep/ReducePartitionMapper.java
+++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/twostep/ReducePartitionMapper.java
@@ -159,7 +159,7 @@
     private static boolean hasMovingPartitions(GridCacheContext<?, ?> cctx) {
         assert cctx != null;
 
-        return !cctx.isLocal() && cctx.topology().hasMovingPartitions();
+        return cctx.topology().hasMovingPartitions();
     }
 
     /**
@@ -267,9 +267,6 @@
 
             String extraCacheName = extraCctx.name();
 
-            if (extraCctx.isLocal())
-                continue; // No consistency guaranties for local caches.
-
             if (isReplicatedOnly && !extraCctx.isReplicated())
                 throw new CacheException("Queries running on replicated cache should not contain JOINs " +
                     "with partitioned tables [replicatedCache=" + cctx.name() +
@@ -397,7 +394,7 @@
             for (Integer cacheId : cacheIds) {
                 GridCacheContext<?, ?> extraCctx = cacheContext(cacheId);
 
-                if (extraCctx.isReplicated() || extraCctx.isLocal())
+                if (extraCctx.isReplicated())
                     continue;
 
                 int parts = extraCctx.affinity().partitions();
@@ -449,7 +446,7 @@
                 if (cctx == extraCctx)
                     continue;
 
-                if (extraCctx.isReplicated() || extraCctx.isLocal())
+                if (extraCctx.isReplicated())
                     continue;
 
                 for (int p = 0, parts = extraCctx.affinity().partitions(); p < parts; p++) {
@@ -584,9 +581,6 @@
         for (; i < cacheIds.size(); i++) {
             GridCacheContext<?, ?> extraCctx = cacheContext(cacheIds.get(i));
 
-            if (extraCctx.isLocal())
-                continue;
-
             if (!extraCctx.isReplicated())
                 throw new CacheException("Queries running on replicated cache should not contain JOINs " +
                     "with tables in partitioned caches [replicatedCache=" + cctx.name() + ", " +
@@ -703,10 +697,7 @@
         for (int i = 0; i < cacheIds.size(); i++) {
             GridCacheContext<?, ?> cctx = cacheContext(cacheIds.get(i));
 
-            if (i == 0 && cctx.isLocal())
-                throw new CacheException("Cache is LOCAL: " + cctx.name());
-
-            if (!cctx.isReplicated() && !cctx.isLocal())
+            if (!cctx.isReplicated())
                 return cctx;
         }
 
diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/CacheLocalQueryDetailMetricsSelfTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/CacheLocalQueryDetailMetricsSelfTest.java
deleted file mode 100644
index 7797120..0000000
--- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/CacheLocalQueryDetailMetricsSelfTest.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache;
-
-import static org.apache.ignite.cache.CacheMode.LOCAL;
-
-/**
- * Tests for local cache query metrics.
- */
-public class CacheLocalQueryDetailMetricsSelfTest extends CacheAbstractQueryDetailMetricsSelfTest {
-    /** {@inheritDoc} */
-    @Override protected void beforeTest() throws Exception {
-        gridCnt = 1;
-        cacheMode = LOCAL;
-
-        super.beforeTest();
-    }
-}
diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/CacheLocalQueryMetricsSelfTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/CacheLocalQueryMetricsSelfTest.java
deleted file mode 100644
index 23ab23a..0000000
--- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/CacheLocalQueryMetricsSelfTest.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache;
-
-import static org.apache.ignite.cache.CacheMode.LOCAL;
-
-/**
- * Tests for local cache query metrics.
- */
-public class CacheLocalQueryMetricsSelfTest extends CacheAbstractQueryMetricsSelfTest {
-    /** {@inheritDoc} */
-    @Override protected void beforeTest() throws Exception {
-        gridCnt = 1;
-        cacheMode = LOCAL;
-
-        super.beforeTest();
-    }
-}
diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheAbstractFieldsQuerySelfTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheAbstractFieldsQuerySelfTest.java
index a398252..77ab338 100644
--- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheAbstractFieldsQuerySelfTest.java
+++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheAbstractFieldsQuerySelfTest.java
@@ -877,10 +877,7 @@
 
         assert res != null;
 
-        if (cacheMode() == CacheMode.LOCAL)
-            assert res.size() == 20000;
-        else
-            assert res.size() <= 20000;
+        assert res.size() <= 20000;
 
         for (List<?> row : res) {
             assert (Integer)row.get(0) >= 100;
diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheAbstractQuerySelfTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheAbstractQuerySelfTest.java
index a3b81a7..f8a45c4 100644
--- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheAbstractQuerySelfTest.java
+++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheAbstractQuerySelfTest.java
@@ -217,8 +217,7 @@
 
         cc.setQueryEntities(entityList);
 
-        if (cacheMode() != CacheMode.LOCAL)
-            cc.setAffinity(new RendezvousAffinityFunction());
+        cc.setAffinity(new RendezvousAffinityFunction());
 
         // Explicitly set number of backups equal to number of grids.
         if (cacheMode() == CacheMode.PARTITIONED)
diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheOffheapIndexScanTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheOffheapIndexScanTest.java
index 16f7eb3..9ae6be0 100644
--- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheOffheapIndexScanTest.java
+++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheOffheapIndexScanTest.java
@@ -29,8 +29,6 @@
 import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
 import org.junit.Test;
 
-import static org.apache.ignite.cache.CacheMode.LOCAL;
-
 /**
  * Based scanCount with offheap index issue.
  */
@@ -44,10 +42,7 @@
 
         CacheConfiguration<?, ?> cacheCfg = new CacheConfiguration<>(DEFAULT_CACHE_NAME);
 
-        cacheCfg.setCacheMode(LOCAL);
-        cacheCfg.setIndexedTypes(
-            Integer.class, Person.class
-        );
+        cacheCfg.setIndexedTypes(Integer.class, Person.class);
 
         cfg.setCacheConfiguration(cacheCfg);
 
@@ -91,7 +86,7 @@
             String plan = (String)cache.query(new SqlFieldsQuery(
                 "explain analyze select count(*) from Person where salary = 50")).getAll().get(0).get(0);
 
-            assertTrue(plan, plan.contains("scanCount: 11 "));
+            assertTrue(plan, plan.contains("PERSON_SALARY_IDX: SALARY = 50.0"));
 
             Thread.sleep(100);
         }
diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/index/DynamicIndexAbstractBasicSelfTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/index/DynamicIndexAbstractBasicSelfTest.java
index f9f53bc..d061a16 100644
--- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/index/DynamicIndexAbstractBasicSelfTest.java
+++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/index/DynamicIndexAbstractBasicSelfTest.java
@@ -1190,35 +1190,6 @@
     }
 
     /**
-     * Test that operations fail on LOCAL cache.
-     *
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testFailOnLocalCache() throws Exception {
-        for (Ignite node : Ignition.allGrids()) {
-            if (!node.configuration().isClientMode())
-                createSqlCache(node, localCacheConfiguration());
-        }
-
-        final QueryIndex idx = index(IDX_NAME_1, field(FIELD_NAME_1_ESCAPED));
-
-        assertIgniteSqlException(new RunnableX() {
-            @Override public void runx() throws Exception {
-                dynamicIndexCreate(CACHE_NAME, TBL_NAME, idx, true, 0);
-            }
-        }, IgniteQueryErrorCode.UNSUPPORTED_OPERATION);
-
-        assertNoIndex(CACHE_NAME, TBL_NAME, IDX_NAME_1);
-
-        assertIgniteSqlException(new RunnableX() {
-            @Override public void runx() throws Exception {
-                dynamicIndexDrop(CACHE_NAME, IDX_NAME_LOCAL, true);
-            }
-        }, IgniteQueryErrorCode.UNSUPPORTED_OPERATION);
-    }
-
-    /**
      * Test that operations work on statically configured cache.
      *
      * @throws Exception If failed.
diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/index/DynamicIndexAbstractSelfTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/index/DynamicIndexAbstractSelfTest.java
index 158d8c0..69a43c3 100644
--- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/index/DynamicIndexAbstractSelfTest.java
+++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/index/DynamicIndexAbstractSelfTest.java
@@ -29,10 +29,8 @@
 import org.apache.ignite.IgniteDataStreamer;
 import org.apache.ignite.Ignition;
 import org.apache.ignite.binary.BinaryObject;
-import org.apache.ignite.cache.CacheMode;
 import org.apache.ignite.cache.CacheWriteSynchronizationMode;
 import org.apache.ignite.cache.QueryEntity;
-import org.apache.ignite.cache.QueryIndex;
 import org.apache.ignite.cache.affinity.rendezvous.RendezvousAffinityFunction;
 import org.apache.ignite.cache.query.QueryRetryException;
 import org.apache.ignite.cache.query.SqlFieldsQuery;
@@ -48,7 +46,6 @@
 import org.apache.ignite.internal.util.typedef.T2;
 import org.apache.ignite.internal.util.typedef.X;
 import org.apache.ignite.lang.IgnitePredicate;
-
 import static org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree.CONC_DESTROY_MSG;
 
 /**
@@ -172,20 +169,6 @@
     }
 
     /**
-     * @return Local cache configuration with a pre-configured index.
-     */
-    CacheConfiguration<KeyClass, ValueClass> localCacheConfiguration() {
-        CacheConfiguration<KeyClass, ValueClass> res = cacheConfiguration();
-
-        res.getQueryEntities().iterator().next().setIndexes(Collections.singletonList(
-            new QueryIndex(FIELD_NAME_2_ESCAPED, true, IDX_NAME_LOCAL)));
-
-        res.setCacheMode(CacheMode.LOCAL);
-
-        return res;
-    }
-
-    /**
      * Ensure index is used in plan.
      *
      * @param idxName Index name.
diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/index/H2DynamicTableSelfTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/index/H2DynamicTableSelfTest.java
index 523488c..f830433 100644
--- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/index/H2DynamicTableSelfTest.java
+++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/index/H2DynamicTableSelfTest.java
@@ -363,27 +363,6 @@
     }
 
     /**
-     * Test creating table over existing LOCAL cache fails (enabling query).
-     * @throws Exception if failed.
-     */
-    @Test
-    public void testCreateTableOnExistingLocalCache() throws Exception {
-        client().getOrCreateCache(new CacheConfiguration<>("local").setCacheMode(CacheMode.LOCAL));
-
-        try {
-            GridTestUtils.assertThrows(null, new Callable<Object>() {
-                @Override public Object call() throws Exception {
-                    doTestCustomNames("local", null, null);
-                    return null;
-                }
-            }, IgniteSQLException.class, "Schema changes are not supported for LOCAL cache");
-        }
-        finally {
-            client().destroyCache("local");
-        }
-    }
-
-    /**
      * Test that {@code CREATE TABLE} with given write sync mode actually creates new cache as needed.
      * @throws Exception if failed.
      */
diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/local/IgniteCacheLocalAtomicQuerySelfTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/local/IgniteCacheLocalAtomicQuerySelfTest.java
deleted file mode 100644
index 2226885..0000000
--- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/local/IgniteCacheLocalAtomicQuerySelfTest.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache.local;
-
-import org.apache.ignite.cache.CacheAtomicityMode;
-
-import static org.apache.ignite.cache.CacheAtomicityMode.ATOMIC;
-
-/**
- * Tests query for local cache in atomic mode.
- */
-public class IgniteCacheLocalAtomicQuerySelfTest extends IgniteCacheLocalQuerySelfTest {
-    /** {@inheritDoc} */
-    @Override protected CacheAtomicityMode atomicityMode() {
-        return ATOMIC;
-    }
-}
diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/local/IgniteCacheLocalFieldsQuerySelfTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/local/IgniteCacheLocalFieldsQuerySelfTest.java
deleted file mode 100644
index 057eb32..0000000
--- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/local/IgniteCacheLocalFieldsQuerySelfTest.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache.local;
-
-import org.apache.ignite.cache.CacheMode;
-import org.apache.ignite.cache.query.SqlFieldsQuery;
-import org.apache.ignite.internal.processors.cache.IgniteCacheAbstractFieldsQuerySelfTest;
-import org.junit.Test;
-
-import static org.apache.ignite.cache.CacheMode.LOCAL;
-
-/**
- * Tests for fields queries.
- */
-public class IgniteCacheLocalFieldsQuerySelfTest extends IgniteCacheAbstractFieldsQuerySelfTest {
-//    static {
-//        System.setProperty(IgniteSystemProperties.IGNITE_H2_DEBUG_CONSOLE, "1");
-//    }
-
-    /** {@inheritDoc} */
-    @Override protected CacheMode cacheMode() {
-        return LOCAL;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected int gridCount() {
-        return 1;
-    }
-
-    /**
-     * @throws Exception If failed.
-     */
-    @Test
-    public void testInformationSchema() throws Exception {
-        jcache(String.class, String.class).query(
-            new SqlFieldsQuery("SELECT VALUE FROM INFORMATION_SCHEMA.SETTINGS").setLocal(true)).getAll();
-    }
-}
diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/local/IgniteCacheLocalQueryCancelOrTimeoutSelfTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/local/IgniteCacheLocalQueryCancelOrTimeoutSelfTest.java
deleted file mode 100644
index 4d240d3..0000000
--- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/local/IgniteCacheLocalQueryCancelOrTimeoutSelfTest.java
+++ /dev/null
@@ -1,192 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache.local;
-
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.TimeUnit;
-
-import org.apache.ignite.Ignite;
-import org.apache.ignite.IgniteCache;
-import org.apache.ignite.cache.query.QueryCancelledException;
-import org.apache.ignite.cache.query.QueryCursor;
-import org.apache.ignite.cache.query.SqlFieldsQuery;
-import org.apache.ignite.configuration.CacheConfiguration;
-import org.apache.ignite.configuration.IgniteConfiguration;
-import org.apache.ignite.internal.processors.query.timeout.TimedQueryHelper;
-import org.apache.ignite.internal.util.typedef.F;
-import org.apache.ignite.internal.util.typedef.X;
-import org.apache.ignite.testframework.GridTestUtils;
-import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
-import org.junit.Test;
-
-import static org.apache.ignite.cache.CacheMode.LOCAL;
-
-/**
- * Tests local query cancellations and timeouts.
- */
-public class IgniteCacheLocalQueryCancelOrTimeoutSelfTest extends GridCommonAbstractTest {
-    /** Cache size. */
-    private static final int CACHE_SIZE = 1_000;
-
-    /** */
-    private static final String QUERY = "select a._val, b._val, longProcess(a._key, 5) from String a, String b";
-
-    /** {@inheritDoc} */
-    @Override protected IgniteConfiguration getConfiguration(String igniteInstanceName) throws Exception {
-        IgniteConfiguration cfg = super.getConfiguration(igniteInstanceName);
-
-        CacheConfiguration<Integer, String> ccfg = new CacheConfiguration<Integer, String>(DEFAULT_CACHE_NAME)
-            .setIndexedTypes(Integer.class, String.class)
-            .setCacheMode(LOCAL)
-            .setSqlFunctionClasses(TimedQueryHelper.class);
-
-        cfg.setCacheConfiguration(ccfg);
-
-        return cfg;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected void beforeTestsStarted() throws Exception {
-        super.beforeTestsStarted();
-
-        startGrid(0);
-
-        Ignite ignite = grid(0);
-
-        IgniteCache<Integer, String> cache = ignite.cache(DEFAULT_CACHE_NAME);
-
-        loadCache(cache);
-    }
-
-    /**
-     * @param cache Cache.
-     */
-    private void loadCache(IgniteCache<Integer, String> cache) {
-        int p = 1;
-
-        Map<Integer, String> batch = new HashMap<>();
-
-        for (int i = 1; i <= CACHE_SIZE; i++) {
-            char[] tmp = new char[256];
-            Arrays.fill(tmp, ' ');
-            batch.put(i, new String(tmp));
-
-            if (i / (float)CACHE_SIZE >= p / 10f) {
-                cache.putAll(batch);
-
-                batch.clear();
-
-                log().info("Loaded " + i + " of " + CACHE_SIZE);
-
-                p++;
-            }
-        }
-
-        if (!F.isEmpty(batch))
-            cache.putAll(batch);
-    }
-
-    /**
-     * Tests cancellation.
-     */
-    @Test
-    public void testQueryCancel() {
-        testQuery(false, 1, TimeUnit.SECONDS);
-    }
-
-    /**
-     * Tests cancellation with zero timeout.
-     */
-    @Test
-    public void testQueryCancelZeroTimeout() {
-        testQuery(false, 1, TimeUnit.MILLISECONDS);
-    }
-
-    /**
-     * Tests timeout.
-     */
-    @Test
-    public void testQueryTimeout() {
-        testQuery(true, 1, TimeUnit.SECONDS);
-    }
-
-    /**
-     * Tests cancel multithreaded.
-     */
-    @Test
-    public void testQueryCancelMultithreaded() throws Exception {
-        GridTestUtils.runMultiThreaded(() -> {
-            for (int i = 0; i < 20; ++i)
-                testQuery(false, 500, TimeUnit.MILLISECONDS);
-
-            return null;
-        }, 20, "local-cancel-test");
-    }
-
-    /**
-     * Tests cancellation.
-     */
-    private void testQuery(boolean timeout, int timeoutUnits, TimeUnit timeUnit) {
-        Ignite ignite = grid(0);
-
-        IgniteCache<Integer, String> cache = ignite.cache(DEFAULT_CACHE_NAME);
-
-        SqlFieldsQuery qry = new SqlFieldsQuery(QUERY);
-
-        final QueryCursor<List<?>> cursor;
-        if (timeout) {
-            qry.setTimeout(timeoutUnits, timeUnit);
-
-            cursor = cache.query(qry);
-        }
-        else {
-            cursor = cache.query(qry);
-
-            ignite.scheduler().runLocal(new Runnable() {
-                @Override public void run() {
-                    cursor.close();
-                }
-            }, timeoutUnits, timeUnit);
-        }
-
-        try (QueryCursor<List<?>> ignored = cursor) {
-            Iterator<List<?>> it = cursor.iterator();
-
-            int cnt = 0;
-
-            while (it.hasNext()) {
-                it.next();
-
-                ++cnt;
-            }
-
-            fail("Expecting timeout or cancel. Results size=" + cnt);
-        }
-        catch (Throwable e) {
-            if (X.cause(e, QueryCancelledException.class) == null) {
-                log.error("Unexpected exception", e);
-
-                fail("Must throw correct exception");
-            }
-        }
-    }
-}
diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/local/IgniteCacheLocalQueryDefaultTimeoutSelfTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/local/IgniteCacheLocalQueryDefaultTimeoutSelfTest.java
deleted file mode 100644
index 29a014e..0000000
--- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/local/IgniteCacheLocalQueryDefaultTimeoutSelfTest.java
+++ /dev/null
@@ -1,161 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache.local;
-
-import java.util.Arrays;
-import java.util.Iterator;
-import java.util.List;
-import java.util.concurrent.TimeUnit;
-import org.apache.ignite.Ignite;
-import org.apache.ignite.IgniteCache;
-import org.apache.ignite.cache.query.QueryCancelledException;
-import org.apache.ignite.cache.query.QueryCursor;
-import org.apache.ignite.cache.query.SqlFieldsQuery;
-import org.apache.ignite.configuration.CacheConfiguration;
-import org.apache.ignite.configuration.IgniteConfiguration;
-import org.apache.ignite.configuration.SqlConfiguration;
-import org.apache.ignite.internal.processors.query.timeout.TimedQueryHelper;
-import org.apache.ignite.internal.util.typedef.X;
-import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
-import org.junit.Test;
-
-import static org.apache.ignite.cache.CacheMode.LOCAL;
-
-/**
- * Tests local query default timeouts.
- */
-public class IgniteCacheLocalQueryDefaultTimeoutSelfTest extends GridCommonAbstractTest {
-    /** Cache size. */
-    private static final int CACHE_SIZE = 1_000;
-
-    /** Default query timeout */
-    private static final long DEFAULT_QUERY_TIMEOUT = 1000;
-
-    /** */
-    private static final String QUERY = "select a._val, b._val, longProcess(a._key, 5) from String a, String b";
-
-    /** {@inheritDoc} */
-    @Override protected IgniteConfiguration getConfiguration(String igniteInstanceName) throws Exception {
-        IgniteConfiguration cfg = super.getConfiguration(igniteInstanceName);
-
-        CacheConfiguration<Integer, String> ccfg = new CacheConfiguration<Integer, String>(DEFAULT_CACHE_NAME)
-            .setIndexedTypes(Integer.class, String.class)
-            .setCacheMode(LOCAL)
-            .setSqlFunctionClasses(TimedQueryHelper.class);
-
-        cfg.setCacheConfiguration(ccfg);
-        cfg.setSqlConfiguration(new SqlConfiguration().setDefaultQueryTimeout(DEFAULT_QUERY_TIMEOUT));
-
-        return cfg;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected void beforeTestsStarted() throws Exception {
-        super.beforeTestsStarted();
-
-        startGrid(0);
-    }
-
-    /** {@inheritDoc} */
-    @Override protected void afterTest() throws Exception {
-        super.afterTest();
-
-        grid(0).cache(DEFAULT_CACHE_NAME).removeAll();
-    }
-
-    /**
-     * @param cache Cache.
-     */
-    private void loadCache(IgniteCache<Integer, String> cache) {
-        int p = 1;
-
-        for (int i = 1; i <= CACHE_SIZE; i++) {
-            char[] tmp = new char[256];
-            Arrays.fill(tmp, ' ');
-            cache.put(i, new String(tmp));
-
-            if (i / (float)CACHE_SIZE >= p / 10f) {
-                log().info("Loaded " + i + " of " + CACHE_SIZE);
-
-                p++;
-            }
-        }
-    }
-
-    /**
-     * Tests query execution with default query timeout.
-     */
-    @Test
-    public void testQueryDefaultTimeout() {
-        testQuery(false, 1, TimeUnit.MILLISECONDS);
-    }
-
-    /**
-     * Tests query execution with query timeout.
-     */
-    @Test
-    public void testQueryTimeout() {
-        testQuery(true, 1, TimeUnit.SECONDS);
-    }
-
-    /**
-     * Tests cancellation.
-     */
-    private void testQuery(boolean timeout, int timeoutUnits, TimeUnit timeUnit) {
-        Ignite ignite = grid(0);
-
-        IgniteCache<Integer, String> cache = ignite.cache(DEFAULT_CACHE_NAME);
-
-        loadCache(cache);
-
-        SqlFieldsQuery qry = new SqlFieldsQuery(QUERY);
-
-        final QueryCursor<List<?>> cursor;
-        if (timeout) {
-            qry.setTimeout(timeoutUnits, timeUnit);
-
-            cursor = cache.query(qry);
-        }
-        else {
-            cursor = cache.query(qry);
-
-            ignite.scheduler().runLocal(new Runnable() {
-                @Override public void run() {
-                    cursor.close();
-                }
-            }, timeoutUnits, timeUnit);
-        }
-
-        try (QueryCursor<List<?>> ignored = cursor) {
-            Iterator<List<?>> it = cursor.iterator();
-
-            if (qry.isLazy()) {
-                while (it.hasNext())
-                    it.next();
-            }
-
-            fail("Expecting timeout");
-        }
-        catch (Exception e) {
-            assertNotNull("Must throw correct exception", X.cause(e, QueryCancelledException.class));
-        }
-
-        // Test must exit gracefully.
-    }
-}
-
diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/local/IgniteCacheLocalQuerySelfTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/local/IgniteCacheLocalQuerySelfTest.java
deleted file mode 100644
index 1e2125e..0000000
--- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/local/IgniteCacheLocalQuerySelfTest.java
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache.local;
-
-import java.util.Iterator;
-import java.util.List;
-import java.util.UUID;
-import javax.cache.Cache;
-import org.apache.ignite.Ignite;
-import org.apache.ignite.IgniteCache;
-import org.apache.ignite.cache.CacheMode;
-import org.apache.ignite.cache.query.FieldsQueryCursor;
-import org.apache.ignite.cache.query.QueryCursor;
-import org.apache.ignite.cache.query.SqlFieldsQuery;
-import org.apache.ignite.cache.query.SqlQuery;
-import org.apache.ignite.internal.processors.cache.IgniteCacheAbstractQuerySelfTest;
-import org.junit.Test;
-
-import static org.apache.ignite.cache.CacheMode.LOCAL;
-
-/**
- * Tests local query.
- */
-public class IgniteCacheLocalQuerySelfTest extends IgniteCacheAbstractQuerySelfTest {
-    /** {@inheritDoc} */
-    @Override protected int gridCount() {
-        return 1;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected CacheMode cacheMode() {
-        return LOCAL;
-    }
-
-    /**
-     * @throws Exception If test failed.
-     */
-    @Test
-    public void testQueryLocal() throws Exception {
-        // Let's do it twice to see how prepared statement caching behaves - without recompilation
-        // check for cached prepared statements this would fail.
-        for (int i = 0; i < 2; i++) {
-            IgniteCache<Integer, String> cache = jcache(Integer.class, String.class);
-
-            cache.put(1, "value1");
-            cache.put(2, "value2");
-            cache.put(3, "value3");
-            cache.put(4, "value4");
-            cache.put(5, "value5");
-
-            // Tests equals query.
-            QueryCursor<Cache.Entry<Integer, String>> qry =
-                cache.query(new SqlQuery<Integer, String>(String.class, "_val='value1'").setLocal(true));
-
-            Iterator<Cache.Entry<Integer, String>> iter = qry.iterator();
-
-            Cache.Entry<Integer, String> entry = iter.next();
-
-            assert !iter.hasNext();
-
-            assert entry != null;
-            assert entry.getKey() == 1;
-            assert "value1".equals(entry.getValue());
-
-            // Tests like query.
-            qry = cache.query(new SqlQuery<Integer, String>(String.class, "_val like 'value%'").setLocal(true));
-
-            iter = qry.iterator();
-
-            assert iter.next() != null;
-            assert iter.next() != null;
-            assert iter.next() != null;
-            assert iter.next() != null;
-            assert iter.next() != null;
-            assert !iter.hasNext();
-
-            // Test explain for primitive index.
-            List<List<?>> res = cache.query(new SqlFieldsQuery(
-                    "explain select _key from String where _val > 'value1'").setLocal(true)).getAll();
-
-            assertTrue("__ explain: \n" + res, ((String)res.get(0).get(0)).toLowerCase().contains("_val_idx"));
-
-            cache.destroy();
-        }
-    }
-
-    /** {@inheritDoc} */
-    @Test
-    @Override public void testLocalSqlQueryFromClient() throws Exception {
-        try (Ignite g = startClientGrid("client")) {
-            IgniteCache<Integer, Integer> c = jcache(g, Integer.class, Integer.class);
-
-            for (int i = 0; i < 10; i++)
-                c.put(i, i);
-
-            SqlQuery<Integer, Integer> qry = new SqlQuery<>(Integer.class, "_key >= 5 order by _key");
-
-            qry.setLocal(true);
-
-            try (QueryCursor<Cache.Entry<Integer, Integer>> qryCursor = c.query(qry)) {
-                assertNotNull(qryCursor);
-
-                List<Cache.Entry<Integer, Integer>> res = qryCursor.getAll();
-
-                assertNotNull(res);
-
-                assertEquals(5, res.size());
-            }
-        }
-    }
-
-    /** {@inheritDoc} */
-    @Test
-    @Override public void testLocalSqlFieldsQueryFromClient() throws Exception {
-        try (Ignite g = startClientGrid("client")) {
-            IgniteCache<UUID, Person> c = jcache(g, UUID.class, Person.class);
-
-            Person p = new Person("Jon", 1500);
-
-            c.put(p.id(), p);
-
-            SqlFieldsQuery qry = new SqlFieldsQuery("select * from Person");
-
-            qry.setLocal(true);
-
-            try (FieldsQueryCursor<List<?>> qryCursor = c.query(qry)) {
-                assertNotNull(qryCursor);
-
-                List<List<?>> res = qryCursor.getAll();
-
-                assertNotNull(res);
-
-                assertEquals(1, res.size());
-            }
-        }
-    }
-}
diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/IgniteWalRecoveryTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/IgniteWalRecoveryTest.java
index 3039fda..a38e492 100644
--- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/IgniteWalRecoveryTest.java
+++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/IgniteWalRecoveryTest.java
@@ -130,7 +130,6 @@
 import org.apache.ignite.transactions.TransactionIsolation;
 import org.junit.Assert;
 import org.junit.Test;
-
 import static org.apache.ignite.IgniteSystemProperties.IGNITE_DISABLE_WAL_DURING_REBALANCING;
 import static org.apache.ignite.configuration.DataStorageConfiguration.DFLT_CHECKPOINT_FREQ;
 import static org.apache.ignite.internal.IgniteNodeAttributes.ATTR_IGNITE_INSTANCE_NAME;
@@ -171,9 +170,6 @@
     private static final String CACHE_TO_DESTROY_NAME = "destroyCache";
 
     /** */
-    private static final String LOC_CACHE_NAME = "local";
-
-    /** */
     private static final String CACHE_1 = "cache1";
 
     /** */
@@ -220,10 +216,6 @@
         ccfg.setNodeFilter(new RemoteNodeFilter());
         ccfg.setIndexedTypes(Integer.class, IndexedObject.class);
 
-        CacheConfiguration<Integer, IndexedObject> locCcfg = new CacheConfiguration<>(LOC_CACHE_NAME);
-        locCcfg.setCacheMode(CacheMode.LOCAL);
-        locCcfg.setIndexedTypes(Integer.class, IndexedObject.class);
-
         CacheConfiguration<Object, Object> cfg1 = new CacheConfiguration<>("cache1")
             .setAtomicityMode(CacheAtomicityMode.TRANSACTIONAL)
             .setAffinity(new RendezvousAffinityFunction(false, 32))
@@ -234,7 +226,7 @@
 
         CacheConfiguration<Object, Object> cfg2 = new CacheConfiguration<>(cfg1).setName("cache2").setRebalanceOrder(10);
 
-        cfg.setCacheConfiguration(ccfg, locCcfg, cfg1, cfg2);
+        cfg.setCacheConfiguration(ccfg, cfg1, cfg2);
 
         DataStorageConfiguration dbCfg = new DataStorageConfiguration();
 
@@ -849,11 +841,6 @@
 
         assertEquals(1, res.size());
         assertEquals((long)ENTRY_COUNT, res.get(0).get(0));
-
-        IgniteCache<Object, Object> locCache = cacheGrid.cache(LOC_CACHE_NAME);
-
-        for (int i = 0; i < ENTRY_COUNT; i++)
-            assertEquals(new IndexedObject(i), locCache.get(i));
     }
 
     /**
@@ -896,15 +883,12 @@
 
         cacheGrid.resetLostPartitions(Collections.singleton(CACHE_NAME));
 
-        IgniteCache<Object, Object> locCache = cacheGrid.cache(LOC_CACHE_NAME);
-
         for (int i = 0; i < LARGE_ENTRY_COUNT; i++) {
             final long[] data = new long[LARGE_ARR_SIZE];
 
             Arrays.fill(data, i);
 
             Assert.assertArrayEquals(data, (long[])cache.get(i));
-            Assert.assertArrayEquals(data, (long[])locCache.get(i));
         }
     }
 
@@ -2013,12 +1997,9 @@
             }
 
             IgniteCache<Object, Object> cache = ignite.cache(CACHE_NAME);
-            IgniteCache<Object, Object> locCache = ignite.cache(LOC_CACHE_NAME);
 
-            for (int i = 0; i < ENTRY_COUNT; i++) {
+            for (int i = 0; i < ENTRY_COUNT; i++)
                 cache.put(i, new IndexedObject(i));
-                locCache.put(i, new IndexedObject(i));
-            }
 
             ignite.log().info("Finished load.");
         }
@@ -2053,7 +2034,6 @@
                 ignite.scheduler().callLocal(new Callable<Object>() {
                     @Override public Object call() {
                         IgniteCache<Object, Object> cache = ignite.cache(CACHE_NAME);
-                        IgniteCache<Object, Object> locCache = ignite.cache(LOC_CACHE_NAME);
 
                         ThreadLocalRandom rnd = ThreadLocalRandom.current();
 
@@ -2061,7 +2041,6 @@
 
                         while (!Thread.currentThread().isInterrupted()) {
                             cache.put(rnd.nextInt(10_000), new IndexedObject(rnd.nextInt()));
-                            locCache.put(rnd.nextInt(10_000), new IndexedObject(rnd.nextInt()));
 
                             cnt++;
 
@@ -2109,27 +2088,13 @@
 
             ignite.resetLostPartitions(Collections.singleton(CACHE_NAME));
 
-            IgniteCache<Object, Object> locCache = ignite.cache(LOC_CACHE_NAME);
-
             for (int i = 0; i < ENTRY_COUNT; i++) {
-                {
-                    Object val = cache.get(i);
+                Object val = cache.get(i);
 
-                    if (val == null) {
-                        ignite.log().warning("Failed to find a value for PARTITIONED cache key: " + i);
+                if (val == null) {
+                    ignite.log().warning("Failed to find a value for PARTITIONED cache key: " + i);
 
-                        return 2;
-                    }
-                }
-
-                {
-                    Object val = locCache.get(i);
-
-                    if (val == null) {
-                        ignite.log().warning("Failed to find a value for LOCAL cache key: " + i);
-
-                        return 2;
-                    }
+                    return 2;
                 }
             }
 
@@ -2180,7 +2145,6 @@
             }
 
             IgniteCache<Object, Object> cache = ignite.cache(CACHE_NAME);
-            IgniteCache<Object, Object> locCache = ignite.cache(LOC_CACHE_NAME);
 
             for (int i = 0; i < LARGE_ENTRY_COUNT; i++) {
                 final long[] data = new long[LARGE_ARR_SIZE];
@@ -2188,7 +2152,6 @@
                 Arrays.fill(data, i);
 
                 cache.put(i, data);
-                locCache.put(i, data);
             }
 
             ignite.log().info("Finished load.");
diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/ttl/CacheTtlAbstractSelfTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/ttl/CacheTtlAbstractSelfTest.java
index 9ac7a70..7536651 100644
--- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/ttl/CacheTtlAbstractSelfTest.java
+++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/ttl/CacheTtlAbstractSelfTest.java
@@ -40,9 +40,7 @@
 import org.apache.ignite.lang.IgniteBiInClosure;
 import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
 import org.junit.Test;
-
 import static java.util.concurrent.TimeUnit.MILLISECONDS;
-import static org.apache.ignite.cache.CacheMode.LOCAL;
 import static org.apache.ignite.cache.CachePeekMode.BACKUP;
 import static org.apache.ignite.cache.CachePeekMode.NEAR;
 import static org.apache.ignite.cache.CachePeekMode.OFFHEAP;
@@ -260,9 +258,6 @@
      */
     @Test
     public void testDefaultTimeToLivePreload() throws Exception {
-        if (cacheMode() == LOCAL)
-            return;
-
         IgniteCache<Integer, Integer> cache = jcache(0);
 
         Map<Integer, Integer> entries = new HashMap<>();
diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/ttl/CacheTtlAtomicLocalSelfTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/ttl/CacheTtlAtomicLocalSelfTest.java
deleted file mode 100644
index e4fedc5..0000000
--- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/ttl/CacheTtlAtomicLocalSelfTest.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.ignite.internal.processors.cache.ttl;
-
-import org.apache.ignite.cache.CacheMode;
-
-/**
- * TTL test with offheap.
- */
-public class CacheTtlAtomicLocalSelfTest extends CacheTtlAtomicAbstractSelfTest {
-    /** {@inheritDoc} */
-    @Override protected CacheMode cacheMode() {
-        return CacheMode.LOCAL;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected int gridCount() {
-        return 1;
-    }
-}
diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/ttl/CacheTtlTransactionalLocalSelfTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/ttl/CacheTtlTransactionalLocalSelfTest.java
deleted file mode 100644
index 4cae9e4..0000000
--- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/ttl/CacheTtlTransactionalLocalSelfTest.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.ignite.internal.processors.cache.ttl;
-
-import org.apache.ignite.cache.CacheMode;
-
-/**
- * TTL test with offheap.
- */
-public class CacheTtlTransactionalLocalSelfTest extends CacheTtlTransactionalAbstractSelfTest {
-    /** {@inheritDoc} */
-    @Override protected CacheMode cacheMode() {
-        return CacheMode.LOCAL;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected int gridCount() {
-        return 1;
-    }
-}
diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/IgniteSqlEntryCacheModeAgnosticTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/IgniteSqlEntryCacheModeAgnosticTest.java
index e4e1606..70179b9 100644
--- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/IgniteSqlEntryCacheModeAgnosticTest.java
+++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/IgniteSqlEntryCacheModeAgnosticTest.java
@@ -26,9 +26,7 @@
 import org.apache.ignite.internal.processors.cache.index.AbstractIndexingCommonTest;
 import org.apache.ignite.internal.util.typedef.F;
 import org.junit.Test;
-
 import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL;
-import static org.apache.ignite.cache.CacheMode.LOCAL;
 import static org.apache.ignite.cache.CacheMode.PARTITIONED;
 import static org.apache.ignite.cache.CacheMode.REPLICATED;
 
@@ -45,17 +43,13 @@
     /** Replicated cache name. */
     private static final String REPLICATED_CACHE_NAME = "REPL_CACHE";
 
-    /** Local cache name. */
-    private static final String LOCAL_CACHE_NAME = "LOCAL_CACHE";
-
     /** {@inheritDoc} */
     @Override protected IgniteConfiguration getConfiguration(String gridName) throws Exception {
         IgniteConfiguration c = super.getConfiguration(gridName);
 
         c.setLocalHost(HOST);
 
-        c.setCacheConfiguration(cacheConfiguration(LOCAL_CACHE_NAME),
-            cacheConfiguration(REPLICATED_CACHE_NAME), cacheConfiguration(PARTITIONED_CACHE_NAME));
+        c.setCacheConfiguration(cacheConfiguration(REPLICATED_CACHE_NAME), cacheConfiguration(PARTITIONED_CACHE_NAME));
 
         return c;
     }
@@ -75,9 +69,6 @@
         cfg.setAtomicityMode(TRANSACTIONAL);
 
         switch (cacheName) {
-            case LOCAL_CACHE_NAME:
-                cfg.setCacheMode(LOCAL);
-                break;
             case REPLICATED_CACHE_NAME:
                 cfg.setCacheMode(REPLICATED);
                 break;
@@ -108,11 +99,10 @@
     public void testCrossCacheModeQuery() throws Exception {
         Ignite ignite = startGrid();
 
-        ignite.cache(LOCAL_CACHE_NAME).put(1, LOCAL_CACHE_NAME);
         ignite.cache(REPLICATED_CACHE_NAME).put(1, REPLICATED_CACHE_NAME);
         ignite.cache(PARTITIONED_CACHE_NAME).put(1, PARTITIONED_CACHE_NAME);
 
-        final List<String> cacheNamesList = F.asList(LOCAL_CACHE_NAME, REPLICATED_CACHE_NAME, PARTITIONED_CACHE_NAME);
+        final List<String> cacheNamesList = F.asList(REPLICATED_CACHE_NAME, PARTITIONED_CACHE_NAME);
 
         for (String entryCacheName: cacheNamesList) {
             for (String qryCacheName: cacheNamesList) {
diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/IgniteSqlNotNullConstraintTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/IgniteSqlNotNullConstraintTest.java
index 7f34ad8..9abd807 100644
--- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/IgniteSqlNotNullConstraintTest.java
+++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/IgniteSqlNotNullConstraintTest.java
@@ -134,9 +134,6 @@
 
         for (boolean wrt : new boolean[] {false, true}) {
             for (boolean annot : new boolean[] {false, true}) {
-                res.add(buildCacheConfiguration(CacheMode.LOCAL, CacheAtomicityMode.ATOMIC, false, wrt, annot));
-                res.add(buildCacheConfiguration(CacheMode.LOCAL, CacheAtomicityMode.TRANSACTIONAL, false, wrt, annot));
-
                 res.add(buildCacheConfiguration(CacheMode.REPLICATED, CacheAtomicityMode.ATOMIC, false, wrt, annot));
                 res.add(buildCacheConfiguration(CacheMode.REPLICATED, CacheAtomicityMode.TRANSACTIONAL, false, wrt, annot));
 
@@ -1029,7 +1026,7 @@
 
                 assertTrue(ex.getMessage().contains(ERR_MSG));
 
-                assertEquals(isLocalAtomic() ? expAtomicCacheSize : 0, cache.size());
+                assertEquals(0, cache.size());
             }
         });
     }
@@ -1127,21 +1124,13 @@
         for (CacheConfiguration ccfg : cacheConfigurations()) {
             String cacheName = ccfg.getName();
 
-            if (ccfg.getCacheMode() == CacheMode.LOCAL) {
-                grid(NODE_CLIENT).cache(cacheName).clear();
+            if (ccfg.getCacheMode() == CacheMode.PARTITIONED && ccfg.getNearConfiguration() != null) {
+                IgniteCache cache = grid(NODE_CLIENT).getOrCreateNearCache(cacheName, ccfg.getNearConfiguration());
 
-                for (int node = 0; node < NODE_COUNT; node++)
-                    grid(node).cache(cacheName).clear();
+                cache.clear();
             }
-            else {
-                if (ccfg.getCacheMode() == CacheMode.PARTITIONED && ccfg.getNearConfiguration() != null) {
-                    IgniteCache cache = grid(NODE_CLIENT).getOrCreateNearCache(cacheName, ccfg.getNearConfiguration());
 
-                    cache.clear();
-                }
-
-                grid(NODE_CLIENT).cache(cacheName).clear();
-            }
+            grid(NODE_CLIENT).cache(cacheName).clear();
         }
 
         executeSql("DROP TABLE test IF EXISTS");
@@ -1275,13 +1264,6 @@
         }
 
         /** */
-        protected boolean isLocalAtomic() {
-            CacheConfiguration cfg = cache.getConfiguration(CacheConfiguration.class);
-
-            return cfg.getCacheMode() == CacheMode.LOCAL && cfg.getAtomicityMode() == CacheAtomicityMode.ATOMIC;
-        }
-
-        /** */
         public abstract void run() throws Exception;
     }
 
diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/SqlQueriesTopologyMappingTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/SqlQueriesTopologyMappingTest.java
index ff0b2ff..23756e8 100644
--- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/SqlQueriesTopologyMappingTest.java
+++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/SqlQueriesTopologyMappingTest.java
@@ -77,36 +77,6 @@
     }
 
     /** */
-    @Test
-    public void testLocalCacheQueryMapping() throws Exception {
-        IgniteEx ign0 = startGrid(0);
-
-        IgniteCache<Object, Object> cache = ign0.createCache(new CacheConfiguration<>(DEFAULT_CACHE_NAME)
-            .setCacheMode(CacheMode.LOCAL)
-            .setSqlSchema("PUBLIC")
-            .setIndexedTypes(Integer.class, Integer.class));
-
-        cache.put(1, 2);
-
-        startGrid(1);
-
-        SqlFieldsQuery qry = new SqlFieldsQuery("select * from Integer");
-
-        {
-            List<List<?>> res0 = grid(0).cache(DEFAULT_CACHE_NAME).query(qry).getAll();
-
-            assertEquals(1, res0.size());
-            assertEqualsCollections(Arrays.asList(1, 2), res0.get(0));
-        }
-
-        {
-            List<List<?>> res1 = grid(1).cache(DEFAULT_CACHE_NAME).query(qry).getAll();
-
-            assertTrue(res1.isEmpty());
-        }
-    }
-
-    /** */
     private void checkQueryWithRebalance(CacheMode cacheMode) throws Exception {
         IgniteEx ign0 = startGrid(0);
 
diff --git a/modules/indexing/src/test/java/org/apache/ignite/sqltests/SqlDataTypesCoverageTests.java b/modules/indexing/src/test/java/org/apache/ignite/sqltests/SqlDataTypesCoverageTests.java
index 03afbe3..50128f2 100644
--- a/modules/indexing/src/test/java/org/apache/ignite/sqltests/SqlDataTypesCoverageTests.java
+++ b/modules/indexing/src/test/java/org/apache/ignite/sqltests/SqlDataTypesCoverageTests.java
@@ -23,7 +23,6 @@
 import java.util.Objects;
 import java.util.Random;
 import java.util.UUID;
-import org.apache.ignite.cache.CacheMode;
 import org.apache.ignite.cache.CacheWriteSynchronizationMode;
 import org.apache.ignite.cache.affinity.rendezvous.RendezvousAffinityFunction;
 import org.apache.ignite.cache.query.SqlFieldsQuery;
@@ -33,7 +32,6 @@
 import org.junit.Before;
 import org.junit.Ignore;
 import org.junit.Test;
-
 import static org.apache.ignite.testframework.GridTestUtils.waitForCondition;
 
 /**
@@ -308,11 +306,9 @@
                 " val " + dataType + ")" +
                 " WITH " + "\"template=" + templateName + "\""), false);
 
-        if (cacheMode != CacheMode.LOCAL) {
-            ignite.context().query().querySqlFields(new SqlFieldsQuery(
-                "CREATE INDEX IDX" + UUID.randomUUID().toString().replaceAll("-", "_") +
-                    " ON " + tblName + "(id, val)"), false);
-        }
+        ignite.context().query().querySqlFields(new SqlFieldsQuery(
+            "CREATE INDEX IDX" + UUID.randomUUID().toString().replaceAll("-", "_") +
+                " ON " + tblName + "(id, val)"), false);
 
         checkCRUD(ignite, tblName, dataType, valsToCheck);
     }
diff --git a/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgniteBinaryCacheQueryTestSuite.java b/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgniteBinaryCacheQueryTestSuite.java
index 413141b..c2722a1 100644
--- a/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgniteBinaryCacheQueryTestSuite.java
+++ b/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgniteBinaryCacheQueryTestSuite.java
@@ -107,8 +107,6 @@
 import org.apache.ignite.internal.processors.cache.index.QueryEntityValidationSelfTest;
 import org.apache.ignite.internal.processors.cache.index.SchemaExchangeSelfTest;
 import org.apache.ignite.internal.processors.cache.index.StopNodeOnRebuildIndexFailureTest;
-import org.apache.ignite.internal.processors.cache.local.IgniteCacheLocalAtomicQuerySelfTest;
-import org.apache.ignite.internal.processors.cache.local.IgniteCacheLocalQuerySelfTest;
 import org.apache.ignite.internal.processors.cache.query.CacheDataPageScanQueryTest;
 import org.apache.ignite.internal.processors.cache.query.CacheScanQueryFailoverTest;
 import org.apache.ignite.internal.processors.cache.query.GridCacheQueryTransformerSelfTest;
@@ -238,8 +236,6 @@
     IgniteSqlSchemaIndexingTest.class,
     GridCacheQueryIndexDisabledSelfTest.class,
     IgniteCacheQueryLoadSelfTest.class,
-    IgniteCacheLocalQuerySelfTest.class,
-    IgniteCacheLocalAtomicQuerySelfTest.class,
     IgniteCacheReplicatedQuerySelfTest.class,
     IgniteCacheReplicatedQueryP2PDisabledSelfTest.class,
     IgniteCacheReplicatedQueryEvtsDisabledSelfTest.class,
diff --git a/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgniteBinaryCacheQueryTestSuite3.java b/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgniteBinaryCacheQueryTestSuite3.java
index d88262e..98b67bc 100644
--- a/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgniteBinaryCacheQueryTestSuite3.java
+++ b/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgniteBinaryCacheQueryTestSuite3.java
@@ -26,8 +26,6 @@
 import org.apache.ignite.internal.processors.cache.BinarySerializationQuerySelfTest;
 import org.apache.ignite.internal.processors.cache.BinarySerializationQueryWithReflectiveSerializerSelfTest;
 import org.apache.ignite.internal.processors.cache.CacheIteratorScanQueryTest;
-import org.apache.ignite.internal.processors.cache.CacheLocalQueryDetailMetricsSelfTest;
-import org.apache.ignite.internal.processors.cache.CacheLocalQueryMetricsSelfTest;
 import org.apache.ignite.internal.processors.cache.CacheOffheapBatchIndexingSingleTypeTest;
 import org.apache.ignite.internal.processors.cache.CachePartitionedQueryDetailMetricsDistributedSelfTest;
 import org.apache.ignite.internal.processors.cache.CachePartitionedQueryDetailMetricsLocalSelfTest;
@@ -96,8 +94,6 @@
 import org.apache.ignite.internal.processors.cache.index.SqlPartitionEvictionTest;
 import org.apache.ignite.internal.processors.cache.index.SqlTransactionCommandsWithMvccDisabledSelfTest;
 import org.apache.ignite.internal.processors.cache.index.SqlTransactionsSelfTest;
-import org.apache.ignite.internal.processors.cache.local.IgniteCacheLocalFieldsQuerySelfTest;
-import org.apache.ignite.internal.processors.cache.local.IgniteCacheLocalQueryCancelOrTimeoutSelfTest;
 import org.apache.ignite.internal.processors.cache.metric.SqlViewExporterSpiTest;
 import org.apache.ignite.internal.processors.cache.query.IgniteCacheQueryCacheDestroySelfTest;
 import org.apache.ignite.internal.processors.cache.query.ScanQueryConcurrentSqlUpdatesTest;
@@ -178,7 +174,6 @@
 @Suite.SuiteClasses({
     // Fields queries.
     SqlFieldsQuerySelfTest.class,
-    IgniteCacheLocalFieldsQuerySelfTest.class,
     IgniteCacheReplicatedFieldsQuerySelfTest.class,
     IgniteCacheReplicatedFieldsQueryROSelfTest.class,
     IgniteCacheReplicatedFieldsQueryP2PEnabledSelfTest.class,
@@ -208,14 +203,12 @@
     H2CompareBigQueryDistributedJoinsTest.class,
 
     // Cache query metrics.
-    CacheLocalQueryMetricsSelfTest.class,
     CachePartitionedQueryMetricsDistributedSelfTest.class,
     CachePartitionedQueryMetricsLocalSelfTest.class,
     CacheReplicatedQueryMetricsDistributedSelfTest.class,
     CacheReplicatedQueryMetricsLocalSelfTest.class,
 
     // Cache query metrics.
-    CacheLocalQueryDetailMetricsSelfTest.class,
     CachePartitionedQueryDetailMetricsDistributedSelfTest.class,
     CachePartitionedQueryDetailMetricsLocalSelfTest.class,
     CacheReplicatedQueryDetailMetricsDistributedSelfTest.class,
@@ -229,7 +222,6 @@
 
     // Cancellation.
     IgniteCacheDistributedQueryCancelSelfTest.class,
-    IgniteCacheLocalQueryCancelOrTimeoutSelfTest.class,
 
     // Distributed joins.
     H2CompareBigQueryDistributedJoinsTest.class,
diff --git a/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgniteBinaryCacheQueryTestSuite4.java b/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgniteBinaryCacheQueryTestSuite4.java
index a093eb9..d1ff909 100644
--- a/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgniteBinaryCacheQueryTestSuite4.java
+++ b/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgniteBinaryCacheQueryTestSuite4.java
@@ -22,7 +22,6 @@
 import org.apache.ignite.internal.processors.cache.distributed.near.GridCachePartitionedTxMultiNodeSelfTest;
 import org.apache.ignite.internal.processors.cache.distributed.near.IgniteCacheQueryReservationOnUnstableTopologyTest;
 import org.apache.ignite.internal.processors.cache.distributed.replicated.GridCacheReplicatedTxMultiNodeBasicTest;
-import org.apache.ignite.internal.processors.cache.local.IgniteCacheLocalQueryDefaultTimeoutSelfTest;
 import org.apache.ignite.internal.processors.query.DmlBatchSizeDeadlockTest;
 import org.apache.ignite.internal.processors.query.IgniteSqlCreateTableTemplateTest;
 import org.apache.ignite.internal.processors.query.LocalQueryLazyTest;
@@ -89,8 +88,6 @@
     SqlByteArrayTest.class,
     SqlPartOfComplexPkLookupTest.class,
 
-    IgniteCacheLocalQueryDefaultTimeoutSelfTest.class,
-
     SqlQueriesTopologyMappingTest.class,
 
     IgniteCacheQueryReservationOnUnstableTopologyTest.class
diff --git a/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgniteCacheQuerySelfTestSuite5.java b/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgniteCacheQuerySelfTestSuite5.java
index 3ad19c7..61914a2 100644
--- a/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgniteCacheQuerySelfTestSuite5.java
+++ b/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgniteCacheQuerySelfTestSuite5.java
@@ -23,12 +23,10 @@
 import org.apache.ignite.internal.processors.cache.query.continuous.CacheContinuousQueryOperationFromCallbackTest;
 import org.apache.ignite.internal.processors.cache.query.continuous.CacheContinuousQueryRandomOperationsTwoNodesTest;
 import org.apache.ignite.internal.processors.cache.query.continuous.CacheContinuousWithTransformerFailoverTest;
-import org.apache.ignite.internal.processors.cache.query.continuous.CacheContinuousWithTransformerLocalSelfTest;
 import org.apache.ignite.internal.processors.cache.query.continuous.ContinuousQueryPeerClassLoadingTest;
 import org.apache.ignite.internal.processors.cache.query.continuous.ContinuousQueryRemoteFilterMissingInClassPathSelfTest;
 import org.apache.ignite.internal.processors.cache.query.continuous.GridCacheContinuousQueryAtomicP2PDisabledSelfTest;
 import org.apache.ignite.internal.processors.cache.query.continuous.GridCacheContinuousQueryConcurrentTest;
-import org.apache.ignite.internal.processors.cache.query.continuous.GridCacheContinuousQueryLocalSelfTest;
 import org.apache.ignite.internal.processors.cache.query.continuous.GridCacheContinuousQueryPartitionedP2PDisabledSelfTest;
 import org.apache.ignite.internal.processors.cache.query.continuous.GridCacheContinuousQueryReplicatedP2PDisabledSelfTest;
 import org.apache.ignite.internal.processors.cache.query.continuous.GridCacheContinuousQueryReplicatedTxOneNodeTest;
@@ -44,10 +42,8 @@
 @RunWith(Suite.class)
 @Suite.SuiteClasses({
     IgniteCacheContinuousQueryImmutableEntryTest.class,
-    CacheContinuousWithTransformerLocalSelfTest.class,
     CacheContinuousQueryEventBufferTest.class,
     GridCacheContinuousQueryReplicatedTxOneNodeTest.class,
-    GridCacheContinuousQueryLocalSelfTest.class,
     CacheContinuousWithTransformerFailoverTest.class,
     ContinuousQueryRemoteFilterMissingInClassPathSelfTest.class,
     ContinuousQueryPeerClassLoadingTest.class,
diff --git a/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgniteCacheQuerySelfTestSuite6.java b/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgniteCacheQuerySelfTestSuite6.java
index f0e30ac..2462194 100644
--- a/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgniteCacheQuerySelfTestSuite6.java
+++ b/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgniteCacheQuerySelfTestSuite6.java
@@ -32,7 +32,6 @@
 import org.apache.ignite.internal.processors.cache.query.continuous.CacheKeepBinaryIterationStoreEnabledTest;
 import org.apache.ignite.internal.processors.cache.query.continuous.CacheKeepBinaryIterationTest;
 import org.apache.ignite.internal.processors.cache.query.continuous.ContinuousQueryMarshallerTest;
-import org.apache.ignite.internal.processors.cache.query.continuous.GridCacheContinuousQueryLocalAtomicSelfTest;
 import org.apache.ignite.internal.processors.cache.query.continuous.GridCacheContinuousQueryMultiNodesFilteringTest;
 import org.apache.ignite.internal.processors.cache.query.continuous.GridCacheContinuousQueryPartitionAtomicOneNodeTest;
 import org.apache.ignite.internal.processors.cache.query.continuous.GridCacheContinuousQueryPartitionedOnlySelfTest;
@@ -54,7 +53,6 @@
     IgniteInsertNullableDuplicatesSqlTest.class,
     GridCacheContinuousQueryPartitionAtomicOneNodeTest.class,
     CacheContinuousWithTransformerPartitionedSelfTest.class,
-    GridCacheContinuousQueryLocalAtomicSelfTest.class,
     GridCacheContinuousQueryReplicatedAtomicOneNodeTest.class,
     ContinuousQueryMarshallerTest.class,
     GridCacheContinuousQueryReplicatedAtomicSelfTest.class,
diff --git a/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgniteCacheWithIndexingTestSuite.java b/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgniteCacheWithIndexingTestSuite.java
index 30662b7..f8e559b 100644
--- a/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgniteCacheWithIndexingTestSuite.java
+++ b/modules/indexing/src/test/java/org/apache/ignite/testsuites/IgniteCacheWithIndexingTestSuite.java
@@ -49,10 +49,8 @@
 import org.apache.ignite.internal.processors.cache.index.IndexCorruptionRebuildTest;
 import org.apache.ignite.internal.processors.cache.persistence.RebuildIndexLogMessageTest;
 import org.apache.ignite.internal.processors.cache.ttl.CacheSizeTtlTest;
-import org.apache.ignite.internal.processors.cache.ttl.CacheTtlAtomicLocalSelfTest;
 import org.apache.ignite.internal.processors.cache.ttl.CacheTtlAtomicPartitionedSelfTest;
 import org.apache.ignite.internal.processors.cache.ttl.CacheTtlReadOnlyModeSelfTest;
-import org.apache.ignite.internal.processors.cache.ttl.CacheTtlTransactionalLocalSelfTest;
 import org.apache.ignite.internal.processors.cache.ttl.CacheTtlTransactionalPartitionedSelfTest;
 import org.apache.ignite.internal.processors.client.IgniteDataStreamerTest;
 import org.apache.ignite.internal.processors.query.h2.database.inlinecolumn.ComputeInlineSizeTest;
@@ -71,9 +69,7 @@
     GridIndexingWithNoopSwapSelfTest.class,
     GridCacheOffHeapSelfTest.class,
 
-    CacheTtlTransactionalLocalSelfTest.class,
     CacheTtlTransactionalPartitionedSelfTest.class,
-    CacheTtlAtomicLocalSelfTest.class,
     CacheTtlAtomicPartitionedSelfTest.class,
     CacheTtlReadOnlyModeSelfTest.class,
     CacheSizeTtlTest.class,
diff --git a/modules/platforms/cpp/core-test/config/cache-native-persistence-test-default.xml b/modules/platforms/cpp/core-test/config/cache-native-persistence-test-default.xml
index fc2241d..2d8d3af 100644
--- a/modules/platforms/cpp/core-test/config/cache-native-persistence-test-default.xml
+++ b/modules/platforms/cpp/core-test/config/cache-native-persistence-test-default.xml
@@ -46,18 +46,6 @@
         <property name="cacheConfiguration">
             <list>
                 <bean parent="cache-template">
-                    <property name="name" value="local"/>
-                    <property name="cacheMode" value="LOCAL"/>
-                    <property name="atomicityMode" value="TRANSACTIONAL"/>
-                </bean>
-
-                <bean parent="cache-template">
-                    <property name="name" value="local_atomic"/>
-                    <property name="cacheMode" value="LOCAL"/>
-                    <property name="atomicityMode" value="ATOMIC"/>
-                </bean>
-
-                <bean parent="cache-template">
                     <property name="name" value="partitioned"/>
                     <property name="cacheMode" value="PARTITIONED"/>
                     <property name="atomicityMode" value="TRANSACTIONAL"/>
diff --git a/modules/platforms/cpp/core-test/config/cache-test-default.xml b/modules/platforms/cpp/core-test/config/cache-test-default.xml
index b8a9fbd..9121eb9 100644
--- a/modules/platforms/cpp/core-test/config/cache-test-default.xml
+++ b/modules/platforms/cpp/core-test/config/cache-test-default.xml
@@ -39,18 +39,6 @@
         <property name="cacheConfiguration">
             <list>
                 <bean parent="cache-template">
-                    <property name="name" value="local"/>
-                    <property name="cacheMode" value="LOCAL"/>
-                    <property name="atomicityMode" value="TRANSACTIONAL"/>
-                </bean>
-
-                <bean parent="cache-template">
-                    <property name="name" value="local_atomic"/>
-                    <property name="cacheMode" value="LOCAL"/>
-                    <property name="atomicityMode" value="ATOMIC"/>
-                </bean>
-
-                <bean parent="cache-template">
                     <property name="name" value="partitioned"/>
                     <property name="cacheMode" value="PARTITIONED"/>
                     <property name="atomicityMode" value="TRANSACTIONAL"/>
diff --git a/modules/platforms/cpp/core-test/config/compute-server0-default.xml b/modules/platforms/cpp/core-test/config/compute-server0-default.xml
index b01ae67..bcbe67a 100644
--- a/modules/platforms/cpp/core-test/config/compute-server0-default.xml
+++ b/modules/platforms/cpp/core-test/config/compute-server0-default.xml
@@ -33,18 +33,6 @@
         <property name="cacheConfiguration">
             <list>
                 <bean parent="cache-template">
-                    <property name="name" value="local"/>
-                    <property name="cacheMode" value="LOCAL"/>
-                    <property name="atomicityMode" value="TRANSACTIONAL"/>
-                </bean>
-
-                <bean parent="cache-template">
-                    <property name="name" value="local_atomic"/>
-                    <property name="cacheMode" value="LOCAL"/>
-                    <property name="atomicityMode" value="ATOMIC"/>
-                </bean>
-
-                <bean parent="cache-template">
                     <property name="name" value="partitioned"/>
                     <property name="cacheMode" value="PARTITIONED"/>
                     <property name="atomicityMode" value="TRANSACTIONAL"/>
diff --git a/modules/platforms/cpp/core-test/config/compute-server1-default.xml b/modules/platforms/cpp/core-test/config/compute-server1-default.xml
index 7638929..6351643 100644
--- a/modules/platforms/cpp/core-test/config/compute-server1-default.xml
+++ b/modules/platforms/cpp/core-test/config/compute-server1-default.xml
@@ -33,18 +33,6 @@
         <property name="cacheConfiguration">
             <list>
                 <bean parent="cache-template">
-                    <property name="name" value="local"/>
-                    <property name="cacheMode" value="LOCAL"/>
-                    <property name="atomicityMode" value="TRANSACTIONAL"/>
-                </bean>
-
-                <bean parent="cache-template">
-                    <property name="name" value="local_atomic"/>
-                    <property name="cacheMode" value="LOCAL"/>
-                    <property name="atomicityMode" value="ATOMIC"/>
-                </bean>
-
-                <bean parent="cache-template">
                     <property name="name" value="partitioned"/>
                     <property name="cacheMode" value="PARTITIONED"/>
                     <property name="atomicityMode" value="TRANSACTIONAL"/>
diff --git a/modules/platforms/cpp/thin-client-test/config/cache-default.xml b/modules/platforms/cpp/thin-client-test/config/cache-default.xml
index 8ed4437..985a99c 100644
--- a/modules/platforms/cpp/thin-client-test/config/cache-default.xml
+++ b/modules/platforms/cpp/thin-client-test/config/cache-default.xml
@@ -47,18 +47,6 @@
         <property name="cacheConfiguration">
             <list>
                 <bean parent="cache-template">
-                    <property name="name" value="local"/>
-                    <property name="cacheMode" value="LOCAL"/>
-                    <property name="atomicityMode" value="TRANSACTIONAL"/>
-                </bean>
-
-                <bean parent="cache-template">
-                    <property name="name" value="local_atomic"/>
-                    <property name="cacheMode" value="LOCAL"/>
-                    <property name="atomicityMode" value="ATOMIC"/>
-                </bean>
-
-                <bean parent="cache-template">
                     <property name="name" value="partitioned"/>
                     <property name="cacheMode" value="PARTITIONED"/>
                     <property name="atomicityMode" value="TRANSACTIONAL"/>
diff --git a/modules/platforms/cpp/thin-client-test/src/cache_client_test.cpp b/modules/platforms/cpp/thin-client-test/src/cache_client_test.cpp
index 3840b87..23d75a1 100644
--- a/modules/platforms/cpp/thin-client-test/src/cache_client_test.cpp
+++ b/modules/platforms/cpp/thin-client-test/src/cache_client_test.cpp
@@ -142,7 +142,7 @@
 
     IgniteClient client = IgniteClient::Start(cfg);
 
-    client.GetCache<int32_t, std::string>("local");
+    client.GetCache<int32_t, std::string>("partitioned");
 }
 
 BOOST_AUTO_TEST_CASE(CacheClientGetCacheNonxisting)
@@ -164,7 +164,7 @@
 
     IgniteClient client = IgniteClient::Start(cfg);
 
-    client.GetOrCreateCache<std::string, int32_t>("local");
+    client.GetOrCreateCache<std::string, int32_t>("partitioned");
 }
 
 BOOST_AUTO_TEST_CASE(CacheClientGetOrCreateCacheNonexisting)
@@ -186,7 +186,7 @@
 
     IgniteClient client = IgniteClient::Start(cfg);
 
-    BOOST_REQUIRE_THROW((client.CreateCache<std::string, int32_t>("local")), ignite::IgniteError);
+    BOOST_REQUIRE_THROW((client.CreateCache<std::string, int32_t>("partitioned")), ignite::IgniteError);
 }
 
 BOOST_AUTO_TEST_CASE(CacheClientCreateCacheNonexisting)
@@ -208,7 +208,7 @@
 
     IgniteClient client = IgniteClient::Start(cfg);
 
-    client.DestroyCache("local");
+    client.DestroyCache("partitioned");
 }
 
 BOOST_AUTO_TEST_CASE(CacheClientDestroyCacheNonexisting)
@@ -226,14 +226,12 @@
 {
     std::set<std::string> expectedNames;
 
-    expectedNames.insert("local_atomic");
     expectedNames.insert("partitioned_atomic_near");
     expectedNames.insert("partitioned_near");
     expectedNames.insert("partitioned2");
     expectedNames.insert("partitioned");
     expectedNames.insert("replicated");
     expectedNames.insert("replicated_atomic");
-    expectedNames.insert("local");
     expectedNames.insert("partitioned_atomic");
 
     IgniteClientConfiguration cfg;
@@ -262,7 +260,7 @@
 
     IgniteClient client = IgniteClient::Start(cfg);
 
-    cache::CacheClient<int32_t, std::string> cache = client.GetCache<int32_t, std::string>("local");
+    cache::CacheClient<int32_t, std::string> cache = client.GetCache<int32_t, std::string>("partitioned");
 
     int32_t key = 42;
     std::string valIn = "Lorem ipsum";
@@ -282,7 +280,7 @@
 
     IgniteClient client = IgniteClient::Start(cfg);
 
-    cache::CacheClient<int32_t, ignite::ComplexType> cache = client.GetCache<int32_t, ignite::ComplexType>("local");
+    cache::CacheClient<int32_t, ignite::ComplexType> cache = client.GetCache<int32_t, ignite::ComplexType>("partitioned");
 
     ignite::ComplexType valIn;
 
@@ -311,7 +309,7 @@
 
     IgniteClient client = IgniteClient::Start(cfg);
 
-    cache::CacheClient<ignite::ComplexType, int32_t> cache = client.GetCache<ignite::ComplexType, int32_t>("local");
+    cache::CacheClient<ignite::ComplexType, int32_t> cache = client.GetCache<ignite::ComplexType, int32_t>("partitioned");
 
     ignite::ComplexType key;
 
@@ -337,7 +335,7 @@
 
     IgniteClient client = IgniteClient::Start(cfg);
 
-    cache::CacheClient<int32_t, std::string> cache = client.GetCache<int32_t, std::string>("local");
+    cache::CacheClient<int32_t, std::string> cache = client.GetCache<int32_t, std::string>("partitioned");
 
     int32_t key = 42;
     std::string valIn = "Lorem ipsum";
@@ -357,7 +355,7 @@
 
     IgniteClient client = IgniteClient::Start(cfg);
 
-    cache::CacheClient<ignite::ComplexType, int32_t> cache = client.GetCache<ignite::ComplexType, int32_t>("local");
+    cache::CacheClient<ignite::ComplexType, int32_t> cache = client.GetCache<ignite::ComplexType, int32_t>("partitioned");
 
     ignite::ComplexType key;
 
@@ -383,7 +381,7 @@
 
     IgniteClient client = IgniteClient::Start(cfg);
 
-    cache::CacheClient<int32_t, std::string> cache = client.GetCache<int32_t, std::string>("local");
+    cache::CacheClient<int32_t, std::string> cache = client.GetCache<int32_t, std::string>("partitioned");
 
     int32_t key = 42;
     std::string valIn = "Lorem ipsum";
@@ -405,7 +403,7 @@
 
     IgniteClient client = IgniteClient::Start(cfg);
 
-    cache::CacheClient<ignite::ComplexType, int32_t> cache = client.GetCache<ignite::ComplexType, int32_t>("local");
+    cache::CacheClient<ignite::ComplexType, int32_t> cache = client.GetCache<ignite::ComplexType, int32_t>("partitioned");
 
     ignite::ComplexType key;
 
@@ -1316,7 +1314,7 @@
 
     IgniteClient client = IgniteClient::Start(cfg);
 
-    cache::CacheClient<int32_t, std::string> cache = client.GetCache<int32_t, std::string>("local");
+    cache::CacheClient<int32_t, std::string> cache = client.GetCache<int32_t, std::string>("partitioned");
 
     int32_t key = 42;
     std::string valIn1 = "Lorem ipsum";
@@ -1345,7 +1343,7 @@
 
     IgniteClient client = IgniteClient::Start(cfg);
 
-    cache::CacheClient<int32_t, ignite::ComplexType> cache = client.GetCache<int32_t, ignite::ComplexType>("local");
+    cache::CacheClient<int32_t, ignite::ComplexType> cache = client.GetCache<int32_t, ignite::ComplexType>("partitioned");
 
     int32_t key = 42;
 
@@ -1390,7 +1388,7 @@
 
     IgniteClient client = IgniteClient::Start(cfg);
 
-    cache::CacheClient<ignite::ComplexType, int32_t> cache = client.GetCache<ignite::ComplexType, int32_t>("local");
+    cache::CacheClient<ignite::ComplexType, int32_t> cache = client.GetCache<ignite::ComplexType, int32_t>("partitioned");
 
     ignite::ComplexType key;
 
@@ -1425,7 +1423,7 @@
 
     IgniteClient client = IgniteClient::Start(cfg);
 
-    cache::CacheClient<int32_t, std::string> cache = client.GetCache<int32_t, std::string>("local");
+    cache::CacheClient<int32_t, std::string> cache = client.GetCache<int32_t, std::string>("partitioned");
 
     int32_t key = 42;
     std::string valIn1 = "Lorem ipsum";
@@ -1454,7 +1452,7 @@
 
     IgniteClient client = IgniteClient::Start(cfg);
 
-    cache::CacheClient<int32_t, ignite::ComplexType> cache = client.GetCache<int32_t, ignite::ComplexType>("local");
+    cache::CacheClient<int32_t, ignite::ComplexType> cache = client.GetCache<int32_t, ignite::ComplexType>("partitioned");
 
     int32_t key = 42;
 
@@ -1496,7 +1494,7 @@
 
     IgniteClient client = IgniteClient::Start(cfg);
 
-    cache::CacheClient<ignite::ComplexType, int32_t> cache = client.GetCache<ignite::ComplexType, int32_t>("local");
+    cache::CacheClient<ignite::ComplexType, int32_t> cache = client.GetCache<ignite::ComplexType, int32_t>("partitioned");
 
     ignite::ComplexType key;
 
@@ -1531,7 +1529,7 @@
 
     IgniteClient client = IgniteClient::Start(cfg);
 
-    cache::CacheClient<int32_t, std::string> cache = client.GetCache<int32_t, std::string>("local");
+    cache::CacheClient<int32_t, std::string> cache = client.GetCache<int32_t, std::string>("partitioned");
 
     int32_t key = 42;
     std::string valIn1 = "Lorem ipsum";
@@ -1555,7 +1553,7 @@
 
     IgniteClient client = IgniteClient::Start(cfg);
 
-    cache::CacheClient<int32_t, ignite::ComplexType> cache = client.GetCache<int32_t, ignite::ComplexType>("local");
+    cache::CacheClient<int32_t, ignite::ComplexType> cache = client.GetCache<int32_t, ignite::ComplexType>("partitioned");
 
     int32_t key = 42;
 
@@ -1597,7 +1595,7 @@
 
     IgniteClient client = IgniteClient::Start(cfg);
 
-    cache::CacheClient<ignite::ComplexType, int32_t> cache = client.GetCache<ignite::ComplexType, int32_t>("local");
+    cache::CacheClient<ignite::ComplexType, int32_t> cache = client.GetCache<ignite::ComplexType, int32_t>("partitioned");
 
     ignite::ComplexType key;
 
@@ -1627,7 +1625,7 @@
 
     IgniteClient client = IgniteClient::Start(cfg);
 
-    cache::CacheClient<int32_t, std::string> cache = client.GetCache<int32_t, std::string>("local");
+    cache::CacheClient<int32_t, std::string> cache = client.GetCache<int32_t, std::string>("partitioned");
 
     int32_t key = 42;
     std::string valIn = "Lorem ipsum";
@@ -1648,7 +1646,7 @@
 
     IgniteClient client = IgniteClient::Start(cfg);
 
-    cache::CacheClient<int32_t, ignite::ComplexType> cache = client.GetCache<int32_t, ignite::ComplexType>("local");
+    cache::CacheClient<int32_t, ignite::ComplexType> cache = client.GetCache<int32_t, ignite::ComplexType>("partitioned");
 
     int32_t key = 42;
 
@@ -1679,7 +1677,7 @@
 
     IgniteClient client = IgniteClient::Start(cfg);
 
-    cache::CacheClient<ignite::ComplexType, int32_t> cache = client.GetCache<ignite::ComplexType, int32_t>("local");
+    cache::CacheClient<ignite::ComplexType, int32_t> cache = client.GetCache<ignite::ComplexType, int32_t>("partitioned");
 
     ignite::ComplexType key;
 
@@ -1706,7 +1704,7 @@
 
     IgniteClient client = IgniteClient::Start(cfg);
 
-    cache::CacheClient<int32_t, std::string> cache = client.GetCache<int32_t, std::string>("local");
+    cache::CacheClient<int32_t, std::string> cache = client.GetCache<int32_t, std::string>("partitioned");
 
     int32_t key = 42;
     std::string valIn1 = "Lorem ipsum";
@@ -1736,7 +1734,7 @@
 
     IgniteClient client = IgniteClient::Start(cfg);
 
-    cache::CacheClient<int32_t, ignite::ComplexType> cache = client.GetCache<int32_t, ignite::ComplexType>("local");
+    cache::CacheClient<int32_t, ignite::ComplexType> cache = client.GetCache<int32_t, ignite::ComplexType>("partitioned");
 
     int32_t key = 42;
 
@@ -1780,7 +1778,7 @@
 
     IgniteClient client = IgniteClient::Start(cfg);
 
-    cache::CacheClient<ignite::ComplexType, int32_t> cache = client.GetCache<ignite::ComplexType, int32_t>("local");
+    cache::CacheClient<ignite::ComplexType, int32_t> cache = client.GetCache<ignite::ComplexType, int32_t>("partitioned");
 
     ignite::ComplexType key;
 
@@ -1816,7 +1814,7 @@
 
     IgniteClient client = IgniteClient::Start(cfg);
 
-    cache::CacheClient<int32_t, std::string> cache = client.GetCache<int32_t, std::string>("local");
+    cache::CacheClient<int32_t, std::string> cache = client.GetCache<int32_t, std::string>("partitioned");
 
     int32_t key = 42;
     std::string valIn1 = "Lorem ipsum";
@@ -1844,7 +1842,7 @@
 
     IgniteClient client = IgniteClient::Start(cfg);
 
-    cache::CacheClient<int32_t, ignite::ComplexType> cache = client.GetCache<int32_t, ignite::ComplexType>("local");
+    cache::CacheClient<int32_t, ignite::ComplexType> cache = client.GetCache<int32_t, ignite::ComplexType>("partitioned");
 
     int32_t key = 42;
 
@@ -1888,7 +1886,7 @@
 
     IgniteClient client = IgniteClient::Start(cfg);
 
-    cache::CacheClient<ignite::ComplexType, int32_t> cache = client.GetCache<ignite::ComplexType, int32_t>("local");
+    cache::CacheClient<ignite::ComplexType, int32_t> cache = client.GetCache<ignite::ComplexType, int32_t>("partitioned");
 
     ignite::ComplexType key;
 
@@ -1922,7 +1920,7 @@
 
     IgniteClient client = IgniteClient::Start(cfg);
 
-    cache::CacheClient<int32_t, std::string> cache = client.GetCache<int32_t, std::string>("local");
+    cache::CacheClient<int32_t, std::string> cache = client.GetCache<int32_t, std::string>("partitioned");
 
     int32_t key = 42;
     std::string valIn1 = "Lorem ipsum";
@@ -1950,7 +1948,7 @@
 
     IgniteClient client = IgniteClient::Start(cfg);
 
-    cache::CacheClient<int32_t, ignite::ComplexType> cache = client.GetCache<int32_t, ignite::ComplexType>("local");
+    cache::CacheClient<int32_t, ignite::ComplexType> cache = client.GetCache<int32_t, ignite::ComplexType>("partitioned");
 
     int32_t key = 42;
 
@@ -1993,7 +1991,7 @@
 
     IgniteClient client = IgniteClient::Start(cfg);
 
-    cache::CacheClient<int32_t, ignite::ComplexType*> cache = client.GetCache<int32_t, ignite::ComplexType*>("local");
+    cache::CacheClient<int32_t, ignite::ComplexType*> cache = client.GetCache<int32_t, ignite::ComplexType*>("partitioned");
 
     int32_t key = 42;
 
@@ -2041,7 +2039,7 @@
 
     IgniteClient client = IgniteClient::Start(cfg);
 
-    cache::CacheClient<ignite::ComplexType, int32_t> cache = client.GetCache<ignite::ComplexType, int32_t>("local");
+    cache::CacheClient<ignite::ComplexType, int32_t> cache = client.GetCache<ignite::ComplexType, int32_t>("partitioned");
 
     ignite::ComplexType key;
 
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/CacheAbstractTest.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/CacheAbstractTest.cs
index 1386ea9..f3ad6bd 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/CacheAbstractTest.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/CacheAbstractTest.cs
@@ -687,16 +687,8 @@
             int key0;
             int key1;
 
-            if (LocalCache())
-            {
-                key0 = 0;
-                key1 = 1;
-            }
-            else
-            {
-                key0 = GetPrimaryKeyForCache(cache0);
-                key1 = GetPrimaryKeyForCache(Cache(1));
-            }
+            key0 = GetPrimaryKeyForCache(cache0);
+            key1 = GetPrimaryKeyForCache(Cache(1));
 
             // Test unchanged expiration.
             ICache<int, int> cache = withPolicyFunc(cache0, new ExpiryPolicy(null, null, null));
@@ -799,16 +791,8 @@
             int key0;
             int key1;
 
-            if (LocalCache())
-            {
-                key0 = 0;
-                key1 = 1;
-            }
-            else
-            {
-                key0 = GetPrimaryKeyForCache(cache0);
-                key1 = GetPrimaryKeyForCache(Cache(1));
-            }
+            key0 = GetPrimaryKeyForCache(cache0);
+            key1 = GetPrimaryKeyForCache(Cache(1));
 
             // Test zero expiration.
             var cache = cache0.WithExpiryPolicy(new ExpiryPolicy(TimeSpan.Zero, TimeSpan.Zero, TimeSpan.Zero));
@@ -1228,7 +1212,7 @@
             Assert.AreEqual(GridCount() * 2, cache0.GetSize(CachePeekMode.Primary));
             Assert.AreEqual(GridCount() * 2, cache0.GetSizeLong(CachePeekMode.Primary));
 
-            if (!LocalCache() && !ReplicatedCache())
+            if (!ReplicatedCache())
             {
                 int nearKey = NearKeyForCache(cache0);
 
@@ -1784,10 +1768,7 @@
                 for (int i = 0; i < 1000; i++)
                     parts.Add(aff.GetPartition(i));
 
-                if (LocalCache())
-                    Assert.AreEqual(1, parts.Count);
-                else
-                    Assert.IsTrue(parts.Count > 10);
+                Assert.IsTrue(parts.Count > 10);
             }
 
             {
@@ -1796,10 +1777,7 @@
                 for (int i = 0; i < 1000; i++)
                     parts.Add(aff.GetPartition("key" + i));
 
-                if (LocalCache())
-                    Assert.AreEqual(1, parts.Count);
-                else
-                    Assert.IsTrue(parts.Count > 10);
+                Assert.IsTrue(parts.Count > 10);
             }
         }
 
@@ -1997,32 +1975,19 @@
         {
             ICacheAffinity aff = Affinity();
 
-            if (LocalCache())
+            IList<int> parts = new List<int> { 1, 2, 3 };
+
+            IDictionary<int, IClusterNode> map = aff.MapPartitionsToNodes(parts);
+
+            Assert.AreEqual(parts.Count, map.Count);
+
+            foreach (int part in parts)
             {
-                IList<int> parts = new List<int> { 0 };
+                Assert.IsTrue(map.ContainsKey(part));
 
-                IDictionary<int, IClusterNode> map = aff.MapPartitionsToNodes(parts);
+                IClusterNode primary = aff.MapPartitionToNode(part);
 
-                Assert.AreEqual(parts.Count, map.Count);
-
-                Assert.AreEqual(GetIgnite(0).GetCluster().GetLocalNode(), map[0]);
-            }
-            else
-            {
-                IList<int> parts = new List<int> { 1, 2, 3 };
-
-                IDictionary<int, IClusterNode> map = aff.MapPartitionsToNodes(parts);
-
-                Assert.AreEqual(parts.Count, map.Count);
-
-                foreach (int part in parts)
-                {
-                    Assert.IsTrue(map.ContainsKey(part));
-
-                    IClusterNode primary = aff.MapPartitionToNode(part);
-
-                    Assert.AreEqual(primary, map[part], "Wrong node for partition: " + part);
-                }
+                Assert.AreEqual(primary, map[part], "Wrong node for partition: " + part);
             }
         }
 
@@ -2289,7 +2254,7 @@
             var cacheNames = GetIgnite(0).GetCacheNames();
             var expectedNames = new[]
             {
-                "local", "local_atomic", "partitioned", "partitioned_atomic",
+                "partitioned", "partitioned_atomic",
                 "partitioned_near", "partitioned_atomic_near", "replicated", "replicated_atomic"
             };
 
@@ -2513,11 +2478,6 @@
             return false;
         }
 
-        protected virtual bool LocalCache()
-        {
-            return false;
-        }
-
         protected virtual bool ReplicatedCache()
         {
             return true;
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/CacheAbstractTransactionalTest.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/CacheAbstractTransactionalTest.cs
index 7cf5117..f111369 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/CacheAbstractTransactionalTest.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/CacheAbstractTransactionalTest.cs
@@ -533,11 +533,6 @@
         [Test]
         public void TestTxDeadlockDetection()
         {
-            if (LocalCache())
-            {
-                return;
-            }
-
             var cache = Cache();
 
             var keys0 = Enumerable.Range(1, 100).ToArray();
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/CacheLocalAtomicTest.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/CacheLocalAtomicTest.cs
deleted file mode 100644
index 30291e5..0000000
--- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/CacheLocalAtomicTest.cs
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-namespace Apache.Ignite.Core.Tests.Cache
-{
-    using NUnit.Framework;
-
-    [Category(TestUtils.CategoryIntensive)]
-    public class CacheLocalAtomicTest : CacheAbstractTest
-    {
-        protected override int CachePartitions()
-        {
-            return 1;
-        }
-
-        protected override int GridCount()
-        {
-            return 1;
-        }
-
-        protected override string CacheName()
-        {
-            return "local_atomic";
-        }
-
-        protected override bool NearEnabled()
-        {
-            return false;
-        }
-
-        protected override bool LocalCache()
-        {
-            return true;
-        }
-
-        protected override int Backups()
-        {
-            return 0;
-        }
-    }
-}
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/CacheLocalTest.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/CacheLocalTest.cs
deleted file mode 100644
index 1814015..0000000
--- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/CacheLocalTest.cs
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-namespace Apache.Ignite.Core.Tests.Cache
-{
-    using NUnit.Framework;
-
-    [Category(TestUtils.CategoryIntensive)]
-    public class CacheLocalTest : CacheAbstractTransactionalTest
-    {
-        protected override int CachePartitions()
-        {
-            return 1;
-        }
-
-        protected override int GridCount()
-        {
-            return 1;
-        }
-
-        protected override string CacheName()
-        {
-            return "local";
-        }
-
-        protected override bool NearEnabled()
-        {
-            return false;
-        }
-
-        protected override bool LocalCache()
-        {
-            return true;
-        }
-
-        protected override int Backups()
-        {
-            return 0;
-        }
-    }
-}
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/Store/CacheStoreTestCodeConfig.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/Store/CacheStoreTestCodeConfig.cs
index bfb3544..bd16ddf 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/Store/CacheStoreTestCodeConfig.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Cache/Store/CacheStoreTestCodeConfig.cs
@@ -44,7 +44,7 @@
                     new CacheConfiguration
                     {
                         Name = "binary_store",
-                        CacheMode = CacheMode.Local,
+                        CacheMode = CacheMode.Partitioned,
                         AtomicityMode = CacheAtomicityMode.Transactional,
                         WriteThrough = true,
                         ReadThrough = true,
@@ -54,7 +54,7 @@
                     new CacheConfiguration
                     {
                         Name = "object_store",
-                        CacheMode = CacheMode.Local,
+                        CacheMode = CacheMode.Partitioned,
                         AtomicityMode = CacheAtomicityMode.Transactional,
                         WriteThrough = true,
                         ReadThrough = true,
@@ -64,7 +64,7 @@
                     new CacheConfiguration
                     {
                         Name = "template_store*",
-                        CacheMode = CacheMode.Local,
+                        CacheMode = CacheMode.Partitioned,
                         AtomicityMode = CacheAtomicityMode.Transactional,
                         WriteThrough = true,
                         ReadThrough = true,
@@ -74,12 +74,12 @@
                     new CacheConfiguration
                     {
                         Name = "custom_store",
-                        CacheMode = CacheMode.Local,
+                        CacheMode = CacheMode.Partitioned,
                         AtomicityMode = CacheAtomicityMode.Transactional,
                         WriteThrough = true,
                         ReadThrough = true,
                         CacheStoreFactory = new CustomStoreFactory()
-                    },
+                    }
                 }
             };
 
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Config/Cache/Store/cache-store-session-shared-factory.xml b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Config/Cache/Store/cache-store-session-shared-factory.xml
index 05515c4..1282212 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Config/Cache/Store/cache-store-session-shared-factory.xml
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Config/Cache/Store/cache-store-session-shared-factory.xml
@@ -37,7 +37,7 @@
             <list>
                 <bean class="org.apache.ignite.configuration.CacheConfiguration">
                     <property name="name" value="cache1"/>
-                    <property name="cacheMode" value="LOCAL"/>
+                    <property name="cacheMode" value="REPLICATED"/>
                     <property name="atomicityMode" value="TRANSACTIONAL"/>
                     <property name="writeThrough" value="true"/>
                     <property name="readThrough" value="true"/>
@@ -47,7 +47,7 @@
 
                 <bean class="org.apache.ignite.configuration.CacheConfiguration">
                     <property name="name" value="cache2"/>
-                    <property name="cacheMode" value="LOCAL"/>
+                    <property name="cacheMode" value="REPLICATED"/>
                     <property name="atomicityMode" value="TRANSACTIONAL"/>
                     <property name="writeThrough" value="true"/>
                     <property name="readThrough" value="true"/>
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Config/Cache/Store/cache-store-session.xml b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Config/Cache/Store/cache-store-session.xml
index 14dc78e..716abaa 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Config/Cache/Store/cache-store-session.xml
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Config/Cache/Store/cache-store-session.xml
@@ -33,7 +33,7 @@
             <list>
                 <bean class="org.apache.ignite.configuration.CacheConfiguration">
                     <property name="name" value="cache1"/>
-                    <property name="cacheMode" value="LOCAL"/>
+                    <property name="cacheMode" value="REPLICATED"/>
                     <property name="atomicityMode" value="TRANSACTIONAL"/>
                     <property name="writeThrough" value="true"/>
                     <property name="readThrough" value="true"/>
@@ -47,7 +47,7 @@
 
                 <bean class="org.apache.ignite.configuration.CacheConfiguration">
                     <property name="name" value="cache2"/>
-                    <property name="cacheMode" value="LOCAL"/>
+                    <property name="cacheMode" value="REPLICATED"/>
                     <property name="atomicityMode" value="TRANSACTIONAL"/>
                     <property name="writeThrough" value="true"/>
                     <property name="readThrough" value="true"/>
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Config/full-config.xml b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Config/full-config.xml
index ccb267d..3453e74 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Config/full-config.xml
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Config/full-config.xml
@@ -121,7 +121,7 @@
             </value>
         </pair>
     </userAttributes>
-    <atomicConfiguration backups='2' cacheMode='Local' atomicSequenceReserveSize='250' />
+    <atomicConfiguration backups='2' cacheMode='Partitioned' atomicSequenceReserveSize='250' />
     <transactionConfiguration defaultTransactionConcurrency='Optimistic' defaultTransactionIsolation='RepeatableRead' defaultTimeout='0:1:2' pessimisticTransactionLogSize='15' pessimisticTransactionLogLinger='0:0:33' />
     <logger type='Apache.Ignite.Core.Tests.IgniteConfigurationSerializerTest+TestLogger, Apache.Ignite.Core.Tests' />
     <pluginConfigurations>
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Config/native-client-test-cache-parallel-store.xml b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Config/native-client-test-cache-parallel-store.xml
index 6776516..2c27bed 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Config/native-client-test-cache-parallel-store.xml
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Config/native-client-test-cache-parallel-store.xml
@@ -37,7 +37,7 @@
             <list>
                 <bean class="org.apache.ignite.configuration.CacheConfiguration">
                     <property name="name" value="object_store_parallel"/>
-                    <property name="cacheMode" value="LOCAL"/>
+                    <property name="cacheMode" value="REPLICATED"/>
                     <property name="atomicityMode" value="TRANSACTIONAL"/>
                     <property name="storeKeepBinary" value="false"/>
 
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Config/native-client-test-cache-store.xml b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Config/native-client-test-cache-store.xml
index f16a867..8ac3d35 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Config/native-client-test-cache-store.xml
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Config/native-client-test-cache-store.xml
@@ -37,7 +37,7 @@
             <list>
                 <bean class="org.apache.ignite.configuration.CacheConfiguration">
                     <property name="name" value="binary_store"/>
-                    <property name="cacheMode" value="LOCAL"/>
+                    <property name="cacheMode" value="REPLICATED"/>
                     <property name="atomicityMode" value="TRANSACTIONAL"/>
                     <property name="writeThrough" value="true"/>
                     <property name="readThrough" value="true"/>
@@ -52,7 +52,7 @@
 
                 <bean class="org.apache.ignite.configuration.CacheConfiguration">
                     <property name="name" value="object_store"/>
-                    <property name="cacheMode" value="LOCAL"/>
+                    <property name="cacheMode" value="REPLICATED"/>
                     <property name="atomicityMode" value="TRANSACTIONAL"/>
                     <property name="writeThrough" value="true"/>
                     <property name="readThrough" value="true"/>
@@ -67,7 +67,7 @@
 
                 <bean class="org.apache.ignite.configuration.CacheConfiguration">
                     <property name="name" value="template_store*"/>
-                    <property name="cacheMode" value="LOCAL"/>
+                    <property name="cacheMode" value="REPLICATED"/>
                     <property name="atomicityMode" value="TRANSACTIONAL"/>
                     <property name="writeThrough" value="true"/>
                     <property name="readThrough" value="true"/>
@@ -82,7 +82,7 @@
 
                 <bean class="org.apache.ignite.configuration.CacheConfiguration">
                     <property name="name" value="custom_store"/>
-                    <property name="cacheMode" value="LOCAL"/>
+                    <property name="cacheMode" value="REPLICATED"/>
                     <property name="atomicityMode" value="TRANSACTIONAL"/>
                     <property name="writeThrough" value="true"/>
                     <property name="readThrough" value="true"/>
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Config/native-client-test-cache.xml b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Config/native-client-test-cache.xml
index 8c77d75..1e6d8f7 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Config/native-client-test-cache.xml
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/Config/native-client-test-cache.xml
@@ -36,18 +36,6 @@
         <property name="cacheConfiguration">
             <list>
                 <bean parent="cache-template">
-                    <property name="name" value="local"/>
-                    <property name="cacheMode" value="LOCAL"/>
-                    <property name="atomicityMode" value="TRANSACTIONAL"/>
-                </bean>
-
-                <bean parent="cache-template">
-                    <property name="name" value="local_atomic"/>
-                    <property name="cacheMode" value="LOCAL"/>
-                    <property name="atomicityMode" value="ATOMIC"/>
-                </bean>
-
-                <bean parent="cache-template">
                     <property name="name" value="partitioned"/>
                     <property name="cacheMode" value="PARTITIONED"/>
                     <property name="atomicityMode" value="TRANSACTIONAL"/>
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/IgniteConfigurationSerializerTest.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/IgniteConfigurationSerializerTest.cs
index fc4350e..79d7014 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/IgniteConfigurationSerializerTest.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/IgniteConfigurationSerializerTest.cs
@@ -203,7 +203,7 @@
 
             var atomicCfg = cfg.AtomicConfiguration;
             Assert.AreEqual(2, atomicCfg.Backups);
-            Assert.AreEqual(CacheMode.Local, atomicCfg.CacheMode);
+            Assert.AreEqual(CacheMode.Partitioned, atomicCfg.CacheMode);
             Assert.AreEqual(250, atomicCfg.AtomicSequenceReserveSize);
 
             var tx = cfg.TransactionConfiguration;
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/MessagingTest.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/MessagingTest.cs
index ead9763..67dc1e6 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/MessagingTest.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/MessagingTest.cs
@@ -60,7 +60,7 @@
             short.MaxValue,
 
             // Enums.
-            CacheMode.Local,
+            CacheMode.Partitioned,
             GCCollectionMode.Forced,
 
             // Objects.
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Cache/Configuration/CacheMode.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Cache/Configuration/CacheMode.cs
index 6608354..9d20121 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Cache/Configuration/CacheMode.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Cache/Configuration/CacheMode.cs
@@ -23,22 +23,10 @@
     public enum CacheMode
     {
         /// <summary>
-        /// Specifies local-only cache behaviour. In this mode caches residing on
-        /// different grid nodes will not know about each other.
-        /// <para />
-        /// Other than distribution, <see cref="Local"/> caches still have all
-        /// the caching features, such as eviction, expiration, swapping,
-        /// querying, etc... This mode is very useful when caching read-only data
-        /// or data that automatically expires at a certain interval and
-        /// then automatically reloaded from persistence store.
-        /// </summary>
-        Local,
-
-        /// <summary>
         /// Specifies fully replicated cache behavior. In this mode all the keys are distributed
         /// to all participating nodes. 
         /// </summary>
-        Replicated,
+        Replicated = 1,
 
         /// <summary>
         /// Specifies partitioned cache behaviour. In this mode the overall
@@ -47,6 +35,6 @@
         /// <para />
         /// Note that partitioned cache is always fronted by local 'near' cache which stores most recent data. 
         /// </summary>
-        Partitioned
+        Partitioned = 2
     }
 }
\ No newline at end of file
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Cache/Configuration/CacheRebalanceMode.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Cache/Configuration/CacheRebalanceMode.cs
index 2ef2115..bf62eb9 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Cache/Configuration/CacheRebalanceMode.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Cache/Configuration/CacheRebalanceMode.cs
@@ -24,9 +24,8 @@
     /// Replicated caches will try to load the full set of cache entries from other nodes, 
     /// while partitioned caches will only load the entries for which current node is primary or backup.
     /// <para />
-    /// Note that rebalance mode only makes sense for <see cref="CacheMode.Replicated"/> 
-    /// and <see cref="CacheMode.Partitioned"/> caches. Caches with <see cref="CacheMode.Local"/> 
-    /// mode are local by definition and therefore cannot rebalance any values from neighboring nodes.
+    /// The rebalance mode affects both <see cref="CacheMode.Replicated"/> and
+    /// <see cref="CacheMode.Partitioned"/> caches.
     /// </summary>
     public enum CacheRebalanceMode
     {
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfigurationSection.xsd b/modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfigurationSection.xsd
index 80b41d6..35ca714 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfigurationSection.xsd
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfigurationSection.xsd
@@ -25,7 +25,6 @@
 
     <xs:simpleType name="cacheMode" final="restriction">
         <xs:restriction base="xs:string">
-            <xs:enumeration value="Local" />
             <xs:enumeration value="Replicated" />
             <xs:enumeration value="Partitioned" />
         </xs:restriction>
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/IgniteUtils.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/IgniteUtils.cs
index 15a35a3..1e0be1f 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/IgniteUtils.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/IgniteUtils.cs
@@ -23,6 +23,7 @@
     using System.Runtime.InteropServices;
     using System.Text;
     using Apache.Ignite.Core.Cache;
+    using Apache.Ignite.Core.Cache.Configuration;
     using Apache.Ignite.Core.Cluster;
     using Apache.Ignite.Core.Common;
     using Apache.Ignite.Core.Impl.Binary;
diff --git a/modules/web/src/main/java/org/apache/ignite/cache/websession/WebSessionFilter.java b/modules/web/src/main/java/org/apache/ignite/cache/websession/WebSessionFilter.java
index d5fe026..f0a31ed 100644
--- a/modules/web/src/main/java/org/apache/ignite/cache/websession/WebSessionFilter.java
+++ b/modules/web/src/main/java/org/apache/ignite/cache/websession/WebSessionFilter.java
@@ -56,11 +56,9 @@
 import org.apache.ignite.marshaller.Marshaller;
 import org.apache.ignite.startup.servlet.ServletContextListenerStartup;
 import org.apache.ignite.transactions.Transaction;
-
 import static java.util.concurrent.TimeUnit.MILLISECONDS;
 import static org.apache.ignite.cache.CacheAtomicityMode.ATOMIC;
 import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL;
-import static org.apache.ignite.cache.CacheMode.LOCAL;
 import static org.apache.ignite.cache.CacheMode.PARTITIONED;
 import static org.apache.ignite.cache.CacheWriteSynchronizationMode.FULL_ASYNC;
 import static org.apache.ignite.transactions.TransactionConcurrency.PESSIMISTIC;
@@ -345,10 +343,6 @@
             throw new IgniteException("Cache for web sessions cannot operate with lazy TTL. " +
                 "Consider setting eagerTtl to true for cache: " + cacheName);
 
-        if (cacheCfg.getCacheMode() == LOCAL)
-            U.quietAndWarn(webSesIgnite.log(), "Using LOCAL cache for web sessions caching " +
-                "(this is only OK in test mode): " + cacheName);
-
         if (cacheCfg.getCacheMode() == PARTITIONED && cacheCfg.getAtomicityMode() != ATOMIC)
             U.quietAndWarn(webSesIgnite.log(), "Using " + cacheCfg.getAtomicityMode() + " atomicity for web sessions " +
                 "caching (switch to ATOMIC mode for better performance)");
diff --git a/modules/web/src/test/webapp2/META-INF/ignite-webapp-config.xml b/modules/web/src/test/webapp2/META-INF/ignite-webapp-config.xml
index 7224796..e90d0ab 100644
--- a/modules/web/src/test/webapp2/META-INF/ignite-webapp-config.xml
+++ b/modules/web/src/test/webapp2/META-INF/ignite-webapp-config.xml
@@ -145,17 +145,6 @@
                     <!-- Set synchronous rebalancing (default is asynchronous). -->
                     <property name="rebalanceMode" value="SYNC"/>
                 </bean>
-
-                <!--
-                    Local cache example configuration.
-                -->
-                <bean class="org.apache.ignite.configuration.CacheConfiguration">
-                    <!-- Cache name is 'local'. -->
-                    <property name="name" value="local"/>
-
-                    <!-- LOCAL cache mode. -->
-                    <property name="cacheMode" value="LOCAL"/>
-                </bean>
             </list>
         </property>
 
diff --git a/modules/yardstick/src/main/java/org/apache/ignite/yardstick/cache/load/IgniteCacheRandomOperationBenchmark.java b/modules/yardstick/src/main/java/org/apache/ignite/yardstick/cache/load/IgniteCacheRandomOperationBenchmark.java
index acff2d3..faca4da 100644
--- a/modules/yardstick/src/main/java/org/apache/ignite/yardstick/cache/load/IgniteCacheRandomOperationBenchmark.java
+++ b/modules/yardstick/src/main/java/org/apache/ignite/yardstick/cache/load/IgniteCacheRandomOperationBenchmark.java
@@ -50,7 +50,6 @@
 import org.apache.ignite.IgniteException;
 import org.apache.ignite.cache.CacheAtomicityMode;
 import org.apache.ignite.cache.CacheEntryEventSerializableFilter;
-import org.apache.ignite.cache.CacheMode;
 import org.apache.ignite.cache.QueryEntity;
 import org.apache.ignite.cache.QueryIndex;
 import org.apache.ignite.cache.affinity.Affinity;
@@ -339,8 +338,7 @@
 
             valuesCacheClasses.put(cacheName, determineValueClasses(cacheName));
 
-            if (configuration.getCacheMode() != CacheMode.LOCAL)
-                affCaches.add(cache);
+            affCaches.add(cache);
 
             if (configuration.getAtomicityMode() == CacheAtomicityMode.TRANSACTIONAL)
                 txCaches.add(cache);
diff --git a/modules/zookeeper/src/main/java/org/apache/ignite/spi/discovery/zk/internal/ZkCommunicationFailureContext.java b/modules/zookeeper/src/main/java/org/apache/ignite/spi/discovery/zk/internal/ZkCommunicationFailureContext.java
index b87967d..8be4871 100644
--- a/modules/zookeeper/src/main/java/org/apache/ignite/spi/discovery/zk/internal/ZkCommunicationFailureContext.java
+++ b/modules/zookeeper/src/main/java/org/apache/ignite/spi/discovery/zk/internal/ZkCommunicationFailureContext.java
@@ -25,7 +25,6 @@
 import java.util.Map;
 import java.util.Set;
 import java.util.UUID;
-import org.apache.ignite.cache.CacheMode;
 import org.apache.ignite.cluster.ClusterNode;
 import org.apache.ignite.configuration.CacheConfiguration;
 import org.apache.ignite.configuration.CommunicationFailureContext;
@@ -144,9 +143,6 @@
         if (cacheDesc == null)
             throw new IllegalArgumentException("Invalid cache name: " + cacheName);
 
-        if (cacheDesc.cacheConfiguration().getCacheMode() == CacheMode.LOCAL)
-            return Collections.emptyList();
-
         CacheGroupContext grp = ctx.cache().cacheGroup(cacheDesc.groupId());
 
         GridDhtPartitionTopology top;