You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by vo...@apache.org on 2019/01/29 15:26:50 UTC

[ignite] branch ignite-10985 created (now 2f946d6)

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

vozerov pushed a change to branch ignite-10985
in repository https://gitbox.apache.org/repos/asf/ignite.git.


      at 2f946d6  WIP.

This branch includes the following new commits:

     new 72ee531  Preparing.
     new d92c02c  Works somehow.
     new 894c5c1  WIP.
     new e334d35  Data store.
     new 2f946d6  WIP.

The 5 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] 02/05: Works somehow.

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

vozerov pushed a commit to branch ignite-10985
in repository https://gitbox.apache.org/repos/asf/ignite.git

commit d92c02c4ed9a0d3913aac569f8346cba456344de
Author: devozerov <vo...@gridgain.com>
AuthorDate: Tue Jan 29 17:55:12 2019 +0300

    Works somehow.
---
 .../cache/persistence/CacheDataRowAdapter.java     | 128 ++++++++++++++++-----
 .../evict/PageAbstractEvictionTracker.java         |   2 +-
 .../cache/persistence/tree/io/CacheVersionIO.java  |  27 +++++
 .../processors/cache/tree/CacheDataTree.java       |   4 +-
 .../internal/processors/cache/tree/DataRow.java    |   3 +-
 .../processors/query/h2/database/H2RowFactory.java |   3 +-
 .../query/h2/opt/GridH2KeyValueRowOnheap.java      |   6 +-
 7 files changed, 135 insertions(+), 38 deletions(-)

diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/CacheDataRowAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/CacheDataRowAdapter.java
index 1889a99..b87d287 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/CacheDataRowAdapter.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/CacheDataRowAdapter.java
@@ -75,6 +75,9 @@ public class CacheDataRowAdapter implements CacheDataRow {
     @GridToStringInclude
     protected GridCacheVersion ver;
 
+    /** Whether version is ready. */
+    protected boolean verReady;
+
     /** */
     @GridToStringInclude
     protected int cacheId;
@@ -98,6 +101,8 @@ public class CacheDataRowAdapter implements CacheDataRow {
         this.val = val;
         this.ver = ver;
         this.expireTime = expireTime;
+
+        verReady = true;
     }
 
     /**
@@ -108,7 +113,21 @@ public class CacheDataRowAdapter implements CacheDataRow {
      * @throws IgniteCheckedException If failed.
      */
     public final void initFromLink(CacheGroupContext grp, RowData rowData) throws IgniteCheckedException {
-        initFromLink(grp, grp.shared(), grp.dataRegion().pageMemory(), rowData);
+        initFromLink(grp, rowData, false);
+    }
+
+
+    /**
+     * Read row from data pages.
+     *
+     * @param grp Cache group.
+     * @param rowData Required row data.
+     * @param skipVer Whether version read should be skipped.
+     * @throws IgniteCheckedException If failed.
+     */
+    public final void initFromLink(CacheGroupContext grp, RowData rowData, boolean skipVer)
+        throws IgniteCheckedException {
+        initFromLink(grp, grp.shared(), grp.dataRegion().pageMemory(), rowData, skipVer);
     }
 
     /**
@@ -119,13 +138,15 @@ public class CacheDataRowAdapter implements CacheDataRow {
      * @param sharedCtx Shared context.
      * @param pageMem Page memory.
      * @param rowData Row data.
+     * @param skipVer Whether version read should be skipped.
      * @throws IgniteCheckedException If failed.
      */
     public final void initFromLink(
         @Nullable CacheGroupContext grp,
         GridCacheSharedContext<?, ?> sharedCtx,
         PageMemory pageMem,
-        RowData rowData
+        RowData rowData,
+        boolean skipVer
     ) throws IgniteCheckedException {
         // Group is null if try evict page, with persistence evictions should be disabled.
         assert grp != null || pageMem instanceof PageMemoryNoStoreImpl;
@@ -135,7 +156,7 @@ public class CacheDataRowAdapter implements CacheDataRow {
         int grpId = grp != null ? grp.groupId() : 0;
         IoStatisticsHolder statHolder = grp != null ? grp.statisticsHolderData() : IoStatisticsHolderNoOp.INSTANCE;
 
-        doInitFromLink(link, sharedCtx, coctx, pageMem, grpId, statHolder, readCacheId, rowData, null);
+        doInitFromLink(link, sharedCtx, coctx, pageMem, grpId, statHolder, readCacheId, rowData, null, skipVer);
     }
 
     /**
@@ -146,6 +167,7 @@ public class CacheDataRowAdapter implements CacheDataRow {
      * @param sharedCtx Cache shared context.
      * @param pageMem Page memory.
      * @param rowData Required row data.
+     * @param skipVer Whether version read should be skipped.
      * @throws IgniteCheckedException If failed.
      */
     public final void initFromDataPage(
@@ -155,7 +177,8 @@ public class CacheDataRowAdapter implements CacheDataRow {
         @Nullable CacheGroupContext grp,
         GridCacheSharedContext<?, ?> sharedCtx,
         PageMemory pageMem,
-        RowData rowData
+        RowData rowData,
+        boolean skipVer
     ) throws IgniteCheckedException {
         // Group is null if try evict page, with persistence evictions should be disabled.
         assert grp != null || pageMem instanceof PageMemoryNoStoreImpl;
@@ -166,14 +189,26 @@ public class CacheDataRowAdapter implements CacheDataRow {
         IoStatisticsHolder statHolder = grp != null ? grp.statisticsHolderData() : IoStatisticsHolderNoOp.INSTANCE;
 
         IncompleteObject<?> incomplete = readIncomplete(null, sharedCtx, coctx, pageMem,
-            grpId, pageAddr, itemId, io, rowData, readCacheId);
+            grpId, pageAddr, itemId, io, rowData, readCacheId, skipVer);
 
         if (incomplete != null) {
             // Initialize the remaining part of the large row from other pages.
             long nextLink = incomplete.getNextLink();
 
-            if (nextLink != 0L)
-                doInitFromLink(nextLink, sharedCtx, coctx, pageMem, grpId, statHolder, readCacheId, rowData, incomplete);
+            if (nextLink != 0L) {
+                doInitFromLink(
+                    nextLink,
+                    sharedCtx,
+                    coctx,
+                    pageMem,
+                    grpId,
+                    statHolder,
+                    readCacheId,
+                    rowData,
+                    incomplete,
+                    skipVer
+                );
+            }
         }
     }
 
@@ -186,6 +221,7 @@ public class CacheDataRowAdapter implements CacheDataRow {
      * @param readCacheId {@code true} If need to read cache ID.
      * @param rowData Required row data.
      * @param incomplete Incomplete object.
+     * @param skipVer Whether version read should be skipped.
      * @throws IgniteCheckedException If failed.
      */
     private void doInitFromLink(
@@ -197,7 +233,8 @@ public class CacheDataRowAdapter implements CacheDataRow {
         IoStatisticsHolder statHolder,
         boolean readCacheId,
         RowData rowData,
-        IncompleteObject<?> incomplete
+        IncompleteObject<?> incomplete,
+        boolean skipVer
     ) throws IgniteCheckedException {
         assert link != 0 : "link";
         assert key == null : "key";
@@ -220,7 +257,7 @@ public class CacheDataRowAdapter implements CacheDataRow {
                     int itemId = itemId(nextLink);
 
                     incomplete = readIncomplete(incomplete, sharedCtx, coctx, pageMem,
-                        grpId, pageAddr, itemId, io, rowData, readCacheId);
+                        grpId, pageAddr, itemId, io, rowData, readCacheId, skipVer);
 
                     if (incomplete == null || (rowData == KEY_ONLY && key != null))
                         return;
@@ -250,6 +287,7 @@ public class CacheDataRowAdapter implements CacheDataRow {
      * @param io Page IO.
      * @param rowData Required row data.
      * @param readCacheId {@code true} If need to read cache ID.
+     * @param skipVer Whether version read should be skipped.
      * @return Incomplete object.
      * @throws IgniteCheckedException If failed.
      */
@@ -263,7 +301,8 @@ public class CacheDataRowAdapter implements CacheDataRow {
         int itemId,
         DataPageIO io,
         RowData rowData,
-        boolean readCacheId
+        boolean readCacheId,
+        boolean skipVer
     ) throws IgniteCheckedException {
         DataPagePayload data = io.readPayload(pageAddr, itemId, pageMem.realPageSize(grpId));
 
@@ -274,7 +313,7 @@ public class CacheDataRowAdapter implements CacheDataRow {
         if (incomplete == null) {
             if (nextLink == 0) {
                 // Fast path for a single page row.
-                readFullRow(sharedCtx, coctx, pageAddr + data.offset(), rowData, readCacheId);
+                readFullRow(sharedCtx, coctx, pageAddr + data.offset(), rowData, readCacheId, skipVer);
 
                 return null;
             }
@@ -296,7 +335,7 @@ public class CacheDataRowAdapter implements CacheDataRow {
 
         boolean keyOnly = rowData == RowData.KEY_ONLY;
 
-        incomplete = readFragment(sharedCtx, coctx, buf, keyOnly, readCacheId, incomplete);
+        incomplete = readFragment(sharedCtx, coctx, buf, keyOnly, readCacheId, incomplete, skipVer);
 
         if (incomplete != null)
             incomplete.setNextLink(nextLink);
@@ -323,6 +362,7 @@ public class CacheDataRowAdapter implements CacheDataRow {
      * @param keyOnly {@code true} If need to read only key object.
      * @param readCacheId {@code true} If need to read cache ID.
      * @param incomplete Incomplete object.
+     * @param skipVer Whether version read should be skipped.
      * @throws IgniteCheckedException If failed.
      * @return Read object.
      */
@@ -332,7 +372,8 @@ public class CacheDataRowAdapter implements CacheDataRow {
         ByteBuffer buf,
         boolean keyOnly,
         boolean readCacheId,
-        IncompleteObject<?> incomplete
+        IncompleteObject<?> incomplete,
+        boolean skipVer
     ) throws IgniteCheckedException {
         if (readCacheId && cacheId == 0) {
             incomplete = readIncompleteCacheId(buf, incomplete);
@@ -392,10 +433,10 @@ public class CacheDataRowAdapter implements CacheDataRow {
         }
 
         // Read version.
-        if (ver == null) {
-            incomplete = readIncompleteVersion(buf, incomplete);
+        if (!verReady) {
+            incomplete = readIncompleteVersion(buf, incomplete, skipVer);
 
-            assert ver != null || incomplete != null;
+            assert skipVer || ver != null || incomplete != null;
         }
 
         return incomplete;
@@ -407,6 +448,7 @@ public class CacheDataRowAdapter implements CacheDataRow {
      * @param addr Address.
      * @param rowData Required row data.
      * @param readCacheId {@code true} If need to read cache ID.
+     * @param skipVer Whether version read should be skipped.
      * @throws IgniteCheckedException If failed.
      */
     protected void readFullRow(
@@ -414,8 +456,9 @@ public class CacheDataRowAdapter implements CacheDataRow {
         CacheObjectContext coctx,
         long addr,
         RowData rowData,
-        boolean readCacheId)
-        throws IgniteCheckedException {
+        boolean readCacheId,
+        boolean skipVer
+    ) throws IgniteCheckedException {
         int off = 0;
 
         off += readHeader(addr, off);
@@ -461,9 +504,22 @@ public class CacheDataRowAdapter implements CacheDataRow {
 
         val = coctx.kernalContext().cacheObjects().toCacheObject(coctx, type, bytes);
 
-        ver = CacheVersionIO.read(addr + off, false);
+        int verLen;
+
+        if (skipVer) {
+            ver = null;
+
+            verLen = CacheVersionIO.readSize(addr + off, false);
+        }
+        else {
+            ver = CacheVersionIO.read(addr + off, false);
+
+            verLen = CacheVersionIO.size(ver, false);
+        }
 
-        off += CacheVersionIO.size(ver, false);
+        verReady = true;
+
+        off += verLen;
 
         expireTime = PageUtils.getLong(addr, off);
     }
@@ -604,12 +660,14 @@ public class CacheDataRowAdapter implements CacheDataRow {
     /**
      * @param buf Buffer.
      * @param incomplete Incomplete object.
+     * @param skip Whether version should be skipped.
      * @return Incomplete object.
      * @throws IgniteCheckedException If failed.
      */
     protected IncompleteObject<?> readIncompleteVersion(
         ByteBuffer buf,
-        IncompleteObject<?> incomplete
+        IncompleteObject<?> incomplete,
+        boolean skip
     ) throws IgniteCheckedException {
         if (incomplete == null || incomplete.data() == null) {
             int remaining = buf.remaining();
@@ -621,10 +679,16 @@ public class CacheDataRowAdapter implements CacheDataRow {
 
             if (remaining >= size) {
                 // If the whole version is on a single page, just read it.
-                ver = CacheVersionIO.read(buf, false);
+                if (skip)
+                    buf.position(buf.position() + size);
+                else {
+                    ver = CacheVersionIO.read(buf, false);
 
-                assert !buf.hasRemaining(): buf.remaining();
-                assert ver != null;
+                    assert !buf.hasRemaining(): buf.remaining();
+                    assert ver != null;
+                }
+
+                verReady = true;
 
                 return null;
             }
@@ -636,13 +700,17 @@ public class CacheDataRowAdapter implements CacheDataRow {
         incomplete.readData(buf);
 
         if (incomplete.isReady()) {
-            final ByteBuffer verBuf = ByteBuffer.wrap(incomplete.data());
+            if (!skip) {
+                ByteBuffer verBuf = ByteBuffer.wrap(incomplete.data());
+
+                verBuf.order(buf.order());
 
-            verBuf.order(buf.order());
+                ver = CacheVersionIO.read(verBuf, false);
 
-            ver = CacheVersionIO.read(verBuf, false);
+                assert ver != null;
+            }
 
-            assert ver != null;
+            verReady = true;
         }
 
         assert !buf.hasRemaining();
@@ -654,7 +722,7 @@ public class CacheDataRowAdapter implements CacheDataRow {
      * @return {@code True} if entry is ready.
      */
     public boolean isReady() {
-        return ver != null && val != null && key != null;
+        return verReady && val != null && key != null;
     }
 
     /** {@inheritDoc} */
@@ -687,7 +755,7 @@ public class CacheDataRowAdapter implements CacheDataRow {
 
     /** {@inheritDoc} */
     @Override public GridCacheVersion version() {
-        assert ver != null : "Version is not ready: " + this;
+        assert verReady : "Version is not ready: " + this;
 
         return ver;
     }
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/evict/PageAbstractEvictionTracker.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/evict/PageAbstractEvictionTracker.java
index 5142c59..41731b1 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/evict/PageAbstractEvictionTracker.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/evict/PageAbstractEvictionTracker.java
@@ -102,7 +102,7 @@ public abstract class PageAbstractEvictionTracker implements PageEvictionTracker
                     @Override public CacheDataRowAdapter apply(long link) throws IgniteCheckedException {
                         CacheDataRowAdapter row = new CacheDataRowAdapter(link);
 
-                        row.initFromLink(null, sharedCtx, pageMem, CacheDataRowAdapter.RowData.KEY_ONLY);
+                        row.initFromLink(null, sharedCtx, pageMem, CacheDataRowAdapter.RowData.KEY_ONLY, false);
 
                         assert row.cacheId() != 0 : "Cache ID should be stored in rows of evictable cache";
 
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/tree/io/CacheVersionIO.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/tree/io/CacheVersionIO.java
index d9fdf0e..677c3fe 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/tree/io/CacheVersionIO.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/tree/io/CacheVersionIO.java
@@ -171,6 +171,33 @@ public class CacheVersionIO {
     }
 
     /**
+     * Gets needed buffer size to read the whole version instance.
+     * Does not change buffer position.
+     *
+     * @param pageAddr Page address.
+     * @param allowNull Is {@code null} version allowed.
+     * @return Size of serialized version.
+     * @throws IgniteCheckedException If failed.
+     */
+    public static int readSize(long pageAddr, boolean allowNull) throws IgniteCheckedException {
+        byte protoVer = checkProtocolVersion(PageUtils.getByte(pageAddr, 0), allowNull);
+
+        switch (protoVer) {
+            case NULL_PROTO_VER:
+                return NULL_SIZE;
+
+            case 1:
+                return SIZE_V1;
+
+            case 2:
+                return SIZE_V2;
+
+            default:
+                throw new IllegalStateException();
+        }
+    }
+
+    /**
      * Reads GridCacheVersion instance from the given buffer. Moves buffer's position by the number of used
      * bytes.
      *
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/CacheDataTree.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/CacheDataTree.java
index 4d01494..4349823 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/CacheDataTree.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/CacheDataTree.java
@@ -246,7 +246,9 @@ public class CacheDataTree extends BPlusTree<CacheSearchRow, CacheDataRow> {
                             for (int i = 0; i < rowsCnt; i++) {
                                 if (c == null || c.applyMvcc(io, pageAddr, i, pageSize)) {
                                     DataRow row = mvccEnabled ? new MvccDataRow() : new DataRow();
-                                    row.initFromDataPage(io, pageAddr, i, grp, shared, pageMem, rowData);
+
+                                    row.initFromDataPage(io, pageAddr, i, grp, shared, pageMem, rowData, true);
+
                                     rows[r++] = row;
                                 }
                             }
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/DataRow.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/DataRow.java
index ca6061b..552a39c 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/DataRow.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/DataRow.java
@@ -46,7 +46,6 @@ public class DataRow extends CacheDataRowAdapter {
         super(link);
 
         this.hash = hash;
-
         this.part = part;
 
         try {
@@ -80,6 +79,8 @@ public class DataRow extends CacheDataRowAdapter {
         this.part = part;
         this.expireTime = expireTime;
         this.cacheId = cacheId;
+
+        verReady = true;
     }
 
     /**
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/H2RowFactory.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/H2RowFactory.java
index 5b4827b..bb17706 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/H2RowFactory.java
+++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/H2RowFactory.java
@@ -58,7 +58,8 @@ public class H2RowFactory {
 
         row.initFromLink(
             cctx.group(),
-            CacheDataRowAdapter.RowData.FULL // TODO: Appropriate data!
+            CacheDataRowAdapter.RowData.FULL,
+            true
         );
 
         return rowDesc.createRow(row);
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2KeyValueRowOnheap.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2KeyValueRowOnheap.java
index a260b4d..ae6cb33 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2KeyValueRowOnheap.java
+++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2KeyValueRowOnheap.java
@@ -61,10 +61,8 @@ public class GridH2KeyValueRowOnheap extends GridH2Row {
      * @param valType Value type.
      * @throws IgniteCheckedException If failed.
      */
-    public GridH2KeyValueRowOnheap(GridH2RowDescriptor desc,
-        CacheDataRow row,
-        int keyType,
-        int valType) throws IgniteCheckedException {
+    public GridH2KeyValueRowOnheap(GridH2RowDescriptor desc, CacheDataRow row, int keyType, int valType)
+        throws IgniteCheckedException {
         super(row);
 
         this.desc = desc;


[ignite] 04/05: Data store.

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

vozerov pushed a commit to branch ignite-10985
in repository https://gitbox.apache.org/repos/asf/ignite.git

commit e334d35a115b4a08e463628ac96259ed86fd2c3a
Author: devozerov <vo...@gridgain.com>
AuthorDate: Tue Jan 29 18:20:26 2019 +0300

    Data store.
---
 .../cache/IgniteCacheOffheapManager.java           | 13 -------
 .../cache/IgniteCacheOffheapManagerImpl.java       |  8 +----
 .../dht/GridDhtTxAbstractEnlistFuture.java         |  4 ++-
 .../cache/persistence/GridCacheOffheapManager.java | 13 +------
 .../processors/cache/tree/CacheDataRowStore.java   | 41 +++++++++++++++++++---
 .../internal/processors/cache/tree/DataRow.java    |  5 +--
 .../cache/tree/mvcc/data/MvccDataRow.java          |  9 +++--
 .../query/h2/database/H2PkHashIndex.java           | 13 ++++++-
 .../processors/query/h2/database/H2RowFactory.java |  5 +--
 9 files changed, 66 insertions(+), 45 deletions(-)

diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheOffheapManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheOffheapManager.java
index b02bc9d..c0c81c6 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheOffheapManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheOffheapManager.java
@@ -1010,19 +1010,6 @@ public interface IgniteCacheOffheapManager {
             KeyCacheObject upper, Object x, MvccSnapshot snapshot) throws IgniteCheckedException;
 
         /**
-         * @param cacheId Cache ID.
-         * @param lower Lower bound.
-         * @param upper Upper bound.
-         * @param x Implementation specific argument, {@code null} always means that we need to return full detached data row.
-         * @param snapshot Mvcc snapshot.
-         * @param skipVer Whether version read should be skipped.
-         * @return Data cursor.
-         * @throws IgniteCheckedException If failed.
-         */
-        public GridCursor<? extends CacheDataRow> cursor(int cacheId, KeyCacheObject lower,
-            KeyCacheObject upper, Object x, MvccSnapshot snapshot, boolean skipVer) throws IgniteCheckedException;
-
-        /**
          * Destroys the tree associated with the store.
          *
          * @throws IgniteCheckedException If failed.
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 e60a002..82c65ad 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
@@ -2759,15 +2759,9 @@ public class IgniteCacheOffheapManagerImpl implements IgniteCacheOffheapManager
         /** {@inheritDoc} */
         @Override public GridCursor<? extends CacheDataRow> cursor(int cacheId, KeyCacheObject lower,
             KeyCacheObject upper, Object x, MvccSnapshot snapshot) throws IgniteCheckedException {
-            return cursor(cacheId, lower, upper, x, snapshot, false);
-        }
-
-        /** {@inheritDoc} */
-        @Override public GridCursor<? extends CacheDataRow> cursor(int cacheId, KeyCacheObject lower,
-            KeyCacheObject upper, Object x, MvccSnapshot snapshot, boolean skipVer) throws IgniteCheckedException {
             SearchRow lowerRow;
             SearchRow upperRow;
-            // TODO: Use skiPver.
+
             if (grp.sharedGroup()) {
                 assert cacheId != CU.UNDEFINED_CACHE_ID;
 
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxAbstractEnlistFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxAbstractEnlistFuture.java
index 3f53b48..138e24d 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxAbstractEnlistFuture.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxAbstractEnlistFuture.java
@@ -732,7 +732,9 @@ public abstract class GridDhtTxAbstractEnlistFuture<T> extends GridCacheFutureAd
                 CacheDataRowAdapter.RowData.NO_KEY,
                 row0.mvccCoordinatorVersion(),
                 row0.mvccCounter(),
-                row0.mvccOperationCounter());
+                row0.mvccOperationCounter(),
+                false
+            );
 
             GridCacheMvccEntryInfo entry = new GridCacheMvccEntryInfo();
 
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 b93f1ff..ac7be6e 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
@@ -2231,21 +2231,10 @@ public class GridCacheOffheapManager extends IgniteCacheOffheapManagerImpl imple
             Object x,
             MvccSnapshot mvccSnapshot
         ) throws IgniteCheckedException {
-            return cursor(cacheId, lower, upper, x, mvccSnapshot, false);
-        }
-
-        /** {@inheritDoc} */
-        @Override public GridCursor<? extends CacheDataRow> cursor(int cacheId,
-            KeyCacheObject lower,
-            KeyCacheObject upper,
-            Object x,
-            MvccSnapshot mvccSnapshot,
-            boolean skipVer
-        ) throws IgniteCheckedException {
             CacheDataStore delegate = init0(true);
 
             if (delegate != null)
-                return delegate.cursor(cacheId, lower, upper, x, mvccSnapshot, skipVer);
+                return delegate.cursor(cacheId, lower, upper, x, mvccSnapshot);
 
             return EMPTY_CURSOR;
         }
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/CacheDataRowStore.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/CacheDataRowStore.java
index 7aa7068..42f6c07 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/CacheDataRowStore.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/CacheDataRowStore.java
@@ -30,6 +30,18 @@ import org.apache.ignite.internal.util.typedef.internal.CU;
  *
  */
 public class CacheDataRowStore extends RowStore {
+    /** Whether version should be skipped. */
+    private static ThreadLocal<Boolean> SKIP_VER = ThreadLocal.withInitial(() -> false);
+
+    /**
+     * Set skip version flag.
+     *
+     * @param skipVer Flag value.
+     */
+    public static void setSkipVersion(boolean skipVer) {
+        SKIP_VER.set(skipVer);
+    }
+
     /** */
     private final int partId;
 
@@ -62,7 +74,16 @@ public class CacheDataRowStore extends RowStore {
      * @return Search row.
      */
     CacheSearchRow keySearchRow(int cacheId, int hash, long link) {
-        return initDataRow(new DataRow(grp, hash, link, partId, CacheDataRowAdapter.RowData.KEY_ONLY), cacheId);
+        DataRow dataRow = new DataRow(
+            grp,
+            hash,
+            link,
+            partId,
+            CacheDataRowAdapter.RowData.KEY_ONLY,
+            SKIP_VER.get()
+        );
+
+        return initDataRow(dataRow, cacheId);
     }
 
     /**
@@ -76,14 +97,17 @@ public class CacheDataRowStore extends RowStore {
      * @return Search row.
      */
     MvccDataRow mvccRow(int cacheId, int hash, long link, CacheDataRowAdapter.RowData rowData, long crdVer, long mvccCntr, int opCntr) {
-        MvccDataRow dataRow = new MvccDataRow(grp,
+        MvccDataRow dataRow = new MvccDataRow(
+            grp,
             hash,
             link,
             partId,
             rowData,
             crdVer,
             mvccCntr,
-            opCntr);
+            opCntr,
+            SKIP_VER.get()
+        );
 
         return initDataRow(dataRow, cacheId);
     }
@@ -96,7 +120,16 @@ public class CacheDataRowStore extends RowStore {
      * @return Data row.
      */
     CacheDataRow dataRow(int cacheId, int hash, long link, CacheDataRowAdapter.RowData rowData) {
-        return initDataRow(new DataRow(grp, hash, link, partId, rowData), cacheId);
+        DataRow dataRow = new DataRow(
+            grp,
+            hash,
+            link,
+            partId,
+            rowData,
+            SKIP_VER.get()
+        );
+
+        return initDataRow(dataRow, cacheId);
     }
 
     /**
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/DataRow.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/DataRow.java
index 552a39c..add2abe 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/DataRow.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/DataRow.java
@@ -41,8 +41,9 @@ public class DataRow extends CacheDataRowAdapter {
      * @param link Link.
      * @param part Partition.
      * @param rowData Required row data.
+     * @param skipVer Whether version read should be skipped.
      */
-    protected DataRow(CacheGroupContext grp, int hash, long link, int part, RowData rowData) {
+    protected DataRow(CacheGroupContext grp, int hash, long link, int part, RowData rowData, boolean skipVer) {
         super(link);
 
         this.hash = hash;
@@ -51,7 +52,7 @@ public class DataRow extends CacheDataRowAdapter {
         try {
             // We can not init data row lazily outside of entry lock because underlying buffer can be concurrently cleared.
             if (rowData != RowData.LINK_ONLY)
-                initFromLink(grp, rowData);
+                initFromLink(grp, rowData, skipVer);
         }
         catch (IgniteCheckedException e) {
             throw new IgniteException(e);
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/mvcc/data/MvccDataRow.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/mvcc/data/MvccDataRow.java
index cb4bc87..a3ee923 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/mvcc/data/MvccDataRow.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/mvcc/data/MvccDataRow.java
@@ -92,17 +92,20 @@ public class MvccDataRow extends DataRow {
      * @param crdVer Mvcc coordinator version.
      * @param mvccCntr Mvcc counter.
      * @param mvccOpCntr Mvcc operation counter.
+     * @param skipVer Skip version flag.
      */
-    public MvccDataRow(CacheGroupContext grp,
+    public MvccDataRow(
+        CacheGroupContext grp,
         int hash,
         long link,
         int part,
         RowData rowData,
         long crdVer,
         long mvccCntr,
-        int mvccOpCntr
+        int mvccOpCntr,
+        boolean skipVer
     ) {
-        super(grp, hash, link, part, rowData);
+        super(grp, hash, link, part, rowData, skipVer);
 
         assert MvccUtils.mvccVersionIsValid(crdVer, mvccCntr, mvccOpCntr);
 
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/H2PkHashIndex.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/H2PkHashIndex.java
index fee4b19..6aa9ebf 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/H2PkHashIndex.java
+++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/H2PkHashIndex.java
@@ -29,6 +29,7 @@ import org.apache.ignite.internal.processors.cache.IgniteCacheOffheapManager;
 import org.apache.ignite.internal.processors.cache.KeyCacheObject;
 import org.apache.ignite.internal.processors.cache.mvcc.MvccSnapshot;
 import org.apache.ignite.internal.processors.cache.persistence.CacheDataRow;
+import org.apache.ignite.internal.processors.cache.tree.CacheDataRowStore;
 import org.apache.ignite.internal.processors.query.GridQueryTypeDescriptor;
 import org.apache.ignite.internal.processors.query.h2.opt.GridH2IndexBase;
 import org.apache.ignite.internal.processors.query.h2.opt.GridH2QueryContext;
@@ -117,6 +118,8 @@ public class H2PkHashIndex extends GridH2IndexBase {
         KeyCacheObject upperObj = upper != null ? cctx.toCacheKeyObject(upper.getValue(0).getObject()) : null;
 
         try {
+            CacheDataRowStore.setSkipVersion(true);
+
             Collection<GridCursor<? extends CacheDataRow>> cursors = new ArrayList<>();
 
             for (IgniteCacheOffheapManager.CacheDataStore store : cctx.offheap().cacheDataStores()) {
@@ -126,7 +129,7 @@ public class H2PkHashIndex extends GridH2IndexBase {
                     continue;
 
                 if (filter == null || filter.applyPartition(part))
-                    cursors.add(store.cursor(cctx.cacheId(), lowerObj, upperObj, null, mvccSnapshot, true));
+                    cursors.add(store.cursor(cctx.cacheId(), lowerObj, upperObj, null, mvccSnapshot));
             }
 
             return new H2PkHashIndexCursor(cursors.iterator());
@@ -134,6 +137,9 @@ public class H2PkHashIndex extends GridH2IndexBase {
         catch (IgniteCheckedException e) {
             throw DbException.convert(e);
         }
+        finally {
+            CacheDataRowStore.setSkipVersion(false);
+        }
     }
 
     /** {@inheritDoc} */
@@ -248,6 +254,8 @@ public class H2PkHashIndex extends GridH2IndexBase {
         /** {@inheritDoc} */
         @Override public boolean next() {
             try {
+                CacheDataRowStore.setSkipVersion(true);
+
                 GridQueryTypeDescriptor type = desc.type();
 
                 for (;;) {
@@ -269,6 +277,9 @@ public class H2PkHashIndex extends GridH2IndexBase {
             catch (IgniteCheckedException e) {
                 throw DbException.convert(e);
             }
+            finally {
+                CacheDataRowStore.setSkipVersion(false);
+            }
         }
 
         /** {@inheritDoc} */
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/H2RowFactory.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/H2RowFactory.java
index bb17706..fb7ff0b 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/H2RowFactory.java
+++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/H2RowFactory.java
@@ -82,10 +82,11 @@ public class H2RowFactory {
             0,
             link,
             partId,
-            null, // TODO: Appropriate data!
+            null,
             mvccCrdVer,
             mvccCntr,
-            mvccOpCntr
+            mvccOpCntr,
+            true
         );
 
         return rowDesc.createRow(row);


[ignite] 03/05: WIP.

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

vozerov pushed a commit to branch ignite-10985
in repository https://gitbox.apache.org/repos/asf/ignite.git

commit 894c5c1f7d543d7d11a7a896d069deb084585571
Author: devozerov <vo...@gridgain.com>
AuthorDate: Tue Jan 29 17:59:11 2019 +0300

    WIP.
---
 .../processors/cache/IgniteCacheOffheapManager.java     | 13 +++++++++++++
 .../processors/cache/IgniteCacheOffheapManagerImpl.java |  8 +++++++-
 .../cache/persistence/GridCacheOffheapManager.java      | 17 ++++++++++++++---
 .../processors/query/h2/database/H2PkHashIndex.java     |  2 +-
 4 files changed, 35 insertions(+), 5 deletions(-)

diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheOffheapManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheOffheapManager.java
index c0c81c6..b02bc9d 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheOffheapManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheOffheapManager.java
@@ -1010,6 +1010,19 @@ public interface IgniteCacheOffheapManager {
             KeyCacheObject upper, Object x, MvccSnapshot snapshot) throws IgniteCheckedException;
 
         /**
+         * @param cacheId Cache ID.
+         * @param lower Lower bound.
+         * @param upper Upper bound.
+         * @param x Implementation specific argument, {@code null} always means that we need to return full detached data row.
+         * @param snapshot Mvcc snapshot.
+         * @param skipVer Whether version read should be skipped.
+         * @return Data cursor.
+         * @throws IgniteCheckedException If failed.
+         */
+        public GridCursor<? extends CacheDataRow> cursor(int cacheId, KeyCacheObject lower,
+            KeyCacheObject upper, Object x, MvccSnapshot snapshot, boolean skipVer) throws IgniteCheckedException;
+
+        /**
          * Destroys the tree associated with the store.
          *
          * @throws IgniteCheckedException If failed.
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 82c65ad..e60a002 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
@@ -2759,9 +2759,15 @@ public class IgniteCacheOffheapManagerImpl implements IgniteCacheOffheapManager
         /** {@inheritDoc} */
         @Override public GridCursor<? extends CacheDataRow> cursor(int cacheId, KeyCacheObject lower,
             KeyCacheObject upper, Object x, MvccSnapshot snapshot) throws IgniteCheckedException {
+            return cursor(cacheId, lower, upper, x, snapshot, false);
+        }
+
+        /** {@inheritDoc} */
+        @Override public GridCursor<? extends CacheDataRow> cursor(int cacheId, KeyCacheObject lower,
+            KeyCacheObject upper, Object x, MvccSnapshot snapshot, boolean skipVer) throws IgniteCheckedException {
             SearchRow lowerRow;
             SearchRow upperRow;
-
+            // TODO: Use skiPver.
             if (grp.sharedGroup()) {
                 assert cacheId != CU.UNDEFINED_CACHE_ID;
 
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 9d4311a..b93f1ff 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
@@ -2229,12 +2229,23 @@ public class GridCacheOffheapManager extends IgniteCacheOffheapManagerImpl imple
             KeyCacheObject lower,
             KeyCacheObject upper,
             Object x,
-            MvccSnapshot mvccSnapshot)
-            throws IgniteCheckedException {
+            MvccSnapshot mvccSnapshot
+        ) throws IgniteCheckedException {
+            return cursor(cacheId, lower, upper, x, mvccSnapshot, false);
+        }
+
+        /** {@inheritDoc} */
+        @Override public GridCursor<? extends CacheDataRow> cursor(int cacheId,
+            KeyCacheObject lower,
+            KeyCacheObject upper,
+            Object x,
+            MvccSnapshot mvccSnapshot,
+            boolean skipVer
+        ) throws IgniteCheckedException {
             CacheDataStore delegate = init0(true);
 
             if (delegate != null)
-                return delegate.cursor(cacheId, lower, upper, x, mvccSnapshot);
+                return delegate.cursor(cacheId, lower, upper, x, mvccSnapshot, skipVer);
 
             return EMPTY_CURSOR;
         }
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/H2PkHashIndex.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/H2PkHashIndex.java
index 1add933..fee4b19 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/H2PkHashIndex.java
+++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/H2PkHashIndex.java
@@ -126,7 +126,7 @@ public class H2PkHashIndex extends GridH2IndexBase {
                     continue;
 
                 if (filter == null || filter.applyPartition(part))
-                    cursors.add(store.cursor(cctx.cacheId(), lowerObj, upperObj, null, mvccSnapshot));
+                    cursors.add(store.cursor(cctx.cacheId(), lowerObj, upperObj, null, mvccSnapshot, true));
             }
 
             return new H2PkHashIndexCursor(cursors.iterator());


[ignite] 05/05: WIP.

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

vozerov pushed a commit to branch ignite-10985
in repository https://gitbox.apache.org/repos/asf/ignite.git

commit 2f946d69ed8bede5d170b97f5457581a8acb7910
Author: devozerov <vo...@gridgain.com>
AuthorDate: Tue Jan 29 18:26:35 2019 +0300

    WIP.
---
 .../internal/processors/cache/tree/CacheDataRowStore.java   | 11 ++++++++---
 .../internal/processors/cache/tree/CacheDataTree.java       | 13 ++++++++++++-
 2 files changed, 20 insertions(+), 4 deletions(-)

diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/CacheDataRowStore.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/CacheDataRowStore.java
index 42f6c07..0c460ee 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/CacheDataRowStore.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/CacheDataRowStore.java
@@ -34,9 +34,14 @@ public class CacheDataRowStore extends RowStore {
     private static ThreadLocal<Boolean> SKIP_VER = ThreadLocal.withInitial(() -> false);
 
     /**
-     * Set skip version flag.
-     *
-     * @param skipVer Flag value.
+     * @return Skip version flag.
+     */
+    public static boolean getSkipVersion() {
+        return SKIP_VER.get();
+    }
+
+    /**
+     * @param skipVer Skip version flag.
      */
     public static void setSkipVersion(boolean skipVer) {
         SKIP_VER.set(skipVer);
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/CacheDataTree.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/CacheDataTree.java
index 4349823..71c8a86 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/CacheDataTree.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/tree/CacheDataTree.java
@@ -223,6 +223,8 @@ public class CacheDataTree extends BPlusTree<CacheSearchRow, CacheDataRow> {
                     long page = pageMem.acquirePage(grpId, pageId);
 
                     try {
+                        boolean skipVer = CacheDataRowStore.getSkipVersion();
+
                         long pageAddr = ((PageMemoryEx)pageMem).readLock(page, pageId, true, false);
 
                         try {
@@ -247,7 +249,16 @@ public class CacheDataTree extends BPlusTree<CacheSearchRow, CacheDataRow> {
                                 if (c == null || c.applyMvcc(io, pageAddr, i, pageSize)) {
                                     DataRow row = mvccEnabled ? new MvccDataRow() : new DataRow();
 
-                                    row.initFromDataPage(io, pageAddr, i, grp, shared, pageMem, rowData, true);
+                                    row.initFromDataPage(
+                                        io,
+                                        pageAddr,
+                                        i,
+                                        grp,
+                                        shared,
+                                        pageMem,
+                                        rowData,
+                                        skipVer
+                                    );
 
                                     rows[r++] = row;
                                 }


[ignite] 01/05: Preparing.

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

vozerov pushed a commit to branch ignite-10985
in repository https://gitbox.apache.org/repos/asf/ignite.git

commit 72ee531d01626dc1ec3a569cd400829b0941bfc1
Author: devozerov <vo...@gridgain.com>
AuthorDate: Tue Jan 29 15:57:32 2019 +0300

    Preparing.
---
 .../processors/query/h2/database/H2RowFactory.java | 35 ++++++++++++++--------
 1 file changed, 22 insertions(+), 13 deletions(-)

diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/H2RowFactory.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/H2RowFactory.java
index 724de7e..5b4827b 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/H2RowFactory.java
+++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/H2RowFactory.java
@@ -54,18 +54,14 @@ public class H2RowFactory {
      * @throws IgniteCheckedException If failed.
      */
     public GridH2Row getRow(long link) throws IgniteCheckedException {
-        // TODO Avoid extra garbage generation. In upcoming H2 1.4.193 Row will become an interface,
-        // TODO we need to refactor all this to return CacheDataRowAdapter implementing Row here.
+        CacheDataRowAdapter row = new CacheDataRowAdapter(link);
 
-        final CacheDataRowAdapter rowBuilder = new CacheDataRowAdapter(link);
+        row.initFromLink(
+            cctx.group(),
+            CacheDataRowAdapter.RowData.FULL // TODO: Appropriate data!
+        );
 
-        rowBuilder.initFromLink(cctx.group(), CacheDataRowAdapter.RowData.FULL);
-
-        GridH2Row row = rowDesc.createRow(rowBuilder);
-
-        assert row.version() != null;
-
-        return row;
+        return rowDesc.createRow(row);
     }
 
     /**
@@ -76,8 +72,21 @@ public class H2RowFactory {
      * @return Row.
      * @throws IgniteCheckedException If failed.
      */
-    public GridH2Row getMvccRow(long link, long mvccCrdVer, long mvccCntr, int mvccOpCntr) throws IgniteCheckedException {
-        return rowDesc.createRow(new MvccDataRow(cctx.group(),0, link,
-            PageIdUtils.partId(PageIdUtils.pageId(link)),null, mvccCrdVer, mvccCntr, mvccOpCntr));
+    public GridH2Row getMvccRow(long link, long mvccCrdVer, long mvccCntr, int mvccOpCntr)
+        throws IgniteCheckedException {
+        int partId = PageIdUtils.partId(PageIdUtils.pageId(link));
+
+        MvccDataRow row = new MvccDataRow(
+            cctx.group(),
+            0,
+            link,
+            partId,
+            null, // TODO: Appropriate data!
+            mvccCrdVer,
+            mvccCntr,
+            mvccOpCntr
+        );
+
+        return rowDesc.createRow(row);
     }
 }