You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by ni...@apache.org on 2019/04/17 11:01:16 UTC

[ignite] branch revert-6388-IGNITE-9113 created (now f9cb814)

This is an automated email from the ASF dual-hosted git repository.

nizhikov pushed a change to branch revert-6388-IGNITE-9113
in repository https://gitbox.apache.org/repos/asf/ignite.git.


      at f9cb814  Revert "IGNITE-9113: Lazy memory allocation implementation"

This branch includes the following new commits:

     new f9cb814  Revert "IGNITE-9113: Lazy memory allocation implementation"

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[ignite] 01/01: Revert "IGNITE-9113: Lazy memory allocation implementation"

Posted by ni...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

nizhikov pushed a commit to branch revert-6388-IGNITE-9113
in repository https://gitbox.apache.org/repos/asf/ignite.git

commit f9cb814f96ef3a683331b6b567c43e8aa2e57e4e
Author: Nikolay <ni...@apache.org>
AuthorDate: Wed Apr 17 14:01:07 2019 +0300

    Revert "IGNITE-9113: Lazy memory allocation implementation"
---
 .../configuration/DataRegionConfiguration.java     |  31 ---
 .../org/apache/ignite/internal/IgniteKernal.java   |   3 +-
 .../pagemem/impl/PageMemoryNoStoreImpl.java        |  96 ++++---
 .../processors/cache/GridCacheProcessor.java       |   9 -
 .../processors/cache/GridCacheSharedContext.java   |   8 -
 .../processors/cache/mvcc/MvccProcessorImpl.java   |   2 -
 .../GridCacheDatabaseSharedManager.java            |  20 +-
 .../IgniteCacheDatabaseSharedManager.java          |   4 +-
 .../cache/persistence/pagemem/PageMemoryImpl.java  | 185 ++++++--------
 .../platform/client/ClientConnectionContext.java   |   6 +-
 .../platform/utils/PlatformConfigurationUtils.java |  64 ++---
 .../apache/ignite/internal/util/IgniteUtils.java   |   2 +-
 .../pagemem/PageMemoryLazyAllocationTest.java      | 275 ---------------------
 .../PageMemoryLazyAllocationWithPDSTest.java       | 159 ------------
 .../ignite/testsuites/IgnitePdsTestSuite.java      |   4 -
 .../Configuration/DataRegionConfiguration.cs       |  30 +--
 .../Configuration/DataStorageConfiguration.cs      |  15 +-
 .../Apache.Ignite.Core/IgniteConfiguration.cs      |   4 +-
 .../IgniteConfigurationSection.xsd                 |  14 --
 .../Apache.Ignite.Core/Impl/Client/ClientSocket.cs |   5 +-
 20 files changed, 155 insertions(+), 781 deletions(-)

