Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id 936D8200BFE for ; Mon, 16 Jan 2017 14:39:03 +0100 (CET) Received: by cust-asf.ponee.io (Postfix) id 91ED8160B22; Mon, 16 Jan 2017 13:39:03 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id 69D8A160B30 for ; Mon, 16 Jan 2017 14:39:01 +0100 (CET) Received: (qmail 24575 invoked by uid 500); 16 Jan 2017 13:39:00 -0000 Mailing-List: contact commits-help@ignite.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@ignite.apache.org Delivered-To: mailing list commits@ignite.apache.org Received: (qmail 24524 invoked by uid 99); 16 Jan 2017 13:39:00 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 16 Jan 2017 13:39:00 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id 6D16ADFC16; Mon, 16 Jan 2017 13:39:00 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: sboikov@apache.org To: commits@ignite.apache.org Date: Mon, 16 Jan 2017 13:39:01 -0000 Message-Id: <4b3821e1fc954e15b36d7351daf7649a@git.apache.org> In-Reply-To: References: X-Mailer: ASF-Git Admin Mailer Subject: [2/2] ignite git commit: gg-11810 archived-at: Mon, 16 Jan 2017 13:39:03 -0000 gg-11810 Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/fa28a2e5 Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/fa28a2e5 Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/fa28a2e5 Branch: refs/heads/ignite-gg-11810 Commit: fa28a2e5c78345ede3ac1aaa53d070e1b4ac4808 Parents: e81cfdb Author: sboikov Authored: Mon Jan 16 13:24:36 2017 +0300 Committer: sboikov Committed: Mon Jan 16 16:23:27 2017 +0300 ---------------------------------------------------------------------- .../delta/DataPageInsertFragmentRecord.java | 5 +- .../wal/record/delta/DataPageInsertRecord.java | 5 +- .../wal/record/delta/DataPageRemoveRecord.java | 5 +- .../delta/DataPageSetFreeListPageRecord.java | 3 +- .../wal/record/delta/FixCountRecord.java | 3 +- .../record/delta/FixLeftmostChildRecord.java | 3 +- .../pagemem/wal/record/delta/FixRemoveId.java | 3 +- .../wal/record/delta/InitNewPageRecord.java | 5 +- .../wal/record/delta/InnerReplaceRecord.java | 3 +- .../pagemem/wal/record/delta/InsertRecord.java | 3 +- .../pagemem/wal/record/delta/MergeRecord.java | 3 +- .../wal/record/delta/MetaPageAddRootRecord.java | 5 +- .../wal/record/delta/MetaPageCutRootRecord.java | 5 +- .../wal/record/delta/MetaPageInitRecord.java | 5 +- .../record/delta/MetaPageInitRootRecord.java | 5 +- .../delta/MetaPageUpdateLastAllocatedIndex.java | 3 +- ...aPageUpdateLastSuccessfulFullSnapshotId.java | 3 +- .../MetaPageUpdateLastSuccessfulSnapshotId.java | 3 +- .../delta/MetaPageUpdateNextSnapshotId.java | 3 +- .../MetaPageUpdatePartitionDataRecord.java | 3 +- .../wal/record/delta/NewRootInitRecord.java | 5 +- .../wal/record/delta/PageDeltaRecord.java | 6 +- .../delta/PageListMetaResetCountRecord.java | 3 +- .../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 | 3 +- .../record/delta/SplitExistingPageRecord.java | 3 +- .../record/delta/SplitForwardPageRecord.java | 3 +- .../record/delta/TrackingPageDeltaRecord.java | 9 ++- .../cache/IgniteCacheOffheapManagerImpl.java | 44 ++++++++++ .../cache/database/MetadataStorage.java | 42 ++++++++++ .../cache/database/tree/io/BPlusIO.java | 12 +++ .../cache/database/tree/io/PageIO.java | 44 +++++++++- .../cache/database/tree/io/PageMetaIO.java | 9 +++ .../cache/database/tree/io/TrackingPageIO.java | 84 ++++++++++---------- .../cache/database/tree/util/PageHandler.java | 36 +++++++++ .../apache/ignite/internal/util/GridUnsafe.java | 12 +++ .../database/tree/io/TrackingPageIOTest.java | 69 ++++++++-------- .../processors/database/BPlusTreeSelfTest.java | 11 +++ .../query/h2/database/io/H2InnerIO.java | 10 +++ .../query/h2/database/io/H2LeafIO.java | 10 +++ 46 files changed, 392 insertions(+), 126 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/fa28a2e5/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 919bf04..eeaabd1 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 @@ -18,6 +18,7 @@ package org.apache.ignite.internal.pagemem.wal.record.delta; import org.apache.ignite.IgniteCheckedException; +import org.apache.ignite.internal.pagemem.PageMemory; import org.apache.ignite.internal.processors.cache.database.tree.io.DataPageIO; /** @@ -49,10 +50,10 @@ public class DataPageInsertFragmentRecord extends PageDeltaRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(long pageAddr, int pageSize) throws IgniteCheckedException { + @Override public void applyDelta(PageMemory pageMem, long pageAddr) throws IgniteCheckedException { DataPageIO io = DataPageIO.VERSIONS.forPage(pageAddr); - io.addRowFragment(pageAddr, payload, lastLink, pageSize); + io.addRowFragment(pageAddr, payload, lastLink, pageMem.pageSize()); } /** {@inheritDoc} */ http://git-wip-us.apache.org/repos/asf/ignite/blob/fa28a2e5/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 95bf9d9..f23d57a 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 @@ -18,6 +18,7 @@ package org.apache.ignite.internal.pagemem.wal.record.delta; import org.apache.ignite.IgniteCheckedException; +import org.apache.ignite.internal.pagemem.PageMemory; import org.apache.ignite.internal.processors.cache.database.tree.io.DataPageIO; /** @@ -50,12 +51,12 @@ public class DataPageInsertRecord extends PageDeltaRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(long pageAddr, int pageSize) throws IgniteCheckedException { + @Override public void applyDelta(PageMemory pageMem, long pageAddr) throws IgniteCheckedException { assert payload != null; DataPageIO io = DataPageIO.VERSIONS.forPage(pageAddr); - io.addRow(pageAddr, payload, pageSize); + io.addRow(pageAddr, payload, pageMem.pageSize()); } /** {@inheritDoc} */ http://git-wip-us.apache.org/repos/asf/ignite/blob/fa28a2e5/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 d0c9572..17c7fe8 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 @@ -18,6 +18,7 @@ package org.apache.ignite.internal.pagemem.wal.record.delta; import org.apache.ignite.IgniteCheckedException; +import org.apache.ignite.internal.pagemem.PageMemory; import org.apache.ignite.internal.processors.cache.database.tree.io.DataPageIO; import org.apache.ignite.internal.util.typedef.internal.S; @@ -47,11 +48,11 @@ public class DataPageRemoveRecord extends PageDeltaRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(long pageAddr, int pageSize) + @Override public void applyDelta(PageMemory pageMem, long pageAddr) throws IgniteCheckedException { DataPageIO io = DataPageIO.VERSIONS.forPage(pageAddr); - io.removeRow(pageAddr, itemId, pageSize); + io.removeRow(pageAddr, itemId, pageMem.pageSize()); } /** {@inheritDoc} */ http://git-wip-us.apache.org/repos/asf/ignite/blob/fa28a2e5/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 b0bb90e..c835052 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 @@ -18,6 +18,7 @@ package org.apache.ignite.internal.pagemem.wal.record.delta; import org.apache.ignite.IgniteCheckedException; +import org.apache.ignite.internal.pagemem.PageMemory; import org.apache.ignite.internal.processors.cache.database.tree.io.DataPageIO; import static org.apache.ignite.internal.pagemem.wal.record.WALRecord.RecordType.DATA_PAGE_SET_FREE_LIST_PAGE; @@ -48,7 +49,7 @@ public class DataPageSetFreeListPageRecord extends PageDeltaRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(long pageAddr, int pageSize) throws IgniteCheckedException { + @Override public void applyDelta(PageMemory pageMem, long pageAddr) throws IgniteCheckedException { DataPageIO io = DataPageIO.VERSIONS.forPage(pageAddr); io.setFreeListPageId(pageAddr, freeListPage); http://git-wip-us.apache.org/repos/asf/ignite/blob/fa28a2e5/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 aa23099..c727710 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 @@ -18,6 +18,7 @@ package org.apache.ignite.internal.pagemem.wal.record.delta; import org.apache.ignite.IgniteCheckedException; +import org.apache.ignite.internal.pagemem.PageMemory; import org.apache.ignite.internal.processors.cache.database.tree.io.BPlusIO; import org.apache.ignite.internal.processors.cache.database.tree.io.PageIO; @@ -39,7 +40,7 @@ public class FixCountRecord extends PageDeltaRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(long pageAddr, int pageSize) throws IgniteCheckedException { + @Override public void applyDelta(PageMemory pageMem, long pageAddr) throws IgniteCheckedException { BPlusIO io = PageIO.getBPlusIO(pageAddr); io.setCount(pageAddr, cnt); http://git-wip-us.apache.org/repos/asf/ignite/blob/fa28a2e5/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 81a8d01..94155c9 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 @@ -18,6 +18,7 @@ package org.apache.ignite.internal.pagemem.wal.record.delta; import org.apache.ignite.IgniteCheckedException; +import org.apache.ignite.internal.pagemem.PageMemory; import org.apache.ignite.internal.processors.cache.database.tree.io.BPlusInnerIO; import org.apache.ignite.internal.processors.cache.database.tree.io.PageIO; @@ -40,7 +41,7 @@ public class FixLeftmostChildRecord extends PageDeltaRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(long pageAddr, int pageSize) throws IgniteCheckedException { + @Override public void applyDelta(PageMemory pageMem, long pageAddr) throws IgniteCheckedException { BPlusInnerIO io = PageIO.getBPlusIO(pageAddr); io.setLeft(pageAddr, 0, rightId); http://git-wip-us.apache.org/repos/asf/ignite/blob/fa28a2e5/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 b2284e5..b9900e1 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 @@ -18,6 +18,7 @@ package org.apache.ignite.internal.pagemem.wal.record.delta; import org.apache.ignite.IgniteCheckedException; +import org.apache.ignite.internal.pagemem.PageMemory; import org.apache.ignite.internal.processors.cache.database.tree.io.BPlusIO; import org.apache.ignite.internal.processors.cache.database.tree.io.PageIO; @@ -40,7 +41,7 @@ public class FixRemoveId extends PageDeltaRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(long pageAddr, int pageSize) + @Override public void applyDelta(PageMemory pageMem, long pageAddr) throws IgniteCheckedException { BPlusIO io = PageIO.getBPlusIO(pageAddr); http://git-wip-us.apache.org/repos/asf/ignite/blob/fa28a2e5/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 d1fd660..f5607dd 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 @@ -18,6 +18,7 @@ package org.apache.ignite.internal.pagemem.wal.record.delta; import org.apache.ignite.IgniteCheckedException; +import org.apache.ignite.internal.pagemem.PageMemory; import org.apache.ignite.internal.processors.cache.database.tree.io.PageIO; import org.apache.ignite.internal.util.tostring.GridToStringExclude; import org.apache.ignite.internal.util.typedef.internal.S; @@ -53,10 +54,10 @@ public class InitNewPageRecord extends PageDeltaRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(long pageAddr, int pageSize) throws IgniteCheckedException { + @Override public void applyDelta(PageMemory pageMem, long pageAddr) throws IgniteCheckedException { PageIO io = PageIO.getPageIO(ioType, ioVer); - io.initNewPage(pageAddr, newPageId, pageSize); + io.initNewPage(pageAddr, newPageId, pageMem.pageSize()); } /** {@inheritDoc} */ http://git-wip-us.apache.org/repos/asf/ignite/blob/fa28a2e5/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 26e2499..35d23c1 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 @@ -19,6 +19,7 @@ package org.apache.ignite.internal.pagemem.wal.record.delta; import org.apache.ignite.IgniteCheckedException; import org.apache.ignite.IgniteException; +import org.apache.ignite.internal.pagemem.PageMemory; /** * Inner replace on remove. @@ -56,7 +57,7 @@ public class InnerReplaceRecord extends PageDeltaRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(long pageAddr, int pageSize) throws IgniteCheckedException { + @Override public void applyDelta(PageMemory pageMem, long pageAddr) throws IgniteCheckedException { throw new IgniteCheckedException("Inner replace record should not be logged."); } http://git-wip-us.apache.org/repos/asf/ignite/blob/fa28a2e5/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 27ad5c1..fa598b2 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 @@ -19,6 +19,7 @@ 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; import org.apache.ignite.internal.util.tostring.GridToStringExclude; import org.apache.ignite.internal.util.typedef.internal.S; @@ -72,7 +73,7 @@ public class InsertRecord extends PageDeltaRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(long pageAddr, int pageSize) throws IgniteCheckedException { + @Override public void applyDelta(PageMemory pageMem, long pageAddr) throws IgniteCheckedException { io.insert(pageAddr, idx, row, rowBytes, rightId); } http://git-wip-us.apache.org/repos/asf/ignite/blob/fa28a2e5/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 5932ee5..84770d5 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 @@ -20,6 +20,7 @@ package org.apache.ignite.internal.pagemem.wal.record.delta; import java.nio.ByteBuffer; import org.apache.ignite.IgniteCheckedException; import org.apache.ignite.IgniteException; +import org.apache.ignite.internal.pagemem.PageMemory; import org.apache.ignite.internal.util.tostring.GridToStringExclude; import org.apache.ignite.internal.util.typedef.internal.S; import org.apache.ignite.internal.util.typedef.internal.U; @@ -63,7 +64,7 @@ public class MergeRecord extends PageDeltaRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(long pageAddr, int pageSize) throws IgniteCheckedException { + @Override public void applyDelta(PageMemory pageMem, long pageAddr) throws IgniteCheckedException { throw new IgniteCheckedException("Merge record should not be logged."); } http://git-wip-us.apache.org/repos/asf/ignite/blob/fa28a2e5/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 db82bcf..176df33 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 @@ -18,6 +18,7 @@ package org.apache.ignite.internal.pagemem.wal.record.delta; import org.apache.ignite.IgniteCheckedException; +import org.apache.ignite.internal.pagemem.PageMemory; import org.apache.ignite.internal.processors.cache.database.tree.io.BPlusMetaIO; /** @@ -39,10 +40,10 @@ public class MetaPageAddRootRecord extends PageDeltaRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(long pageAddr, int pageSize) throws IgniteCheckedException { + @Override public void applyDelta(PageMemory pageMem, long pageAddr) throws IgniteCheckedException { BPlusMetaIO io = BPlusMetaIO.VERSIONS.forPage(pageAddr); - io.addRoot(pageAddr, rootId, pageSize); + io.addRoot(pageAddr, rootId, pageMem.pageSize()); } /** {@inheritDoc} */ http://git-wip-us.apache.org/repos/asf/ignite/blob/fa28a2e5/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 34d08c9..50ccddc 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 @@ -19,6 +19,7 @@ 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.BPlusMetaIO; /** @@ -34,10 +35,10 @@ public class MetaPageCutRootRecord extends PageDeltaRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(long pageAddr, int pageSize) throws IgniteCheckedException { + @Override public void applyDelta(PageMemory pageMem, long pageAddr) throws IgniteCheckedException { BPlusMetaIO io = BPlusMetaIO.VERSIONS.forPage(pageAddr); - io.cutRoot(pageAddr, pageSize); + io.cutRoot(pageAddr, pageMem.pageSize()); } /** {@inheritDoc} */ http://git-wip-us.apache.org/repos/asf/ignite/blob/fa28a2e5/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 f5d3d06..3d351a2 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 @@ -18,6 +18,7 @@ package org.apache.ignite.internal.pagemem.wal.record.delta; import org.apache.ignite.IgniteCheckedException; +import org.apache.ignite.internal.pagemem.PageMemory; import org.apache.ignite.internal.processors.cache.database.tree.io.PageIO; import org.apache.ignite.internal.processors.cache.database.tree.io.PageMetaIO; import org.apache.ignite.internal.processors.cache.database.tree.io.PagePartitionMetaIO; @@ -74,12 +75,12 @@ public class MetaPageInitRecord extends InitNewPageRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(long pageAddr, int pageSize) throws IgniteCheckedException { + @Override public void applyDelta(PageMemory pageMem, long pageAddr) throws IgniteCheckedException { PageMetaIO io = ioType == PageIO.T_META ? PageMetaIO.VERSIONS.forPage(pageAddr) : PagePartitionMetaIO.VERSIONS.forPage(pageAddr); - io.initNewPage(pageAddr, newPageId, pageSize); + io.initNewPage(pageAddr, newPageId, pageMem.pageSize()); io.setTreeRoot(pageAddr, treeRoot); io.setReuseListRoot(pageAddr, reuseListRoot); http://git-wip-us.apache.org/repos/asf/ignite/blob/fa28a2e5/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 1c29c8c..4d56db0 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 @@ -18,6 +18,7 @@ package org.apache.ignite.internal.pagemem.wal.record.delta; import org.apache.ignite.IgniteCheckedException; +import org.apache.ignite.internal.pagemem.PageMemory; import org.apache.ignite.internal.processors.cache.database.tree.io.BPlusMetaIO; /** @@ -39,10 +40,10 @@ public class MetaPageInitRootRecord extends PageDeltaRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(long pageAddr, int pageSize) throws IgniteCheckedException { + @Override public void applyDelta(PageMemory pageMem, long pageAddr) throws IgniteCheckedException { BPlusMetaIO io = BPlusMetaIO.VERSIONS.forPage(pageAddr); - io.initRoot(pageAddr, rootId, pageSize); + io.initRoot(pageAddr, rootId, pageMem.pageSize()); } /** {@inheritDoc} */ http://git-wip-us.apache.org/repos/asf/ignite/blob/fa28a2e5/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 fe2d55d..bd9b100 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 @@ -18,6 +18,7 @@ package org.apache.ignite.internal.pagemem.wal.record.delta; import org.apache.ignite.IgniteCheckedException; +import org.apache.ignite.internal.pagemem.PageMemory; import org.apache.ignite.internal.processors.cache.database.tree.io.PageIO; import org.apache.ignite.internal.processors.cache.database.tree.io.PageMetaIO; @@ -38,7 +39,7 @@ public class MetaPageUpdateLastAllocatedIndex extends PageDeltaRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(long pageAddr, int pageSize) throws IgniteCheckedException { + @Override public void applyDelta(PageMemory pageMem, long pageAddr) throws IgniteCheckedException { assert PageIO.getType(pageAddr) == PageIO.T_META || PageIO.getType(pageAddr) == PageIO.T_PART_META; PageMetaIO io = PageMetaIO.VERSIONS.forVersion(PageIO.getVersion(pageAddr)); http://git-wip-us.apache.org/repos/asf/ignite/blob/fa28a2e5/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/MetaPageUpdateLastSuccessfulFullSnapshotId.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/MetaPageUpdateLastSuccessfulFullSnapshotId.java b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/MetaPageUpdateLastSuccessfulFullSnapshotId.java index db213de..e322b4f 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/MetaPageUpdateLastSuccessfulFullSnapshotId.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/MetaPageUpdateLastSuccessfulFullSnapshotId.java @@ -18,6 +18,7 @@ package org.apache.ignite.internal.pagemem.wal.record.delta; import org.apache.ignite.IgniteCheckedException; +import org.apache.ignite.internal.pagemem.PageMemory; import org.apache.ignite.internal.processors.cache.database.tree.io.PageMetaIO; /** @@ -37,7 +38,7 @@ public class MetaPageUpdateLastSuccessfulFullSnapshotId extends PageDeltaRecord } /** {@inheritDoc} */ - @Override public void applyDelta(long pageAddr, int pageSize) throws IgniteCheckedException { + @Override public void applyDelta(PageMemory pageMem, long pageAddr) throws IgniteCheckedException { PageMetaIO io = PageMetaIO.VERSIONS.forPage(pageAddr); io.setLastSuccessfulFullSnapshotId(pageAddr, lastSuccessfulFullSnapshotId); http://git-wip-us.apache.org/repos/asf/ignite/blob/fa28a2e5/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/MetaPageUpdateLastSuccessfulSnapshotId.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/MetaPageUpdateLastSuccessfulSnapshotId.java b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/MetaPageUpdateLastSuccessfulSnapshotId.java index 98502a4..df9d778 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/MetaPageUpdateLastSuccessfulSnapshotId.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/MetaPageUpdateLastSuccessfulSnapshotId.java @@ -18,6 +18,7 @@ package org.apache.ignite.internal.pagemem.wal.record.delta; import org.apache.ignite.IgniteCheckedException; +import org.apache.ignite.internal.pagemem.PageMemory; import org.apache.ignite.internal.processors.cache.database.tree.io.PageMetaIO; /** @@ -41,7 +42,7 @@ public class MetaPageUpdateLastSuccessfulSnapshotId extends PageDeltaRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(long pageAddr, int pageSize) throws IgniteCheckedException { + @Override public void applyDelta(PageMemory pageMem, long pageAddr) throws IgniteCheckedException { PageMetaIO io = PageMetaIO.VERSIONS.forPage(pageAddr); io.setLastSuccessfulSnapshotId(pageAddr, lastSuccessfulSnapshotId); http://git-wip-us.apache.org/repos/asf/ignite/blob/fa28a2e5/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/MetaPageUpdateNextSnapshotId.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/MetaPageUpdateNextSnapshotId.java b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/MetaPageUpdateNextSnapshotId.java index aafda11..1403bd7 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/MetaPageUpdateNextSnapshotId.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/MetaPageUpdateNextSnapshotId.java @@ -18,6 +18,7 @@ package org.apache.ignite.internal.pagemem.wal.record.delta; import org.apache.ignite.IgniteCheckedException; +import org.apache.ignite.internal.pagemem.PageMemory; import org.apache.ignite.internal.processors.cache.database.tree.io.PageMetaIO; /** @@ -37,7 +38,7 @@ public class MetaPageUpdateNextSnapshotId extends PageDeltaRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(long pageAddr, int pageSize) throws IgniteCheckedException { + @Override public void applyDelta(PageMemory pageMem, long pageAddr) throws IgniteCheckedException { PageMetaIO io = PageMetaIO.VERSIONS.forPage(pageAddr); io.setNextSnapshotTag(pageAddr, nextSnapshotId); http://git-wip-us.apache.org/repos/asf/ignite/blob/fa28a2e5/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 ecc2c16..66efc6f 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 @@ -18,6 +18,7 @@ package org.apache.ignite.internal.pagemem.wal.record.delta; import org.apache.ignite.IgniteCheckedException; +import org.apache.ignite.internal.pagemem.PageMemory; import org.apache.ignite.internal.processors.cache.database.tree.io.PagePartitionMetaIO; /** @@ -84,7 +85,7 @@ public class MetaPageUpdatePartitionDataRecord extends PageDeltaRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(long pageAddr, int pageSize) throws IgniteCheckedException { + @Override public void applyDelta(PageMemory pageMem, long pageAddr) throws IgniteCheckedException { PagePartitionMetaIO io = PagePartitionMetaIO.VERSIONS.forPage(pageAddr); io.setUpdateCounter(pageAddr, updateCntr); http://git-wip-us.apache.org/repos/asf/ignite/blob/fa28a2e5/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 ce71ac7..26ee364 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 @@ -18,6 +18,7 @@ package org.apache.ignite.internal.pagemem.wal.record.delta; import org.apache.ignite.IgniteCheckedException; +import org.apache.ignite.internal.pagemem.PageMemory; import org.apache.ignite.internal.processors.cache.database.tree.io.BPlusInnerIO; /** @@ -73,8 +74,8 @@ public class NewRootInitRecord extends PageDeltaRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(long pageAddr, int pageSize) throws IgniteCheckedException { - io.initNewRoot(pageAddr, newRootId, leftChildId, row, rowBytes, rightChildId, pageSize); + @Override public void applyDelta(PageMemory pageMem, long pageAddr) throws IgniteCheckedException { + io.initNewRoot(pageAddr, newRootId, leftChildId, row, rowBytes, rightChildId, pageMem.pageSize()); } /** {@inheritDoc} */ http://git-wip-us.apache.org/repos/asf/ignite/blob/fa28a2e5/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 9819232..ca52bd2 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 @@ -17,8 +17,8 @@ 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.pagemem.wal.record.WALRecord; import org.apache.ignite.internal.util.tostring.GridToStringExclude; import org.apache.ignite.internal.util.typedef.internal.S; @@ -62,11 +62,11 @@ public abstract class PageDeltaRecord extends WALRecord { * Apply changes from this delta to the given page. * It is assumed that the given buffer represents page state right before this update. * + * @param pageMem Page memory. * @param pageAddr Page address. - * @param pageSize Page size. * @throws IgniteCheckedException If failed. */ - public abstract void applyDelta(long pageAddr, int pageSize) throws IgniteCheckedException; + public abstract void applyDelta(PageMemory pageMem, long pageAddr) throws IgniteCheckedException; /** {@inheritDoc} */ @Override public String toString() { http://git-wip-us.apache.org/repos/asf/ignite/blob/fa28a2e5/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/PageListMetaResetCountRecord.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/PageListMetaResetCountRecord.java b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/PageListMetaResetCountRecord.java index 2618328..16587d3 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/PageListMetaResetCountRecord.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/record/delta/PageListMetaResetCountRecord.java @@ -18,6 +18,7 @@ package org.apache.ignite.internal.pagemem.wal.record.delta; import org.apache.ignite.IgniteCheckedException; +import org.apache.ignite.internal.pagemem.PageMemory; import org.apache.ignite.internal.processors.cache.database.freelist.io.PagesListMetaIO; /** @@ -33,7 +34,7 @@ public class PageListMetaResetCountRecord extends PageDeltaRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(long pageAddr, int pageSize) throws IgniteCheckedException { + @Override public void applyDelta(PageMemory pageMem, long pageAddr) throws IgniteCheckedException { PagesListMetaIO io = PagesListMetaIO.VERSIONS.forPage(pageAddr); io.resetCount(pageAddr); http://git-wip-us.apache.org/repos/asf/ignite/blob/fa28a2e5/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 38779f1..a503b46 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 @@ -18,6 +18,7 @@ package org.apache.ignite.internal.pagemem.wal.record.delta; import org.apache.ignite.IgniteCheckedException; +import org.apache.ignite.internal.pagemem.PageMemory; import org.apache.ignite.internal.processors.cache.database.freelist.io.PagesListNodeIO; import org.apache.ignite.internal.util.tostring.GridToStringExclude; import org.apache.ignite.internal.util.typedef.internal.S; @@ -50,10 +51,10 @@ public class PagesListAddPageRecord extends PageDeltaRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(long pageAddr, int pageSize) throws IgniteCheckedException { + @Override public void applyDelta(PageMemory pageMem, long pageAddr) throws IgniteCheckedException { PagesListNodeIO io = PagesListNodeIO.VERSIONS.forPage(pageAddr); - int cnt = io.addPage(pageAddr, dataPageId, pageSize); + int cnt = io.addPage(pageAddr, dataPageId, pageMem.pageSize()); assert cnt >= 0 : cnt; } http://git-wip-us.apache.org/repos/asf/ignite/blob/fa28a2e5/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 66aea1d..b035323 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 @@ -18,6 +18,7 @@ package org.apache.ignite.internal.pagemem.wal.record.delta; import org.apache.ignite.IgniteCheckedException; +import org.apache.ignite.internal.pagemem.PageMemory; import org.apache.ignite.internal.processors.cache.database.freelist.io.PagesListNodeIO; import org.apache.ignite.internal.processors.cache.database.tree.io.PageIO; import org.apache.ignite.internal.util.tostring.GridToStringExclude; @@ -72,14 +73,14 @@ public class PagesListInitNewPageRecord extends InitNewPageRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(long pageAddr, int pageSize) throws IgniteCheckedException { + @Override public void applyDelta(PageMemory pageMem, long pageAddr) throws IgniteCheckedException { PagesListNodeIO io = PageIO.getPageIO(PageIO.T_PAGE_LIST_NODE, ioVer); - io.initNewPage(pageAddr, pageId(), pageSize); + io.initNewPage(pageAddr, pageId(), pageMem.pageSize()); io.setPreviousId(pageAddr, prevPageId); if (addDataPageId != 0L) { - int cnt = io.addPage(pageAddr, addDataPageId, pageSize); + int cnt = io.addPage(pageAddr, addDataPageId, pageMem.pageSize()); assert cnt == 0 : cnt; } http://git-wip-us.apache.org/repos/asf/ignite/blob/fa28a2e5/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 d41eb09..26f832c 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 @@ -18,6 +18,7 @@ package org.apache.ignite.internal.pagemem.wal.record.delta; import org.apache.ignite.IgniteCheckedException; +import org.apache.ignite.internal.pagemem.PageMemory; import org.apache.ignite.internal.processors.cache.database.freelist.io.PagesListNodeIO; import org.apache.ignite.internal.util.tostring.GridToStringExclude; import org.apache.ignite.internal.util.typedef.internal.S; @@ -50,7 +51,7 @@ public class PagesListRemovePageRecord extends PageDeltaRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(long pageAddr, int pageSize) throws IgniteCheckedException { + @Override public void applyDelta(PageMemory pageMem, long pageAddr) throws IgniteCheckedException { PagesListNodeIO io = PagesListNodeIO.VERSIONS.forPage(pageAddr); boolean rmvd = io.removePage(pageAddr, rmvdPageId); http://git-wip-us.apache.org/repos/asf/ignite/blob/fa28a2e5/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 62f737a..c0bed60 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 @@ -18,6 +18,7 @@ package org.apache.ignite.internal.pagemem.wal.record.delta; import org.apache.ignite.IgniteCheckedException; +import org.apache.ignite.internal.pagemem.PageMemory; import org.apache.ignite.internal.processors.cache.database.freelist.io.PagesListNodeIO; /** @@ -46,7 +47,7 @@ public class PagesListSetNextRecord extends PageDeltaRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(long pageAddr, int pageSize) throws IgniteCheckedException { + @Override public void applyDelta(PageMemory pageMem, long pageAddr) throws IgniteCheckedException { PagesListNodeIO io = PagesListNodeIO.VERSIONS.forPage(pageAddr); io.setNextId(pageAddr, nextPageId); http://git-wip-us.apache.org/repos/asf/ignite/blob/fa28a2e5/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 081bcb8..21c3ef2 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 @@ -18,6 +18,7 @@ package org.apache.ignite.internal.pagemem.wal.record.delta; import org.apache.ignite.IgniteCheckedException; +import org.apache.ignite.internal.pagemem.PageMemory; import org.apache.ignite.internal.processors.cache.database.freelist.io.PagesListNodeIO; /** @@ -46,7 +47,7 @@ public class PagesListSetPreviousRecord extends PageDeltaRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(long pageAddr, int pageSize) throws IgniteCheckedException { + @Override public void applyDelta(PageMemory pageMem, long pageAddr) throws IgniteCheckedException { PagesListNodeIO io = PagesListNodeIO.VERSIONS.forPage(pageAddr); io.setPreviousId(pageAddr, prevPageId); http://git-wip-us.apache.org/repos/asf/ignite/blob/fa28a2e5/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 6e75a5b..1737e12 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 @@ -18,6 +18,7 @@ package org.apache.ignite.internal.pagemem.wal.record.delta; import org.apache.ignite.IgniteCheckedException; +import org.apache.ignite.internal.pagemem.PageMemory; import org.apache.ignite.internal.processors.cache.database.tree.io.PageIO; /** @@ -39,7 +40,7 @@ public class RecycleRecord extends PageDeltaRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(long pageAddr, int pageSize) throws IgniteCheckedException { + @Override public void applyDelta(PageMemory pageMem, long pageAddr) throws IgniteCheckedException { PageIO.setPageId(pageAddr, newPageId); } http://git-wip-us.apache.org/repos/asf/ignite/blob/fa28a2e5/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 0a09ea0..6d278e9 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 @@ -18,6 +18,7 @@ package org.apache.ignite.internal.pagemem.wal.record.delta; import org.apache.ignite.IgniteCheckedException; +import org.apache.ignite.internal.pagemem.PageMemory; import org.apache.ignite.internal.processors.cache.database.tree.io.BPlusIO; import org.apache.ignite.internal.processors.cache.database.tree.io.PageIO; import org.apache.ignite.internal.util.typedef.internal.S; @@ -46,7 +47,7 @@ public class RemoveRecord extends PageDeltaRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(long pageAddr, int pageSize) throws IgniteCheckedException { + @Override public void applyDelta(PageMemory pageMem, long pageAddr) throws IgniteCheckedException { BPlusIO io = PageIO.getBPlusIO(pageAddr); if (io.getCount(pageAddr) != cnt) http://git-wip-us.apache.org/repos/asf/ignite/blob/fa28a2e5/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 266f208..757afe1 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 @@ -19,6 +19,7 @@ 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; /** @@ -55,7 +56,7 @@ public class ReplaceRecord extends PageDeltaRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(long pageAddr, int pageSize) + @Override public void applyDelta(PageMemory pageMem, long pageAddr) throws IgniteCheckedException { if (io.getCount(pageAddr) < idx) throw new DeltaApplicationException("Index is greater than count: " + idx); http://git-wip-us.apache.org/repos/asf/ignite/blob/fa28a2e5/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 2a43391..418d28b 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 @@ -18,6 +18,7 @@ package org.apache.ignite.internal.pagemem.wal.record.delta; import org.apache.ignite.IgniteCheckedException; +import org.apache.ignite.internal.pagemem.PageMemory; import org.apache.ignite.internal.processors.cache.database.tree.io.BPlusIO; import org.apache.ignite.internal.processors.cache.database.tree.io.PageIO; import org.apache.ignite.internal.util.tostring.GridToStringExclude; @@ -49,7 +50,7 @@ public class SplitExistingPageRecord extends PageDeltaRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(long pageAddr, int pageSize) throws IgniteCheckedException { + @Override public void applyDelta(PageMemory pageMem, long pageAddr) throws IgniteCheckedException { BPlusIO io = PageIO.getBPlusIO(pageAddr); io.splitExistingPage(pageAddr, mid, fwdId); http://git-wip-us.apache.org/repos/asf/ignite/blob/fa28a2e5/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 8fdd3d4..39f2669 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 @@ -20,6 +20,7 @@ package org.apache.ignite.internal.pagemem.wal.record.delta; import java.nio.ByteBuffer; import org.apache.ignite.IgniteCheckedException; import org.apache.ignite.IgniteException; +import org.apache.ignite.internal.pagemem.PageMemory; /** * Split forward page record. @@ -79,7 +80,7 @@ public class SplitForwardPageRecord extends PageDeltaRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(long pageAddr, int pageSize) throws IgniteCheckedException { + @Override public void applyDelta(PageMemory pageMem, long pageAddr) throws IgniteCheckedException { throw new IgniteCheckedException("Split forward page record should not be logged."); } http://git-wip-us.apache.org/repos/asf/ignite/blob/fa28a2e5/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 a76ed48..7cd0948 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 @@ -18,6 +18,7 @@ package org.apache.ignite.internal.pagemem.wal.record.delta; import org.apache.ignite.IgniteCheckedException; +import org.apache.ignite.internal.pagemem.PageMemory; import org.apache.ignite.internal.processors.cache.database.tree.io.TrackingPageIO; /** @@ -69,8 +70,12 @@ public class TrackingPageDeltaRecord extends PageDeltaRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(long pageAddr, int pageSize) throws IgniteCheckedException { - TrackingPageIO.VERSIONS.forPage(pageAddr).markChanged(pageAddr, pageIdToMark, nextSnapshotId, lastSuccessfulSnapshotId, pageSize); + @Override public void applyDelta(PageMemory pageMem, long pageAddr) throws IgniteCheckedException { + TrackingPageIO.VERSIONS.forPage(pageAddr).markChanged(pageMem.pageBuffer(pageAddr), + pageIdToMark, + nextSnapshotId, + lastSuccessfulSnapshotId, + pageMem.pageSize()); } /** {@inheritDoc} */ http://git-wip-us.apache.org/repos/asf/ignite/blob/fa28a2e5/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheOffheapManagerImpl.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheOffheapManagerImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheOffheapManagerImpl.java index 3cf42e1..f7e46d8 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheOffheapManagerImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheOffheapManagerImpl.java @@ -17,6 +17,7 @@ package org.apache.ignite.internal.processors.cache; +import java.nio.ByteBuffer; import java.util.Collections; import java.util.Iterator; import java.util.Set; @@ -1304,6 +1305,17 @@ public class IgniteCacheOffheapManagerImpl extends GridCacheManagerAdapter imple } /** + * @param buf Buffer. + * @param off Offset. + * @param link Link. + * @param hash Hash. + */ + private static void store0(ByteBuffer buf, int off, long link, int hash) { + buf.putLong(off, link); + buf.putInt(off + 8, hash); + } + + /** * @param pageAddr Page address. * @param off Offset. * @param link Link. @@ -1350,6 +1362,13 @@ public class IgniteCacheOffheapManagerImpl extends GridCacheManagerAdapter imple } /** {@inheritDoc} */ + @Override public void storeByOffset(ByteBuffer buf, int off, CacheSearchRow row) throws IgniteCheckedException { + assert row.link() != 0; + + store0(buf, off, row.link(), row.hash()); + } + + /** {@inheritDoc} */ @Override public void storeByOffset(long pageAddr, int off, CacheSearchRow row) { assert row.link() != 0; @@ -1403,6 +1422,13 @@ public class IgniteCacheOffheapManagerImpl extends GridCacheManagerAdapter imple } /** {@inheritDoc} */ + @Override public void storeByOffset(ByteBuffer buf, int off, CacheSearchRow row) throws IgniteCheckedException { + assert row.link() != 0; + + store0(buf, off, row.link(), row.hash()); + } + + /** {@inheritDoc} */ @Override public void storeByOffset(long pageAddr, int off, CacheSearchRow row) { assert row.link() != 0; @@ -1587,6 +1613,15 @@ public class IgniteCacheOffheapManagerImpl extends GridCacheManagerAdapter imple } /** {@inheritDoc} */ + @Override public void storeByOffset(ByteBuffer buf, int off, PendingRow row) throws IgniteCheckedException { + assert row.link != 0; + assert row.expireTime != 0; + + buf.putLong(off, row.expireTime); + buf.putLong(off + 8, row.link); + } + + /** {@inheritDoc} */ @Override public void storeByOffset(long pageAddr, int off, PendingRow row) throws IgniteCheckedException { assert row.link != 0; assert row.expireTime != 0; @@ -1646,6 +1681,15 @@ public class IgniteCacheOffheapManagerImpl extends GridCacheManagerAdapter imple } /** {@inheritDoc} */ + @Override public void storeByOffset(ByteBuffer buf, int off, PendingRow row) throws IgniteCheckedException { + assert row.link != 0; + assert row.expireTime != 0; + + buf.putLong(off, row.expireTime); + buf.putLong(off + 8, row.link); + } + + /** {@inheritDoc} */ @Override public void storeByOffset(long pageAddr, int off, PendingRow row) throws IgniteCheckedException { assert row.link != 0; assert row.expireTime != 0; http://git-wip-us.apache.org/repos/asf/ignite/blob/fa28a2e5/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 6d7b60c..cf6decb 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,6 +17,7 @@ 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; @@ -247,6 +248,37 @@ public class MetadataStorage implements MetaStore { /** * Store row to buffer. * + * @param buf Buffer. + * @param off Offset in buf. + * @param row Row to store. + */ + private static void storeRow( + final ByteBuffer buf, + final int off, + final IndexItem row + ) { + int origPos = buf.position(); + + try { + buf.position(off); + + // Index name length. + buf.put((byte)row.idxName.length); + + // Index name. + buf.put(row.idxName); + + // Page ID. + buf.putLong(row.pageId); + } + finally { + buf.position(origPos); + } + } + + /** + * Store row to buffer. + * * @param pageAddr Page address. * @param off Offset in buf. * @param row Row to store. @@ -348,6 +380,11 @@ public class MetadataStorage implements MetaStore { } /** {@inheritDoc} */ + @Override public void storeByOffset(ByteBuffer buf, int off, IndexItem row) throws IgniteCheckedException { + storeRow(buf, off, row); + } + + /** {@inheritDoc} */ @Override public void storeByOffset(long pageAddr, int off, IndexItem row) throws IgniteCheckedException { storeRow(pageAddr, off, row); } @@ -389,6 +426,11 @@ public class MetadataStorage implements MetaStore { } /** {@inheritDoc} */ + @Override public void storeByOffset(ByteBuffer buf, int off, IndexItem row) throws IgniteCheckedException { + storeRow(buf, off, row); + } + + /** {@inheritDoc} */ @Override public void storeByOffset(long buf, int off, IndexItem row) throws IgniteCheckedException { storeRow(buf, off, row); } http://git-wip-us.apache.org/repos/asf/ignite/blob/fa28a2e5/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..c34296a 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 @@ -17,6 +17,7 @@ package org.apache.ignite.internal.processors.cache.database.tree.io; +import java.nio.ByteBuffer; import org.apache.ignite.IgniteCheckedException; import org.apache.ignite.internal.pagemem.PageUtils; import org.apache.ignite.internal.processors.cache.database.tree.BPlusTree; @@ -197,6 +198,17 @@ public abstract class BPlusIO extends PageIO { */ public abstract void storeByOffset(long pageAddr, int off, L row) throws IgniteCheckedException; + + /** + * Store the needed info about the row in the page. Leaf and inner pages can store different info. + * + * @param buf Buffer. + * @param off Offset in bytes. + * @param row Lookup or full row. + * @throws IgniteCheckedException If failed. + */ + public abstract void storeByOffset(ByteBuffer buf, int off, L row) throws IgniteCheckedException; + /** * Store row info from the given source. * http://git-wip-us.apache.org/repos/asf/ignite/blob/fa28a2e5/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/io/PageIO.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/io/PageIO.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/io/PageIO.java index 5ffc1b2..f6ac905 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/io/PageIO.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/io/PageIO.java @@ -17,8 +17,10 @@ package org.apache.ignite.internal.processors.cache.database.tree.io; +import java.nio.ByteBuffer; import org.apache.ignite.IgniteCheckedException; import org.apache.ignite.internal.pagemem.Page; +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.IgniteCacheOffheapManagerImpl; @@ -58,7 +60,7 @@ import org.apache.ignite.internal.processors.cache.database.tree.util.PageLockLi * * 7. It is almost always preferable to read or write (especially write) page contents using * static methods on {@link PageHandler}. To just initialize new page use - * {@link PageHandler#initPage(Page, PageLockListener, PageIO, IgniteWriteAheadLogManager)} + * {@link PageHandler#initPage(PageMemory, Page, PageLockListener, PageIO, IgniteWriteAheadLogManager)} * method with needed IO instance. */ public abstract class PageIO { @@ -164,6 +166,14 @@ public abstract class PageIO { } /** + * @param buf Buffer. + * @return Page type. + */ + public static int getType(ByteBuffer buf) { + return buf.getShort(TYPE_OFF) & 0xFFFF; + } + + /** * @param pageAddr Page addres. * @return Page type. */ @@ -182,6 +192,14 @@ public abstract class PageIO { } /** + * @param buf Buffer. + * @return Version. + */ + public static int getVersion(ByteBuffer buf) { + return buf.getShort(VER_OFF) & 0xFFFF; + } + + /** * @param pageAddr Page address. * @return Version. */ @@ -200,6 +218,14 @@ public abstract class PageIO { } /** + * @param buf Buffer. + * @return Page ID. + */ + public static long getPageId(ByteBuffer buf) { + return buf.getLong(PAGE_ID_OFF); + } + + /** * @param pageAddr Page address. * @return Page ID. */ @@ -234,6 +260,22 @@ public abstract class PageIO { } /** + * @param buf Buffer. + * @return Checksum. + */ + public static int getCrc(ByteBuffer buf) { + return buf.getInt(CRC_OFF); + } + + /** + * @param buf Buffer. + * @param crc Checksum. + */ + public static void setCrc(ByteBuffer buf, int crc) { + buf.putInt(CRC_OFF, crc); + } + + /** * Registers this B+Tree IO versions. * * @param innerIOs Inner IO versions. http://git-wip-us.apache.org/repos/asf/ignite/blob/fa28a2e5/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/io/PageMetaIO.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/io/PageMetaIO.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/io/PageMetaIO.java index 11a2643..e768f47 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/io/PageMetaIO.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/io/PageMetaIO.java @@ -17,7 +17,9 @@ package org.apache.ignite.internal.processors.cache.database.tree.io; +import java.nio.ByteBuffer; import org.apache.ignite.internal.pagemem.PageUtils; +import org.jetbrains.annotations.NotNull; /** * @@ -185,6 +187,13 @@ public class PageMetaIO extends PageIO { } /** + * @param buf Buffer. + */ + public int getLastAllocatedIndex(@NotNull ByteBuffer buf) { + return buf.getInt(LAST_ALLOCATED_INDEX_OFF); + } + + /** * @param pageAddr Page address. */ public int getLastAllocatedIndex(long pageAddr) { http://git-wip-us.apache.org/repos/asf/ignite/blob/fa28a2e5/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/io/TrackingPageIO.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/io/TrackingPageIO.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/io/TrackingPageIO.java index 6ecd9ee..136ebff 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/io/TrackingPageIO.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/io/TrackingPageIO.java @@ -17,8 +17,8 @@ package org.apache.ignite.internal.processors.cache.database.tree.io; +import java.nio.ByteBuffer; import org.apache.ignite.internal.pagemem.PageIdUtils; -import org.apache.ignite.internal.pagemem.PageUtils; import org.apache.ignite.internal.processors.cache.database.tree.util.PageHandler; /** @@ -71,13 +71,13 @@ public class TrackingPageIO extends PageIO { /** * Will mark pageId as changed for next (!) snapshotId * - * @param pageAddr Page address. + * @param buf Buffer. * @param pageId Page id. * @param nextSnapshotTag tag of next snapshot. * @param pageSize Page size. */ - public boolean markChanged(long pageAddr, long pageId, long nextSnapshotTag, long lastSuccessfulSnapshotTag, int pageSize) { - validateSnapshotId(pageAddr, nextSnapshotTag, lastSuccessfulSnapshotTag, pageSize); + public boolean markChanged(ByteBuffer buf, long pageId, long nextSnapshotTag, long lastSuccessfulSnapshotTag, int pageSize) { + validateSnapshotId(buf, nextSnapshotTag, lastSuccessfulSnapshotTag, pageSize); int cntOfPage = countOfPageToTrack(pageSize); @@ -87,7 +87,7 @@ public class TrackingPageIO extends PageIO { int idx = sizeOff + SIZE_FIELD_SIZE + (idxToUpdate >> 3); - byte byteToUpdate = PageUtils.getByte(pageAddr, idx); + byte byteToUpdate = buf.get(idx); int updateTemplate = 1 << (idxToUpdate & 0b111); @@ -96,28 +96,28 @@ public class TrackingPageIO extends PageIO { if (byteToUpdate == newVal) return false; - PageUtils.putByte(pageAddr, idx, newVal); + buf.put(idx, newVal); - short newSize = (short)(PageUtils.getShort(pageAddr, sizeOff) + 1); + short newSize = (short)(buf.getShort(sizeOff) + 1); - PageUtils.putShort(pageAddr, sizeOff, newSize); + buf.putShort(sizeOff, newSize); - assert newSize == countOfChangedPage(pageAddr, nextSnapshotTag, pageSize); + assert newSize == countOfChangedPage(buf, nextSnapshotTag, pageSize); return true; } /** - * @param pageAddr Page address. + * @param buf Buffer. * @param nextSnapshotTag Next snapshot id. * @param lastSuccessfulSnapshotId Last successful snapshot id. * @param pageSize Page size. */ - private void validateSnapshotId(long pageAddr, long nextSnapshotTag, long lastSuccessfulSnapshotId, int pageSize) { + private void validateSnapshotId(ByteBuffer buf, long nextSnapshotTag, long lastSuccessfulSnapshotId, int pageSize) { assert nextSnapshotTag != lastSuccessfulSnapshotId : "nextSnapshotTag = " + nextSnapshotTag + ", lastSuccessfulSnapshotId = " + lastSuccessfulSnapshotId; - long last = getLastSnapshotTag(pageAddr); + long last = getLastSnapshotTag(buf); assert last <= nextSnapshotTag : "last = " + last + ", nextSnapshotTag = " + nextSnapshotTag; @@ -127,9 +127,9 @@ public class TrackingPageIO extends PageIO { int cntOfPage = countOfPageToTrack(pageSize); if (last <= lastSuccessfulSnapshotId) { //we can drop our data - PageUtils.putLong(pageAddr, LAST_SNAPSHOT_TAG_OFFSET, nextSnapshotTag); + buf.putLong(LAST_SNAPSHOT_TAG_OFFSET, nextSnapshotTag); - PageHandler.zeroMemory(pageAddr, SIZE_FIELD_OFFSET, pageSize - SIZE_FIELD_OFFSET); + PageHandler.zeroMemory(buf, SIZE_FIELD_OFFSET, buf.capacity() - SIZE_FIELD_OFFSET); } else { //we can't drop data, it is still necessary for incremental snapshots int len = cntOfPage >> 3; @@ -139,55 +139,55 @@ public class TrackingPageIO extends PageIO { if (last - lastSuccessfulSnapshotId == 1) { //we should keep only data in last half //new data will be written in the same half, we should move old data to another half if ((nextSnapshotTag - last) % 2 == 0) - PageHandler.copyMemory(pageAddr, pageAddr, sizeOff, sizeOff2, len + SIZE_FIELD_SIZE); + PageHandler.copyMemory(buf, buf, sizeOff, sizeOff2, len + SIZE_FIELD_SIZE); } else { //last - lastSuccessfulSnapshotId > 1, e.g. we should merge two half in one int newSize = 0; int i = 0; for (; i < len - 8; i += 8) { - long newVal = PageUtils.getLong(pageAddr, sizeOff + SIZE_FIELD_SIZE + i) | PageUtils.getLong(pageAddr, sizeOff2 + SIZE_FIELD_SIZE + i); + long newVal = buf.getLong(sizeOff + SIZE_FIELD_SIZE + i) | buf.getLong(sizeOff2 + SIZE_FIELD_SIZE + i); newSize += Long.bitCount(newVal); - PageUtils.putLong(pageAddr, sizeOff2 + SIZE_FIELD_SIZE + i, newVal); + buf.putLong(sizeOff2 + SIZE_FIELD_SIZE + i, newVal); } for (; i < len; i ++) { - byte newVal = (byte)(PageUtils.getByte(pageAddr, sizeOff + SIZE_FIELD_SIZE + i) | PageUtils.getByte(pageAddr, sizeOff2 + SIZE_FIELD_SIZE + i)); + byte newVal = (byte) (buf.get(sizeOff + SIZE_FIELD_SIZE + i) | buf.get(sizeOff2 + SIZE_FIELD_SIZE + i)); newSize += Integer.bitCount(newVal & 0xFF); - PageUtils.putByte(pageAddr, sizeOff2 + SIZE_FIELD_SIZE + i, newVal); + buf.put(sizeOff2 + SIZE_FIELD_SIZE + i, newVal); } - PageUtils.putShort(pageAddr, sizeOff2, (short)newSize); + buf.putShort(sizeOff2, (short)newSize); } - PageUtils.putLong(pageAddr, LAST_SNAPSHOT_TAG_OFFSET, nextSnapshotTag); + buf.putLong(LAST_SNAPSHOT_TAG_OFFSET, nextSnapshotTag); - PageHandler.zeroMemory(pageAddr, sizeOff, len + SIZE_FIELD_SIZE); + PageHandler.zeroMemory(buf, sizeOff, len + SIZE_FIELD_SIZE); } } /** - * @param pageAddr Page address. + * @param buf Buffer. */ - long getLastSnapshotTag(long pageAddr) { - return PageUtils.getLong(pageAddr, LAST_SNAPSHOT_TAG_OFFSET); + long getLastSnapshotTag(ByteBuffer buf) { + return buf.getLong(LAST_SNAPSHOT_TAG_OFFSET); } /** * Check that pageId was marked as changed between previous snapshot finish and current snapshot start. * - * @param pageAddr Page address. + * @param buf Buffer. * @param pageId Page id. * @param curSnapshotTag Snapshot tag. * @param pageSize Page size. */ - public boolean wasChanged(long pageAddr, long pageId, long curSnapshotTag, long lastSuccessfulSnapshotTag, int pageSize) { - validateSnapshotId(pageAddr, curSnapshotTag + 1, lastSuccessfulSnapshotTag, pageSize); + public boolean wasChanged(ByteBuffer buf, long pageId, long curSnapshotTag, long lastSuccessfulSnapshotTag, int pageSize) { + validateSnapshotId(buf, curSnapshotTag + 1, lastSuccessfulSnapshotTag, pageSize); - if (countOfChangedPage(pageAddr, curSnapshotTag, pageSize) < 1) + if (countOfChangedPage(buf, curSnapshotTag, pageSize) < 1) return false; int cntOfPage = countOfPageToTrack(pageSize); @@ -197,9 +197,9 @@ public class TrackingPageIO extends PageIO { byte byteToTest; if (useLeftHalf(curSnapshotTag)) - byteToTest = PageUtils.getByte(pageAddr, BITMAP_OFFSET + (idxToTest >> 3)); + byteToTest = buf.get(BITMAP_OFFSET + (idxToTest >> 3)); else - byteToTest = PageUtils.getByte(pageAddr, BITMAP_OFFSET + SIZE_FIELD_SIZE + ((idxToTest + cntOfPage) >> 3)); + byteToTest = buf.get(BITMAP_OFFSET + SIZE_FIELD_SIZE + ((idxToTest + cntOfPage) >> 3)); int testTemplate = 1 << (idxToTest & 0b111); @@ -207,22 +207,22 @@ public class TrackingPageIO extends PageIO { } /** - * @param pageAddr Page address. + * @param buf Buffer. * @param snapshotTag Snapshot tag. * @param pageSize Page size. * * @return count of pages which were marked as change for given snapshotTag */ - public short countOfChangedPage(long pageAddr, long snapshotTag, int pageSize) { - long dif = getLastSnapshotTag(pageAddr) - snapshotTag; + public short countOfChangedPage(ByteBuffer buf, long snapshotTag, int pageSize) { + long dif = getLastSnapshotTag(buf) - snapshotTag; if (dif != 0 && dif != 1) return -1; if (useLeftHalf(snapshotTag)) - return PageUtils.getShort(pageAddr, SIZE_FIELD_OFFSET); + return buf.getShort(SIZE_FIELD_OFFSET); else - return PageUtils.getShort(pageAddr, BITMAP_OFFSET + (countOfPageToTrack(pageSize) >> 3)); + return buf.getShort(BITMAP_OFFSET + (countOfPageToTrack(pageSize) >> 3)); } /** @@ -262,14 +262,14 @@ public class TrackingPageIO extends PageIO { } /** - * @param pageAddr Page address. + * @param buf Buffer. * @param start Start. * @param curSnapshotTag Snapshot id. * @param pageSize Page size. * @return set pageId if it was changed or next closest one, if there is no changed page null will be returned */ - public Long findNextChangedPage(long pageAddr, long start, long curSnapshotTag, long lastSuccessfulSnapshotTag, int pageSize) { - validateSnapshotId(pageAddr, curSnapshotTag + 1, lastSuccessfulSnapshotTag, pageSize); + public Long findNextChangedPage(ByteBuffer buf, long start, long curSnapshotTag, long lastSuccessfulSnapshotTag, int pageSize) { + validateSnapshotId(buf, curSnapshotTag + 1, lastSuccessfulSnapshotTag, pageSize); int cntOfPage = countOfPageToTrack(pageSize); @@ -278,7 +278,7 @@ public class TrackingPageIO extends PageIO { if (start == trackingPage) return trackingPage; - if (countOfChangedPage(pageAddr, curSnapshotTag, pageSize) <= 0) + if (countOfChangedPage(buf, curSnapshotTag, pageSize) <= 0) return null; int idxToStartTest = (PageIdUtils.pageIndex(start) - COUNT_OF_EXTRA_PAGE) % cntOfPage; @@ -292,7 +292,7 @@ public class TrackingPageIO extends PageIO { int stopIdx = zeroIdx + (cntOfPage >> 3); while (idx < stopIdx) { - byte byteToTest = PageUtils.getByte(pageAddr, idx); + byte byteToTest = buf.get(idx); if (byteToTest != 0) { int foundSetBit; @@ -302,7 +302,7 @@ public class TrackingPageIO extends PageIO { PageIdUtils.flag(start), PageIdUtils.pageIndex(trackingPage) + ((idx - zeroIdx) << 3) + foundSetBit); - assert wasChanged(pageAddr, foundPageId, curSnapshotTag, lastSuccessfulSnapshotTag, pageSize); + assert wasChanged(buf, foundPageId, curSnapshotTag, lastSuccessfulSnapshotTag, pageSize); assert trackingPageFor(foundPageId, pageSize) == trackingPage; return foundPageId; http://git-wip-us.apache.org/repos/asf/ignite/blob/fa28a2e5/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/util/PageHandler.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/util/PageHandler.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/util/PageHandler.java index 3e6e637..97b5a04 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/util/PageHandler.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/util/PageHandler.java @@ -17,6 +17,7 @@ package org.apache.ignite.internal.processors.cache.database.tree.util; +import java.nio.ByteBuffer; import org.apache.ignite.IgniteCheckedException; import org.apache.ignite.internal.pagemem.Page; import org.apache.ignite.internal.pagemem.PageMemory; @@ -286,6 +287,41 @@ public abstract class PageHandler { } /** + * @param src Source. + * @param dst Destination. + * @param srcOff Source offset in bytes. + * @param dstOff Destination offset in bytes. + * @param cnt Bytes count to copy. + */ + public static void copyMemory(ByteBuffer src, ByteBuffer dst, long srcOff, long dstOff, long cnt) { + byte[] srcArr = src.hasArray() ? src.array() : null; + byte[] dstArr = dst.hasArray() ? dst.array() : null; + long srcArrOff = src.hasArray() ? src.arrayOffset() + GridUnsafe.BYTE_ARR_OFF : 0; + long dstArrOff = dst.hasArray() ? dst.arrayOffset() + GridUnsafe.BYTE_ARR_OFF : 0; + + long srcPtr = src.isDirect() ? GridUnsafe.bufferAddress(src) : 0; + long dstPtr = dst.isDirect() ? GridUnsafe.bufferAddress(dst) : 0; + + GridUnsafe.copyMemory(srcArr, srcPtr + srcArrOff + srcOff, dstArr, dstPtr + dstArrOff + dstOff, cnt); + } + + /** + * Will zero memory in buf + * @param buf Buffer. + * @param off Offset. + * @param len Length. + */ + public static void zeroMemory(ByteBuffer buf, int off, int len) { + if (buf.isDirect()) + GridUnsafe.setMemory(GridUnsafe.bufferAddress(buf) + off, len, (byte)0); + + else { + for (int i = off; i < off + len; i++) + buf.put(i, (byte)0); //TODO Optimize! + } + } + + /** * @param srcAddr Source. * @param dstAddr Destination. * @param srcOff Source offset in bytes. http://git-wip-us.apache.org/repos/asf/ignite/blob/fa28a2e5/modules/core/src/main/java/org/apache/ignite/internal/util/GridUnsafe.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/GridUnsafe.java b/modules/core/src/main/java/org/apache/ignite/internal/util/GridUnsafe.java index 783ab96..1926f01 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/util/GridUnsafe.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/util/GridUnsafe.java @@ -18,6 +18,7 @@ package org.apache.ignite.internal.util; import java.lang.reflect.Field; +import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.security.AccessController; import java.security.PrivilegedActionException; @@ -25,6 +26,7 @@ import java.security.PrivilegedExceptionAction; import org.apache.ignite.IgniteSystemProperties; import sun.misc.Unsafe; +import sun.nio.ch.DirectBuffer; /** *

Wrapper for {@link sun.misc.Unsafe} class.

@@ -1602,4 +1604,14 @@ public abstract class GridUnsafe { UNSAFE.putByte(addr, (byte)(val)); } } + + /** + * @param buf Direct buffer. + * @return Buffer memory address. + */ + public static long bufferAddress(ByteBuffer buf) { + assert buf instanceof DirectBuffer : buf; + + return ((DirectBuffer)buf).address(); + } } \ No newline at end of file