ignite-3477 PageMemory optimizations - use page address instead of ByteBuffer to work with page memory - got rid of pages pin/unpin - do not copy byte array for cache key comparison - reduced size of data tree search row
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/7db65ddd Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/7db65ddd Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/7db65ddd Branch: refs/heads/ignite-3477 Commit: 7db65ddd16beae5f5bf95f67c638d5ae1c58653c Parents: cb60e38 Author: sboikov <[email protected]> Authored: Tue Jan 17 14:45:51 2017 +0300 Committer: sboikov <[email protected]> Committed: Tue Jan 17 14:45:53 2017 +0300 ---------------------------------------------------------------------- .../internal/binary/BinaryEnumObjectImpl.java | 7 + .../internal/binary/BinaryObjectImpl.java | 5 + .../binary/BinaryObjectOffheapImpl.java | 5 + .../apache/ignite/internal/pagemem/Page.java | 11 +- .../ignite/internal/pagemem/PageMemory.java | 9 +- .../ignite/internal/pagemem/PageUtils.java | 185 ++++++ .../pagemem/impl/PageMemoryNoStoreImpl.java | 134 ++-- .../internal/pagemem/impl/PageNoStoreImpl.java | 91 +-- .../delta/DataPageInsertFragmentRecord.java | 8 +- .../wal/record/delta/DataPageInsertRecord.java | 8 +- .../wal/record/delta/DataPageRemoveRecord.java | 8 +- .../delta/DataPageSetFreeListPageRecord.java | 8 +- .../wal/record/delta/FixCountRecord.java | 8 +- .../record/delta/FixLeftmostChildRecord.java | 8 +- .../pagemem/wal/record/delta/FixRemoveId.java | 8 +- .../wal/record/delta/InitNewPageRecord.java | 8 +- .../wal/record/delta/InnerReplaceRecord.java | 4 +- .../pagemem/wal/record/delta/InsertRecord.java | 5 +- .../pagemem/wal/record/delta/MergeRecord.java | 3 +- .../wal/record/delta/MetaPageAddRootRecord.java | 8 +- .../wal/record/delta/MetaPageCutRootRecord.java | 7 +- .../wal/record/delta/MetaPageInitRecord.java | 14 +- .../record/delta/MetaPageInitRootRecord.java | 9 +- .../delta/MetaPageUpdateLastAllocatedIndex.java | 10 +- ...aPageUpdateLastSuccessfulFullSnapshotId.java | 8 +- .../MetaPageUpdateLastSuccessfulSnapshotId.java | 8 +- .../delta/MetaPageUpdateNextSnapshotId.java | 8 +- .../MetaPageUpdatePartitionDataRecord.java | 12 +- .../wal/record/delta/NewRootInitRecord.java | 6 +- .../wal/record/delta/PageDeltaRecord.java | 7 +- .../delta/PageListMetaResetCountRecord.java | 8 +- .../record/delta/PagesListAddPageRecord.java | 8 +- .../delta/PagesListInitNewPageRecord.java | 10 +- .../record/delta/PagesListRemovePageRecord.java | 8 +- .../record/delta/PagesListSetNextRecord.java | 8 +- .../delta/PagesListSetPreviousRecord.java | 8 +- .../pagemem/wal/record/delta/RecycleRecord.java | 6 +- .../pagemem/wal/record/delta/RemoveRecord.java | 12 +- .../pagemem/wal/record/delta/ReplaceRecord.java | 7 +- .../record/delta/SplitExistingPageRecord.java | 8 +- .../record/delta/SplitForwardPageRecord.java | 3 +- .../record/delta/TrackingPageDeltaRecord.java | 10 +- .../internal/processors/cache/CacheObject.java | 7 + .../processors/cache/CacheObjectAdapter.java | 40 +- .../cache/CacheObjectByteArrayImpl.java | 5 + .../cache/IgniteCacheOffheapManagerImpl.java | 372 +++++++---- .../processors/cache/database/CacheDataRow.java | 13 +- .../cache/database/CacheDataRowAdapter.java | 72 ++- .../cache/database/CacheSearchRow.java | 40 ++ .../cache/database/DataStructure.java | 36 +- .../IgniteCacheDatabaseSharedManager.java | 2 +- .../cache/database/MetadataStorage.java | 149 +++-- .../cache/database/freelist/FreeListImpl.java | 61 +- .../cache/database/freelist/PagesList.java | 212 +++---- .../database/freelist/io/PagesListMetaIO.java | 71 +-- .../database/freelist/io/PagesListNodeIO.java | 117 ++-- .../cache/database/tree/BPlusTree.java | 616 ++++++++++--------- .../cache/database/tree/io/BPlusIO.java | 201 +++--- .../cache/database/tree/io/BPlusInnerIO.java | 71 ++- .../cache/database/tree/io/BPlusLeafIO.java | 11 +- .../cache/database/tree/io/BPlusMetaIO.java | 79 +-- .../cache/database/tree/io/CacheVersionIO.java | 46 ++ .../cache/database/tree/io/DataPageIO.java | 545 ++++++++-------- .../cache/database/tree/io/DataPagePayload.java | 64 ++ .../cache/database/tree/io/IOVersions.java | 12 +- .../cache/database/tree/io/PageIO.java | 110 +++- .../cache/database/tree/io/PageMetaIO.java | 118 ++-- .../database/tree/io/PagePartitionMetaIO.java | 67 +- .../database/tree/reuse/ReuseListImpl.java | 2 +- .../cache/database/tree/util/PageHandler.java | 135 ++-- .../database/tree/util/PageLockListener.java | 17 +- .../atomic/GridDhtAtomicSingleUpdateFuture.java | 3 +- .../atomic/GridNearAtomicUpdateResponse.java | 3 + .../apache/ignite/internal/util/GridUnsafe.java | 12 + .../apache/ignite/internal/util/IgniteTree.java | 31 +- .../internal/GridAffinityNoCacheSelfTest.java | 5 + .../pagemem/impl/PageMemoryNoLoadSelfTest.java | 29 +- .../IgniteIncompleteCacheObjectSelfTest.java | 5 + .../database/tree/io/TrackingPageIOTest.java | 38 +- .../database/BPlusTreeReuseSelfTest.java | 22 +- .../processors/database/BPlusTreeSelfTest.java | 85 +-- .../database/FreeListImplSelfTest.java | 15 +- .../database/MetadataStorageSelfTest.java | 2 +- .../internal/processors/query/h2/H2Cursor.java | 9 +- .../processors/query/h2/database/H2Tree.java | 5 +- .../query/h2/database/H2TreeIndex.java | 5 +- .../query/h2/database/io/H2InnerIO.java | 24 +- .../query/h2/database/io/H2LeafIO.java | 22 +- .../query/h2/database/io/H2RowLinkIO.java | 6 +- .../processors/query/h2/opt/GridH2Row.java | 5 + .../query/IgniteSqlDistributedJoinSelfTest.java | 46 +- .../h2/GridIndexingSpiAbstractSelfTest.java | 5 + .../IgniteDistributedJoinTestSuite.java | 2 +- 93 files changed, 2579 insertions(+), 1807 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/7db65ddd/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryEnumObjectImpl.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryEnumObjectImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryEnumObjectImpl.java index a17f755..d6b6168 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryEnumObjectImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryEnumObjectImpl.java @@ -276,6 +276,13 @@ public class BinaryEnumObjectImpl implements BinaryObjectEx, Externalizable, Cac } /** {@inheritDoc} */ + @Override public int putValue(long addr) throws IgniteCheckedException { + assert valBytes != null : "Value bytes must be initialized before object is stored"; + + return CacheObjectAdapter.putValue(addr, cacheObjectType(), valBytes, 0); + } + + /** {@inheritDoc} */ @Override public boolean putValue(final ByteBuffer buf, int off, int len) throws IgniteCheckedException { return CacheObjectAdapter.putValue(cacheObjectType(), buf, off, len, valBytes, 0); } http://git-wip-us.apache.org/repos/asf/ignite/blob/7db65ddd/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectImpl.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectImpl.java index ff14b63..0442a95 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectImpl.java @@ -165,6 +165,11 @@ public final class BinaryObjectImpl extends BinaryObjectExImpl implements Extern } /** {@inheritDoc} */ + @Override public int putValue(long addr) throws IgniteCheckedException { + return CacheObjectAdapter.putValue(addr, cacheObjectType(), arr, start); + } + + /** {@inheritDoc} */ @Override public boolean putValue(final ByteBuffer buf, int off, int len) throws IgniteCheckedException { return CacheObjectAdapter.putValue(cacheObjectType(), buf, off, len, arr, start); } http://git-wip-us.apache.org/repos/asf/ignite/blob/7db65ddd/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectOffheapImpl.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectOffheapImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectOffheapImpl.java index 4cf2bdf..d45815a 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectOffheapImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectOffheapImpl.java @@ -152,6 +152,11 @@ public class BinaryObjectOffheapImpl extends BinaryObjectExImpl implements Exter } /** {@inheritDoc} */ + @Override public int putValue(long addr) throws IgniteCheckedException { + throw new UnsupportedOperationException("TODO implement"); + } + + /** {@inheritDoc} */ @Override public boolean putValue(final ByteBuffer buf, final int off, final int len) throws IgniteCheckedException { throw new UnsupportedOperationException("TODO implement"); http://git-wip-us.apache.org/repos/asf/ignite/blob/7db65ddd/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 e08fad6..2667e44 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 @@ -17,9 +17,6 @@ package org.apache.ignite.internal.pagemem; -import java.nio.ByteBuffer; -import org.jetbrains.annotations.Nullable; - /** * */ @@ -39,9 +36,9 @@ public interface Page extends AutoCloseable { public FullPageId fullId(); /** - * @return ByteBuffer for modifying the page. + * @return Pointer for modifying the page. */ - public ByteBuffer getForRead(); + public long getForReadPointer(); /** * Releases reserved page. Released page can be evicted from RAM after flushing modifications to disk. @@ -51,12 +48,12 @@ public interface Page extends AutoCloseable { /** * @return ByteBuffer for modifying the page. */ - public ByteBuffer getForWrite(); + public long getForWritePointer(); /** * @return ByteBuffer for modifying the page of {@code null} if failed to get write lock. */ - @Nullable public ByteBuffer tryGetForWrite(); + public long tryGetForWritePointer(); /** * Releases reserved page. Released page can be evicted from RAM after flushing modifications to disk. http://git-wip-us.apache.org/repos/asf/ignite/blob/7db65ddd/modules/core/src/main/java/org/apache/ignite/internal/pagemem/PageMemory.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/PageMemory.java b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/PageMemory.java index 53b37f6..cfee19f 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/PageMemory.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/PageMemory.java @@ -17,6 +17,7 @@ package org.apache.ignite.internal.pagemem; +import java.nio.ByteBuffer; import java.nio.ByteOrder; import org.apache.ignite.IgniteCheckedException; import org.apache.ignite.lifecycle.LifecycleAware; @@ -25,7 +26,7 @@ import org.apache.ignite.lifecycle.LifecycleAware; */ public interface PageMemory extends LifecycleAware, PageIdAllocator { /** */ - ByteOrder NATIVE_BYTE_ORDER = ByteOrder.nativeOrder(); + public static final ByteOrder NATIVE_BYTE_ORDER = ByteOrder.nativeOrder(); /** * Gets the page associated with the given page ID. Each page obtained with this method must be released by @@ -62,4 +63,10 @@ public interface PageMemory extends LifecycleAware, PageIdAllocator { * @return Page size with system overhead, in bytes. */ public int systemPageSize(); + + /** + * @param pageAddr Page address. + * @return Page byte buffer. + */ + public ByteBuffer pageBuffer(long pageAddr); } http://git-wip-us.apache.org/repos/asf/ignite/blob/7db65ddd/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 new file mode 100644 index 0000000..f824368 --- /dev/null +++ b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/PageUtils.java @@ -0,0 +1,185 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.ignite.internal.pagemem; + +import org.apache.ignite.internal.util.GridUnsafe; + +/** + * + */ +@SuppressWarnings("deprecation") +public class PageUtils { + /** + * @param addr Start address. + * @param off Offset. + * @return Byte value from given address. + */ + public static byte getByte(long addr, int off) { + assert addr > 0 : addr; + assert off >= 0; + + return GridUnsafe.getByte(addr + off); + } + + /** + * @param addr Start address. + * @param off Offset. + * @param len Bytes length. + * @return Bytes from given address. + */ + public static byte[] getBytes(long addr, int off, int len) { + assert addr > 0 : addr; + assert off >= 0; + assert len >= 0; + + byte[] bytes = new byte[len]; + + GridUnsafe.copyMemory(null, addr + off, bytes, GridUnsafe.BYTE_ARR_OFF, len); + + return bytes; + } + + /** + * @param srcAddr Source address. + * @param srcOff Source offset. + * @param dst Destination array. + * @param dstOff Destination offset. + * @param len Length. + */ + public static void getBytes(long srcAddr, int srcOff, byte[] dst, int dstOff, int len) { + assert srcAddr > 0; + assert srcOff > 0; + assert dst != null; + assert dstOff >= 0; + assert len >= 0; + + GridUnsafe.copyMemory(null, srcAddr + srcOff, dst, GridUnsafe.BYTE_ARR_OFF + dstOff, len); + } + + /** + * @param addr Address. + * @param off Offset. + * @return Value. + */ + public static short getShort(long addr, int off) { + assert addr > 0 : addr; + assert off >= 0; + + return GridUnsafe.getShort(addr + off); + } + + /** + * @param addr Address. + * @param off Offset. + * @return Value. + */ + public static int getInt(long addr, int off) { + assert addr > 0 : addr; + assert off >= 0; + + return GridUnsafe.getInt(addr + off); + } + + /** + * @param addr Address. + * @param off Offset. + * @return Value. + */ + public static long getLong(long addr, int off) { + assert addr > 0 : addr; + assert off >= 0; + + return GridUnsafe.getLong(addr + off); + } + + /** + * @param addr Address/ + * @param off Offset. + * @param bytes Bytes. + */ + public static void putBytes(long addr, int off, byte[] bytes) { + assert addr > 0 : addr; + assert off >= 0; + assert bytes != null; + + GridUnsafe.copyMemory(bytes, GridUnsafe.BYTE_ARR_OFF, null, addr + off, bytes.length); + } + + /** + * @param addr Address. + * @param off Offset. + * @param bytes Bytes array. + * @param bytesOff Bytes array offset. + */ + public static void putBytes(long addr, int off, byte[] bytes, int bytesOff) { + assert addr > 0 : addr; + assert off >= 0; + assert bytes != null; + assert bytesOff >= 0 && (bytesOff < bytes.length || bytes.length == 0) : bytesOff; + + GridUnsafe.copyMemory(bytes, GridUnsafe.BYTE_ARR_OFF + bytesOff, null, addr + off, bytes.length - bytesOff); + } + + /** + * @param addr Address. + * @param off Offset. + * @param v Value. + */ + public static void putByte(long addr, int off, byte v) { + assert addr > 0 : addr; + assert off >= 0; + + GridUnsafe.putByte(addr + off, v); + } + + /** + * @param addr Address. + * @param off Offset. + * @param v Value. + */ + public static void putShort(long addr, int off, short v) { + assert addr > 0 : addr; + assert off >= 0; + + GridUnsafe.putShort(addr + off, v); + } + + /** + * @param addr Address. + * @param off Offset. + * @param v Value. + */ + public static void putInt(long addr, int off, int v) { + assert addr > 0 : addr; + assert off >= 0; + + GridUnsafe.putInt(addr + off, v); + } + + /** + * @param addr Address. + * @param off Offset. + * @param v Value. + */ + public static void putLong(long addr, int off, long v) { + assert addr > 0 : addr; + assert off >= 0; + + GridUnsafe.putLong(addr + off, v); + } +} http://git-wip-us.apache.org/repos/asf/ignite/blob/7db65ddd/modules/core/src/main/java/org/apache/ignite/internal/pagemem/impl/PageMemoryNoStoreImpl.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/impl/PageMemoryNoStoreImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/impl/PageMemoryNoStoreImpl.java index 1d29df8..41e401d 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/impl/PageMemoryNoStoreImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/impl/PageMemoryNoStoreImpl.java @@ -20,15 +20,14 @@ package org.apache.ignite.internal.pagemem.impl; import java.io.Closeable; import java.io.IOException; import java.nio.ByteBuffer; -import java.nio.ByteOrder; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.locks.ReentrantReadWriteLock; import org.apache.ignite.IgniteCheckedException; import org.apache.ignite.IgniteException; import org.apache.ignite.IgniteLogger; import org.apache.ignite.internal.mem.DirectMemory; -import org.apache.ignite.internal.mem.DirectMemoryRegion; import org.apache.ignite.internal.mem.DirectMemoryProvider; +import org.apache.ignite.internal.mem.DirectMemoryRegion; import org.apache.ignite.internal.mem.OutOfMemoryException; import org.apache.ignite.internal.pagemem.Page; import org.apache.ignite.internal.pagemem.PageIdUtils; @@ -37,7 +36,6 @@ import org.apache.ignite.internal.processors.cache.GridCacheSharedContext; import org.apache.ignite.internal.util.GridUnsafe; import org.apache.ignite.internal.util.OffheapReadWriteLock; import org.apache.ignite.internal.util.offheap.GridOffHeapOutOfMemoryException; -import org.apache.ignite.internal.util.typedef.internal.U; import org.apache.ignite.lifecycle.LifecycleAware; import sun.misc.JavaNioAccess; import sun.misc.SharedSecrets; @@ -90,10 +88,7 @@ public class PageMemoryNoStoreImpl implements PageMemory { public static final int PAGE_ID_OFFSET = 8; /** Page pin counter offset. */ - public static final int PIN_CNT_OFFSET = 16; - - /** Page pin counter offset. */ - public static final int LOCK_OFFSET = 24; + public static final int LOCK_OFFSET = 16; /** * Need a 8-byte pointer for linked list, 8 bytes for internal needs (flags), @@ -134,21 +129,28 @@ public class PageMemoryNoStoreImpl implements PageMemory { /** */ private OffheapReadWriteLock rwLock; + /** */ + private final boolean trackAcquiredPages; + /** + * @param log Logger. * @param directMemoryProvider Memory allocator to use. * @param sharedCtx Cache shared context. * @param pageSize Page size. + * @param trackAcquiredPages If {@code true} tracks number of allocated pages (for tests purpose only). */ public PageMemoryNoStoreImpl( IgniteLogger log, DirectMemoryProvider directMemoryProvider, GridCacheSharedContext<?, ?> sharedCtx, - int pageSize + int pageSize, + boolean trackAcquiredPages ) { assert log != null || sharedCtx != null; this.log = sharedCtx != null ? sharedCtx.logger(PageMemoryNoStoreImpl.class) : log; this.directMemoryProvider = directMemoryProvider; + this.trackAcquiredPages = trackAcquiredPages; sysPageSize = pageSize + PAGE_OVERHEAD; @@ -205,6 +207,11 @@ public class PageMemoryNoStoreImpl implements PageMemory { } /** {@inheritDoc} */ + @Override public ByteBuffer pageBuffer(long pageAddr) { + return wrapPointer(pageAddr, pageSize()); + } + + /** {@inheritDoc} */ @Override public long allocatePage(int cacheId, int partId, byte flags) { long relPtr = INVALID_REL_PTR; long absPtr = 0; @@ -213,13 +220,13 @@ public class PageMemoryNoStoreImpl implements PageMemory { relPtr = seg.borrowFreePage(); if (relPtr != INVALID_REL_PTR) { - absPtr = seg.absolute(relPtr); + absPtr = seg.absolute(PageIdUtils.pageIndex(relPtr)); break; } } - // No segments conatined a free page. + // No segments contained a free page. if (relPtr == INVALID_REL_PTR) { int segAllocIdx = nextRoundRobinIndex(); @@ -231,7 +238,7 @@ public class PageMemoryNoStoreImpl implements PageMemory { relPtr = seg.allocateFreePage(flags); if (relPtr != INVALID_REL_PTR) { - absPtr = seg.absolute(relPtr); + absPtr = seg.absolute(PageIdUtils.pageIndex(relPtr)); break; } @@ -248,9 +255,6 @@ public class PageMemoryNoStoreImpl implements PageMemory { writePageId(absPtr, pageId); - // Clear pin counter. - GridUnsafe.putLong(absPtr + PIN_CNT_OFFSET, 0); - // TODO pass an argument to decide whether the page should be cleaned. GridUnsafe.setMemory(absPtr + PAGE_OVERHEAD, sysPageSize - PAGE_OVERHEAD, (byte)0); @@ -259,7 +263,7 @@ public class PageMemoryNoStoreImpl implements PageMemory { /** {@inheritDoc} */ @Override public boolean freePage(int cacheId, long pageId) { - Segment seg = segment(pageId); + Segment seg = segment(PageIdUtils.pageIndex(pageId)); seg.releaseFreePage(pageId); @@ -268,25 +272,25 @@ public class PageMemoryNoStoreImpl implements PageMemory { /** {@inheritDoc} */ @Override public Page page(int cacheId, long pageId) throws IgniteCheckedException { - Segment seg = segment(pageId); + int pageIdx = PageIdUtils.pageIndex(pageId); - return seg.acquirePage(cacheId, pageId, false); + Segment seg = segment(pageIdx); + + return seg.acquirePage(pageIdx, pageId); } /** {@inheritDoc} */ @Override public Page page(int cacheId, long pageId, boolean restore) throws IgniteCheckedException { - Segment seg = segment(pageId); - - return seg.acquirePage(cacheId, pageId, restore); + throw new UnsupportedOperationException(); } /** {@inheritDoc} */ @Override public void releasePage(Page p) { - PageNoStoreImpl page = (PageNoStoreImpl)p; - - Segment seg = segments[page.segmentIndex()]; + if (trackAcquiredPages) { + Segment seg = segment(PageIdUtils.pageIndex(p.id())); - seg.releasePage(page); + seg.onPageRelease(); + } } /** {@inheritDoc} */ @@ -435,17 +439,15 @@ public class PageMemoryNoStoreImpl implements PageMemory { * @param absPtr Absolute memory pointer to the page header. * @param pageId Page ID to write. */ - void writePageId(long absPtr, long pageId) { + private void writePageId(long absPtr, long pageId) { GridUnsafe.putLong(absPtr + PAGE_ID_OFFSET, pageId); } /** - * @param pageId Page ID. + * @param pageIdx Page index. * @return Segment. */ - private Segment segment(long pageId) { - long pageIdx = PageIdUtils.pageIndex(pageId); - + private Segment segment(int pageIdx) { int segIdx = segmentIndex(pageIdx); return segments[segIdx]; @@ -539,63 +541,31 @@ public class PageMemoryNoStoreImpl implements PageMemory { * @return Pinned page impl. */ @SuppressWarnings("TypeMayBeWeakened") - private PageNoStoreImpl acquirePage(int cacheId, long pageId, boolean restore) { - long absPtr = absolute(pageId); - - long marker = GridUnsafe.getLong(absPtr); - - if (marker != PAGE_MARKER) - throw new IllegalStateException("Page was not allocated [absPtr=" + U.hexLong(absPtr) + - ", cacheId=" + cacheId + ", pageId=" + U.hexLong(pageId) + - ", marker=" + U.hexLong(marker) + ']'); - - while (true) { - long pinCnt = GridUnsafe.getLong(absPtr + PIN_CNT_OFFSET); + private PageNoStoreImpl acquirePage(int pageIdx, long pageId) { + long absPtr = absolute(pageIdx); - if (pinCnt < 0) - throw new IllegalStateException("Page has been deallocated [absPtr=" + U.hexLong(absPtr) + - ", cacheId=" + cacheId + ", pageId=" + U.hexLong(pageId) + ", pinCnt=" + pinCnt + ']'); + if (trackAcquiredPages) + acquiredPages.incrementAndGet(); - if (GridUnsafe.compareAndSwapLong(null, absPtr + PIN_CNT_OFFSET, pinCnt, pinCnt + 1)) - break; - } - - acquiredPages.incrementAndGet(); - - return new PageNoStoreImpl(PageMemoryNoStoreImpl.this, idx, absPtr, cacheId, pageId, restore); + return new PageNoStoreImpl(PageMemoryNoStoreImpl.this, absPtr, pageId); } /** - * @param pinnedPage Page to unpin. */ - private void releasePage(PageNoStoreImpl pinnedPage) { - long absPtr = pinnedPage.absolutePointer(); - - while (true) { - long pinCnt = GridUnsafe.getLong(absPtr + PIN_CNT_OFFSET); - - assert pinCnt > 0 : "Releasing a page that was not pinned [page=" + pinnedPage + - ", pinCnt=" + pinCnt + ']'; - - if (GridUnsafe.compareAndSwapLong(null, absPtr + PIN_CNT_OFFSET, pinCnt, pinCnt - 1)) - break; - } - + private void onPageRelease() { acquiredPages.decrementAndGet(); } /** - * @param relativePtr Relative pointer. + * @param pageIdx Page index. * @return Absolute pointer. */ - private long absolute(long relativePtr) { - int pageIdx = PageIdUtils.pageIndex(relativePtr); - + private long absolute(int pageIdx) { pageIdx &= idxMask; - long offset = ((long)pageIdx) * sysPageSize; + long off = ((long)pageIdx) * sysPageSize; - return pagesBase + offset; + return pagesBase + off; } /** @@ -616,24 +586,12 @@ public class PageMemoryNoStoreImpl implements PageMemory { * @param pageId Page ID to release. */ private void releaseFreePage(long pageId) { - // Clear out flags and file ID. - long relPtr = PageIdUtils.pageId(0, (byte)0, PageIdUtils.pageIndex(pageId)); - - long absPtr = absolute(relPtr); - - // Prepare page to free. - // First, swap pin counter down to -1. - while (true) { - long pinCnt = GridUnsafe.getLong(absPtr + PIN_CNT_OFFSET); - - assert pinCnt >= 0 : "pinCnt=" + pinCnt + ", relPtr=" + U.hexLong(relPtr); + int pageIdx = PageIdUtils.pageIndex(pageId); - if (pinCnt > 0) - throw new IllegalStateException("Releasing a page being in use: " + U.hexLong(relPtr)); + // Clear out flags and file ID. + long relPtr = PageIdUtils.pageId(0, (byte)0, pageIdx); - if (GridUnsafe.compareAndSwapLong(null, absPtr + PIN_CNT_OFFSET, 0, -1)) - break; - } + long absPtr = absolute(pageIdx); // Second, write clean relative pointer instead of page ID. writePageId(absPtr, relPtr); @@ -665,7 +623,7 @@ public class PageMemoryNoStoreImpl implements PageMemory { long cnt = ((freePageRelPtrMasked & COUNTER_MASK) + COUNTER_INC) & COUNTER_MASK; if (freePageRelPtr != INVALID_REL_PTR) { - long freePageAbsPtr = absolute(freePageRelPtr); + long freePageAbsPtr = absolute(PageIdUtils.pageIndex(freePageRelPtr)); long nextFreePageRelPtr = GridUnsafe.getLong(freePageAbsPtr) & ADDRESS_MASK; http://git-wip-us.apache.org/repos/asf/ignite/blob/7db65ddd/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 404c0b2..b52df55 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 @@ -20,54 +20,39 @@ package org.apache.ignite.internal.pagemem.impl; import org.apache.ignite.internal.pagemem.FullPageId; import org.apache.ignite.internal.pagemem.Page; import org.apache.ignite.internal.pagemem.PageIdUtils; -import org.apache.ignite.internal.pagemem.PageMemory; import org.apache.ignite.internal.processors.cache.database.tree.io.PageIO; -import org.apache.ignite.internal.util.OffheapReadWriteLock; import org.apache.ignite.internal.util.typedef.internal.SB; -import java.nio.ByteBuffer; - /** * */ public class PageNoStoreImpl implements Page { /** */ - private int segIdx; - - /** */ private long absPtr; /** */ private long pageId; /** */ - private int cacheId; - - /** */ private PageMemoryNoStoreImpl pageMem; - /** */ - private final ByteBuffer buf; - - /** Page for memory restore */ - private final boolean noTagCheck; - /** - * @param segIdx Segment index. + * @param pageMem Page memory. * @param absPtr Absolute pointer. + * @param pageId Page ID. */ - public PageNoStoreImpl( - PageMemoryNoStoreImpl pageMem, int segIdx, long absPtr, int cacheId, long pageId, boolean noTagCheck - ) { + PageNoStoreImpl(PageMemoryNoStoreImpl pageMem, long absPtr, long pageId) { this.pageMem = pageMem; - this.segIdx = segIdx; this.absPtr = absPtr; - this.cacheId = cacheId; this.pageId = pageId; - this.noTagCheck = noTagCheck; + } - buf = pageMem.wrapPointer(absPtr + PageMemoryNoStoreImpl.PAGE_OVERHEAD, pageMem.pageSize()); + /** + * @return Data pointer. + */ + private long pointer() { + return absPtr + PageMemoryNoStoreImpl.PAGE_OVERHEAD; } /** {@inheritDoc} */ @@ -77,15 +62,15 @@ public class PageNoStoreImpl implements Page { /** {@inheritDoc} */ @Override public FullPageId fullId() { - return new FullPageId(pageId, cacheId); + throw new UnsupportedOperationException(); } /** {@inheritDoc} */ - @Override public ByteBuffer getForRead() { + @Override public long getForReadPointer() { if (pageMem.readLockPage(absPtr, PageIdUtils.tag(pageId))) - return reset(buf.asReadOnlyBuffer()); + return pointer(); - return null; + return 0L; } /** {@inheritDoc} */ @@ -94,31 +79,29 @@ public class PageNoStoreImpl implements Page { } /** {@inheritDoc} */ - @Override public ByteBuffer getForWrite() { - int tag = noTagCheck ? OffheapReadWriteLock.TAG_LOCK_ALWAYS : PageIdUtils.tag(pageId); + @Override public long getForWritePointer() { + int tag = PageIdUtils.tag(pageId); boolean locked = pageMem.writeLockPage(absPtr, tag); - if (!locked && !noTagCheck) - return null; - - assert locked; + if (!locked) + return 0L; - return reset(buf); + return pointer(); } /** {@inheritDoc} */ - @Override public ByteBuffer tryGetForWrite() { - int tag = noTagCheck ? OffheapReadWriteLock.TAG_LOCK_ALWAYS : PageIdUtils.tag(pageId); + @Override public long tryGetForWritePointer() { + int tag = PageIdUtils.tag(pageId); if (pageMem.tryWriteLockPage(absPtr, tag)) - return reset(buf); + return pointer(); - return null; + return 0L; } /** {@inheritDoc} */ @Override public void releaseWrite(boolean markDirty) { - long updatedPageId = PageIO.getPageId(buf); + long updatedPageId = PageIO.getPageId(pointer()); pageMem.writeUnlockPage(absPtr, PageIdUtils.tag(updatedPageId)); } @@ -143,39 +126,11 @@ public class PageNoStoreImpl implements Page { pageMem.releasePage(this); } - /** - * @return Segment index. - */ - int segmentIndex() { - return segIdx; - } - - /** - * @return Absolute pointer to the system page start. - */ - long absolutePointer() { - return absPtr; - } - - /** - * @param buf Byte buffer. - * @return The given buffer back. - */ - private ByteBuffer reset(ByteBuffer buf) { - buf.order(PageMemory.NATIVE_BYTE_ORDER); - - buf.rewind(); - - return buf; - } - /** {@inheritDoc} */ @Override public String toString() { SB sb = new SB("PageNoStoreImpl [absPtr=0x"); sb.appendHex(absPtr); - sb.a(", segIdx=").a(segIdx); - sb.a(", cacheId=").a(cacheId); sb.a(", pageId=0x").appendHex(pageId); sb.a("]"); http://git-wip-us.apache.org/repos/asf/ignite/blob/7db65ddd/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..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 @@ -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.processors.cache.database.tree.io.DataPageIO; /** @@ -50,10 +50,10 @@ public class DataPageInsertFragmentRecord extends PageDeltaRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(ByteBuffer buf) throws IgniteCheckedException { - DataPageIO io = DataPageIO.VERSIONS.forPage(buf); + @Override public void applyDelta(PageMemory pageMem, long pageAddr) throws IgniteCheckedException { + DataPageIO io = DataPageIO.VERSIONS.forPage(pageAddr); - io.addRowFragment(buf, payload, lastLink); + io.addRowFragment(pageAddr, payload, lastLink, pageMem.pageSize()); } /** {@inheritDoc} */ http://git-wip-us.apache.org/repos/asf/ignite/blob/7db65ddd/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..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 @@ -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.processors.cache.database.tree.io.DataPageIO; /** @@ -51,12 +51,12 @@ public class DataPageInsertRecord extends PageDeltaRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(ByteBuffer buf) throws IgniteCheckedException { + @Override public void applyDelta(PageMemory pageMem, long pageAddr) throws IgniteCheckedException { assert payload != null; - DataPageIO io = DataPageIO.VERSIONS.forPage(buf); + DataPageIO io = DataPageIO.VERSIONS.forPage(pageAddr); - io.addRow(buf, payload); + io.addRow(pageAddr, payload, pageMem.pageSize()); } /** {@inheritDoc} */ http://git-wip-us.apache.org/repos/asf/ignite/blob/7db65ddd/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..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 @@ -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.processors.cache.database.tree.io.DataPageIO; import org.apache.ignite.internal.util.typedef.internal.S; @@ -48,11 +48,11 @@ public class DataPageRemoveRecord extends PageDeltaRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(ByteBuffer buf) + @Override public void applyDelta(PageMemory pageMem, long pageAddr) throws IgniteCheckedException { - DataPageIO io = DataPageIO.VERSIONS.forPage(buf); + DataPageIO io = DataPageIO.VERSIONS.forPage(pageAddr); - io.removeRow(buf, itemId); + io.removeRow(pageAddr, itemId, pageMem.pageSize()); } /** {@inheritDoc} */ http://git-wip-us.apache.org/repos/asf/ignite/blob/7db65ddd/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..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 @@ -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.processors.cache.database.tree.io.DataPageIO; import static org.apache.ignite.internal.pagemem.wal.record.WALRecord.RecordType.DATA_PAGE_SET_FREE_LIST_PAGE; @@ -49,10 +49,10 @@ public class DataPageSetFreeListPageRecord extends PageDeltaRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(ByteBuffer buf) throws IgniteCheckedException { - DataPageIO io = DataPageIO.VERSIONS.forPage(buf); + @Override public void applyDelta(PageMemory pageMem, long pageAddr) throws IgniteCheckedException { + DataPageIO io = DataPageIO.VERSIONS.forPage(pageAddr); - io.setFreeListPageId(buf, freeListPage); + io.setFreeListPageId(pageAddr, freeListPage); } /** {@inheritDoc} */ http://git-wip-us.apache.org/repos/asf/ignite/blob/7db65ddd/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..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 @@ -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.processors.cache.database.tree.io.BPlusIO; import org.apache.ignite.internal.processors.cache.database.tree.io.PageIO; @@ -40,10 +40,10 @@ public class FixCountRecord extends PageDeltaRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(ByteBuffer buf) throws IgniteCheckedException { - BPlusIO<?> io = PageIO.getBPlusIO(buf); + @Override public void applyDelta(PageMemory pageMem, long pageAddr) throws IgniteCheckedException { + BPlusIO<?> io = PageIO.getBPlusIO(pageAddr); - io.setCount(buf, cnt); + io.setCount(pageAddr, cnt); } /** {@inheritDoc} */ http://git-wip-us.apache.org/repos/asf/ignite/blob/7db65ddd/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..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 @@ -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.processors.cache.database.tree.io.BPlusInnerIO; import org.apache.ignite.internal.processors.cache.database.tree.io.PageIO; @@ -41,10 +41,10 @@ public class FixLeftmostChildRecord extends PageDeltaRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(ByteBuffer buf) throws IgniteCheckedException { - BPlusInnerIO<?> io = PageIO.getBPlusIO(buf); + @Override public void applyDelta(PageMemory pageMem, long pageAddr) throws IgniteCheckedException { + BPlusInnerIO<?> io = PageIO.getBPlusIO(pageAddr); - io.setLeft(buf, 0, rightId); + io.setLeft(pageAddr, 0, rightId); } /** {@inheritDoc} */ http://git-wip-us.apache.org/repos/asf/ignite/blob/7db65ddd/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..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 @@ -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.processors.cache.database.tree.io.BPlusIO; import org.apache.ignite.internal.processors.cache.database.tree.io.PageIO; @@ -41,11 +41,11 @@ public class FixRemoveId extends PageDeltaRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(ByteBuffer buf) + @Override public void applyDelta(PageMemory pageMem, long pageAddr) throws IgniteCheckedException { - BPlusIO<?> io = PageIO.getBPlusIO(buf); + BPlusIO<?> io = PageIO.getBPlusIO(pageAddr); - io.setRemoveId(buf, rmvId); + io.setRemoveId(pageAddr, rmvId); } /** {@inheritDoc} */ http://git-wip-us.apache.org/repos/asf/ignite/blob/7db65ddd/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..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 @@ -17,15 +17,15 @@ 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.PageIO; 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; /** - * Initializes new page by calling {@link PageIO#initNewPage(ByteBuffer, long)}. + * Initializes new page by calling {@link PageIO#initNewPage(long, long, int)}. */ public class InitNewPageRecord extends PageDeltaRecord { /** */ @@ -54,10 +54,10 @@ public class InitNewPageRecord extends PageDeltaRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(ByteBuffer buf) throws IgniteCheckedException { + @Override public void applyDelta(PageMemory pageMem, long pageAddr) throws IgniteCheckedException { PageIO io = PageIO.getPageIO(ioType, ioVer); - io.initNewPage(buf, newPageId); + io.initNewPage(pageAddr, newPageId, pageMem.pageSize()); } /** {@inheritDoc} */ http://git-wip-us.apache.org/repos/asf/ignite/blob/7db65ddd/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..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 @@ -17,9 +17,9 @@ 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; /** * Inner replace on remove. @@ -57,7 +57,7 @@ public class InnerReplaceRecord<L> extends PageDeltaRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(ByteBuffer dstBuf) 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/7db65ddd/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..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,8 +73,8 @@ public class InsertRecord<L> extends PageDeltaRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(ByteBuffer buf) throws IgniteCheckedException { - io.insert(buf, idx, row, rowBytes, rightId); + @Override public void applyDelta(PageMemory pageMem, long pageAddr) throws IgniteCheckedException { + io.insert(pageAddr, idx, row, rowBytes, rightId); } /** {@inheritDoc} */ http://git-wip-us.apache.org/repos/asf/ignite/blob/7db65ddd/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..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<L> extends PageDeltaRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(ByteBuffer leftBuf) 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/7db65ddd/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 75aaca4..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 @@ -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.processors.cache.database.tree.io.BPlusMetaIO; /** @@ -40,10 +40,10 @@ public class MetaPageAddRootRecord extends PageDeltaRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(ByteBuffer buf) throws IgniteCheckedException { - BPlusMetaIO io = BPlusMetaIO.VERSIONS.forPage(buf); + @Override public void applyDelta(PageMemory pageMem, long pageAddr) throws IgniteCheckedException { + BPlusMetaIO io = BPlusMetaIO.VERSIONS.forPage(pageAddr); - io.addRoot(buf, rootId); + io.addRoot(pageAddr, rootId, pageMem.pageSize()); } /** {@inheritDoc} */ http://git-wip-us.apache.org/repos/asf/ignite/blob/7db65ddd/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 ba1d04d..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(ByteBuffer buf) throws IgniteCheckedException { - BPlusMetaIO io = BPlusMetaIO.VERSIONS.forPage(buf); + @Override public void applyDelta(PageMemory pageMem, long pageAddr) throws IgniteCheckedException { + BPlusMetaIO io = BPlusMetaIO.VERSIONS.forPage(pageAddr); - io.cutRoot(buf); + io.cutRoot(pageAddr, pageMem.pageSize()); } /** {@inheritDoc} */ http://git-wip-us.apache.org/repos/asf/ignite/blob/7db65ddd/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..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 @@ -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.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; @@ -75,15 +75,15 @@ public class MetaPageInitRecord extends InitNewPageRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(ByteBuffer buf) throws IgniteCheckedException { + @Override public void applyDelta(PageMemory pageMem, long pageAddr) throws IgniteCheckedException { PageMetaIO io = ioType == PageIO.T_META ? - PageMetaIO.VERSIONS.forPage(buf) : - PagePartitionMetaIO.VERSIONS.forPage(buf); + PageMetaIO.VERSIONS.forPage(pageAddr) : + PagePartitionMetaIO.VERSIONS.forPage(pageAddr); - io.initNewPage(buf, newPageId); + io.initNewPage(pageAddr, newPageId, pageMem.pageSize()); - io.setTreeRoot(buf, treeRoot); - io.setReuseListRoot(buf, reuseListRoot); + io.setTreeRoot(pageAddr, treeRoot); + io.setReuseListRoot(pageAddr, reuseListRoot); } /** {@inheritDoc} */ http://git-wip-us.apache.org/repos/asf/ignite/blob/7db65ddd/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 a9d2677..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 @@ -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.processors.cache.database.tree.io.BPlusMetaIO; /** @@ -40,11 +40,10 @@ public class MetaPageInitRootRecord extends PageDeltaRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(ByteBuffer buf) - throws IgniteCheckedException { - BPlusMetaIO io = BPlusMetaIO.VERSIONS.forPage(buf); + @Override public void applyDelta(PageMemory pageMem, long pageAddr) throws IgniteCheckedException { + BPlusMetaIO io = BPlusMetaIO.VERSIONS.forPage(pageAddr); - io.initRoot(buf, rootId); + io.initRoot(pageAddr, rootId, pageMem.pageSize()); } /** {@inheritDoc} */ http://git-wip-us.apache.org/repos/asf/ignite/blob/7db65ddd/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..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 @@ -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.processors.cache.database.tree.io.PageIO; import org.apache.ignite.internal.processors.cache.database.tree.io.PageMetaIO; @@ -39,12 +39,12 @@ public class MetaPageUpdateLastAllocatedIndex extends PageDeltaRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(ByteBuffer buf) throws IgniteCheckedException { - assert PageIO.getType(buf) == PageIO.T_META || PageIO.getType(buf) == PageIO.T_PART_META; + @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(buf)); + PageMetaIO io = PageMetaIO.VERSIONS.forVersion(PageIO.getVersion(pageAddr)); - io.setLastAllocatedIndex(buf, lastAllocatedIdx); + io.setLastAllocatedIndex(pageAddr, lastAllocatedIdx); } /** {@inheritDoc} */ http://git-wip-us.apache.org/repos/asf/ignite/blob/7db65ddd/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 5633354..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 @@ -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.processors.cache.database.tree.io.PageMetaIO; /** @@ -38,10 +38,10 @@ public class MetaPageUpdateLastSuccessfulFullSnapshotId extends PageDeltaRecord } /** {@inheritDoc} */ - @Override public void applyDelta(ByteBuffer buf) throws IgniteCheckedException { - PageMetaIO io = PageMetaIO.VERSIONS.forPage(buf); + @Override public void applyDelta(PageMemory pageMem, long pageAddr) throws IgniteCheckedException { + PageMetaIO io = PageMetaIO.VERSIONS.forPage(pageAddr); - io.setLastSuccessfulFullSnapshotId(buf, lastSuccessfulFullSnapshotId); + io.setLastSuccessfulFullSnapshotId(pageAddr, lastSuccessfulFullSnapshotId); } /** {@inheritDoc} */ http://git-wip-us.apache.org/repos/asf/ignite/blob/7db65ddd/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 20e136b..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 @@ -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.processors.cache.database.tree.io.PageMetaIO; /** @@ -42,10 +42,10 @@ public class MetaPageUpdateLastSuccessfulSnapshotId extends PageDeltaRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(ByteBuffer buf) throws IgniteCheckedException { - PageMetaIO io = PageMetaIO.VERSIONS.forPage(buf); + @Override public void applyDelta(PageMemory pageMem, long pageAddr) throws IgniteCheckedException { + PageMetaIO io = PageMetaIO.VERSIONS.forPage(pageAddr); - io.setLastSuccessfulSnapshotId(buf, lastSuccessfulSnapshotId); + io.setLastSuccessfulSnapshotId(pageAddr, lastSuccessfulSnapshotId); } /** {@inheritDoc} */ http://git-wip-us.apache.org/repos/asf/ignite/blob/7db65ddd/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 0a92aef..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 @@ -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.processors.cache.database.tree.io.PageMetaIO; /** @@ -38,10 +38,10 @@ public class MetaPageUpdateNextSnapshotId extends PageDeltaRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(ByteBuffer buf) throws IgniteCheckedException { - PageMetaIO io = PageMetaIO.VERSIONS.forPage(buf); + @Override public void applyDelta(PageMemory pageMem, long pageAddr) throws IgniteCheckedException { + PageMetaIO io = PageMetaIO.VERSIONS.forPage(pageAddr); - io.setNextSnapshotTag(buf, nextSnapshotId); + io.setNextSnapshotTag(pageAddr, nextSnapshotId); } /** {@inheritDoc} */ http://git-wip-us.apache.org/repos/asf/ignite/blob/7db65ddd/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 ae6210a..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 @@ -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.processors.cache.database.tree.io.PagePartitionMetaIO; /** @@ -85,12 +85,12 @@ public class MetaPageUpdatePartitionDataRecord extends PageDeltaRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(ByteBuffer buf) throws IgniteCheckedException { - PagePartitionMetaIO io = PagePartitionMetaIO.VERSIONS.forPage(buf); + @Override public void applyDelta(PageMemory pageMem, long pageAddr) throws IgniteCheckedException { + PagePartitionMetaIO io = PagePartitionMetaIO.VERSIONS.forPage(pageAddr); - io.setUpdateCounter(buf, updateCntr); - io.setGlobalRemoveId(buf, globalRmvId); - io.setSize(buf, partSize); + io.setUpdateCounter(pageAddr, updateCntr); + io.setGlobalRemoveId(pageAddr, globalRmvId); + io.setSize(pageAddr, partSize); } /** http://git-wip-us.apache.org/repos/asf/ignite/blob/7db65ddd/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..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 @@ -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.processors.cache.database.tree.io.BPlusInnerIO; /** @@ -74,8 +74,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(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/7db65ddd/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..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,10 +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 buf Page buffer. + * @param pageMem Page memory. + * @param pageAddr Page address. * @throws IgniteCheckedException If failed. */ - public abstract void applyDelta(ByteBuffer buf) 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/7db65ddd/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 23ebcee..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 @@ -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.processors.cache.database.freelist.io.PagesListMetaIO; /** @@ -34,10 +34,10 @@ public class PageListMetaResetCountRecord extends PageDeltaRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(ByteBuffer buf) throws IgniteCheckedException { - PagesListMetaIO io = PagesListMetaIO.VERSIONS.forPage(buf); + @Override public void applyDelta(PageMemory pageMem, long pageAddr) throws IgniteCheckedException { + PagesListMetaIO io = PagesListMetaIO.VERSIONS.forPage(pageAddr); - io.resetCount(buf); + io.resetCount(pageAddr); } /** {@inheritDoc} */ http://git-wip-us.apache.org/repos/asf/ignite/blob/7db65ddd/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..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 @@ -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.processors.cache.database.freelist.io.PagesListNodeIO; import org.apache.ignite.internal.util.tostring.GridToStringExclude; import org.apache.ignite.internal.util.typedef.internal.S; @@ -51,10 +51,10 @@ public class PagesListAddPageRecord extends PageDeltaRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(ByteBuffer buf) throws IgniteCheckedException { - PagesListNodeIO io = PagesListNodeIO.VERSIONS.forPage(buf); + @Override public void applyDelta(PageMemory pageMem, long pageAddr) throws IgniteCheckedException { + PagesListNodeIO io = PagesListNodeIO.VERSIONS.forPage(pageAddr); - int cnt = io.addPage(buf, dataPageId); + int cnt = io.addPage(pageAddr, dataPageId, pageMem.pageSize()); assert cnt >= 0 : cnt; } http://git-wip-us.apache.org/repos/asf/ignite/blob/7db65ddd/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..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 @@ -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.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; @@ -73,14 +73,14 @@ public class PagesListInitNewPageRecord extends InitNewPageRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(ByteBuffer buf) throws IgniteCheckedException { + @Override public void applyDelta(PageMemory pageMem, long pageAddr) throws IgniteCheckedException { PagesListNodeIO io = PageIO.getPageIO(PageIO.T_PAGE_LIST_NODE, ioVer); - io.initNewPage(buf, pageId()); - io.setPreviousId(buf, prevPageId); + io.initNewPage(pageAddr, pageId(), pageMem.pageSize()); + io.setPreviousId(pageAddr, prevPageId); if (addDataPageId != 0L) { - int cnt = io.addPage(buf, addDataPageId); + int cnt = io.addPage(pageAddr, addDataPageId, pageMem.pageSize()); assert cnt == 0 : cnt; } http://git-wip-us.apache.org/repos/asf/ignite/blob/7db65ddd/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..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 @@ -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.processors.cache.database.freelist.io.PagesListNodeIO; import org.apache.ignite.internal.util.tostring.GridToStringExclude; import org.apache.ignite.internal.util.typedef.internal.S; @@ -51,10 +51,10 @@ public class PagesListRemovePageRecord extends PageDeltaRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(ByteBuffer buf) throws IgniteCheckedException { - PagesListNodeIO io = PagesListNodeIO.VERSIONS.forPage(buf); + @Override public void applyDelta(PageMemory pageMem, long pageAddr) throws IgniteCheckedException { + PagesListNodeIO io = PagesListNodeIO.VERSIONS.forPage(pageAddr); - boolean rmvd = io.removePage(buf, rmvdPageId); + boolean rmvd = io.removePage(pageAddr, rmvdPageId); assert rmvd; } http://git-wip-us.apache.org/repos/asf/ignite/blob/7db65ddd/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..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 @@ -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.processors.cache.database.freelist.io.PagesListNodeIO; /** @@ -47,10 +47,10 @@ public class PagesListSetNextRecord extends PageDeltaRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(ByteBuffer buf) throws IgniteCheckedException { - PagesListNodeIO io = PagesListNodeIO.VERSIONS.forPage(buf); + @Override public void applyDelta(PageMemory pageMem, long pageAddr) throws IgniteCheckedException { + PagesListNodeIO io = PagesListNodeIO.VERSIONS.forPage(pageAddr); - io.setNextId(buf, nextPageId); + io.setNextId(pageAddr, nextPageId); } /** {@inheritDoc} */ http://git-wip-us.apache.org/repos/asf/ignite/blob/7db65ddd/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..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 @@ -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.processors.cache.database.freelist.io.PagesListNodeIO; /** @@ -47,10 +47,10 @@ public class PagesListSetPreviousRecord extends PageDeltaRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(ByteBuffer buf) throws IgniteCheckedException { - PagesListNodeIO io = PagesListNodeIO.VERSIONS.forPage(buf); + @Override public void applyDelta(PageMemory pageMem, long pageAddr) throws IgniteCheckedException { + PagesListNodeIO io = PagesListNodeIO.VERSIONS.forPage(pageAddr); - io.setPreviousId(buf, prevPageId); + io.setPreviousId(pageAddr, prevPageId); } /** {@inheritDoc} */ http://git-wip-us.apache.org/repos/asf/ignite/blob/7db65ddd/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..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 @@ -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.processors.cache.database.tree.io.PageIO; /** @@ -40,8 +40,8 @@ public class RecycleRecord extends PageDeltaRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(ByteBuffer buf) throws IgniteCheckedException { - PageIO.setPageId(buf, newPageId); + @Override public void applyDelta(PageMemory pageMem, long pageAddr) throws IgniteCheckedException { + PageIO.setPageId(pageAddr, newPageId); } /** {@inheritDoc} */ http://git-wip-us.apache.org/repos/asf/ignite/blob/7db65ddd/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..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 @@ -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.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; @@ -47,13 +47,13 @@ public class RemoveRecord extends PageDeltaRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(ByteBuffer buf) throws IgniteCheckedException { - BPlusIO<?> io = PageIO.getBPlusIO(buf); + @Override public void applyDelta(PageMemory pageMem, long pageAddr) throws IgniteCheckedException { + BPlusIO<?> io = PageIO.getBPlusIO(pageAddr); - if (io.getCount(buf) != cnt) - throw new DeltaApplicationException("Count is wrong [expCnt=" + cnt + ", actual=" + io.getCount(buf) + ']'); + if (io.getCount(pageAddr) != cnt) + throw new DeltaApplicationException("Count is wrong [expCnt=" + cnt + ", actual=" + io.getCount(pageAddr) + ']'); - io.remove(buf, idx, cnt); + io.remove(pageAddr, idx, cnt); } /** {@inheritDoc} */ http://git-wip-us.apache.org/repos/asf/ignite/blob/7db65ddd/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..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,12 +56,12 @@ public class ReplaceRecord<L> extends PageDeltaRecord { } /** {@inheritDoc} */ - @Override public void applyDelta(ByteBuffer buf) + @Override public void applyDelta(PageMemory pageMem, long pageAddr) throws IgniteCheckedException { - if (io.getCount(buf) < idx) + if (io.getCount(pageAddr) < idx) throw new DeltaApplicationException("Index is greater than count: " + idx); - io.store(buf, idx, row, rowBytes); + io.store(pageAddr, idx, row, rowBytes); } /** {@inheritDoc} */