diff --git a/modules/core/src/main/java/org/apache/ignite/configuration/DataRegionConfiguration.java b/modules/core/src/main/java/org/apache/ignite/configuration/DataRegionConfiguration.java
index 8591000..474334c 100644
--- a/modules/core/src/main/java/org/apache/ignite/configuration/DataRegionConfiguration.java
+++ b/modules/core/src/main/java/org/apache/ignite/configuration/DataRegionConfiguration.java
@@ -134,14 +134,6 @@ public final class DataRegionConfiguration implements Serializable {
     private long checkpointPageBufSize;
 
     /**
-     * If {@code true}, memory for {@code DataRegion} will be allocated only on the creation of the first cache
-     * belonged to this {@code DataRegion}.
-     *
-     * Default is {@code true}.
-     */
-    private boolean lazyMemoryAllocation = true;
-
-    /**
      * Gets data region name.
      *
      * @return Data region name.
@@ -441,29 +433,6 @@ public final class DataRegionConfiguration implements Serializable {
         return this;
     }
 
-    /**
-     * @return {@code True} if memory for {@code DataRegion} will be allocated only on the creation of the first cache
-     * belonged to this {@code DataRegion}.
-     */
-    public boolean isLazyMemoryAllocation() {
-        return lazyMemoryAllocation;
-    }
-
-    /**
-     * Sets {@code lazyMemoryAllocation} flag value.
-     *
-     * If {@code true}, memory for {@code DataRegion} will be allocated only on the creation of the first cache
-     * belonged to this {@code DataRegion}.
-     *
-     * @param lazyMemoryAllocation Flag value.
-     * @return {@code this} for chaining.
-     */
-    public DataRegionConfiguration setLazyMemoryAllocation(boolean lazyMemoryAllocation) {
-        this.lazyMemoryAllocation = lazyMemoryAllocation;
-
-        return this;
-    }
-
     /** {@inheritDoc} */
     @Override public String toString() {
         return S.toString(DataRegionConfiguration.class, this);
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java b/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
index c3c725d..a6540be 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
@@ -2010,8 +2010,7 @@ public class IgniteKernal implements IgniteEx, IgniteMXBean, Externalizable {
         m.a("  ^-- ").a(regCfg.getName()).a(" [");
         m.a("initSize=").a(U.readableSize(regCfg.getInitialSize(), false));
         m.a(", maxSize=").a(U.readableSize(regCfg.getMaxSize(), false));
-        m.a(", persistence=" + regCfg.isPersistenceEnabled());
-        m.a(", lazyMemoryAllocation=" + regCfg.isLazyMemoryAllocation()).a(']');
+        m.a(", persistence=" + regCfg.isPersistenceEnabled()).a(']');
 
         return m.toString();
     }
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/impl/PageMemoryNoStoreImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/impl/PageMemoryNoStoreImpl.java
index adfbf44..12db21c 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/impl/PageMemoryNoStoreImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/impl/PageMemoryNoStoreImpl.java
@@ -140,9 +140,6 @@ public class PageMemoryNoStoreImpl implements PageMemory {
     /** Segments array. */
     private volatile Segment[] segments;
 
-    /** Lock for segments changes. */
-    private Object segmentsLock = new Object();
-
     /** */
     private final AtomicInteger allocatedPages = new AtomicInteger();
 
@@ -168,9 +165,9 @@ public class PageMemoryNoStoreImpl implements PageMemory {
     private final GridCacheSharedContext<?, ?> ctx;
 
     /**
-     * {@code False} if memory was not started or already stopped and is not supposed for any usage.
+     * Marker that stop was invoked and memory is not supposed for any usage.
      */
-    private volatile boolean started;
+    private volatile boolean stopped;
 
     /**
      * @param log Logger.
@@ -211,65 +208,58 @@ public class PageMemoryNoStoreImpl implements PageMemory {
 
     /** {@inheritDoc} */
     @Override public void start() throws IgniteException {
-        synchronized (segmentsLock) {
-            if (started)
-                return;
-
-            started = true;
+        stopped = false;
 
-            long startSize = dataRegionCfg.getInitialSize();
-            long maxSize = dataRegionCfg.getMaxSize();
+        long startSize = dataRegionCfg.getInitialSize();
+        long maxSize = dataRegionCfg.getMaxSize();
 
-            long[] chunks = new long[SEG_CNT];
+        long[] chunks = new long[SEG_CNT];
 
-            chunks[0] = startSize;
+        chunks[0] = startSize;
 
-            long total = startSize;
+        long total = startSize;
 
-            long allocChunkSize = Math.max((maxSize - startSize) / (SEG_CNT - 1), 256L * 1024 * 1024);
+        long allocChunkSize = Math.max((maxSize - startSize) / (SEG_CNT - 1), 256L * 1024 * 1024);
 
-            int lastIdx = 0;
+        int lastIdx = 0;
 
-            for (int i = 1; i < SEG_CNT; i++) {
-                long allocSize = Math.min(allocChunkSize, maxSize - total);
+        for (int i = 1; i < SEG_CNT; i++) {
+            long allocSize = Math.min(allocChunkSize, maxSize - total);
 
-                if (allocSize <= 0)
-                    break;
+            if (allocSize <= 0)
+                break;
 
-                chunks[i] = allocSize;
+            chunks[i] = allocSize;
 
-                total += allocSize;
+            total += allocSize;
 
-                lastIdx = i;
-            }
+            lastIdx = i;
+        }
 
-            if (lastIdx != SEG_CNT - 1)
-                chunks = Arrays.copyOf(chunks, lastIdx + 1);
+        if (lastIdx != SEG_CNT - 1)
+            chunks = Arrays.copyOf(chunks, lastIdx + 1);
 
-            if (segments == null)
-                directMemoryProvider.initialize(chunks);
+        if (segments == null)
+            directMemoryProvider.initialize(chunks);
 
-            addSegment(null);
-        }
+        addSegment(null);
     }
 
     /** {@inheritDoc} */
     @Override public void stop(boolean deallocate) throws IgniteException {
-        synchronized (segmentsLock) {
-            if (log.isDebugEnabled())
-                log.debug("Stopping page memory.");
+        if (log.isDebugEnabled())
+            log.debug("Stopping page memory.");
 
-            started = false;
+        stopped = true;
 
-            directMemoryProvider.shutdown(deallocate);
+        directMemoryProvider.shutdown(deallocate);
 
-            if (directMemoryProvider instanceof Closeable) {
-                try {
-                    ((Closeable)directMemoryProvider).close();
-                }
-                catch (IOException e) {
-                    throw new IgniteException(e);
-                }
+        if (directMemoryProvider instanceof Closeable) {
+            try {
+                ((Closeable)directMemoryProvider).close();
+            }
+            catch (IOException e) {
+                throw new IgniteException(e);
             }
         }
     }
@@ -281,7 +271,7 @@ public class PageMemoryNoStoreImpl implements PageMemory {
 
     /** {@inheritDoc} */
     @Override public long allocatePage(int grpId, int partId, byte flags) {
-        assert started;
+        assert !stopped;
 
         long relPtr = borrowFreePage();
         long absPtr = 0;
@@ -345,7 +335,7 @@ public class PageMemoryNoStoreImpl implements PageMemory {
 
     /** {@inheritDoc} */
     @Override public boolean freePage(int cacheId, long pageId) {
-        assert started;
+        assert !stopped;
 
         releaseFreePage(pageId);
 
@@ -471,7 +461,7 @@ public class PageMemoryNoStoreImpl implements PageMemory {
 
     /** {@inheritDoc} */
     @Override public long acquirePage(int cacheId, long pageId, IoStatisticsHolder statHolder) {
-        assert started;
+        assert !stopped;
 
         int pageIdx = PageIdUtils.pageIndex(pageId);
 
@@ -486,7 +476,7 @@ public class PageMemoryNoStoreImpl implements PageMemory {
 
     /** {@inheritDoc} */
     @Override public void releasePage(int cacheId, long pageId, long page) {
-        assert started;
+        assert !stopped;
 
         if (trackAcquiredPages) {
             Segment seg = segment(PageIdUtils.pageIndex(pageId));
@@ -497,7 +487,7 @@ public class PageMemoryNoStoreImpl implements PageMemory {
 
     /** {@inheritDoc} */
     @Override public long readLock(int cacheId, long pageId, long page) {
-        assert started;
+        assert !stopped;
 
         if (rwLock.readLock(page + LOCK_OFFSET, PageIdUtils.tag(pageId)))
             return page + PAGE_OVERHEAD;
@@ -507,7 +497,7 @@ public class PageMemoryNoStoreImpl implements PageMemory {
 
     /** {@inheritDoc} */
     @Override public long readLockForce(int cacheId, long pageId, long page) {
-        assert started;
+        assert !stopped;
 
         if (rwLock.readLock(page + LOCK_OFFSET, -1))
             return page + PAGE_OVERHEAD;
@@ -517,14 +507,14 @@ public class PageMemoryNoStoreImpl implements PageMemory {
 
     /** {@inheritDoc} */
     @Override public void readUnlock(int cacheId, long pageId, long page) {
-        assert started;
+        assert !stopped;
 
         rwLock.readUnlock(page + LOCK_OFFSET);
     }
 
     /** {@inheritDoc} */
     @Override public long writeLock(int cacheId, long pageId, long page) {
-        assert started;
+        assert !stopped;
 
         if (rwLock.writeLock(page + LOCK_OFFSET, PageIdUtils.tag(pageId)))
             return page + PAGE_OVERHEAD;
@@ -534,7 +524,7 @@ public class PageMemoryNoStoreImpl implements PageMemory {
 
     /** {@inheritDoc} */
     @Override public long tryWriteLock(int cacheId, long pageId, long page) {
-        assert started;
+        assert !stopped;
 
         if (rwLock.tryWriteLock(page + LOCK_OFFSET, PageIdUtils.tag(pageId)))
             return page + PAGE_OVERHEAD;
@@ -550,7 +540,7 @@ public class PageMemoryNoStoreImpl implements PageMemory {
         Boolean walPlc,
         boolean dirtyFlag
     ) {
-        assert started;
+        assert !stopped;
 
         long actualId = PageIO.getPageId(page + PAGE_OVERHEAD);
 
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 e095db4..3fe99ef 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
@@ -2813,15 +2813,6 @@ public class GridCacheProcessor extends GridProcessorAdapter {
         String memPlcName = cfg.getDataRegionName();
 
         DataRegion dataRegion = sharedCtx.database().dataRegion(memPlcName);
-
-        boolean needToStart = (dataRegion != null)
-            && (cacheType != CacheType.USER
-                || (sharedCtx.isLazyMemoryAllocation(dataRegion)
-                    && (!cacheObjCtx.kernalContext().clientNode() || cfg.getCacheMode() == LOCAL)));
-
-        if (needToStart)
-            dataRegion.pageMemory().start();
-
         FreeList freeList = sharedCtx.database().freeList(memPlcName);
         ReuseList reuseList = sharedCtx.database().reuseList(memPlcName);
 
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheSharedContext.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheSharedContext.java
index 32a8f5b..bc3cf39 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheSharedContext.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheSharedContext.java
@@ -49,7 +49,6 @@ import org.apache.ignite.internal.processors.cache.jta.CacheJtaManagerAdapter;
 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.mvcc.MvccProcessor;
-import org.apache.ignite.internal.processors.cache.persistence.DataRegion;
 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.store.CacheStoreManager;
@@ -1156,11 +1155,4 @@ public class GridCacheSharedContext<K, V> {
     public void setTxManager(IgniteTxManager txMgr) {
         this.txMgr = txMgr;
     }
-
-    /**
-     * @return {@code True} if lazy memory allocation enabled. {@code False} otherwise.
-     */
-    public boolean isLazyMemoryAllocation(@Nullable DataRegion region) {
-        return gridConfig().isClientMode() || region == null || region.config().isLazyMemoryAllocation();
-    }
 }
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/mvcc/MvccProcessorImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/mvcc/MvccProcessorImpl.java
index 6643b12..234c2e8 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/mvcc/MvccProcessorImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/mvcc/MvccProcessorImpl.java
@@ -965,8 +965,6 @@ public class MvccProcessorImpl extends GridProcessorAdapter implements MvccProce
         cfg.setInitialSize(dscfg.getSystemRegionInitialSize());
         cfg.setMaxSize(dscfg.getSystemRegionMaxSize());
         cfg.setPersistenceEnabled(CU.isPersistenceEnabled(dscfg));
-        cfg.setLazyMemoryAllocation(false);
-
         return cfg;
     }
 
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 9110c95..c801fb9 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
@@ -508,7 +508,6 @@ public class GridCacheDatabaseSharedManager extends IgniteCacheDatabaseSharedMan
         cfg.setInitialSize(storageCfg.getSystemRegionInitialSize());
         cfg.setMaxSize(storageCfg.getSystemRegionMaxSize());
         cfg.setPersistenceEnabled(true);
-        cfg.setLazyMemoryAllocation(false);
 
         return cfg;
     }
@@ -2189,24 +2188,7 @@ public class GridCacheDatabaseSharedManager extends IgniteCacheDatabaseSharedMan
                     U.quietAndWarn(log, "Ignite node stopped in the middle of checkpoint. Will restore memory state and " +
                         "finish checkpoint on node start.");
 
-            cctx.cache().cacheGroupDescriptors().forEach((grpId, desc) -> {
-                if (!cacheGroupsPredicate.apply(grpId))
-                    return;
-
-                try {
-                    DataRegion region = cctx.database().dataRegion(desc.config().getDataRegionName());
-
-                    if (region == null || !cctx.isLazyMemoryAllocation(region))
-                        return;
-
-                    region.pageMemory().start();
-                }
-                catch (IgniteCheckedException e) {
-                    throw new IgniteException(e);
-                }
-            });
-
-            cctx.pageStore().beginRecover();
+                cctx.pageStore().beginRecover();
 
                 if (!(startRec instanceof CheckpointRecord))
                     throw new StorageException("Checkpoint marker doesn't point to checkpoint record " +
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/IgniteCacheDatabaseSharedManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/IgniteCacheDatabaseSharedManager.java
index d93c189..4cc59f1 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/IgniteCacheDatabaseSharedManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/IgniteCacheDatabaseSharedManager.java
@@ -276,8 +276,7 @@ public class IgniteCacheDatabaseSharedManager extends GridCacheSharedManagerAdap
      */
     private void startDataRegions() {
         for (DataRegion region : dataRegionMap.values()) {
-            if (!cctx.isLazyMemoryAllocation(region))
-                region.pageMemory().start();
+            region.pageMemory().start();
 
             region.evictionTracker().start();
         }
@@ -464,7 +463,6 @@ public class IgniteCacheDatabaseSharedManager extends GridCacheSharedManagerAdap
         res.setInitialSize(sysCacheInitSize);
         res.setMaxSize(sysCacheMaxSize);
         res.setPersistenceEnabled(persistenceEnabled);
-        res.setLazyMemoryAllocation(false);
 
         return res;
     }
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/pagemem/PageMemoryImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/pagemem/PageMemoryImpl.java
index 45dfae1..e8e40d9 100755
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/pagemem/PageMemoryImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/pagemem/PageMemoryImpl.java
@@ -238,10 +238,7 @@ public class PageMemoryImpl implements PageMemoryEx {
     private final DirectMemoryProvider directMemoryProvider;
 
     /** Segments array. */
-    private volatile Segment[] segments;
-
-    /** Lock for segments changes. */
-    private Object segmentsLock = new Object();
+    private Segment[] segments;
 
     /** */
     private PagePool checkpointPool;
@@ -284,9 +281,9 @@ public class PageMemoryImpl implements PageMemoryEx {
     private DataRegionMetricsImpl memMetrics;
 
     /**
-     * {@code False} if memory was not started or already stopped and is not supposed for any usage.
+     * Marker that stop was invoked and memory is not supposed for any usage.
      */
-    private volatile boolean started;
+    private volatile boolean stopped;
 
     /**
      * @param directMemoryProvider Memory allocator to use.
@@ -350,64 +347,56 @@ public class PageMemoryImpl implements PageMemoryEx {
 
     /** {@inheritDoc} */
     @Override public void start() throws IgniteException {
-        synchronized (segmentsLock) {
-            if (started)
-                return;
-
-            started = true;
-
-            directMemoryProvider.initialize(sizes);
+        stopped = false;
 
-            List<DirectMemoryRegion> regions = new ArrayList<>(sizes.length);
+        directMemoryProvider.initialize(sizes);
 
-            while (true) {
-                DirectMemoryRegion reg = directMemoryProvider.nextRegion();
-
-                if (reg == null)
-                    break;
+        List<DirectMemoryRegion> regions = new ArrayList<>(sizes.length);
 
-                regions.add(reg);
-            }
+        while (true) {
+            DirectMemoryRegion reg = directMemoryProvider.nextRegion();
 
-            int regs = regions.size();
+            if (reg == null)
+                break;
 
-            Segment[] segments = new Segment[regs - 1];
+            regions.add(reg);
+        }
 
-            DirectMemoryRegion cpReg = regions.get(regs - 1);
+        int regs = regions.size();
 
-            checkpointPool = new PagePool(regs - 1, cpReg, cpBufPagesCntr);
+        segments = new Segment[regs - 1];
 
-            long checkpointBuf = cpReg.size();
+        DirectMemoryRegion cpReg = regions.get(regs - 1);
 
-            long totalAllocated = 0;
-            int pages = 0;
-            long totalTblSize = 0;
+        checkpointPool = new PagePool(regs - 1, cpReg, cpBufPagesCntr);
 
-            for (int i = 0; i < regs - 1; i++) {
-                assert i < segments.length;
+        long checkpointBuf = cpReg.size();
 
-                DirectMemoryRegion reg = regions.get(i);
+        long totalAllocated = 0;
+        int pages = 0;
+        long totalTblSize = 0;
 
-                totalAllocated += reg.size();
+        for (int i = 0; i < regs - 1; i++) {
+            assert i < segments.length;
 
-                segments[i] = new Segment(i, regions.get(i), checkpointPool.pages() / segments.length, throttlingPlc);
+            DirectMemoryRegion reg = regions.get(i);
 
-                pages += segments[i].pages();
-                totalTblSize += segments[i].tableSize();
-            }
+            totalAllocated += reg.size();
 
-            this.segments = segments;
+            segments[i] = new Segment(i, regions.get(i), checkpointPool.pages() / segments.length, throttlingPlc);
 
-            initWriteThrottle();
+            pages += segments[i].pages();
+            totalTblSize += segments[i].tableSize();
+        }
 
-            if (log.isInfoEnabled())
-                log.info("Started page memory [memoryAllocated=" + U.readableSize(totalAllocated, false) +
-                    ", pages=" + pages +
-                    ", tableSize=" + U.readableSize(totalTblSize, false) +
-                    ", checkpointBuffer=" + U.readableSize(checkpointBuf, false) +
-                    ']');
+        initWriteThrottle();
 
-        }
+        if (log.isInfoEnabled())
+            log.info("Started page memory [memoryAllocated=" + U.readableSize(totalAllocated, false) +
+                ", pages=" + pages +
+                ", tableSize=" + U.readableSize(totalTblSize, false) +
+                ", checkpointBuffer=" + U.readableSize(checkpointBuf, false) +
+                ']');
     }
 
     /**
@@ -424,29 +413,24 @@ public class PageMemoryImpl implements PageMemoryEx {
 
     /** {@inheritDoc} */
     @Override public void stop(boolean deallocate) throws IgniteException {
-        synchronized (segmentsLock) {
-            if (!started)
-                return;
-
-            if (log.isDebugEnabled())
-                log.debug("Stopping page memory.");
+        if (log.isDebugEnabled())
+            log.debug("Stopping page memory.");
 
-            U.shutdownNow(getClass(), asyncRunner, log);
+        U.shutdownNow(getClass(), asyncRunner, log);
 
-            if (segments != null) {
-                for (Segment seg : segments)
-                    seg.close();
-            }
+        if (segments != null) {
+            for (Segment seg : segments)
+                seg.close();
+        }
 
-            started = false;
+        stopped = true;
 
-            directMemoryProvider.shutdown(deallocate);
-        }
+        directMemoryProvider.shutdown(deallocate);
     }
 
     /** {@inheritDoc} */
     @Override public void releasePage(int grpId, long pageId, long page) {
-        assert started;
+        assert !stopped;
 
         Segment seg = segment(grpId, pageId);
 
@@ -462,35 +446,35 @@ public class PageMemoryImpl implements PageMemoryEx {
 
     /** {@inheritDoc} */
     @Override public long readLock(int grpId, long pageId, long page) {
-        assert started;
+        assert !stopped;
 
         return readLock(page, pageId, false);
     }
 
     /** {@inheritDoc} */
     @Override public void readUnlock(int grpId, long pageId, long page) {
-        assert started;
+        assert !stopped;
 
         readUnlockPage(page);
     }
 
     /** {@inheritDoc} */
     @Override public long writeLock(int grpId, long pageId, long page) {
-        assert started;
+        assert !stopped;
 
         return writeLock(grpId, pageId, page, false);
     }
 
     /** {@inheritDoc} */
     @Override public long writeLock(int grpId, long pageId, long page, boolean restore) {
-        assert started;
+        assert !stopped;
 
         return writeLockPage(page, new FullPageId(pageId, grpId), !restore);
     }
 
     /** {@inheritDoc} */
     @Override public long tryWriteLock(int grpId, long pageId, long page) {
-        assert started;
+        assert !stopped;
 
         return tryWriteLockPage(page, new FullPageId(pageId, grpId), true);
     }
@@ -498,7 +482,7 @@ public class PageMemoryImpl implements PageMemoryEx {
     /** {@inheritDoc} */
     @Override public void writeUnlock(int grpId, long pageId, long page, Boolean walPlc,
         boolean dirtyFlag) {
-        assert started;
+        assert !stopped;
 
         writeUnlock(grpId, pageId, page, walPlc, dirtyFlag, false);
     }
@@ -506,14 +490,14 @@ public class PageMemoryImpl implements PageMemoryEx {
     /** {@inheritDoc} */
     @Override public void writeUnlock(int grpId, long pageId, long page, Boolean walPlc,
         boolean dirtyFlag, boolean restore) {
-        assert started;
+        assert !stopped;
 
         writeUnlockPage(page, new FullPageId(pageId, grpId), walPlc, dirtyFlag, restore);
     }
 
     /** {@inheritDoc} */
     @Override public boolean isDirty(int grpId, long pageId, long page) {
-        assert started;
+        assert !stopped;
 
         return isDirty(page);
     }
@@ -524,7 +508,7 @@ public class PageMemoryImpl implements PageMemoryEx {
             flags == PageIdAllocator.FLAG_IDX && partId == PageIdAllocator.INDEX_PARTITION :
             "flags = " + flags + ", partId = " + partId;
 
-        assert started;
+        assert !stopped;
         assert stateChecker.checkpointLockIsHeldByThread();
 
         if (isThrottlingEnabled())
@@ -680,14 +664,14 @@ public class PageMemoryImpl implements PageMemoryEx {
 
     /** {@inheritDoc} */
     @Override public long metaPageId(int grpId) throws IgniteCheckedException {
-        assert started;
+        assert !stopped;
 
         return storeMgr.metaPageId(grpId);
     }
 
     /** {@inheritDoc} */
     @Override public long partitionMetaPageId(int grpId, int partId) throws IgniteCheckedException {
-        assert started;
+        assert !stopped;
 
         return PageIdUtils.pageId(partId, PageIdAllocator.FLAG_DATA, 0);
     }
@@ -700,7 +684,7 @@ public class PageMemoryImpl implements PageMemoryEx {
     /** {@inheritDoc} */
     @Override public long acquirePage(int grpId, long pageId,
         IoStatisticsHolder statHolder) throws IgniteCheckedException {
-        assert started;
+        assert !stopped;
 
         return acquirePage(grpId, pageId, statHolder, false);
     }
@@ -708,7 +692,7 @@ public class PageMemoryImpl implements PageMemoryEx {
     /** {@inheritDoc} */
     @Override public long acquirePage(int grpId, long pageId, IoStatisticsHolder statHolder,
         boolean restore) throws IgniteCheckedException {
-        assert started;
+        assert !stopped;
 
         FullPageId fullId = new FullPageId(pageId, grpId);
 
@@ -1063,9 +1047,6 @@ public class PageMemoryImpl implements PageMemoryEx {
      * @param dirtyRatioThreshold Throttle threshold.
      */
     boolean shouldThrottle(double dirtyRatioThreshold) {
-        if (segments == null)
-            return false;
-
         for (Segment segment : segments) {
             if (segment.shouldThrottle(dirtyRatioThreshold))
                 return true;
@@ -1078,9 +1059,6 @@ public class PageMemoryImpl implements PageMemoryEx {
      * @return Max dirty ratio from the segments.
      */
     double getDirtyPagesRatio() {
-        if (segments == null)
-            return 0;
-
         double res = 0;
 
         for (Segment segment : segments) {
@@ -1094,9 +1072,6 @@ public class PageMemoryImpl implements PageMemoryEx {
      * @return Total pages can be placed in all segments.
      */
     public long totalPages() {
-        if (segments == null)
-            return 0;
-
         long res = 0;
 
         for (Segment segment : segments) {
@@ -1344,30 +1319,25 @@ public class PageMemoryImpl implements PageMemoryEx {
 
     /** {@inheritDoc} */
     @Override public int invalidate(int grpId, int partId) {
-        synchronized (segmentsLock) {
-            if (!started)
-                return 0;
+        int tag = 0;
 
-            int tag = 0;
-
-            for (Segment seg : segments) {
-                seg.writeLock().lock();
+        for (Segment seg : segments) {
+            seg.writeLock().lock();
 
-                try {
-                    int newTag = seg.incrementPartGeneration(grpId, partId);
+            try {
+                int newTag = seg.incrementPartGeneration(grpId, partId);
 
-                    if (tag == 0)
-                        tag = newTag;
+                if (tag == 0)
+                    tag = newTag;
 
-                    assert tag == newTag;
-                }
-                finally {
-                    seg.writeLock().unlock();
-                }
+                assert tag == newTag;
+            }
+            finally {
+                seg.writeLock().unlock();
             }
-
-            return tag;
         }
+
+        return tag;
     }
 
     /** {@inheritDoc} */
@@ -1437,9 +1407,6 @@ public class PageMemoryImpl implements PageMemoryEx {
      * @return Total number of acquired pages.
      */
     public long acquiredPages() {
-        if (segments == null)
-            return 0L;
-
         long total = 0;
 
         for (Segment seg : segments) {
@@ -1471,7 +1438,7 @@ public class PageMemoryImpl implements PageMemoryEx {
 
     /** {@inheritDoc} */
     @Override  public long readLock(long absPtr, long pageId, boolean force, boolean touch) {
-        assert started;
+        assert !stopped;
 
         int tag = force ? -1 : PageIdUtils.tag(pageId);
 
@@ -1490,7 +1457,7 @@ public class PageMemoryImpl implements PageMemoryEx {
 
     /** {@inheritDoc} */
     @Override public long readLockForce(int grpId, long pageId, long page) {
-        assert started;
+        assert !stopped;
 
         return readLock(page, pageId, true);
     }
@@ -1709,9 +1676,6 @@ public class PageMemoryImpl implements PageMemoryEx {
      * @return Number of active pages.
      */
     public int activePagesCount() {
-        if (segments == null)
-            return 0;
-
         int total = 0;
 
         for (Segment seg : segments)
@@ -1983,9 +1947,6 @@ public class PageMemoryImpl implements PageMemoryEx {
      * @return Collection of all page IDs marked as dirty.
      */
     public Collection<FullPageId> dirtyPages() {
-        if (segments == null)
-            return Collections.EMPTY_SET;
-
         Collection<FullPageId> res = new HashSet<>((int)loadedPages());
 
         for (Segment seg : segments)
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/client/ClientConnectionContext.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/client/ClientConnectionContext.java
index 25f7a96..5e68c34 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/client/ClientConnectionContext.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/client/ClientConnectionContext.java
@@ -44,15 +44,11 @@ public class ClientConnectionContext extends ClientListenerAbstractConnectionCon
     /** Version 1.2.0. */
     public static final ClientListenerProtocolVersion VER_1_2_0 = ClientListenerProtocolVersion.create(1, 2, 0);
 
-    /** Version 1.3.0. */
-    public static final ClientListenerProtocolVersion VER_1_3_0 = ClientListenerProtocolVersion.create(1, 3, 0);
-
     /** Version 1.2.0. */
-    public static final ClientListenerProtocolVersion CURRENT_VER = VER_1_3_0;
+    public static final ClientListenerProtocolVersion CURRENT_VER = VER_1_2_0;
 
     /** Supported versions. */
     private static final Collection<ClientListenerProtocolVersion> SUPPORTED_VERS = Arrays.asList(
-        VER_1_3_0,
         VER_1_2_0,
         VER_1_1_0,
         VER_1_0_0
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 857c1b1..dfd7d57 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
@@ -110,7 +110,6 @@ import org.apache.ignite.transactions.TransactionConcurrency;
 import org.apache.ignite.transactions.TransactionIsolation;
 
 import static org.apache.ignite.internal.processors.platform.client.ClientConnectionContext.VER_1_2_0;
-import static org.apache.ignite.internal.processors.platform.client.ClientConnectionContext.VER_1_3_0;
 
 /**
  * Configuration utils.
@@ -816,7 +815,7 @@ public class PlatformConfigurationUtils {
             cfg.setPersistentStoreConfiguration(readPersistentStoreConfiguration(in));
 
         if (in.readBoolean())
-            cfg.setDataStorageConfiguration(readDataStorageConfiguration(in, ver));
+            cfg.setDataStorageConfiguration(readDataStorageConfiguration(in));
 
         if (in.readBoolean())
             cfg.setSslContextFactory(readSslContextFactory(in));
@@ -1411,7 +1410,7 @@ public class PlatformConfigurationUtils {
 
         writePersistentStoreConfiguration(w, cfg.getPersistentStoreConfiguration());
 
-        writeDataStorageConfiguration(w, cfg.getDataStorageConfiguration(), ver);
+        writeDataStorageConfiguration(w, cfg.getDataStorageConfiguration());
 
         writeSslContextFactory(w, cfg.getSslContextFactory());
 
@@ -1886,11 +1885,9 @@ public class PlatformConfigurationUtils {
      * Reads the data storage configuration.
      *
      * @param in Reader.
-     * @param ver Client version.
      * @return Config.
      */
-    private static DataStorageConfiguration readDataStorageConfiguration(BinaryRawReader in,
-        ClientListenerProtocolVersion ver) {
+    private static DataStorageConfiguration readDataStorageConfiguration(BinaryRawReader in) {
         DataStorageConfiguration res = new DataStorageConfiguration()
                 .setStoragePath(in.readString())
                 .setCheckpointFrequency(in.readLong())
@@ -1929,13 +1926,13 @@ public class PlatformConfigurationUtils {
             DataRegionConfiguration[] regs = new DataRegionConfiguration[cnt];
 
             for (int i = 0; i < cnt; i++)
-                regs[i] = readDataRegionConfiguration(in, ver);
+                regs[i] = readDataRegionConfiguration(in);
 
             res.setDataRegionConfigurations(regs);
         }
 
         if (in.readBoolean())
-            res.setDefaultDataRegionConfiguration(readDataRegionConfiguration(in, ver));
+            res.setDefaultDataRegionConfiguration(readDataRegionConfiguration(in));
 
         return res;
     }
@@ -2014,11 +2011,8 @@ public class PlatformConfigurationUtils {
      * Writes the data storage configuration.
      *
      * @param w Writer.
-     * @param cfg Data storage configuration.
-     * @param ver Client version.
      */
-    private static void writeDataStorageConfiguration(BinaryRawWriter w, DataStorageConfiguration cfg,
-        ClientListenerProtocolVersion ver) {
+    private static void writeDataStorageConfiguration(BinaryRawWriter w, DataStorageConfiguration cfg) {
         assert w != null;
 
         if (cfg != null) {
@@ -2063,14 +2057,14 @@ public class PlatformConfigurationUtils {
                 w.writeInt(cfg.getDataRegionConfigurations().length);
 
                 for (DataRegionConfiguration d : cfg.getDataRegionConfigurations())
-                    writeDataRegionConfiguration(w, d, ver);
+                    writeDataRegionConfiguration(w, d);
             }
             else
                 w.writeInt(0);
 
             if (cfg.getDefaultDataRegionConfiguration() != null) {
                 w.writeBoolean(true);
-                writeDataRegionConfiguration(w, cfg.getDefaultDataRegionConfiguration(), ver);
+                writeDataRegionConfiguration(w, cfg.getDefaultDataRegionConfiguration());
             }
             else
                 w.writeBoolean(false);
@@ -2083,10 +2077,8 @@ public class PlatformConfigurationUtils {
      * Writes the data region configuration.
      *
      * @param w Writer.
-     * @param ver Client version.
      */
-    private static void writeDataRegionConfiguration(BinaryRawWriter w, DataRegionConfiguration cfg,
-        ClientListenerProtocolVersion ver) {
+    private static void writeDataRegionConfiguration(BinaryRawWriter w, DataRegionConfiguration cfg) {
         assert w != null;
         assert cfg != null;
 
@@ -2102,9 +2094,6 @@ public class PlatformConfigurationUtils {
         w.writeInt(cfg.getMetricsSubIntervalCount());
         w.writeLong(cfg.getMetricsRateTimeInterval());
         w.writeLong(cfg.getCheckpointPageBufferSize());
-
-        if (ver.compareTo(VER_1_3_0) >= 0)
-            w.writeBoolean(cfg.isLazyMemoryAllocation());
     }
 
     /**
@@ -2142,30 +2131,23 @@ public class PlatformConfigurationUtils {
      * Reads the data region configuration.
      *
      * @param r Reader.
-     * @param ver Client version.
      */
-    private static DataRegionConfiguration readDataRegionConfiguration(BinaryRawReader r,
-        ClientListenerProtocolVersion ver) {
+    private static DataRegionConfiguration readDataRegionConfiguration(BinaryRawReader r) {
         assert r != null;
 
-        DataRegionConfiguration cfg = new DataRegionConfiguration()
-            .setName(r.readString())
-            .setPersistenceEnabled(r.readBoolean())
-            .setInitialSize(r.readLong())
-            .setMaxSize(r.readLong())
-            .setSwapPath(r.readString())
-            .setPageEvictionMode(DataPageEvictionMode.fromOrdinal(r.readInt()))
-            .setEvictionThreshold(r.readDouble())
-            .setEmptyPagesPoolSize(r.readInt())
-            .setMetricsEnabled(r.readBoolean())
-            .setMetricsSubIntervalCount(r.readInt())
-            .setMetricsRateTimeInterval(r.readLong())
-            .setCheckpointPageBufferSize(r.readLong());
-
-        if (ver.compareTo(VER_1_3_0) >= 0)
-            cfg.setLazyMemoryAllocation(r.readBoolean());
-
-        return cfg;
+        return new DataRegionConfiguration()
+                .setName(r.readString())
+                .setPersistenceEnabled(r.readBoolean())
+                .setInitialSize(r.readLong())
+                .setMaxSize(r.readLong())
+                .setSwapPath(r.readString())
+                .setPageEvictionMode(DataPageEvictionMode.fromOrdinal(r.readInt()))
+                .setEvictionThreshold(r.readDouble())
+                .setEmptyPagesPoolSize(r.readInt())
+                .setMetricsEnabled(r.readBoolean())
+                .setMetricsSubIntervalCount(r.readInt())
+                .setMetricsRateTimeInterval(r.readLong())
+                .setCheckpointPageBufferSize(r.readLong());
     }
 
     /**
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java b/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java
index 999b440..5bae576 100755
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java
@@ -296,7 +296,7 @@ import static org.apache.ignite.internal.util.GridUnsafe.staticFieldOffset;
 @SuppressWarnings({"UnusedReturnValue", "RedundantStringConstructorCall"})
 public abstract class IgniteUtils {
     /** */
-    public static final long GB = 1024L * 1024 * 1024;
+    private static final long GB = 1024L * 1024 * 1024;
 
     /** Minimum checkpointing page buffer size (may be adjusted by Ignite). */
     public static final Long DFLT_MIN_CHECKPOINTING_PAGE_BUFFER_SIZE = GB / 4;
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
deleted file mode 100644
index c7478ec..0000000
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/pagemem/PageMemoryLazyAllocationTest.java
+++ /dev/null
@@ -1,275 +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.persistence.pagemem;
-
-import org.apache.ignite.IgniteCache;
-import org.apache.ignite.cache.CacheMode;
-import org.apache.ignite.cluster.ClusterNode;
-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.IgniteEx;
-import org.apache.ignite.internal.pagemem.PageMemory;
-import org.apache.ignite.internal.processors.cache.persistence.IgniteCacheDatabaseSharedManager;
-import org.apache.ignite.lang.IgnitePredicate;
-import org.apache.ignite.testframework.GridTestUtils;
-import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-
-/** */
-public class PageMemoryLazyAllocationTest extends GridCommonAbstractTest {
-    /** */
-    public static final String LAZY_REGION = "lazyRegion";
-
-    /** */
-    public static final String EAGER_REGION = "eagerRegion";
-
-    /** */
-    protected boolean client = false;
-
-    /** */
-    protected boolean lazyAllocation = true;
-
-    /** {@inheritDoc} */
-    @Override protected IgniteConfiguration getConfiguration(String igniteInstanceName) throws Exception {
-        IgniteConfiguration cfg = super.getConfiguration(igniteInstanceName);
-
-        cfg.setClientMode(client);
-
-        cfg.setDataStorageConfiguration(new DataStorageConfiguration()
-            .setDataRegionConfigurations(
-                new DataRegionConfiguration()
-                    .setName(LAZY_REGION)
-                    .setLazyMemoryAllocation(lazyAllocation)
-                    .setPersistenceEnabled(persistenceEnabled()),
-                new DataRegionConfiguration()
-                    .setName(EAGER_REGION)
-                    .setLazyMemoryAllocation(lazyAllocation)
-                    .setPersistenceEnabled(persistenceEnabled())));
-
-        CacheConfiguration<?, ?> ccfg = new CacheConfiguration<>("my-cache")
-            .setDataRegionName(EAGER_REGION);
-
-        cfg.setCacheConfiguration(ccfg);
-
-        return cfg;
-    }
-
-    /** @throws Exception If failed. */
-    @Test
-    public void testLazyMemoryAllocationOnServer() throws Exception {
-        lazyAllocation = true;
-        client = false;
-
-        IgniteEx srv = startSrv()[0];
-
-        IgniteCacheDatabaseSharedManager db = srv.context().cache().context().database();
-
-        checkMemoryAllocated(db.dataRegion(EAGER_REGION).pageMemory());
-        checkMemoryNotAllocated(db.dataRegion(LAZY_REGION).pageMemory());
-
-        createCacheAndPut(srv);
-
-        checkMemoryAllocated(db.dataRegion(LAZY_REGION).pageMemory());
-    }
-
-    /** @throws Exception If failed. */
-    @Test
-    public void testLazyMemoryAllocationOnClient() throws Exception {
-        lazyAllocation = true;
-        client = false;
-
-        IgniteEx srv = startSrv()[0];
-
-        IgniteCacheDatabaseSharedManager srvDb = srv.context().cache().context().database();
-
-        checkMemoryAllocated(srvDb.dataRegion(EAGER_REGION).pageMemory());
-        checkMemoryNotAllocated(srvDb.dataRegion(LAZY_REGION).pageMemory());
-
-        client = true;
-
-        IgniteEx clnt = startGrid(2);
-
-        IgniteCacheDatabaseSharedManager clntDb = clnt.context().cache().context().database();
-
-        checkMemoryNotAllocated(clntDb.dataRegion(EAGER_REGION).pageMemory());
-        checkMemoryNotAllocated(clntDb.dataRegion(LAZY_REGION).pageMemory());
-
-        createCacheAndPut(clnt);
-
-        checkMemoryAllocated(srvDb.dataRegion(LAZY_REGION).pageMemory());
-
-        checkMemoryNotAllocated(clntDb.dataRegion(EAGER_REGION).pageMemory());
-        checkMemoryNotAllocated(clntDb.dataRegion(LAZY_REGION).pageMemory());
-    }
-
-    /** @throws Exception If failed. */
-    @Test
-    public void testEagerMemoryAllocationOnServer() throws Exception {
-        lazyAllocation = false;
-        client = false;
-
-        IgniteEx g = startSrv()[0];
-
-        IgniteCacheDatabaseSharedManager db = g.context().cache().context().database();
-
-        checkMemoryAllocated(db.dataRegion(EAGER_REGION).pageMemory());
-        checkMemoryAllocated(db.dataRegion(LAZY_REGION).pageMemory());
-
-        createCacheAndPut(g);
-    }
-
-    /** @throws Exception If failed. */
-    @Test
-    public void testEagerMemoryAllocationOnClient() throws Exception {
-        lazyAllocation = false;
-        client = false;
-
-        IgniteEx srv = startSrv()[0];
-
-        IgniteCacheDatabaseSharedManager srvDb = srv.context().cache().context().database();
-
-        checkMemoryAllocated(srvDb.dataRegion(EAGER_REGION).pageMemory());
-        checkMemoryAllocated(srvDb.dataRegion(LAZY_REGION).pageMemory());
-
-        client = true;
-
-        IgniteEx clnt = startGrid(2);
-
-        IgniteCacheDatabaseSharedManager clntDb = clnt.context().cache().context().database();
-
-        checkMemoryNotAllocated(clntDb.dataRegion(EAGER_REGION).pageMemory());
-        checkMemoryNotAllocated(clntDb.dataRegion(LAZY_REGION).pageMemory());
-
-        createCacheAndPut(clnt);
-
-        checkMemoryNotAllocated(clntDb.dataRegion(EAGER_REGION).pageMemory());
-        checkMemoryNotAllocated(clntDb.dataRegion(LAZY_REGION).pageMemory());
-    }
-
-    /** @throws Exception If failed. */
-    @Test
-    public void testLocalCacheOnClientNodeWithLazyAllocation() throws Exception {
-        lazyAllocation = true;
-        client = false;
-
-        IgniteEx srv = startSrv()[0];
-
-        IgniteCacheDatabaseSharedManager srvDb = srv.context().cache().context().database();
-
-        checkMemoryAllocated(srvDb.dataRegion(EAGER_REGION).pageMemory());
-        checkMemoryNotAllocated(srvDb.dataRegion(LAZY_REGION).pageMemory());
-
-        client = true;
-
-        IgniteEx clnt = startGrid(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];
-
-        IgniteCacheDatabaseSharedManager srvDb = srv.context().cache().context().database();
-
-        checkMemoryAllocated(srvDb.dataRegion(EAGER_REGION).pageMemory());
-        checkMemoryNotAllocated(srvDb.dataRegion(LAZY_REGION).pageMemory());
-
-        stopGrid(0);
-    }
-
-    @After
-    public void after() {
-        stopAllGrids();
-    }
-
-    @Before
-    public void before() throws Exception {
-        cleanPersistenceDir();
-    }
-
-    /** */
-    protected void createCacheAndPut(IgniteEx g) {
-        createCacheAndPut(g, CacheConfiguration.DFLT_CACHE_MODE);
-    }
-
-    /** */
-    private void createCacheAndPut(IgniteEx g, CacheMode cacheMode) {
-        createCacheAndPut(g, cacheMode, null);
-    }
-
-    /** */
-    private void createCacheAndPut(IgniteEx g, CacheMode cacheMode, IgnitePredicate<ClusterNode> fltr) {
-        IgniteCache<Integer, String> cache =
-            g.createCache(new CacheConfiguration<Integer, String>("my-cache-2")
-                .setCacheMode(cacheMode)
-                .setDataRegionName(LAZY_REGION)
-                .setNodeFilter(fltr));
-
-        cache.put(1, "test");
-
-        assertEquals(cache.get(1), "test");
-    }
-
-    /** */
-    protected void checkMemoryAllocated(PageMemory pageMem) {
-        Object[] segments = GridTestUtils.getFieldValue(pageMem, "segments");
-
-        assertNotNull(segments);
-        assertTrue(segments.length > 0);
-        assertNotNull(segments[0]);
-    }
-
-    /** */
-    protected void checkMemoryNotAllocated(PageMemory pageMem) {
-        Object[] segments = GridTestUtils.getFieldValue(pageMem, "segments");
-
-        assertNull(segments);
-    }
-
-    /** */
-    protected IgniteEx[] startSrv() throws Exception {
-        IgniteEx srv0 = startGrid(0);
-        IgniteEx srv1 = startGrid(1);
-
-        srv0.cluster().active(true);
-
-        awaitPartitionMapExchange();
-
-        return new IgniteEx[] {srv0, srv1};
-    }
-
-    /** */
-    protected boolean persistenceEnabled() {
-        return false;
-    }
-}
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
deleted file mode 100644
index c84928b..0000000
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/pagemem/PageMemoryLazyAllocationWithPDSTest.java
+++ /dev/null
@@ -1,159 +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.persistence.pagemem;
-
-import org.apache.ignite.IgniteCache;
-import org.apache.ignite.IgniteCheckedException;
-import org.apache.ignite.configuration.CacheConfiguration;
-import org.apache.ignite.configuration.DataRegionConfiguration;
-import org.apache.ignite.configuration.IgniteConfiguration;
-import org.apache.ignite.failure.StopNodeFailureHandler;
-import org.apache.ignite.internal.IgniteEx;
-import org.apache.ignite.testframework.GridTestUtils;
-import org.jetbrains.annotations.NotNull;
-import org.junit.Ignore;
-import org.junit.Test;
-
-import static org.apache.ignite.internal.util.IgniteUtils.GB;
-
-/** */
-public class PageMemoryLazyAllocationWithPDSTest extends PageMemoryLazyAllocationTest {
-
-    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 {
-        lazyAllocation = true;
-        client = false;
-
-        IgniteEx srv = startSrv()[0];
-
-        createCacheAndPut(srv);
-
-        stopAllGrids(false);
-
-        IgniteCache<Integer, String> cache = startSrv()[0].cache("my-cache-2");
-
-        assertEquals("test", cache.get(1));
-    }
-
-    /** */
-    @Test
-    public void testClientNodeRestart() throws Exception {
-        lazyAllocation = true;
-        client = false;
-
-        IgniteEx srv = startSrv()[0];
-
-        client = true;
-
-        IgniteEx clnt = startGrid(2);
-
-        createCacheAndPut(clnt);
-
-        stopAllGrids(false);
-
-        client = false;
-
-        srv = startSrv()[0];
-
-        client = true;
-
-        IgniteCache<Integer, String> cache = startGrid(2).cache("my-cache-2");
-
-        assertEquals("test", cache.get(1));
-    }
-
-    /** */
-    @Test
-    public void testHugeNotUsedMemoryRegion() throws Exception {
-        lazyAllocation = true;
-        client = false;
-
-        IgniteEx srv = startGrid(cfgWithHugeRegion("test-server"));
-
-        startGrid(cfgWithHugeRegion("test-server-2"));
-
-        srv.cluster().active(true);
-
-        awaitPartitionMapExchange();
-
-        stopAllGrids(false);
-
-        srv = startGrid(cfgWithHugeRegion("test-server"));
-
-        startGrid(cfgWithHugeRegion("test-server-2"));
-
-        srv.cluster().active(true);
-    }
-
-    /** */
-    @Test
-    public void testCreateCacheFailsInHugeMemoryRegion() throws Exception {
-        lazyAllocation = true;
-        client = false;
-
-        IgniteEx srv = startGrid(cfgWithHugeRegion("test-server")
-            .setFailureHandler(new StopNodeFailureHandler()));
-
-        srv.cluster().active(true);
-
-        awaitPartitionMapExchange();
-    }
-
-    /** */
-    @Test
-    public void testCreateCacheFromClientFailsInHugeMemoryRegion() throws Exception {
-        lazyAllocation = true;
-        client = false;
-
-        IgniteEx srv = startGrid(cfgWithHugeRegion("test-server")
-            .setFailureHandler(new StopNodeFailureHandler()));
-
-        client = true;
-
-        IgniteEx clnt = startGrid(cfgWithHugeRegion("test-client")
-            .setFailureHandler(new StopNodeFailureHandler()));
-
-        srv.cluster().active(true);
-
-        awaitPartitionMapExchange();
-    }
-
-    @NotNull private IgniteConfiguration cfgWithHugeRegion(String name) throws Exception {
-        IgniteConfiguration cfg = getConfiguration(name);
-
-        for (DataRegionConfiguration drc : cfg.getDataStorageConfiguration().getDataRegionConfigurations()) {
-            if (drc.getName().equals(LAZY_REGION))
-                drc.setMaxSize(PETA_BYTE);
-        }
-        return cfg;
-    }
-
-    /** {@inheritDoc} */
-    @Override protected boolean persistenceEnabled() {
-        return true;
-    }
-}
diff --git a/modules/core/src/test/java/org/apache/ignite/testsuites/IgnitePdsTestSuite.java b/modules/core/src/test/java/org/apache/ignite/testsuites/IgnitePdsTestSuite.java
index e21577d..41b7281 100644
--- a/modules/core/src/test/java/org/apache/ignite/testsuites/IgnitePdsTestSuite.java
+++ b/modules/core/src/test/java/org/apache/ignite/testsuites/IgnitePdsTestSuite.java
@@ -44,8 +44,6 @@ import org.apache.ignite.internal.processors.cache.persistence.pagemem.FillFacto
 import org.apache.ignite.internal.processors.cache.persistence.pagemem.IndexStoragePageMemoryImplTest;
 import org.apache.ignite.internal.processors.cache.persistence.pagemem.PageMemoryImplNoLoadTest;
 import org.apache.ignite.internal.processors.cache.persistence.pagemem.PageMemoryImplTest;
-import org.apache.ignite.internal.processors.cache.persistence.pagemem.PageMemoryLazyAllocationTest;
-import org.apache.ignite.internal.processors.cache.persistence.pagemem.PageMemoryLazyAllocationWithPDSTest;
 import org.apache.ignite.internal.processors.cache.persistence.pagemem.PageMemoryNoStoreLeakTest;
 import org.apache.ignite.internal.processors.cache.persistence.pagemem.PagesWriteThrottleSmokeTest;
 import org.apache.ignite.internal.processors.cache.persistence.pagemem.UsedPagesMetricTest;
@@ -90,8 +88,6 @@ public class IgnitePdsTestSuite {
         //GridTestUtils.addTestIfNeeded(suite, PageMemoryNoLoadSelfTest.class, ignoredTests);
         GridTestUtils.addTestIfNeeded(suite, PageMemoryImplNoLoadTest.class, ignoredTests);
         GridTestUtils.addTestIfNeeded(suite, PageMemoryNoStoreLeakTest.class, ignoredTests);
-        GridTestUtils.addTestIfNeeded(suite, PageMemoryLazyAllocationTest.class, ignoredTests);
-        GridTestUtils.addTestIfNeeded(suite, PageMemoryLazyAllocationWithPDSTest.class, ignoredTests);
         GridTestUtils.addTestIfNeeded(suite, IndexStoragePageMemoryImplTest.class, ignoredTests);
         GridTestUtils.addTestIfNeeded(suite, PageMemoryImplTest.class, ignoredTests);
         //GridTestUtils.addTestIfNeeded(suite, PageIdDistributionTest.class, ignoredTests);
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Configuration/DataRegionConfiguration.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Configuration/DataRegionConfiguration.cs
index ef0759e..6fce7ad 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Configuration/DataRegionConfiguration.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Configuration/DataRegionConfiguration.cs
@@ -24,7 +24,6 @@ namespace Apache.Ignite.Core.Configuration
     using Apache.Ignite.Core.Cache.Configuration;
     using Apache.Ignite.Core.Impl;
     using Apache.Ignite.Core.Impl.Binary;
-    using Apache.Ignite.Core.Impl.Client;
 
     /// <summary>
     /// Defines custom data region configuration for Apache Ignite page memory
@@ -76,11 +75,6 @@ namespace Apache.Ignite.Core.Configuration
         public static readonly TimeSpan DefaultMetricsRateTimeInterval = TimeSpan.FromSeconds(60);
 
         /// <summary>
-        /// Default value for <see cref="LazyMemoryAllocation"/>.
-        /// </summary>
-        public const bool DefaultLazyMemoryAllocation = true;
-
-        /// <summary>
         /// Initializes a new instance of the <see cref="DataRegionConfiguration"/> class.
         /// </summary>
         public DataRegionConfiguration()
@@ -92,15 +86,13 @@ namespace Apache.Ignite.Core.Configuration
             MaxSize = DefaultMaxSize;
             MetricsSubIntervalCount = DefaultMetricsSubIntervalCount;
             MetricsRateTimeInterval = DefaultMetricsRateTimeInterval;
-            LazyMemoryAllocation = DefaultLazyMemoryAllocation;
         }
 
         /// <summary>
         /// Initializes a new instance of the <see cref="DataRegionConfiguration"/> class.
         /// </summary>
         /// <param name="reader">The reader.</param>
-        /// <param name="srvVer">Server version.</param>
-        internal DataRegionConfiguration(IBinaryRawReader reader, ClientProtocolVersion srvVer)
+        internal DataRegionConfiguration(IBinaryRawReader reader)
         {
             Name = reader.ReadString();
             PersistenceEnabled = reader.ReadBoolean();
@@ -114,19 +106,12 @@ namespace Apache.Ignite.Core.Configuration
             MetricsSubIntervalCount = reader.ReadInt();
             MetricsRateTimeInterval = reader.ReadLongAsTimespan();
             CheckpointPageBufferSize = reader.ReadLong();
-
-            if (srvVer.CompareTo(ClientSocket.Ver130) >= 0)
-            {
-                LazyMemoryAllocation = reader.ReadBoolean();
-            }
         }
 
         /// <summary>
         /// Writes this instance to a writer.
         /// </summary>
-        /// <param name="writer">The writer.</param>
-        /// <param name="srvVer">Server version.</param>
-        internal void Write(IBinaryRawWriter writer, ClientProtocolVersion srvVer)
+        internal void Write(IBinaryRawWriter writer)
         {
             writer.WriteString(Name);
             writer.WriteBoolean(PersistenceEnabled);
@@ -140,11 +125,6 @@ namespace Apache.Ignite.Core.Configuration
             writer.WriteInt(MetricsSubIntervalCount);
             writer.WriteTimeSpanAsLong(MetricsRateTimeInterval);
             writer.WriteLong(CheckpointPageBufferSize);
-
-            if (srvVer.CompareTo(ClientSocket.Ver130) >= 0)
-            {
-                writer.WriteBoolean(LazyMemoryAllocation);
-            }
         }
 
         /// <summary>
@@ -238,11 +218,5 @@ namespace Apache.Ignite.Core.Configuration
         /// Default is <c>0</c>: Ignite will choose buffer size automatically.
         /// </summary>
         public long CheckpointPageBufferSize { get; set; }
-        
-        /// <summary>
-        /// Gets or sets the lazy memory allocation flag.
-        /// </summary>
-        [DefaultValue(DefaultLazyMemoryAllocation)]
-        public bool LazyMemoryAllocation { get; set; }
     }
 }
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Configuration/DataStorageConfiguration.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Configuration/DataStorageConfiguration.cs
index 17ddf6b..8771c77 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Configuration/DataStorageConfiguration.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Configuration/DataStorageConfiguration.cs
@@ -26,7 +26,6 @@ namespace Apache.Ignite.Core.Configuration
     using Apache.Ignite.Core.Binary;
     using Apache.Ignite.Core.Common;
     using Apache.Ignite.Core.Impl.Binary;
-    using Apache.Ignite.Core.Impl.Client;
 
     /// <summary>
     /// Data storage configuration for Ignite page memory.
@@ -203,8 +202,7 @@ namespace Apache.Ignite.Core.Configuration
         /// Initializes a new instance of the <see cref="DataStorageConfiguration"/> class.
         /// </summary>
         /// <param name="reader">The reader.</param>
-        /// <param name="srvVer">Server version.</param>
-        internal DataStorageConfiguration(IBinaryRawReader reader, ClientProtocolVersion srvVer)
+        internal DataStorageConfiguration(IBinaryRawReader reader)
         {
             Debug.Assert(reader != null);
 
@@ -243,13 +241,13 @@ namespace Apache.Ignite.Core.Configuration
             if (count > 0)
             {
                 DataRegionConfigurations = Enumerable.Range(0, count)
-                    .Select(x => new DataRegionConfiguration(reader, srvVer))
+                    .Select(x => new DataRegionConfiguration(reader))
                     .ToArray();
             }
 
             if (reader.ReadBoolean())
             {
-                DefaultDataRegionConfiguration = new DataRegionConfiguration(reader, srvVer);
+                DefaultDataRegionConfiguration = new DataRegionConfiguration(reader);
             }
         }
 
@@ -257,8 +255,7 @@ namespace Apache.Ignite.Core.Configuration
         /// Writes this instance to the specified writer.
         /// </summary>
         /// <param name="writer">The writer.</param>
-        /// <param name="srvVer">Server version.</param>
-        internal void Write(IBinaryRawWriter writer, ClientProtocolVersion srvVer)
+        internal void Write(IBinaryRawWriter writer)
         {
             Debug.Assert(writer != null);
 
@@ -304,7 +301,7 @@ namespace Apache.Ignite.Core.Configuration
                             "DataStorageConfiguration.DataRegionConfigurations must not contain null items.");
                     }
 
-                    region.Write(writer, srvVer);
+                    region.Write(writer);
                 }
             }
             else
@@ -315,7 +312,7 @@ namespace Apache.Ignite.Core.Configuration
             if (DefaultDataRegionConfiguration != null)
             {
                 writer.WriteBoolean(true);
-                DefaultDataRegionConfiguration.Write(writer, srvVer);
+                DefaultDataRegionConfiguration.Write(writer);
             }
             else
             {
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfiguration.cs b/modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfiguration.cs
index f98acf9..34db906 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfiguration.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfiguration.cs
@@ -574,7 +574,7 @@ namespace Apache.Ignite.Core
             if (DataStorageConfiguration != null)
             {
                 writer.WriteBoolean(true);
-                DataStorageConfiguration.Write(writer, srvVer);
+                DataStorageConfiguration.Write(writer);
             }
             else
             {
@@ -863,7 +863,7 @@ namespace Apache.Ignite.Core
             // Data storage.
             if (r.ReadBoolean())
             {
-                DataStorageConfiguration = new DataStorageConfiguration(r, srvVer);
+                DataStorageConfiguration = new DataStorageConfiguration(r);
             }
 
             // SSL context factory.
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfigurationSection.xsd b/modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfigurationSection.xsd
index 0a6dca1..59c6b9e 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfigurationSection.xsd
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/IgniteConfigurationSection.xsd
@@ -1714,13 +1714,6 @@
                                             <xs:documentation>Size of the checkpointing page buffer.</xs:documentation>
                                         </xs:annotation>
                                     </xs:attribute>
-                                    <xs:attribute name="lazyMemoryAllocation" type="xs:boolean">
-                                        <xs:annotation>
-                                            <xs:documentation>
-                                                Enable lazy memory allocation.
-                                            </xs:documentation>
-                                        </xs:annotation>
-                                    </xs:attribute>
                                 </xs:complexType>
                             </xs:element>
                             <xs:element name="dataRegionConfigurations">
@@ -1794,13 +1787,6 @@
                                                         <xs:documentation>Size of the checkpointing page buffer.</xs:documentation>
                                                     </xs:annotation>
                                                 </xs:attribute>
-                                                <xs:attribute name="lazyMemoryAllocation" type="xs:boolean">
-                                                    <xs:annotation>
-                                                        <xs:documentation>
-                                                            Enable lazy memory allocation.
-                                                        </xs:documentation>
-                                                    </xs:annotation>
-                                                </xs:attribute>
                                             </xs:complexType>
                                         </xs:element>
                                     </xs:sequence>
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Client/ClientSocket.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Client/ClientSocket.cs
index e2567ef..b9eee99 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Client/ClientSocket.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Client/ClientSocket.cs
@@ -46,11 +46,8 @@ namespace Apache.Ignite.Core.Impl.Client
         /** Version 1.2.0. */
         public static readonly ClientProtocolVersion Ver120 = new ClientProtocolVersion(1, 2, 0);
 
-        /** Version 1.3.0. */
-        public static readonly ClientProtocolVersion Ver130 = new ClientProtocolVersion(1, 3, 0);
-
         /** Current version. */
-        public static readonly ClientProtocolVersion CurrentProtocolVersion = Ver130;
+        public static readonly ClientProtocolVersion CurrentProtocolVersion = Ver120;
 
         /** Handshake opcode. */
         private const byte OpHandshake = 1;