ignite-db-x - do not use row in wal

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

Branch: refs/heads/ignite-4652
Commit: 7663c22682c3b3371590abfca8a687b4d4cd219b
Parents: db548dc
Author: Sergi Vladykin <sergi.vlady...@gmail.com>
Authored: Thu Feb 16 13:28:13 2017 +0300
Committer: Sergi Vladykin <sergi.vlady...@gmail.com>
Committed: Thu Feb 16 13:28:13 2017 +0300

----------------------------------------------------------------------
 .../pagemem/wal/record/delta/InsertRecord.java  | 25 ++++++++++--------
 .../wal/record/delta/NewRootInitRecord.java     | 26 +++++++++++++------
 .../pagemem/wal/record/delta/ReplaceRecord.java | 23 +++++++++--------
 .../cache/database/tree/BPlusTree.java          | 27 ++++++++++++--------
 .../cache/database/tree/io/BPlusIO.java         | 19 +++++++++++---
 .../cache/database/tree/io/BPlusInnerIO.java    | 20 ++++++++++-----
 .../processors/database/BPlusTreeSelfTest.java  |  2 +-
 7 files changed, 93 insertions(+), 49 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/7663c226/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/InsertRecord.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/InsertRecord.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/InsertRecord.java
index fa598b2..f6d8f8c 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/InsertRecord.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/InsertRecord.java
@@ -17,7 +17,6 @@
 
 package org.apache.ignite.internal.pagemem.wal.record.delta;
 
-import java.nio.ByteBuffer;
 import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.internal.pagemem.PageMemory;
 import org.apache.ignite.internal.processors.cache.database.tree.io.BPlusIO;
