ignite-gg-11810
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/664ceac5 Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/664ceac5 Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/664ceac5 Branch: refs/heads/ignite-gg-11810 Commit: 664ceac5ddf2aaeb6c4848592948cf430dc5c75e Parents: 94f22a0 Author: sboikov <sboi...@gridgain.com> Authored: Fri Dec 23 13:28:01 2016 +0300 Committer: sboikov <sboi...@gridgain.com> Committed: Fri Dec 23 14:20:05 2016 +0300 ---------------------------------------------------------------------- .../apache/ignite/internal/pagemem/Page.java | 4 + .../ignite/internal/pagemem/PageUtils.java | 28 ++- .../internal/pagemem/impl/PageNoStoreImpl.java | 12 +- .../delta/DataPageInsertFragmentRecord.java | 4 +- .../wal/record/delta/DataPageInsertRecord.java | 4 +- .../wal/record/delta/DataPageRemoveRecord.java | 4 +- .../delta/DataPageSetFreeListPageRecord.java | 2 +- .../wal/record/delta/FixCountRecord.java | 2 +- .../record/delta/FixLeftmostChildRecord.java | 2 +- .../pagemem/wal/record/delta/FixRemoveId.java | 2 +- .../wal/record/delta/InitNewPageRecord.java | 4 +- .../wal/record/delta/InnerReplaceRecord.java | 2 +- .../pagemem/wal/record/delta/InsertRecord.java | 2 +- .../pagemem/wal/record/delta/MergeRecord.java | 2 +- .../wal/record/delta/MetaPageAddRootRecord.java | 3 +- .../wal/record/delta/MetaPageCutRootRecord.java | 2 +- .../wal/record/delta/MetaPageInitRecord.java | 5 +- .../record/delta/MetaPageInitRootRecord.java | 4 +- .../MetaPageUpdateCandidateAllocatedIndex.java | 4 +- .../delta/MetaPageUpdateLastAllocatedIndex.java | 2 +- .../MetaPageUpdateLastSuccessfulBackupId.java | 3 +- ...etaPageUpdateLastSuccessfulFullBackupId.java | 3 +- .../delta/MetaPageUpdateNextBackupId.java | 3 +- .../MetaPageUpdatePartitionDataRecord.java | 3 +- .../wal/record/delta/NewRootInitRecord.java | 5 +- .../wal/record/delta/PageDeltaRecord.java | 2 +- .../record/delta/PagesListAddPageRecord.java | 5 +- .../delta/PagesListInitNewPageRecord.java | 7 +- .../record/delta/PagesListRemovePageRecord.java | 3 +- .../record/delta/PagesListSetNextRecord.java | 3 +- .../delta/PagesListSetPreviousRecord.java | 3 +- .../pagemem/wal/record/delta/RecycleRecord.java | 3 +- .../pagemem/wal/record/delta/RemoveRecord.java | 3 +- .../pagemem/wal/record/delta/ReplaceRecord.java | 2 +- .../record/delta/SplitExistingPageRecord.java | 3 +- .../record/delta/SplitForwardPageRecord.java | 2 +- .../record/delta/TrackingPageDeltaRecord.java | 4 +- .../processors/cache/CacheObjectAdapter.java | 10 +- .../processors/cache/IncompleteObject.java | 13 ++ .../cache/database/CacheDataRowAdapter.java | 64 +++++- .../cache/database/DataStructure.java | 7 + .../cache/database/MetadataStorage.java | 115 ++++------ .../cache/database/freelist/FreeListImpl.java | 23 +- .../cache/database/freelist/PagesList.java | 12 +- .../database/freelist/io/PagesListMetaIO.java | 4 +- .../database/freelist/io/PagesListNodeIO.java | 7 +- .../cache/database/tree/BPlusTree.java | 18 +- .../cache/database/tree/io/BPlusIO.java | 18 +- .../cache/database/tree/io/BPlusInnerIO.java | 7 +- .../cache/database/tree/io/BPlusLeafIO.java | 2 +- .../cache/database/tree/io/CacheVersionIO.java | 71 ++++++ .../cache/database/tree/io/DataPageIO.java | 227 +++++++++++-------- .../cache/database/tree/io/DataPagePayload.java | 50 ++++ .../cache/database/tree/io/PageIO.java | 2 +- .../cache/database/tree/io/PageMetaIO.java | 4 +- .../database/tree/io/PagePartitionMetaIO.java | 4 +- .../cache/database/tree/io/TrackingPageIO.java | 2 +- .../cache/database/tree/util/PageHandler.java | 2 +- .../pagemem/impl/PageMemoryNoLoadSelfTest.java | 11 +- .../database/tree/io/TrackingPageIOTest.java | 47 ++-- .../database/BPlusTreeReuseSelfTest.java | 11 +- .../processors/database/BPlusTreeSelfTest.java | 50 ++-- 62 files changed, 573 insertions(+), 359 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/664ceac5/modules/core/src/main/java/org/apache/ignite/internal/pagemem/Page.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/Page.java b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/Page.java index 89848cc..5f9d424 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/Page.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/Page.java @@ -95,6 +95,10 @@ public interface Page extends AutoCloseable { */ public Boolean fullPageWalRecordPolicy(); + public int size(); + + public ByteBuffer pageBuffer(); + /** * Release page. */ http://git-wip-us.apache.org/repos/asf/ignite/blob/664ceac5/modules/core/src/main/java/org/apache/ignite/internal/pagemem/PageUtils.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/PageUtils.java b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/PageUtils.java index 69719e1..b6faeb1 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/PageUtils.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/PageUtils.java @@ -29,19 +29,31 @@ public class PageUtils { private static final Unsafe unsafe = GridUnsafe.UNSAFE; public static byte getByte(long buf, int off) { - return unsafe.getByte(buf, off); + return unsafe.getByte(buf + off); + } + + public static byte[] getBytes(long buf, int off, int len) { + byte[] bytes = new byte[len]; + + unsafe.copyMemory(null, buf + off, bytes, GridUnsafe.BYTE_ARR_OFF, len); + + return bytes; + } + + public static void getBytes(long src, int srcOff, byte[] dst, int dstOff, int len) { + unsafe.copyMemory(null, src + srcOff, dst, GridUnsafe.BYTE_ARR_OFF + dstOff, len); } public static short getShort(long buf, int off) { - return unsafe.getShort(buf, off); + return unsafe.getShort(buf + off); } public static int getInt(long buf, int off) { - return unsafe.getInt(buf, off); + return unsafe.getInt(buf + off); } public static long getLong(long buf, int off) { - return unsafe.getLong(buf, off); + return unsafe.getLong(buf + off); } public static void putBytes(long buf, int off, byte[] bytes) { @@ -49,18 +61,18 @@ public class PageUtils { } public static void putByte(long buf, int off, byte v) { - unsafe.putByte(buf, off, v); + unsafe.putByte(buf + off, v); } public static void putShort(long buf, int off, short v) { - unsafe.putShort(buf, off, v); + unsafe.putShort(buf + off, v); } public static void putInt(long buf, int off, int v) { - unsafe.putInt(buf, off, v); + unsafe.putInt(buf + off, v); } public static void putLong(long buf, int off, long v) { - unsafe.putLong(buf, off, v); + unsafe.putLong(buf + off, v); } } http://git-wip-us.apache.org/repos/asf/ignite/blob/664ceac5/modules/core/src/main/java/org/apache/ignite/internal/pagemem/impl/PageNoStoreImpl.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/impl/PageNoStoreImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/impl/PageNoStoreImpl.java index 0ad206b..fd59b52 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/impl/PageNoStoreImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/impl/PageNoStoreImpl.java @@ -71,6 +71,11 @@ public class PageNoStoreImpl implements Page { buf = pageMem.wrapPointer(absPtr + PageMemoryNoStoreImpl.PAGE_OVERHEAD, pageMem.pageSize()); } + /** {@inheritDoc} */ + @Override public ByteBuffer pageBuffer() { + return pageMem.wrapPointer(absPtr + PageMemoryNoStoreImpl.PAGE_OVERHEAD, pageMem.pageSize()); + } + private long pointer() { return absPtr + PageMemoryNoStoreImpl.PAGE_OVERHEAD; } @@ -121,7 +126,7 @@ public class PageNoStoreImpl implements Page { /** {@inheritDoc} */ @Override public long getForWritePointer() { - int tag = noTagCheck ? OffheapReadWriteLock.TAG_LOCK_ALWAYS : PageIdUtils.tag(pageId); + int tag = noTagCheck ? OffheapReadWriteLock.TAG_LOCK_ALWAYS : PageIdUtils.tag(pageId); boolean locked = pageMem.writeLockPage(absPtr, tag); if (!locked && !noTagCheck) @@ -175,6 +180,11 @@ public class PageNoStoreImpl implements Page { } /** {@inheritDoc} */ + @Override public int size() { + return pageMem.pageSize(); + } + + /** {@inheritDoc} */ @Override public void close() { pageMem.releasePage(this); } http://git-wip-us.apache.org/repos/asf/ignite/blob/664ceac5/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/DataPageInsertFragmentRecord.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/DataPageInsertFragmentRecord.java b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/DataPageInsertFragmentRecord.java index 49b2626..96bf4ba 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/DataPageInsertFragmentRecord.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/DataPageInsertFragmentRecord.java @@ -50,10 +50,10 @@ public class DataPageInsertFragmentRecord extends PageDeltaRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(ByteBuffer buf) throws IgniteCheckedException { + @Override public void applyDelta(long buf, int pageSize) throws IgniteCheckedException { DataPageIO io = DataPageIO.VERSIONS.forPage(buf); - io.addRowFragment(buf, payload, lastLink); + io.addRowFragment(buf, payload, lastLink, pageSize); } /** {@inheritDoc} */ http://git-wip-us.apache.org/repos/asf/ignite/blob/664ceac5/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/DataPageInsertRecord.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/DataPageInsertRecord.java b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/DataPageInsertRecord.java index ceb06c7..66b07bb 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/DataPageInsertRecord.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/DataPageInsertRecord.java @@ -51,12 +51,12 @@ public class DataPageInsertRecord extends PageDeltaRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(ByteBuffer buf) throws IgniteCheckedException { + @Override public void applyDelta(long buf, int pageSize) throws IgniteCheckedException { assert payload != null; DataPageIO io = DataPageIO.VERSIONS.forPage(buf); - io.addRow(buf, payload); + io.addRow(buf, payload, pageSize); } /** {@inheritDoc} */ http://git-wip-us.apache.org/repos/asf/ignite/blob/664ceac5/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/DataPageRemoveRecord.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/DataPageRemoveRecord.java b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/DataPageRemoveRecord.java index 511094f..3a6023e 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/DataPageRemoveRecord.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/DataPageRemoveRecord.java @@ -48,11 +48,11 @@ public class DataPageRemoveRecord extends PageDeltaRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(ByteBuffer buf) + @Override public void applyDelta(long buf, int pageSize) throws IgniteCheckedException { DataPageIO io = DataPageIO.VERSIONS.forPage(buf); - io.removeRow(buf, itemId); + io.removeRow(buf, itemId, pageSize); } /** {@inheritDoc} */ http://git-wip-us.apache.org/repos/asf/ignite/blob/664ceac5/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/DataPageSetFreeListPageRecord.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/DataPageSetFreeListPageRecord.java b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/DataPageSetFreeListPageRecord.java index 6463989..09d1442 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/DataPageSetFreeListPageRecord.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/DataPageSetFreeListPageRecord.java @@ -49,7 +49,7 @@ public class DataPageSetFreeListPageRecord extends PageDeltaRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(ByteBuffer buf) throws IgniteCheckedException { + @Override public void applyDelta(long buf, int pageSize) throws IgniteCheckedException { DataPageIO io = DataPageIO.VERSIONS.forPage(buf); io.setFreeListPageId(buf, freeListPage); http://git-wip-us.apache.org/repos/asf/ignite/blob/664ceac5/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/FixCountRecord.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/FixCountRecord.java b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/FixCountRecord.java index 5089c76..e95fdf1 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/FixCountRecord.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/FixCountRecord.java @@ -40,7 +40,7 @@ public class FixCountRecord extends PageDeltaRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(ByteBuffer buf) throws IgniteCheckedException { + @Override public void applyDelta(long buf, int pageSize) throws IgniteCheckedException { BPlusIO<?> io = PageIO.getBPlusIO(buf); io.setCount(buf, cnt); http://git-wip-us.apache.org/repos/asf/ignite/blob/664ceac5/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/FixLeftmostChildRecord.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/FixLeftmostChildRecord.java b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/FixLeftmostChildRecord.java index fe09dd1..c8a68d4 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/FixLeftmostChildRecord.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/FixLeftmostChildRecord.java @@ -41,7 +41,7 @@ public class FixLeftmostChildRecord extends PageDeltaRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(ByteBuffer buf) throws IgniteCheckedException { + @Override public void applyDelta(long buf, int pageSize) throws IgniteCheckedException { BPlusInnerIO<?> io = PageIO.getBPlusIO(buf); io.setLeft(buf, 0, rightId); http://git-wip-us.apache.org/repos/asf/ignite/blob/664ceac5/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/FixRemoveId.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/FixRemoveId.java b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/FixRemoveId.java index 5147854..b9febc9 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/FixRemoveId.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/FixRemoveId.java @@ -41,7 +41,7 @@ public class FixRemoveId extends PageDeltaRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(ByteBuffer buf) + @Override public void applyDelta(long buf, int pageSize) throws IgniteCheckedException { BPlusIO<?> io = PageIO.getBPlusIO(buf); http://git-wip-us.apache.org/repos/asf/ignite/blob/664ceac5/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/InitNewPageRecord.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/InitNewPageRecord.java b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/InitNewPageRecord.java index 5ffc193..ac4dda0 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/InitNewPageRecord.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/InitNewPageRecord.java @@ -54,10 +54,10 @@ public class InitNewPageRecord extends PageDeltaRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(ByteBuffer buf) throws IgniteCheckedException { + @Override public void applyDelta(long buf, int pageSize) throws IgniteCheckedException { PageIO io = PageIO.getPageIO(ioType, ioVer); - io.initNewPage(buf, newPageId); + io.initNewPage(buf, newPageId, pageSize); } /** {@inheritDoc} */ http://git-wip-us.apache.org/repos/asf/ignite/blob/664ceac5/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/InnerReplaceRecord.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/InnerReplaceRecord.java b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/InnerReplaceRecord.java index ccc3449..a9140ef 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/InnerReplaceRecord.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/InnerReplaceRecord.java @@ -57,7 +57,7 @@ public class InnerReplaceRecord<L> extends PageDeltaRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(ByteBuffer dstBuf) throws IgniteCheckedException { + @Override public void applyDelta(long dstBuf, int pageSize) throws IgniteCheckedException { throw new IgniteCheckedException("Inner replace record should not be logged."); } http://git-wip-us.apache.org/repos/asf/ignite/blob/664ceac5/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 f439bf3..948f829 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 @@ -72,7 +72,7 @@ public class InsertRecord<L> extends PageDeltaRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(ByteBuffer buf) throws IgniteCheckedException { + @Override public void applyDelta(long buf, int pageSize) throws IgniteCheckedException { io.insert(buf, idx, row, rowBytes, rightId); } http://git-wip-us.apache.org/repos/asf/ignite/blob/664ceac5/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/MergeRecord.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/MergeRecord.java b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/MergeRecord.java index d8113fe..c3b5934 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/MergeRecord.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/MergeRecord.java @@ -63,7 +63,7 @@ public class MergeRecord<L> extends PageDeltaRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(ByteBuffer leftBuf) throws IgniteCheckedException { + @Override public void applyDelta(long leftBuf, int pageSize) throws IgniteCheckedException { throw new IgniteCheckedException("Merge record should not be logged."); } http://git-wip-us.apache.org/repos/asf/ignite/blob/664ceac5/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/MetaPageAddRootRecord.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/MetaPageAddRootRecord.java b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/MetaPageAddRootRecord.java index a84933c..19d8140 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/MetaPageAddRootRecord.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/MetaPageAddRootRecord.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.processors.cache.database.tree.io.BPlusMetaIO; @@ -40,7 +39,7 @@ public class MetaPageAddRootRecord extends PageDeltaRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(ByteBuffer buf) throws IgniteCheckedException { + @Override public void applyDelta(long buf, int pageSize) throws IgniteCheckedException { BPlusMetaIO io = BPlusMetaIO.VERSIONS.forPage(buf); io.addRoot(0, buf, rootId); http://git-wip-us.apache.org/repos/asf/ignite/blob/664ceac5/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/MetaPageCutRootRecord.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/MetaPageCutRootRecord.java b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/MetaPageCutRootRecord.java index 1145736..a2957e5 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/MetaPageCutRootRecord.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/MetaPageCutRootRecord.java @@ -34,7 +34,7 @@ public class MetaPageCutRootRecord extends PageDeltaRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(ByteBuffer buf) throws IgniteCheckedException { + @Override public void applyDelta(long buf, int pageSize) throws IgniteCheckedException { BPlusMetaIO io = BPlusMetaIO.VERSIONS.forPage(buf); io.cutRoot(0, buf); http://git-wip-us.apache.org/repos/asf/ignite/blob/664ceac5/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/MetaPageInitRecord.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/MetaPageInitRecord.java b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/MetaPageInitRecord.java index df671f3..fecf80d 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/MetaPageInitRecord.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/MetaPageInitRecord.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.processors.cache.database.tree.io.PageIO; import org.apache.ignite.internal.processors.cache.database.tree.io.PageMetaIO; @@ -75,12 +74,12 @@ public class MetaPageInitRecord extends InitNewPageRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(ByteBuffer buf) throws IgniteCheckedException { + @Override public void applyDelta(long buf, int pageSize) throws IgniteCheckedException { PageMetaIO io = ioType == PageIO.T_META ? PageMetaIO.VERSIONS.forPage(buf) : PagePartitionMetaIO.VERSIONS.forPage(buf); - io.initNewPage(buf, newPageId); + io.initNewPage(buf, newPageId, pageSize); io.setTreeRoot(buf, treeRoot); io.setReuseListRoot(buf, reuseListRoot); http://git-wip-us.apache.org/repos/asf/ignite/blob/664ceac5/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/MetaPageInitRootRecord.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/MetaPageInitRootRecord.java b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/MetaPageInitRootRecord.java index 96bc949..e67e974 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/MetaPageInitRootRecord.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/MetaPageInitRootRecord.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.processors.cache.database.tree.io.BPlusMetaIO; @@ -40,8 +39,7 @@ public class MetaPageInitRootRecord extends PageDeltaRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(ByteBuffer buf) - throws IgniteCheckedException { + @Override public void applyDelta(long buf, int pageSize) throws IgniteCheckedException { BPlusMetaIO io = BPlusMetaIO.VERSIONS.forPage(buf); io.initRoot(0, buf, rootId); http://git-wip-us.apache.org/repos/asf/ignite/blob/664ceac5/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/MetaPageUpdateCandidateAllocatedIndex.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/MetaPageUpdateCandidateAllocatedIndex.java b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/MetaPageUpdateCandidateAllocatedIndex.java index 32286dc..e9e1792 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/MetaPageUpdateCandidateAllocatedIndex.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/MetaPageUpdateCandidateAllocatedIndex.java @@ -21,8 +21,6 @@ import org.apache.ignite.IgniteCheckedException; import org.apache.ignite.internal.processors.cache.database.tree.io.PageIO; import org.apache.ignite.internal.processors.cache.database.tree.io.PageMetaIO; -import java.nio.ByteBuffer; - /** * */ @@ -40,7 +38,7 @@ public class MetaPageUpdateCandidateAllocatedIndex extends PageDeltaRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(ByteBuffer buf) throws IgniteCheckedException { + @Override public void applyDelta(long buf, int pageSize) throws IgniteCheckedException { assert PageIO.getType(buf) == PageIO.T_META || PageIO.getType(buf) == PageIO.T_PART_META; PageMetaIO io = PageMetaIO.VERSIONS.forVersion(PageIO.getVersion(buf)); http://git-wip-us.apache.org/repos/asf/ignite/blob/664ceac5/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/MetaPageUpdateLastAllocatedIndex.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/MetaPageUpdateLastAllocatedIndex.java b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/MetaPageUpdateLastAllocatedIndex.java index 836a4eb..727ed23 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/MetaPageUpdateLastAllocatedIndex.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/MetaPageUpdateLastAllocatedIndex.java @@ -39,7 +39,7 @@ public class MetaPageUpdateLastAllocatedIndex extends PageDeltaRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(ByteBuffer buf) throws IgniteCheckedException { + @Override public void applyDelta(long buf, int pageSize) throws IgniteCheckedException { assert PageIO.getType(buf) == PageIO.T_META || PageIO.getType(buf) == PageIO.T_PART_META; PageMetaIO io = PageMetaIO.VERSIONS.forVersion(PageIO.getVersion(buf)); http://git-wip-us.apache.org/repos/asf/ignite/blob/664ceac5/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/MetaPageUpdateLastSuccessfulBackupId.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/MetaPageUpdateLastSuccessfulBackupId.java b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/MetaPageUpdateLastSuccessfulBackupId.java index ada247e..f9b9e8d 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/MetaPageUpdateLastSuccessfulBackupId.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/MetaPageUpdateLastSuccessfulBackupId.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.processors.cache.database.tree.io.PageMetaIO; @@ -38,7 +37,7 @@ public class MetaPageUpdateLastSuccessfulBackupId extends PageDeltaRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(ByteBuffer buf) throws IgniteCheckedException { + @Override public void applyDelta(long buf, int pageSize) throws IgniteCheckedException { PageMetaIO io = PageMetaIO.VERSIONS.forPage(buf); io.setLastSuccessfulBackupId(buf, lastSuccessfulBackupId); http://git-wip-us.apache.org/repos/asf/ignite/blob/664ceac5/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/MetaPageUpdateLastSuccessfulFullBackupId.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/MetaPageUpdateLastSuccessfulFullBackupId.java b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/MetaPageUpdateLastSuccessfulFullBackupId.java index bea90c3..c63788d 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/MetaPageUpdateLastSuccessfulFullBackupId.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/MetaPageUpdateLastSuccessfulFullBackupId.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.processors.cache.database.tree.io.PageMetaIO; @@ -38,7 +37,7 @@ public class MetaPageUpdateLastSuccessfulFullBackupId extends PageDeltaRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(ByteBuffer buf) throws IgniteCheckedException { + @Override public void applyDelta(long buf, int pageSize) throws IgniteCheckedException { PageMetaIO io = PageMetaIO.VERSIONS.forPage(buf); io.setLastSuccessfulFullBackupId(buf, lastSuccessfulFullBackupId); http://git-wip-us.apache.org/repos/asf/ignite/blob/664ceac5/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/MetaPageUpdateNextBackupId.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/MetaPageUpdateNextBackupId.java b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/MetaPageUpdateNextBackupId.java index f33afc0..6cdf974 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/MetaPageUpdateNextBackupId.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/MetaPageUpdateNextBackupId.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.processors.cache.database.tree.io.PageMetaIO; @@ -38,7 +37,7 @@ public class MetaPageUpdateNextBackupId extends PageDeltaRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(ByteBuffer buf) throws IgniteCheckedException { + @Override public void applyDelta(long buf, int pageSize) throws IgniteCheckedException { PageMetaIO io = PageMetaIO.VERSIONS.forPage(buf); io.setNextBackupId(buf, nextBackupId); http://git-wip-us.apache.org/repos/asf/ignite/blob/664ceac5/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/MetaPageUpdatePartitionDataRecord.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/MetaPageUpdatePartitionDataRecord.java b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/MetaPageUpdatePartitionDataRecord.java index 494c0ad..f959761 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/MetaPageUpdatePartitionDataRecord.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/MetaPageUpdatePartitionDataRecord.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.processors.cache.database.tree.io.PagePartitionMetaIO; @@ -79,7 +78,7 @@ public class MetaPageUpdatePartitionDataRecord extends PageDeltaRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(ByteBuffer buf) throws IgniteCheckedException { + @Override public void applyDelta(long buf, int pageSize) throws IgniteCheckedException { PagePartitionMetaIO io = PagePartitionMetaIO.VERSIONS.forPage(buf); io.setUpdateCounter(buf, updateCntr); http://git-wip-us.apache.org/repos/asf/ignite/blob/664ceac5/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 e0284f7..756ad93 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 @@ -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.processors.cache.database.tree.io.BPlusInnerIO; @@ -74,8 +73,8 @@ public class NewRootInitRecord<L> extends PageDeltaRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(ByteBuffer buf) throws IgniteCheckedException { - io.initNewRoot(buf, newRootId, leftChildId, row, rowBytes, rightChildId); + @Override public void applyDelta(long buf, int pageSize) throws IgniteCheckedException { + io.initNewRoot(buf, newRootId, leftChildId, row, rowBytes, rightChildId, pageSize); } /** {@inheritDoc} */ http://git-wip-us.apache.org/repos/asf/ignite/blob/664ceac5/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/PageDeltaRecord.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/PageDeltaRecord.java b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/PageDeltaRecord.java index 9acdd08..80668a1 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/PageDeltaRecord.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/PageDeltaRecord.java @@ -65,7 +65,7 @@ public abstract class PageDeltaRecord extends WALRecord { * @param buf Page buffer. * @throws IgniteCheckedException If failed. */ - public abstract void applyDelta(ByteBuffer buf) throws IgniteCheckedException; + public abstract void applyDelta(long buf, int pageSize) throws IgniteCheckedException; /** {@inheritDoc} */ @Override public String toString() { http://git-wip-us.apache.org/repos/asf/ignite/blob/664ceac5/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/PagesListAddPageRecord.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/PagesListAddPageRecord.java b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/PagesListAddPageRecord.java index 7ea16b8..208de66 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/PagesListAddPageRecord.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/PagesListAddPageRecord.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.processors.cache.database.freelist.io.PagesListNodeIO; import org.apache.ignite.internal.util.tostring.GridToStringExclude; @@ -51,10 +50,10 @@ public class PagesListAddPageRecord extends PageDeltaRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(ByteBuffer buf) throws IgniteCheckedException { + @Override public void applyDelta(long buf, int pageSize) throws IgniteCheckedException { PagesListNodeIO io = PagesListNodeIO.VERSIONS.forPage(buf); - int cnt = io.addPage(buf, dataPageId); + int cnt = io.addPage(buf, dataPageId, pageSize); assert cnt >= 0 : cnt; } http://git-wip-us.apache.org/repos/asf/ignite/blob/664ceac5/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/PagesListInitNewPageRecord.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/PagesListInitNewPageRecord.java b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/PagesListInitNewPageRecord.java index 922f212..c3ac7ea 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/PagesListInitNewPageRecord.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/PagesListInitNewPageRecord.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.processors.cache.database.freelist.io.PagesListNodeIO; import org.apache.ignite.internal.processors.cache.database.tree.io.PageIO; @@ -73,14 +72,14 @@ public class PagesListInitNewPageRecord extends InitNewPageRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(ByteBuffer buf) throws IgniteCheckedException { + @Override public void applyDelta(long buf, int pageSize) throws IgniteCheckedException { PagesListNodeIO io = PageIO.getPageIO(PageIO.T_PAGE_LIST_NODE, ioVer); - io.initNewPage(buf, pageId()); + io.initNewPage(buf, pageId(), pageSize); io.setPreviousId(buf, prevPageId); if (addDataPageId != 0L) { - int cnt = io.addPage(buf, addDataPageId); + int cnt = io.addPage(buf, addDataPageId, pageSize); assert cnt == 0 : cnt; } http://git-wip-us.apache.org/repos/asf/ignite/blob/664ceac5/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/PagesListRemovePageRecord.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/PagesListRemovePageRecord.java b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/PagesListRemovePageRecord.java index 128e396..95c0d47 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/PagesListRemovePageRecord.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/PagesListRemovePageRecord.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.processors.cache.database.freelist.io.PagesListNodeIO; import org.apache.ignite.internal.util.tostring.GridToStringExclude; @@ -51,7 +50,7 @@ public class PagesListRemovePageRecord extends PageDeltaRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(ByteBuffer buf) throws IgniteCheckedException { + @Override public void applyDelta(long buf, int pageSize) throws IgniteCheckedException { PagesListNodeIO io = PagesListNodeIO.VERSIONS.forPage(buf); boolean rmvd = io.removePage(buf, rmvdPageId); http://git-wip-us.apache.org/repos/asf/ignite/blob/664ceac5/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/PagesListSetNextRecord.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/PagesListSetNextRecord.java b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/PagesListSetNextRecord.java index 07ce6d2..801d679 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/PagesListSetNextRecord.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/PagesListSetNextRecord.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.processors.cache.database.freelist.io.PagesListNodeIO; @@ -47,7 +46,7 @@ public class PagesListSetNextRecord extends PageDeltaRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(ByteBuffer buf) throws IgniteCheckedException { + @Override public void applyDelta(long buf, int pageSize) throws IgniteCheckedException { PagesListNodeIO io = PagesListNodeIO.VERSIONS.forPage(buf); io.setNextId(buf, nextPageId); http://git-wip-us.apache.org/repos/asf/ignite/blob/664ceac5/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/PagesListSetPreviousRecord.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/PagesListSetPreviousRecord.java b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/PagesListSetPreviousRecord.java index bb3a877..bfac436 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/PagesListSetPreviousRecord.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/PagesListSetPreviousRecord.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.processors.cache.database.freelist.io.PagesListNodeIO; @@ -47,7 +46,7 @@ public class PagesListSetPreviousRecord extends PageDeltaRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(ByteBuffer buf) throws IgniteCheckedException { + @Override public void applyDelta(long buf, int pageSize) throws IgniteCheckedException { PagesListNodeIO io = PagesListNodeIO.VERSIONS.forPage(buf); io.setPreviousId(buf, prevPageId); http://git-wip-us.apache.org/repos/asf/ignite/blob/664ceac5/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/RecycleRecord.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/RecycleRecord.java b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/RecycleRecord.java index 470f441..c40f014 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/RecycleRecord.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/RecycleRecord.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.processors.cache.database.tree.io.PageIO; @@ -40,7 +39,7 @@ public class RecycleRecord extends PageDeltaRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(ByteBuffer buf) throws IgniteCheckedException { + @Override public void applyDelta(long buf, int pageSize) throws IgniteCheckedException { PageIO.setPageId(buf, newPageId); } http://git-wip-us.apache.org/repos/asf/ignite/blob/664ceac5/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/RemoveRecord.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/RemoveRecord.java b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/RemoveRecord.java index 453525c..c9c8ea3 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/RemoveRecord.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/RemoveRecord.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.processors.cache.database.tree.io.BPlusIO; import org.apache.ignite.internal.processors.cache.database.tree.io.PageIO; @@ -47,7 +46,7 @@ public class RemoveRecord extends PageDeltaRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(ByteBuffer buf) throws IgniteCheckedException { + @Override public void applyDelta(long buf, int pageSize) throws IgniteCheckedException { BPlusIO<?> io = PageIO.getBPlusIO(buf); if (io.getCount(buf) != cnt) http://git-wip-us.apache.org/repos/asf/ignite/blob/664ceac5/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 8a9e4e3..4d65121 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 @@ -55,7 +55,7 @@ public class ReplaceRecord<L> extends PageDeltaRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(ByteBuffer buf) + @Override public void applyDelta(long buf, int pageSize) throws IgniteCheckedException { if (io.getCount(buf) < idx) throw new DeltaApplicationException("Index is greater than count: " + idx); http://git-wip-us.apache.org/repos/asf/ignite/blob/664ceac5/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/SplitExistingPageRecord.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/SplitExistingPageRecord.java b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/SplitExistingPageRecord.java index 8ec5f8f..f9dfd37 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/SplitExistingPageRecord.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/SplitExistingPageRecord.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.processors.cache.database.tree.io.BPlusIO; import org.apache.ignite.internal.processors.cache.database.tree.io.PageIO; @@ -50,7 +49,7 @@ public class SplitExistingPageRecord extends PageDeltaRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(ByteBuffer buf) throws IgniteCheckedException { + @Override public void applyDelta(long buf, int pageSize) throws IgniteCheckedException { BPlusIO<?> io = PageIO.getBPlusIO(buf); io.splitExistingPage(buf, mid, fwdId); http://git-wip-us.apache.org/repos/asf/ignite/blob/664ceac5/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/SplitForwardPageRecord.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/SplitForwardPageRecord.java b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/SplitForwardPageRecord.java index b4487fa..f67e8d5 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/SplitForwardPageRecord.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/SplitForwardPageRecord.java @@ -79,7 +79,7 @@ public class SplitForwardPageRecord extends PageDeltaRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(ByteBuffer fwdBuf) throws IgniteCheckedException { + @Override public void applyDelta(long fwdBuf, int pageSize) throws IgniteCheckedException { throw new IgniteCheckedException("Split forward page record should not be logged."); } http://git-wip-us.apache.org/repos/asf/ignite/blob/664ceac5/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/TrackingPageDeltaRecord.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/TrackingPageDeltaRecord.java b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/TrackingPageDeltaRecord.java index 03953df..e95afbb 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/TrackingPageDeltaRecord.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/TrackingPageDeltaRecord.java @@ -70,8 +70,8 @@ public class TrackingPageDeltaRecord extends PageDeltaRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(ByteBuffer buf) throws IgniteCheckedException { - TrackingPageIO.VERSIONS.forPage(buf).markChanged(buf, pageIdToMark, nextBackupId, lastSuccessfulBackupId, buf.capacity()); + @Override public void applyDelta(long buf, int pageSize) throws IgniteCheckedException { + TrackingPageIO.VERSIONS.forPage(buf).markChanged(buf, pageIdToMark, nextBackupId, lastSuccessfulBackupId, pageSize); } /** {@inheritDoc} */ http://git-wip-us.apache.org/repos/asf/ignite/blob/664ceac5/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheObjectAdapter.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheObjectAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheObjectAdapter.java index a34e98d..1394fc2 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheObjectAdapter.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheObjectAdapter.java @@ -164,8 +164,14 @@ public abstract class CacheObjectAdapter implements CacheObject, Externalizable * @return {@code True} if data were successfully written. * @throws IgniteCheckedException If failed. */ - public static boolean putValue(byte cacheObjType, final ByteBuffer buf, int off, int len, - byte[] valBytes, final int start) throws IgniteCheckedException { + public static boolean putValue(byte cacheObjType, + final ByteBuffer buf, + int off, + int len, + byte[] valBytes, + final int start) + throws IgniteCheckedException + { int dataLen = valBytes.length; if (buf.remaining() < len) http://git-wip-us.apache.org/repos/asf/ignite/blob/664ceac5/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IncompleteObject.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IncompleteObject.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IncompleteObject.java index 666fc27..ce0e306 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IncompleteObject.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IncompleteObject.java @@ -18,6 +18,7 @@ package org.apache.ignite.internal.processors.cache; import java.nio.ByteBuffer; +import org.apache.ignite.internal.pagemem.PageUtils; /** * Incomplete object. @@ -86,4 +87,16 @@ public class IncompleteObject<T> { off += len; } + + public int readData(long buf, int remaining) { + assert data != null; + + final int len = Math.min(data.length - off, remaining); + + PageUtils.getBytes(buf, 0, data, off, len); + + off += len; + + return len; + } } http://git-wip-us.apache.org/repos/asf/ignite/blob/664ceac5/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/CacheDataRowAdapter.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/CacheDataRowAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/CacheDataRowAdapter.java index b5babc4..59e2fc4 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/CacheDataRowAdapter.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/CacheDataRowAdapter.java @@ -21,6 +21,7 @@ import java.nio.ByteBuffer; import org.apache.ignite.IgniteCheckedException; import org.apache.ignite.internal.pagemem.Page; import org.apache.ignite.internal.pagemem.PageIdUtils; +import org.apache.ignite.internal.pagemem.PageUtils; import org.apache.ignite.internal.processors.cache.CacheObject; import org.apache.ignite.internal.processors.cache.CacheObjectContext; import org.apache.ignite.internal.processors.cache.GridCacheContext; @@ -29,6 +30,7 @@ import org.apache.ignite.internal.processors.cache.IncompleteObject; import org.apache.ignite.internal.processors.cache.KeyCacheObject; import org.apache.ignite.internal.processors.cache.database.tree.io.DataPageIO; import org.apache.ignite.internal.processors.cache.database.tree.io.CacheVersionIO; +import org.apache.ignite.internal.processors.cache.database.tree.io.DataPagePayload; import org.apache.ignite.internal.processors.cache.version.GridCacheVersion; import org.apache.ignite.internal.util.tostring.GridToStringExclude; import org.apache.ignite.internal.util.tostring.GridToStringInclude; @@ -68,7 +70,6 @@ public class CacheDataRowAdapter implements CacheDataRow { // Link can be 0 here. this.link = link; } - /** * Read row from data pages. * @@ -89,19 +90,21 @@ public class CacheDataRowAdapter implements CacheDataRow { do { try (Page page = page(pageId(nextLink), cctx)) { - ByteBuffer buf = page.getForRead(); // Non-empty data page must not be recycled. + long buf = page.getForReadPointer(); // Non-empty data page must not be recycled. - assert buf != null: nextLink; + assert buf != 0L : nextLink; try { DataPageIO io = DataPageIO.VERSIONS.forPage(buf); - nextLink = io.setPositionAndLimitOnPayload(buf, itemId(nextLink)); + DataPagePayload data = io.readPayload(buf, itemId(nextLink), page.size()); + + nextLink = data.nextLink(); if (first) { if (nextLink == 0) { // Fast path for a single page row. - readFullRow(coctx, buf, keyOnly); + readFullRow(coctx, data.offset(), keyOnly); return; } @@ -109,7 +112,12 @@ public class CacheDataRowAdapter implements CacheDataRow { first = false; } - incomplete = readFragment(coctx, buf, keyOnly, incomplete); + ByteBuffer buf0 = page.pageBuffer(); + + buf0.position(data.offset()); + buf0.limit(data.offset() + data.payloadSize()); + + incomplete = readFragment(coctx, buf0, keyOnly, incomplete); if (keyOnly && key != null) return; @@ -121,7 +129,7 @@ public class CacheDataRowAdapter implements CacheDataRow { } while(nextLink != 0); - assert isReady(): "ready"; + assert isReady() : "ready"; } /** @@ -179,8 +187,23 @@ public class CacheDataRowAdapter implements CacheDataRow { * @param keyOnly {@code true} If need to read only key object. * @throws IgniteCheckedException If failed. */ - private void readFullRow(CacheObjectContext coctx, ByteBuffer buf, boolean keyOnly) throws IgniteCheckedException { - key = coctx.processor().toKeyCacheObject(coctx, buf); + private void readFullRow(CacheObjectContext coctx, long buf, boolean keyOnly) throws IgniteCheckedException { + int off = 0; + + int len = PageUtils.getInt(buf, off); + off += 4; + + if (len == 0) + key = null; + else { + byte[] bytes = PageUtils.getBytes(buf, off, len); + off += len; + + byte type = PageUtils.getByte(buf, off); + off++; + + key = coctx.processor().toKeyCacheObject(coctx, type, bytes); + } if (keyOnly) { assert key != null: "key"; @@ -188,9 +211,26 @@ public class CacheDataRowAdapter implements CacheDataRow { return; } - val = coctx.processor().toCacheObject(coctx, buf); - ver = CacheVersionIO.read(buf, false); - expireTime = buf.getLong(); + len = PageUtils.getInt(buf, off); + off += 4; + + if (len == 0) + val = null; + else { + byte[] bytes = PageUtils.getBytes(buf, off, len); + off += len; + + byte type = PageUtils.getByte(buf, off); + off++; + + val = coctx.processor().toCacheObject(coctx, type, bytes); + } + + ver = CacheVersionIO.read(buf + off, false); + + off += CacheVersionIO.size(ver, false); + + expireTime = PageUtils.getLong(buf, off); assert isReady(): "ready"; } http://git-wip-us.apache.org/repos/asf/ignite/blob/664ceac5/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/DataStructure.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/DataStructure.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/DataStructure.java index 26df029..ce5422f 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/DataStructure.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/DataStructure.java @@ -171,6 +171,13 @@ public abstract class DataStructure implements PageLockListener { PageHandler.readUnlock(page, buf, this); } + /** + * @return Page size. + */ + protected final int pageSize() { + return pageMem.pageSize(); + } + /** {@inheritDoc} */ @Override public void onBeforeWriteLock(Page page) { // No-op. http://git-wip-us.apache.org/repos/asf/ignite/blob/664ceac5/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/MetadataStorage.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/MetadataStorage.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/MetadataStorage.java index 26151ac..b19d03d 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/MetadataStorage.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/MetadataStorage.java @@ -17,13 +17,13 @@ package org.apache.ignite.internal.processors.cache.database; -import java.nio.ByteBuffer; import java.nio.charset.StandardCharsets; import java.util.concurrent.atomic.AtomicLong; import org.apache.ignite.IgniteCheckedException; import org.apache.ignite.IgniteException; import org.apache.ignite.internal.pagemem.FullPageId; import org.apache.ignite.internal.pagemem.PageMemory; +import org.apache.ignite.internal.pagemem.PageUtils; import org.apache.ignite.internal.pagemem.wal.IgniteWriteAheadLogManager; import org.apache.ignite.internal.processors.cache.database.tree.BPlusTree; import org.apache.ignite.internal.processors.cache.database.tree.io.BPlusIO; @@ -31,6 +31,7 @@ import org.apache.ignite.internal.processors.cache.database.tree.io.BPlusInnerIO import org.apache.ignite.internal.processors.cache.database.tree.io.BPlusLeafIO; import org.apache.ignite.internal.processors.cache.database.tree.io.IOVersions; import org.apache.ignite.internal.processors.cache.database.tree.reuse.ReuseList; +import org.apache.ignite.internal.processors.cache.database.tree.util.PageHandler; import org.apache.ignite.internal.util.typedef.internal.U; /** @@ -190,19 +191,19 @@ public class MetadataStorage implements MetaStore { } /** {@inheritDoc} */ - @Override protected int compare(final BPlusIO<IndexItem> io, final ByteBuffer buf, final int idx, + @Override protected int compare(final BPlusIO<IndexItem> io, final long buf, final int idx, final IndexItem row) throws IgniteCheckedException { final int off = ((IndexIO)io).getOffset(idx); int shift = 0; // Compare index names. - final byte len = buf.get(off + shift); + final byte len = PageUtils.getByte(off, shift); shift += BYTE_LEN; for (int i = 0; i < len && i < row.idxName.length; i++) { - final int cmp = Byte.compare(buf.get(off + i + shift), row.idxName[i]); + final int cmp = Byte.compare(PageUtils.getByte(off, i + shift), row.idxName[i]); if (cmp != 0) return cmp; @@ -212,7 +213,7 @@ public class MetadataStorage implements MetaStore { } /** {@inheritDoc} */ - @Override protected IndexItem getRow(final BPlusIO<IndexItem> io, final ByteBuffer buf, + @Override protected IndexItem getRow(final BPlusIO<IndexItem> io, final long buf, final int idx) throws IgniteCheckedException { return readRow(buf, ((IndexIO)io).getOffset(idx)); } @@ -251,27 +252,18 @@ public class MetadataStorage implements MetaStore { * @param row Row to store. */ private static void storeRow( - final ByteBuffer buf, + final long buf, final int off, final IndexItem row ) { - int origPos = buf.position(); + // Index name length. + PageUtils.putByte(buf, off, (byte)row.idxName.length); - try { - buf.position(off); - - // Index name length. - buf.put((byte)row.idxName.length); - - // Index name. - buf.put(row.idxName); + // Index name. + PageUtils.putBytes(buf, off + 1, row.idxName); - // Page ID. - buf.putLong(row.pageId); - } - finally { - buf.position(origPos); - } + // Page ID. + PageUtils.putLong(buf, off + 1 + row.idxName.length, row.pageId); } /** @@ -283,39 +275,20 @@ public class MetadataStorage implements MetaStore { * @param srcOff Src buf offset. */ private static void storeRow( - final ByteBuffer dst, + final long dst, final int dstOff, - final ByteBuffer src, + final long src, final int srcOff ) { - int srcOrigPos = src.position(); - int dstOrigPos = dst.position(); - - try { - src.position(srcOff); - dst.position(dstOff); - - // Index name length. - final byte len = src.get(); - - dst.put(len); - - int lim = src.limit(); + // Index name length. + final byte len = PageUtils.getByte(src, srcOff); - src.limit(src.position() + len); + PageUtils.putByte(dst, dstOff, len); - // Index name. - dst.put(src); + PageHandler.copyMemory(src, srcOff + 1, dst, dstOff + 1, len); - src.limit(lim); - - // Page ID. - dst.putLong(src.getLong()); - } - finally { - src.position(srcOrigPos); - dst.position(dstOrigPos); - } + // Page ID. + PageUtils.putLong(dst, dstOff + 1 + len, PageUtils.getLong(src, srcOff + 1 + len)); } /** @@ -325,28 +298,17 @@ public class MetadataStorage implements MetaStore { * @param off Offset in buf. * @return Read row. */ - private static IndexItem readRow(final ByteBuffer buf, final int off) { - int origOff = buf.position(); - - try { - buf.position(off); + private static IndexItem readRow(final long buf, final int off) { + // Index name length. + final int len = PageUtils.getByte(buf, 0) & 0xFF; - // Index name length. - final int len = buf.get() & 0xFF; + // Index name. + final byte[] idxName = PageUtils.getBytes(buf, 1, len); - // Index name. - final byte[] idxName = new byte[len]; + // Page ID. + final long pageId = PageUtils.getLong(buf, off + 1 + len); - buf.get(idxName); - - // Page ID. - final long pageId = buf.getLong(); - - return new IndexItem(idxName, pageId); - } - finally { - buf.position(origOff); - } + return new IndexItem(idxName, pageId); } /** @@ -378,19 +340,19 @@ public class MetadataStorage implements MetaStore { } /** {@inheritDoc} */ - @Override public void storeByOffset(ByteBuffer buf, int off, IndexItem row) throws IgniteCheckedException { + @Override public void storeByOffset(long buf, int off, IndexItem row) throws IgniteCheckedException { storeRow(buf, off, row); } /** {@inheritDoc} */ - @Override public void store(final ByteBuffer dst, final int dstIdx, final BPlusIO<IndexItem> srcIo, - final ByteBuffer src, + @Override public void store(final long dst, final int dstIdx, final BPlusIO<IndexItem> srcIo, + final long src, final int srcIdx) throws IgniteCheckedException { storeRow(dst, offset(dstIdx), src, ((IndexIO)srcIo).getOffset(srcIdx)); } /** {@inheritDoc} */ - @Override public IndexItem getLookupRow(final BPlusTree<IndexItem, ?> tree, final ByteBuffer buf, + @Override public IndexItem getLookupRow(final BPlusTree<IndexItem, ?> tree, final long buf, final int idx) throws IgniteCheckedException { return readRow(buf, offset(idx)); } @@ -419,19 +381,22 @@ public class MetadataStorage implements MetaStore { } /** {@inheritDoc} */ - @Override public void storeByOffset(ByteBuffer buf, int off, IndexItem row) throws IgniteCheckedException { + @Override public void storeByOffset(long buf, int off, IndexItem row) throws IgniteCheckedException { storeRow(buf, off, row); } /** {@inheritDoc} */ - @Override public void store(final ByteBuffer dst, final int dstIdx, final BPlusIO<IndexItem> srcIo, - final ByteBuffer src, + @Override public void store(final long dst, + final int dstIdx, + final BPlusIO<IndexItem> srcIo, + final long src, final int srcIdx) throws IgniteCheckedException { storeRow(dst, offset(dstIdx), src, ((IndexIO)srcIo).getOffset(srcIdx)); } /** {@inheritDoc} */ - @Override public IndexItem getLookupRow(final BPlusTree<IndexItem, ?> tree, final ByteBuffer buf, + @Override public IndexItem getLookupRow(final BPlusTree<IndexItem, ?> tree, + final long buf, final int idx) throws IgniteCheckedException { return readRow(buf, offset(idx)); } http://git-wip-us.apache.org/repos/asf/ignite/blob/664ceac5/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/freelist/FreeListImpl.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/freelist/FreeListImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/freelist/FreeListImpl.java index 1d2524d..c40656e 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/freelist/FreeListImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/freelist/FreeListImpl.java @@ -17,13 +17,13 @@ package org.apache.ignite.internal.processors.cache.database.freelist; -import java.nio.ByteBuffer; import java.util.concurrent.atomic.AtomicReferenceArray; import org.apache.ignite.IgniteCheckedException; import org.apache.ignite.internal.pagemem.Page; import org.apache.ignite.internal.pagemem.PageIdAllocator; import org.apache.ignite.internal.pagemem.PageIdUtils; import org.apache.ignite.internal.pagemem.PageMemory; +import org.apache.ignite.internal.pagemem.PageUtils; import org.apache.ignite.internal.pagemem.wal.IgniteWriteAheadLogManager; import org.apache.ignite.internal.pagemem.wal.record.delta.DataPageInsertFragmentRecord; import org.apache.ignite.internal.pagemem.wal.record.delta.DataPageInsertRecord; @@ -31,6 +31,7 @@ import org.apache.ignite.internal.pagemem.wal.record.delta.DataPageRemoveRecord; import org.apache.ignite.internal.processors.cache.database.CacheDataRow; import org.apache.ignite.internal.processors.cache.database.tree.io.CacheVersionIO; import org.apache.ignite.internal.processors.cache.database.tree.io.DataPageIO; +import org.apache.ignite.internal.processors.cache.database.tree.io.DataPagePayload; import org.apache.ignite.internal.processors.cache.database.tree.io.PageIO; import org.apache.ignite.internal.processors.cache.database.tree.reuse.ReuseBag; import org.apache.ignite.internal.processors.cache.database.tree.reuse.ReuseList; @@ -114,19 +115,17 @@ public class FreeListImpl extends PagesList implements FreeList, ReuseList { CacheDataRow row, int rowSize ) throws IgniteCheckedException { - // TODO: context parameter. - io.addRow(buf, row, rowSize); + io.addRow(buf, row, rowSize, pageSize()); if (isWalDeltaRecordNeeded(wal, page)) { // TODO This record must contain only a reference to a logical WAL record with the actual data. byte[] payload = new byte[rowSize]; - io.setPositionAndLimitOnPayload(buf, PageIdUtils.itemId(row.link())); + DataPagePayload data = io.readPayload(buf, PageIdUtils.itemId(row.link()), pageSize()); - assert buf.remaining() == rowSize; + assert data.payloadSize() == rowSize; - buf.get(payload); - buf.position(0); + PageUtils.getBytes(buf, data.offset(), payload, 0, rowSize); wal.log(new DataPageInsertRecord( cacheId, @@ -158,7 +157,7 @@ public class FreeListImpl extends PagesList implements FreeList, ReuseList { // Read last link before the fragment write, because it will be updated there. long lastLink = row.link(); - int payloadSize = io.addRowFragment(buf, row, written, rowSize); + int payloadSize = io.addRowFragment(buf, row, written, rowSize, pageSize()); assert payloadSize > 0: payloadSize; @@ -166,9 +165,9 @@ public class FreeListImpl extends PagesList implements FreeList, ReuseList { // TODO This record must contain only a reference to a logical WAL record with the actual data. byte[] payload = new byte[payloadSize]; - io.setPositionAndLimitOnPayload(buf, PageIdUtils.itemId(row.link())); - buf.get(payload); - buf.position(0); + DataPagePayload data = io.readPayload(buf, PageIdUtils.itemId(row.link()), pageSize()); + + PageUtils.getBytes(buf, data.offset(), payload, 0, payloadSize); wal.log(new DataPageInsertFragmentRecord(cacheId, page.id(), payload, lastLink)); } @@ -187,7 +186,7 @@ public class FreeListImpl extends PagesList implements FreeList, ReuseList { assert oldFreeSpace >= 0: oldFreeSpace; - long nextLink = io.removeRow(buf, itemId); + long nextLink = io.removeRow(buf, itemId, pageSize()); if (isWalDeltaRecordNeeded(wal, page)) wal.log(new DataPageRemoveRecord(cacheId, page.id(), itemId)); http://git-wip-us.apache.org/repos/asf/ignite/blob/664ceac5/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/freelist/PagesList.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/freelist/PagesList.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/freelist/PagesList.java index 8311b65..91f2ba5 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/freelist/PagesList.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/freelist/PagesList.java @@ -229,7 +229,7 @@ public abstract class PagesList extends DataStructure { curIo = PagesListMetaIO.VERSIONS.latest(); - curIo.initNewPage(curBuf, nextPageId); + curIo.initNewPage(curBuf, nextPageId, pageSize()); } else { releaseAndClose(curPage, curBuf); @@ -321,7 +321,7 @@ public abstract class PagesList extends DataStructure { private void setupNextPage(PagesListNodeIO io, long prevId, long prev, long nextId, long next) { assert io.getNextId(prev) == 0L; - io.initNewPage(next, nextId); + io.initNewPage(next, nextId, pageSize()); io.setPreviousId(next, prevId); io.setNextId(prev, nextId); @@ -558,7 +558,7 @@ public abstract class PagesList extends DataStructure { long dataPageId = dataPage.id(); - int idx = io.addPage(pageMem.pageSize(), buf, dataPageId); + int idx = io.addPage(buf, dataPageId, pageSize()); if (idx == -1) handlePageFull(pageId, page, buf, io, dataPage, dataPageBuf, bucket); @@ -637,7 +637,7 @@ public abstract class PagesList extends DataStructure { if (isWalDeltaRecordNeeded(wal, page)) wal.log(new PagesListSetNextRecord(cacheId, pageId, nextId)); - int idx = io.addPage(pageMem.pageSize(), nextBuf, dataPageId); + int idx = io.addPage(nextBuf, dataPageId, pageSize()); // Here we should never write full page, because it is known to be new. next.fullPageWalRecordPolicy(FALSE); @@ -700,7 +700,7 @@ public abstract class PagesList extends DataStructure { try { while ((nextId = bag.pollFreePage()) != 0L) { - int idx = io.addPage(pageMem.pageSize(), prevBuf, nextId); + int idx = io.addPage(prevBuf, nextId, pageSize()); if (idx == -1) { // Attempt to add page failed: the node page is full. try (Page next = page(nextId)) { @@ -884,7 +884,7 @@ public abstract class PagesList extends DataStructure { PageIO initIo = initIoVers.latest(); - initIo.initNewPage(tailBuf, tailId); + initIo.initNewPage(tailBuf, tailId, pageSize()); if (isWalDeltaRecordNeeded(wal, tail)) { wal.log(new InitNewPageRecord(cacheId, tail.id(), initIo.getType(), http://git-wip-us.apache.org/repos/asf/ignite/blob/664ceac5/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/freelist/io/PagesListMetaIO.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/freelist/io/PagesListMetaIO.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/freelist/io/PagesListMetaIO.java index 6ac8cde..67e2667 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/freelist/io/PagesListMetaIO.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/freelist/io/PagesListMetaIO.java @@ -53,8 +53,8 @@ public class PagesListMetaIO extends PageIO { } /** {@inheritDoc} */ - @Override public void initNewPage(long buf, long pageId) { - super.initNewPage(buf, pageId); + @Override public void initNewPage(long buf, long pageId, int pageSize) { + super.initNewPage(buf, pageId, pageSize); setCount(buf, 0); setNextMetaPageId(buf, 0L); http://git-wip-us.apache.org/repos/asf/ignite/blob/664ceac5/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/freelist/io/PagesListNodeIO.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/freelist/io/PagesListNodeIO.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/freelist/io/PagesListNodeIO.java index c92e4a9..ad48bc1 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/freelist/io/PagesListNodeIO.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/freelist/io/PagesListNodeIO.java @@ -52,8 +52,8 @@ public class PagesListNodeIO extends PageIO { } /** {@inheritDoc} */ - @Override public void initNewPage(long buf, long pageId) { - super.initNewPage(buf, pageId); + @Override public void initNewPage(long buf, long pageId, int pageSize) { + super.initNewPage(buf, pageId, pageSize); setEmpty(buf); @@ -163,9 +163,10 @@ public class PagesListNodeIO extends PageIO { * * @param buf Page buffer. * @param pageId Page ID. + * @param pageSize Page size. * @return Total number of items in this page. */ - public int addPage(int pageSize, long buf, long pageId) { + public int addPage(long buf, long pageId, int pageSize) { int cnt = getCount(buf); if (cnt == getCapacity(pageSize)) http://git-wip-us.apache.org/repos/asf/ignite/blob/664ceac5/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 b8a1004..6eb7fe1 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 @@ -408,7 +408,7 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure { // We may need to replace inner key or want to merge this leaf with sibling after the remove -> keep lock. if (needReplaceInner || // We need to make sure that we have back or forward to be able to merge. - ((r.fwdId != 0 || r.backId != 0) && mayMerge(cnt - 1, io.getMaxCount(pageMem.pageSize(), buf)))) { + ((r.fwdId != 0 || r.backId != 0) && mayMerge(cnt - 1, io.getMaxCount(buf, pageSize())))) { // If we have backId then we've already locked back page, nothing to do here. if (r.fwdId != 0 && r.backId == 0) { Result res = r.lockForward(0); @@ -527,7 +527,7 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure { assert lvl == io.getRootLevel(buf); // Can drop only root. - io.cutRoot(pageMem.pageSize(), buf); + io.cutRoot(pageSize(), buf); if (needWalDeltaRecord(meta)) wal.log(new MetaPageCutRootRecord(cacheId, meta.id())); @@ -547,7 +547,7 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure { assert lvl == io.getLevelsCount(buf); - io.addRoot(pageMem.pageSize(), buf, rootPageId); + io.addRoot(pageSize(), buf, rootPageId); if (needWalDeltaRecord(meta)) wal.log(new MetaPageAddRootRecord(cacheId, meta.id(), rootPageId)); @@ -565,7 +565,7 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure { // Safe cast because we should never recycle meta page until the tree is destroyed. BPlusMetaIO io = (BPlusMetaIO)iox; - io.initRoot(pageMem.pageSize(), buf, rootId); + io.initRoot(pageSize(), buf, rootId); if (needWalDeltaRecord(meta)) wal.log(new MetaPageInitRootRecord(cacheId, meta.id(), rootId)); @@ -1721,7 +1721,7 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure { } // Update forward page. - io.splitForwardPage(buf, fwdId, fwdBuf, mid, cnt); + io.splitForwardPage(buf, fwdId, fwdBuf, mid, cnt, pageSize()); // TODO GG-11640 log a correct forward page record. fwd.fullPageWalRecordPolicy(Boolean.TRUE); @@ -2184,7 +2184,7 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure { */ private L insert(Page page, BPlusIO<L> io, long buf, int idx, int lvl) throws IgniteCheckedException { - int maxCnt = io.getMaxCount(pageMem.pageSize(), buf); + int maxCnt = io.getMaxCount(buf, pageSize()); int cnt = io.getCount(buf); if (cnt == maxCnt) // Need to split page. @@ -2284,7 +2284,7 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure { long pageId = PageIO.getPageId(buf); - inner(io).initNewRoot(newRootBuf, newRootId, pageId, moveUpRow, null, fwdId); + inner(io).initNewRoot(newRootBuf, newRootId, pageId, moveUpRow, null, fwdId, pageSize()); if (needWalDeltaRecord(newRoot)) wal.log(new NewRootInitRecord<>(cacheId, newRoot.id(), newRootId, @@ -2624,7 +2624,7 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure { // Exit: we are done. } else if (tail.sibling != null && - tail.getCount() + tail.sibling.getCount() < tail.io.getMaxCount(pageMem.pageSize(), tail.buf)) { + tail.getCount() + tail.sibling.getCount() < tail.io.getMaxCount(tail.buf, pageSize())) { // Release everything lower than tail, we've already merged this path. doReleaseTail(tail.down); tail.down = null; @@ -2939,7 +2939,7 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure { boolean emptyBranch = needMergeEmptyBranch == TRUE || needMergeEmptyBranch == READY; - if (!left.io.merge(pageMem.pageSize(), prnt.io, prnt.buf, prntIdx, left.buf, right.buf, emptyBranch)) + if (!left.io.merge(prnt.io, prnt.buf, prntIdx, left.buf, right.buf, emptyBranch, pageSize())) return false; // Invalidate indexes after successful merge.