@@ -33,9 +32,6 @@ public class InsertRecord<L> extends PageDeltaRecord {
     private int idx;
 
     /** */
-    private L row;
-
-    /** */
     private byte[] rowBytes;
 
     /** */
@@ -50,7 +46,6 @@ public class InsertRecord<L> extends PageDeltaRecord {
      * @param pageId Page ID.
      * @param io IO.
      * @param idx Index.
-     * @param row Row.
      * @param rowBytes Row bytes.
      * @param rightId Right ID.
      */
@@ -59,7 +54,6 @@ public class InsertRecord<L> extends PageDeltaRecord {
         long pageId,
         BPlusIO<L> io,
         int idx,
-        L row,
         byte[] rowBytes,
         long rightId
     ) {
@@ -67,14 +61,13 @@ public class InsertRecord<L> extends PageDeltaRecord {
 
         this.io = io;
         this.idx = idx;
-        this.row = row;
         this.rowBytes = rowBytes;
         this.rightId = rightId;
     }
 
     /** {@inheritDoc} */
     @Override public void applyDelta(PageMemory pageMem, long pageAddr) throws 
IgniteCheckedException {
-        io.insert(pageAddr, idx, row, rowBytes, rightId);
+        io.insert(pageAddr, idx, null, rowBytes, rightId, false);
     }
 
     /** {@inheritDoc} */
@@ -82,20 +75,32 @@ public class InsertRecord<L> extends PageDeltaRecord {
         return RecordType.BTREE_PAGE_INSERT;
     }
 
+    /**
+     * @return IO.
+     */
     public BPlusIO<L> io() {
         return io;
     }
 
+    /**
+     * @return Index.
+     */
     public int index() {
         return idx;
     }
 
+    /**
+     * @return Right ID.
+     */
     public long rightId() {
         return rightId;
     }
 
-    public L row() {
-        return row;
+    /**
+     * @return Row bytes.
+     */
+    public byte[] rowBytes() {
+        return rowBytes;
     }
 
     /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/ignite/blob/7663c226/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/NewRootInitRecord.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/NewRootInitRecord.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/NewRootInitRecord.java
index 26ee364..277d773 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/NewRootInitRecord.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/NewRootInitRecord.java
@@ -35,9 +35,6 @@ public class NewRootInitRecord<L> extends PageDeltaRecord {
     private long leftChildId;
 
     /** */
-    private L row;
-
-    /** */
     private byte[] rowBytes;
 
     /** */
@@ -57,7 +54,6 @@ public class NewRootInitRecord<L> extends PageDeltaRecord {
         long newRootId,
         BPlusInnerIO<L> io,
         long leftChildId,
-        L row,
         byte[] rowBytes,
         long rightChildId
     ) {
@@ -68,14 +64,13 @@ public class NewRootInitRecord<L> extends PageDeltaRecord {
         this.newRootId = newRootId;
         this.io = io;
         this.leftChildId = leftChildId;
-        this.row = row;
         this.rowBytes = rowBytes;
         this.rightChildId = rightChildId;
     }
 
     /** {@inheritDoc} */
     @Override public void applyDelta(PageMemory pageMem, long pageAddr) throws 
IgniteCheckedException {
-        io.initNewRoot(pageAddr, newRootId, leftChildId, row, rowBytes, 
rightChildId, pageMem.pageSize());
+        io.initNewRoot(pageAddr, newRootId, leftChildId, null, rowBytes, 
rightChildId, pageMem.pageSize(), false);
     }
 
     /** {@inheritDoc} */
@@ -83,23 +78,38 @@ public class NewRootInitRecord<L> extends PageDeltaRecord {
         return RecordType.BTREE_INIT_NEW_ROOT;
     }
 
+    /**
+     * @return IO.
+     */
     public BPlusInnerIO<L> io() {
         return io;
     }
 
+    /**
+     * @return Root page ID.
+     */
     public long rootId() {
         return newRootId;
     }
 
+    /**
+     * @return Left child ID.
+     */
     public long leftId() {
         return leftChildId;
     }
 
+    /**
+     * @return Right child ID.
+     */
     public long rightId() {
         return rightChildId;
     }
 
-    public L row() {
-        return row;
+    /**
+     * @return Row bytes.
+     */
+    public byte[] rowBytes() {
+        return rowBytes;
     }
 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/7663c226/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/ReplaceRecord.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/ReplaceRecord.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/ReplaceRecord.java
index 757afe1..4e85c43 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/ReplaceRecord.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/ReplaceRecord.java
@@ -17,7 +17,6 @@
 
 package org.apache.ignite.internal.pagemem.wal.record.delta;
 
-import java.nio.ByteBuffer;
 import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.internal.pagemem.PageMemory;
 import org.apache.ignite.internal.processors.cache.database.tree.io.BPlusIO;
@@ -30,9 +29,6 @@ public class ReplaceRecord<L> extends PageDeltaRecord {
     private BPlusIO<L> io;
 
     /** */
-    private L row;
-
-    /** */
     private byte[] rowBytes;
 
     /** */
@@ -42,15 +38,13 @@ public class ReplaceRecord<L> extends PageDeltaRecord {
      * @param cacheId Cache ID.
      * @param pageId  Page ID.
      * @param io IO.
-     * @param row Row.
      * @param rowBytes Row bytes.
      * @param idx Index.
      */
-    public ReplaceRecord(int cacheId, long pageId, BPlusIO<L> io, L row, 
byte[] rowBytes, int idx) {
+    public ReplaceRecord(int cacheId, long pageId, BPlusIO<L> io, byte[] 
rowBytes, int idx) {
         super(cacheId, pageId);
 
         this.io = io;
-        this.row = row;
         this.rowBytes = rowBytes;
         this.idx = idx;
     }
@@ -61,7 +55,7 @@ public class ReplaceRecord<L> extends PageDeltaRecord {
         if (io.getCount(pageAddr) < idx)
             throw new DeltaApplicationException("Index is greater than count: 
" + idx);
 
-        io.store(pageAddr, idx, row, rowBytes);
+        io.store(pageAddr, idx, null, rowBytes, false);
     }
 
     /** {@inheritDoc} */
@@ -69,15 +63,24 @@ public class ReplaceRecord<L> extends PageDeltaRecord {
         return RecordType.BTREE_PAGE_REPLACE;
     }
 
+    /**
+     * @return IO.
+     */
     public BPlusIO<L> io() {
         return io;
     }
 
+    /**
+     * @return Index.
+     */
     public int index() {
         return idx;
     }
 
-    public L row() {
-        return row;
+    /**
+     * @return Row bytes.
+     */
+    public byte[] rowBytes() {
+        return rowBytes;
     }
 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/7663c226/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/BPlusTree.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/BPlusTree.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/BPlusTree.java
index a0dff8c..518d0d8 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/BPlusTree.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/BPlusTree.java
@@ -362,10 +362,12 @@ public abstract class BPlusTree<L, T extends L> extends 
DataStructure implements
                 assert p.needReplaceInner == FALSE || p.needReplaceInner == 
DONE : p.needReplaceInner;
             }
 
-            io.store(pageAddr, idx, newRow, null);
+            boolean needWal = needWalDeltaRecord(page);
 
-            if (needWalDeltaRecord(page))
-                wal.log(new ReplaceRecord<>(cacheId, page.id(), io, newRow, 
null, idx));
+            byte[] newRowBytes = io.store(pageAddr, idx, newRow, null, 
needWal);
+
+            if (needWal)
+                wal.log(new ReplaceRecord<>(cacheId, page.id(), io, 
newRowBytes, idx));
 
             return FOUND;
         }
@@ -2340,10 +2342,12 @@ public abstract class BPlusTree<L, T extends L> extends 
DataStructure implements
          */
         private void insertSimple(Page page, BPlusIO<L> io, long pageAddr, int 
idx)
             throws IgniteCheckedException {
-            io.insert(pageAddr, idx, row, null, rightId);
+            boolean needWal = needWalDeltaRecord(page);
 
-            if (needWalDeltaRecord(page))
-                wal.log(new InsertRecord<>(cacheId, page.id(), io, idx, row, 
null, rightId));
+            byte[] rowBytes = io.insert(pageAddr, idx, row, null, rightId, 
needWal);
+
+            if (needWal)
+                wal.log(new InsertRecord<>(cacheId, page.id(), io, idx, 
rowBytes, rightId));
         }
 
         /**
@@ -2420,17 +2424,20 @@ public abstract class BPlusTree<L, T extends L> extends 
DataStructure implements
 
                                 long pageId = PageIO.getPageId(pageAddr);
 
-                                inner(io).initNewRoot(newRootPageAddr,
+                                boolean needWal = needWalDeltaRecord(newRoot);
+
+                                byte[] moveUpRowBytes = 
inner(io).initNewRoot(newRootPageAddr,
                                     newRootId,
                                     pageId,
                                     moveUpRow,
                                     null,
                                     fwdId,
-                                    pageSize());
+                                    pageSize(),
+                                    needWal);
 
-                                if (needWalDeltaRecord(newRoot))
+                                if (needWal)
                                     wal.log(new NewRootInitRecord<>(cacheId, 
newRoot.id(), newRootId,
-                                        inner(io), pageId, moveUpRow, null, 
fwdId));
+                                        inner(io), pageId, moveUpRowBytes, 
fwdId));
                             }
                             finally {
                                 writeUnlock(newRoot, newRootPageAddr, true);

http://git-wip-us.apache.org/repos/asf/ignite/blob/7663c226/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/io/BPlusIO.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/io/BPlusIO.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/io/BPlusIO.java
index 0cf1385..5186808 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/io/BPlusIO.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/io/BPlusIO.java
@@ -170,15 +170,24 @@ public abstract class BPlusIO<L> extends PageIO {
      * @param idx Index.
      * @param row Lookup or full row.
      * @param rowBytes Row bytes.
+     * @param needRowBytes If we need stored row bytes.
+     * @return Stored row bytes.
      * @throws IgniteCheckedException If failed.
      */
-    public final void store(long pageAddr, int idx, L row, byte[] rowBytes) 
throws IgniteCheckedException {
+    public final byte[] store(long pageAddr, int idx, L row, byte[] rowBytes, 
boolean needRowBytes)
+        throws IgniteCheckedException {
         int off = offset(idx);
 
-        if (rowBytes == null)
+        if (rowBytes == null) {
             storeByOffset(pageAddr, off, row);
+
+            if (needRowBytes)
+                rowBytes = PageUtils.getBytes(pageAddr, off, getItemSize());
+        }
         else
             putBytes(pageAddr, off, rowBytes);
+
+        return rowBytes;
     }
 
     /**
@@ -244,9 +253,11 @@ public abstract class BPlusIO<L> extends PageIO {
      * @param row Row to insert.
      * @param rowBytes Row bytes.
      * @param rightId Page ID which will be to the right child for the 
inserted item.
+     * @param needRowBytes If we need stored row bytes.
+     * @return Row bytes.
      * @throws IgniteCheckedException If failed.
      */
-    public void insert(long pageAddr, int idx, L row, byte[] rowBytes, long 
rightId)
+    public byte[] insert(long pageAddr, int idx, L row, byte[] rowBytes, long 
rightId, boolean needRowBytes)
         throws IgniteCheckedException {
         int cnt = getCount(pageAddr);
 
@@ -255,7 +266,7 @@ public abstract class BPlusIO<L> extends PageIO {
 
         setCount(pageAddr, cnt + 1);
 
-        store(pageAddr, idx, row, rowBytes);
+        return store(pageAddr, idx, row, rowBytes, needRowBytes);
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/ignite/blob/7663c226/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/io/BPlusInnerIO.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/io/BPlusInnerIO.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/io/BPlusInnerIO.java
index c7018bd..b15c2dc 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/io/BPlusInnerIO.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/io/BPlusInnerIO.java
@@ -130,17 +130,20 @@ public abstract class BPlusInnerIO<L> extends BPlusIO<L> {
     // Methods for B+Tree logic.
 
     /** {@inheritDoc} */
-    @Override public void insert(
+    @Override public byte[] insert(
         long pageAddr,
         int idx,
         L row,
         byte[] rowBytes,
-        long rightId
+        long rightId,
+        boolean needRowBytes
     ) throws IgniteCheckedException {
-        super.insert(pageAddr, idx, row, rowBytes, rightId);
+        rowBytes = super.insert(pageAddr, idx, row, rowBytes, rightId, 
needRowBytes);
 
         // Setup reference to the right page on split.
         setRight(pageAddr, idx, rightId);
+
+        return rowBytes;
     }
 
     /**
@@ -151,22 +154,27 @@ public abstract class BPlusInnerIO<L> extends BPlusIO<L> {
      * @param rowBytes Bytes.
      * @param rightChildId Right child ID.
      * @param pageSize Page size.
+     * @param needRowBytes If we need row bytes back.
+     * @return Row bytes.
      * @throws IgniteCheckedException If failed.
      */
-    public void initNewRoot(
+    public byte[] initNewRoot(
         long newRootPageAddr,
         long newRootId,
         long leftChildId,
         L row,
         byte[] rowBytes,
         long rightChildId,
-        int pageSize
+        int pageSize,
+        boolean needRowBytes
     ) throws IgniteCheckedException {
         initNewPage(newRootPageAddr, newRootId, pageSize);
 
         setCount(newRootPageAddr, 1);
         setLeft(newRootPageAddr, 0, leftChildId);
-        store(newRootPageAddr, 0, row, rowBytes);
+        rowBytes = store(newRootPageAddr, 0, row, rowBytes, needRowBytes);
         setRight(newRootPageAddr, 0, rightChildId);
+
+        return rowBytes;
     }
 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/7663c226/modules/core/src/test/java/org/apache/ignite/internal/processors/database/BPlusTreeSelfTest.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/database/BPlusTreeSelfTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/database/BPlusTreeSelfTest.java
index 2d9c693..0de3754 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/database/BPlusTreeSelfTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/database/BPlusTreeSelfTest.java
@@ -1403,7 +1403,7 @@ public class BPlusTreeSelfTest extends 
GridCommonAbstractTest {
             throws IgniteCheckedException {
             Long row = srcIo.getLookupRow(null, src, srcIdx);
 
-            store(dst, dstIdx, row, null);
+            store(dst, dstIdx, row, null, false);
         }
 
         /**

Reply via email to