ignite-gg-11810
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/94f22a0c Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/94f22a0c Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/94f22a0c Branch: refs/heads/ignite-gg-11810 Commit: 94f22a0c08971e3bb8ff13c2cc8e32f748f1c3e4 Parents: 8fcac6f Author: sboikov <sboi...@gridgain.com> Authored: Thu Dec 22 11:06:51 2016 +0300 Committer: sboikov <sboi...@gridgain.com> Committed: Thu Dec 22 11:19:27 2016 +0300 ---------------------------------------------------------------------- .../cache/IgniteCacheOffheapManagerImpl.java | 99 ++++++------- .../cache/database/freelist/FreeListImpl.java | 6 +- .../cache/database/tree/BPlusTree.java | 147 +++++++++---------- .../cache/database/tree/io/DataPageIO.java | 129 ++++++++-------- .../database/tree/reuse/ReuseListImpl.java | 2 +- .../processors/query/h2/database/H2Tree.java | 2 +- 6 files changed, 189 insertions(+), 196 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/94f22a0c/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 02a068d..4b1d464 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 @@ -31,6 +31,7 @@ import org.apache.ignite.cluster.ClusterNode; import org.apache.ignite.internal.pagemem.FullPageId; import org.apache.ignite.internal.pagemem.PageIdUtils; import org.apache.ignite.internal.pagemem.PageMemory; +import org.apache.ignite.internal.pagemem.PageUtils; import org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion; import org.apache.ignite.internal.processors.cache.database.CacheDataRow; import org.apache.ignite.internal.processors.cache.database.CacheDataRowAdapter; @@ -1085,7 +1086,7 @@ public class IgniteCacheOffheapManagerImpl extends GridCacheManagerAdapter imple } /** {@inheritDoc} */ - @Override protected int compare(BPlusIO<KeySearchRow> io, ByteBuffer buf, int idx, KeySearchRow row) + @Override protected int compare(BPlusIO<KeySearchRow> io, long buf, int idx, KeySearchRow row) throws IgniteCheckedException { int hash = ((RowLinkIO)io).getHash(buf, idx); @@ -1100,7 +1101,7 @@ public class IgniteCacheOffheapManagerImpl extends GridCacheManagerAdapter imple } /** {@inheritDoc} */ - @Override protected DataRow getRow(BPlusIO<KeySearchRow> io, ByteBuffer buf, int idx) + @Override protected DataRow getRow(BPlusIO<KeySearchRow> io, long buf, int idx) throws IgniteCheckedException { int hash = ((RowLinkIO)io).getHash(buf, idx); long link = ((RowLinkIO)io).getLink(buf, idx); @@ -1169,9 +1170,9 @@ public class IgniteCacheOffheapManagerImpl extends GridCacheManagerAdapter imple * @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); + private static void store0(long buf, int off, long link, int hash) { + PageUtils.putLong(buf, off, link); + PageUtils.putInt(buf, off + 8, hash); } /** @@ -1183,14 +1184,14 @@ public class IgniteCacheOffheapManagerImpl extends GridCacheManagerAdapter imple * @param idx Index. * @return Row link. */ - public long getLink(ByteBuffer buf, int idx); + public long getLink(long buf, int idx); /** * @param buf Buffer. * @param idx Index. * @return Key hash code. */ - public int getHash(ByteBuffer buf, int idx); + public int getHash(long buf, int idx); } /** @@ -1210,14 +1211,14 @@ public class IgniteCacheOffheapManagerImpl extends GridCacheManagerAdapter imple } /** {@inheritDoc} */ - @Override public void storeByOffset(ByteBuffer buf, int off, KeySearchRow row) { + @Override public void storeByOffset(long buf, int off, KeySearchRow row) { assert row.link() != 0; store0(buf, off, row.link(), row.hash); } /** {@inheritDoc} */ - @Override public KeySearchRow getLookupRow(BPlusTree<KeySearchRow, ?> tree, ByteBuffer buf, int idx) { + @Override public KeySearchRow getLookupRow(BPlusTree<KeySearchRow, ?> tree, long buf, int idx) { int hash = getHash(buf, idx); long link = getLink(buf, idx); @@ -1225,7 +1226,7 @@ public class IgniteCacheOffheapManagerImpl extends GridCacheManagerAdapter imple } /** {@inheritDoc} */ - @Override public void store(ByteBuffer dst, int dstIdx, BPlusIO<KeySearchRow> srcIo, ByteBuffer src, + @Override public void store(long dst, int dstIdx, BPlusIO<KeySearchRow> srcIo, long src, int srcIdx) { int hash = ((RowLinkIO)srcIo).getHash(src, srcIdx); long link = ((RowLinkIO)srcIo).getLink(src, srcIdx); @@ -1234,15 +1235,15 @@ public class IgniteCacheOffheapManagerImpl extends GridCacheManagerAdapter imple } /** {@inheritDoc} */ - @Override public long getLink(ByteBuffer buf, int idx) { + @Override public long getLink(long buf, int idx) { assert idx < getCount(buf) : idx; - return buf.getLong(offset(idx)); + return PageUtils.getLong(buf, offset(idx)); } /** {@inheritDoc} */ - @Override public int getHash(ByteBuffer buf, int idx) { - return buf.getInt(offset(idx) + 8); + @Override public int getHash(long buf, int idx) { + return PageUtils.getInt(buf, offset(idx) + 8); } } @@ -1263,20 +1264,20 @@ public class IgniteCacheOffheapManagerImpl extends GridCacheManagerAdapter imple } /** {@inheritDoc} */ - @Override public void storeByOffset(ByteBuffer buf, int off, KeySearchRow row) { + @Override public void storeByOffset(long buf, int off, KeySearchRow row) { assert row.link() != 0; store0(buf, off, row.link(), row.hash); } /** {@inheritDoc} */ - @Override public void store(ByteBuffer dst, int dstIdx, BPlusIO<KeySearchRow> srcIo, ByteBuffer src, + @Override public void store(long dst, int dstIdx, BPlusIO<KeySearchRow> srcIo, long src, int srcIdx) { store0(dst, offset(dstIdx), getLink(src, srcIdx), getHash(src, srcIdx)); } /** {@inheritDoc} */ - @Override public KeySearchRow getLookupRow(BPlusTree<KeySearchRow, ?> tree, ByteBuffer buf, int idx) { + @Override public KeySearchRow getLookupRow(BPlusTree<KeySearchRow, ?> tree, long buf, int idx) { int hash = getHash(buf, idx); long link = getLink(buf, idx); @@ -1284,15 +1285,15 @@ public class IgniteCacheOffheapManagerImpl extends GridCacheManagerAdapter imple } /** {@inheritDoc} */ - @Override public long getLink(ByteBuffer buf, int idx) { + @Override public long getLink(long buf, int idx) { assert idx < getCount(buf) : idx; - return buf.getLong(offset(idx)); + return PageUtils.getLong(buf, offset(idx)); } /** {@inheritDoc} */ - @Override public int getHash(ByteBuffer buf, int idx) { - return buf.getInt(offset(idx) + 8); + @Override public int getHash(long buf, int idx) { + return PageUtils.getInt(buf, offset(idx) + 8); } } @@ -1387,7 +1388,7 @@ public class IgniteCacheOffheapManagerImpl extends GridCacheManagerAdapter imple } /** {@inheritDoc} */ - @Override protected int compare(BPlusIO<PendingRow> io, ByteBuffer buf, int idx, PendingRow row) + @Override protected int compare(BPlusIO<PendingRow> io, long buf, int idx, PendingRow row) throws IgniteCheckedException { long expireTime = ((PendingRowIO)io).getExpireTime(buf, idx); @@ -1405,7 +1406,7 @@ public class IgniteCacheOffheapManagerImpl extends GridCacheManagerAdapter imple } /** {@inheritDoc} */ - @Override protected PendingRow getRow(BPlusIO<PendingRow> io, ByteBuffer buf, int idx) + @Override protected PendingRow getRow(BPlusIO<PendingRow> io, long buf, int idx) throws IgniteCheckedException { return io.getLookupRow(this, buf, idx); } @@ -1420,14 +1421,14 @@ public class IgniteCacheOffheapManagerImpl extends GridCacheManagerAdapter imple * @param idx Index. * @return Expire time. */ - long getExpireTime(ByteBuffer buf, int idx); + long getExpireTime(long buf, int idx); /** * @param buf Buffer. * @param idx Index. * @return Link. */ - long getLink(ByteBuffer buf, int idx); + long getLink(long buf, int idx); } /** @@ -1447,43 +1448,43 @@ public class IgniteCacheOffheapManagerImpl extends GridCacheManagerAdapter imple } /** {@inheritDoc} */ - @Override public void storeByOffset(ByteBuffer buf, int off, PendingRow row) throws IgniteCheckedException { + @Override public void storeByOffset(long 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); + PageUtils.putLong(buf, off, row.expireTime); + PageUtils.putLong(buf, off + 8, row.link); } /** {@inheritDoc} */ - @Override public void store(ByteBuffer dst, + @Override public void store(long dst, int dstIdx, BPlusIO<PendingRow> srcIo, - ByteBuffer src, + long src, int srcIdx) throws IgniteCheckedException { int dstOff = offset(dstIdx); long link = ((PendingRowIO)srcIo).getLink(src, srcIdx); long expireTime = ((PendingRowIO)srcIo).getExpireTime(src, srcIdx); - dst.putLong(dstOff, expireTime); - dst.putLong(dstOff + 8, link); + PageUtils.putLong(dst, dstOff, expireTime); + PageUtils.putLong(dst, dstOff + 8, link); } /** {@inheritDoc} */ - @Override public PendingRow getLookupRow(BPlusTree<PendingRow, ?> tree, ByteBuffer buf, int idx) + @Override public PendingRow getLookupRow(BPlusTree<PendingRow, ?> tree, long buf, int idx) throws IgniteCheckedException { return PendingRow.createRowWithKey(((PendingEntriesTree)tree).cctx, getExpireTime(buf, idx), getLink(buf, idx)); } /** {@inheritDoc} */ - @Override public long getExpireTime(ByteBuffer buf, int idx) { - return buf.getLong(offset(idx)); + @Override public long getExpireTime(long buf, int idx) { + return PageUtils.getLong(buf, offset(idx)); } /** {@inheritDoc} */ - @Override public long getLink(ByteBuffer buf, int idx) { - return buf.getLong(offset(idx) + 8); + @Override public long getLink(long buf, int idx) { + return PageUtils.getLong(buf, offset(idx) + 8); } } @@ -1504,43 +1505,43 @@ public class IgniteCacheOffheapManagerImpl extends GridCacheManagerAdapter imple } /** {@inheritDoc} */ - @Override public void storeByOffset(ByteBuffer buf, int off, PendingRow row) throws IgniteCheckedException { + @Override public void storeByOffset(long 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); + PageUtils.putLong(buf, off, row.expireTime); + PageUtils.putLong(buf, off + 8, row.link); } /** {@inheritDoc} */ - @Override public void store(ByteBuffer dst, + @Override public void store(long dst, int dstIdx, BPlusIO<PendingRow> srcIo, - ByteBuffer src, + long src, int srcIdx) throws IgniteCheckedException { int dstOff = offset(dstIdx); long link = ((PendingRowIO)srcIo).getLink(src, srcIdx); long expireTime = ((PendingRowIO)srcIo).getExpireTime(src, srcIdx); - dst.putLong(dstOff, expireTime); - dst.putLong(dstOff + 8, link); + PageUtils.putLong(dst, dstOff, expireTime); + PageUtils.putLong(dst, dstOff + 8, link); } /** {@inheritDoc} */ - @Override public PendingRow getLookupRow(BPlusTree<PendingRow, ?> tree, ByteBuffer buf, int idx) + @Override public PendingRow getLookupRow(BPlusTree<PendingRow, ?> tree, long buf, int idx) throws IgniteCheckedException { return PendingRow.createRowWithKey(((PendingEntriesTree)tree).cctx, getExpireTime(buf, idx), getLink(buf, idx)); } /** {@inheritDoc} */ - @Override public long getExpireTime(ByteBuffer buf, int idx) { - return buf.getLong(offset(idx)); + @Override public long getExpireTime(long buf, int idx) { + return PageUtils.getLong(buf, offset(idx)); } /** {@inheritDoc} */ - @Override public long getLink(ByteBuffer buf, int idx) { - return buf.getLong(offset(idx) + 8); + @Override public long getLink(long buf, int idx) { + return PageUtils.getLong(buf, offset(idx) + 8); } } } http://git-wip-us.apache.org/repos/asf/ignite/blob/94f22a0c/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/freelist/FreeListImpl.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/freelist/FreeListImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/freelist/FreeListImpl.java index af20d15..1d2524d 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/freelist/FreeListImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/freelist/FreeListImpl.java @@ -109,7 +109,7 @@ public class FreeListImpl extends PagesList implements FreeList, ReuseList { */ private int addRow( Page page, - ByteBuffer buf, + long buf, DataPageIO io, CacheDataRow row, int rowSize @@ -149,7 +149,7 @@ public class FreeListImpl extends PagesList implements FreeList, ReuseList { */ private int addRowFragment( Page page, - ByteBuffer buf, + long buf, DataPageIO io, CacheDataRow row, int written, @@ -179,7 +179,7 @@ public class FreeListImpl extends PagesList implements FreeList, ReuseList { /** */ private final PageHandler<Void, Long> rmvRow = new PageHandler<Void, Long>() { - @Override public Long run(Page page, PageIO iox, ByteBuffer buf, Void arg, int itemId) + @Override public Long run(Page page, PageIO iox, long buf, Void arg, int itemId) throws IgniteCheckedException { DataPageIO io = (DataPageIO)iox; http://git-wip-us.apache.org/repos/asf/ignite/blob/94f22a0c/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/BPlusTree.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/BPlusTree.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/BPlusTree.java index 6ea1bff..b8a1004 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/BPlusTree.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/BPlusTree.java @@ -18,7 +18,6 @@ package org.apache.ignite.internal.processors.cache.database.tree; import java.io.Externalizable; -import java.nio.ByteBuffer; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; @@ -127,7 +126,7 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure { return null; try (Page page = page(pageId)) { - ByteBuffer buf = readLock(page); // No correctness guaranties. + long buf = readLock(page); // No correctness guaranties. try { BPlusIO io = io(buf); @@ -174,7 +173,7 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure { return "<Zero>"; try (Page page = page(pageId)) { - ByteBuffer buf = readLock(page); // No correctness guaranties. + long buf = readLock(page); // No correctness guaranties. try { BPlusIO<L> io = io(buf); @@ -193,7 +192,7 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure { /** */ private final GetPageHandler<Get> askNeighbor = new GetPageHandler<Get>() { - @Override public Result run0(Page page, ByteBuffer buf, BPlusIO<L> io, Get g, int isBack) { + @Override public Result run0(Page page, long buf, BPlusIO<L> io, Get g, int isBack) { assert !io.isLeaf(); // Inner page. boolean back = isBack == TRUE.ordinal(); @@ -220,7 +219,7 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure { /** */ private final GetPageHandler<Get> search = new GetPageHandler<Get>() { - @Override public Result run0(Page page, ByteBuffer buf, BPlusIO<L> io, Get g, int lvl) + @Override public Result run0(Page page, long buf, BPlusIO<L> io, Get g, int lvl) throws IgniteCheckedException { // Check the triangle invariant. if (io.getForward(buf) != g.fwdId) @@ -296,7 +295,7 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure { /** */ private final GetPageHandler<Put> replace = new GetPageHandler<Put>() { - @Override public Result run0(Page page, ByteBuffer buf, BPlusIO<L> io, Put p, int lvl) + @Override public Result run0(Page page, long buf, BPlusIO<L> io, Put p, int lvl) throws IgniteCheckedException { // Check the triangle invariant. if (io.getForward(buf) != p.fwdId) @@ -338,7 +337,7 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure { /** */ private final GetPageHandler<Put> insert = new GetPageHandler<Put>() { - @Override public Result run0(Page page, ByteBuffer buf, BPlusIO<L> io, Put p, int lvl) + @Override public Result run0(Page page, long buf, BPlusIO<L> io, Put p, int lvl) throws IgniteCheckedException { assert p.btmLvl == lvl : "we must always insert at the bottom level: " + p.btmLvl + " " + lvl; @@ -378,7 +377,7 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure { /** */ private final GetPageHandler<Remove> removeFromLeaf = new GetPageHandler<Remove>() { - @Override public Result run0(Page leaf, ByteBuffer buf, BPlusIO<L> io, Remove r, int lvl) + @Override public Result run0(Page leaf, long buf, BPlusIO<L> io, Remove r, int lvl) throws IgniteCheckedException { assert lvl == 0 : lvl; // Leaf. @@ -450,7 +449,7 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure { /** */ private final GetPageHandler<Remove> lockBackAndRemoveFromLeaf = new GetPageHandler<Remove>() { - @Override protected Result run0(Page back, ByteBuffer buf, BPlusIO<L> io, Remove r, int lvl) + @Override protected Result run0(Page back, long buf, BPlusIO<L> io, Remove r, int lvl) throws IgniteCheckedException { // Check that we have consistent view of the world. if (io.getForward(buf) != r.pageId) @@ -469,7 +468,7 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure { /** */ private final GetPageHandler<Remove> lockBackAndTail = new GetPageHandler<Remove>() { - @Override public Result run0(Page back, ByteBuffer buf, BPlusIO<L> io, Remove r, int lvl) + @Override public Result run0(Page back, long buf, BPlusIO<L> io, Remove r, int lvl) throws IgniteCheckedException { // Check that we have consistent view of the world. if (io.getForward(buf) != r.pageId) @@ -487,7 +486,7 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure { /** */ private final GetPageHandler<Remove> lockTailForward = new GetPageHandler<Remove>() { - @Override protected Result run0(Page page, ByteBuffer buf, BPlusIO<L> io, Remove r, int lvl) + @Override protected Result run0(Page page, long buf, BPlusIO<L> io, Remove r, int lvl) throws IgniteCheckedException { r.addTail(page, buf, io, lvl, Tail.FORWARD); @@ -497,7 +496,7 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure { /** */ private final GetPageHandler<Remove> lockTail = new GetPageHandler<Remove>() { - @Override public Result run0(Page page, ByteBuffer buf, BPlusIO<L> io, Remove r, int lvl) + @Override public Result run0(Page page, long buf, BPlusIO<L> io, Remove r, int lvl) throws IgniteCheckedException { assert lvl > 0 : lvl; // We are not at the bottom. @@ -521,7 +520,7 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure { /** */ private final PageHandler<Void, Bool> cutRoot = new PageHandler<Void, Bool>() { - @Override public Bool run(Page meta, PageIO iox, ByteBuffer buf, Void ignore, int lvl) + @Override public Bool run(Page meta, PageIO iox, long buf, Void ignore, int lvl) throws IgniteCheckedException { // Safe cast because we should never recycle meta page until the tree is destroyed. BPlusMetaIO io = (BPlusMetaIO)iox; @@ -539,7 +538,7 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure { /** */ private final PageHandler<Long, Bool> addRoot = new PageHandler<Long, Bool>() { - @Override public Bool run(Page meta, PageIO iox, ByteBuffer buf, Long rootPageId, int lvl) + @Override public Bool run(Page meta, PageIO iox, long buf, Long rootPageId, int lvl) throws IgniteCheckedException { assert rootPageId != null; @@ -559,7 +558,7 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure { /** */ private final PageHandler<Long, Bool> initRoot = new PageHandler<Long, Bool>() { - @Override public Bool run(Page meta, PageIO iox, ByteBuffer buf, Long rootId, int lvl) + @Override public Bool run(Page meta, PageIO iox, long buf, Long rootId, int lvl) throws IgniteCheckedException { assert rootId != null; @@ -657,7 +656,7 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure { * @return Root level. */ private int getRootLevel(Page meta) { - ByteBuffer buf = readLock(meta); // Meta can't be removed. + long buf = readLock(meta); // Meta can't be removed. try { return BPlusMetaIO.VERSIONS.forPage(buf).getRootLevel(buf); @@ -673,7 +672,7 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure { * @return Page ID. */ private long getFirstPageId(Page meta, int lvl) { - ByteBuffer buf = readLock(meta); // Meta can't be removed. + long buf = readLock(meta); // Meta can't be removed. try { BPlusMetaIO io = BPlusMetaIO.VERSIONS.forPage(buf); @@ -705,7 +704,7 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure { } try (Page first = page(firstPageId)) { - ByteBuffer buf = readLock(first); // We always merge pages backwards, the first page is never removed. + long buf = readLock(first); // We always merge pages backwards, the first page is never removed. try { cursor.init(buf, io(buf), 0); @@ -922,7 +921,7 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure { */ private void validateDownKeys(long pageId, L minRow) throws IgniteCheckedException { try (Page page = page(pageId)) { - ByteBuffer buf = readLock(page); // No correctness guaranties. + long buf = readLock(page); // No correctness guaranties. try { BPlusIO<L> io = io(buf); @@ -983,7 +982,7 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure { */ private L getGreatestRowInSubTree(long pageId) throws IgniteCheckedException { try (Page page = page(pageId)) { - ByteBuffer buf = readLock(page); // No correctness guaranties. + long buf = readLock(page); // No correctness guaranties. try { BPlusIO<L> io = io(buf); @@ -1038,7 +1037,7 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure { long leftmostChildId; try (Page page = page(pageId)) { - ByteBuffer buf = readLock(page); // No correctness guaranties. + long buf = readLock(page); // No correctness guaranties. try { BPlusIO<L> io = io(buf); @@ -1068,7 +1067,7 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure { */ private void validateDownPages(Page meta, long pageId, long fwdId, final int lvl) throws IgniteCheckedException { try (Page page = page(pageId)) { - ByteBuffer buf = readLock(page); // No correctness guaranties. + long buf = readLock(page); // No correctness guaranties. try { long realPageId = BPlusIO.getPageId(buf); @@ -1103,7 +1102,7 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure { if (fwdId != 0) { // For the rightmost child ask neighbor. try (Page fwd = page(fwdId)) { - ByteBuffer fwdBuf = readLock(fwd); // No correctness guaranties. + long fwdBuf = readLock(fwd); // No correctness guaranties. try { if (io(fwdBuf) != io) @@ -1135,7 +1134,7 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure { * @return String. * @throws IgniteCheckedException If failed. */ - private String printPage(BPlusIO<L> io, ByteBuffer buf, boolean keys) throws IgniteCheckedException { + private String printPage(BPlusIO<L> io, long buf, boolean keys) throws IgniteCheckedException { StringBuilder b = new StringBuilder(); b.append(formatPageId(PageIO.getPageId(buf))); @@ -1170,7 +1169,7 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure { * @return Keys as String. * @throws IgniteCheckedException If failed. */ - private String printPageKeys(BPlusIO<L> io, ByteBuffer buf) throws IgniteCheckedException { + private String printPageKeys(BPlusIO<L> io, long buf) throws IgniteCheckedException { int cnt = io.getCount(buf); StringBuilder b = new StringBuilder(); @@ -1488,7 +1487,7 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure { while (pageId != 0) { try (Page page = page(pageId)) { - ByteBuffer buf = readLock(page); // No correctness guaranties. + long buf = readLock(page); // No correctness guaranties. try { if (io == null) { @@ -1598,7 +1597,7 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure { long pagesCnt = 0; try (Page meta = page(metaPageId)) { - ByteBuffer metaBuf = writeLock(meta); // No checks, we must be out of use. + long metaBuf = writeLock(meta); // No checks, we must be out of use. try { for (long pageId : getFirstPageIds(metaBuf)) { @@ -1606,7 +1605,7 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure { do { try (Page page = page(pageId)) { - ByteBuffer buf = writeLock(page); // No checks, we must be out of use. + long buf = writeLock(page); // No checks, we must be out of use. try { BPlusIO<L> io = io(buf); @@ -1658,7 +1657,7 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure { * @param metaBuf Meta page buffer. * @return First page IDs. */ - protected Iterable<Long> getFirstPageIds(ByteBuffer metaBuf) { + protected Iterable<Long> getFirstPageIds(long metaBuf) { List<Long> result = new ArrayList<>(); BPlusMetaIO mio = BPlusMetaIO.VERSIONS.forPage(metaBuf); @@ -1677,7 +1676,7 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure { * @return Recycled page ID. * @throws IgniteCheckedException If failed. */ - private long recyclePage(long pageId, Page page, ByteBuffer buf) throws IgniteCheckedException { + private long recyclePage(long pageId, Page page, long buf) throws IgniteCheckedException { // Rotate page ID to avoid concurrency issues with reused pages. pageId = PageIdUtils.rotatePageId(pageId); @@ -1704,10 +1703,10 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure { private boolean splitPage( BPlusIO io, Page page, - ByteBuffer buf, + long buf, long fwdId, Page fwd, - ByteBuffer fwdBuf, + long fwdBuf, int idx ) throws IgniteCheckedException { int cnt = io.getCount(buf); @@ -1740,7 +1739,7 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure { * @param page Page. * @param buf Buffer. */ - private void writeUnlockAndClose(Page page, ByteBuffer buf) { + private void writeUnlockAndClose(Page page, long buf) { try { writeUnlock(page, buf, true); } @@ -1860,7 +1859,7 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure { * @param back Backward page. * @return Page ID. */ - private long doAskNeighbor(BPlusIO<L> io, ByteBuffer buf, boolean back) { + private long doAskNeighbor(BPlusIO<L> io, long buf, boolean back) { long res; if (back) { @@ -1938,9 +1937,9 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure { int rootLvl; long rootId; - ByteBuffer buf = readLock(meta); // Meta can't be removed. + long buf = readLock(meta); // Meta can't be removed. - assert buf != null : "Failed to read lock meta page [page=" + meta + ", metaPageId=" + + assert buf != 0 : "Failed to read lock meta page [page=" + meta + ", metaPageId=" + U.hexLong(metaPageId) + ']'; try { @@ -1975,7 +1974,7 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure { * @return {@code true} If we need to stop. * @throws IgniteCheckedException If failed. */ - boolean found(BPlusIO<L> io, ByteBuffer buf, int idx, int lvl) throws IgniteCheckedException { + boolean found(BPlusIO<L> io, long buf, int idx, int lvl) throws IgniteCheckedException { assert lvl >= 0; return lvl == 0; // Stop if we are at the bottom. @@ -1989,7 +1988,7 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure { * @return {@code true} If we need to stop. * @throws IgniteCheckedException If failed. */ - boolean notFound(BPlusIO<L> io, ByteBuffer buf, int idx, int lvl) throws IgniteCheckedException { + boolean notFound(BPlusIO<L> io, long buf, int idx, int lvl) throws IgniteCheckedException { assert lvl >= 0; return lvl == 0; // Stop if we are at the bottom. @@ -2027,7 +2026,7 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure { } /** {@inheritDoc} */ - @Override boolean found(BPlusIO<L> io, ByteBuffer buf, int idx, int lvl) throws IgniteCheckedException { + @Override boolean found(BPlusIO<L> io, long buf, int idx, int lvl) throws IgniteCheckedException { // Check if we are on an inner page and can't get row from it. if (lvl != 0 && !canGetRowFromInner) return false; @@ -2060,12 +2059,12 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure { } /** {@inheritDoc} */ - @Override boolean found(BPlusIO<L> io, ByteBuffer buf, int idx, int lvl) throws IgniteCheckedException { + @Override boolean found(BPlusIO<L> io, long buf, int idx, int lvl) throws IgniteCheckedException { throw new IllegalStateException(); // Must never be called because we always have a shift. } /** {@inheritDoc} */ - @Override boolean notFound(BPlusIO<L> io, ByteBuffer buf, int idx, int lvl) throws IgniteCheckedException { + @Override boolean notFound(BPlusIO<L> io, long buf, int idx, int lvl) throws IgniteCheckedException { if (lvl != 0) return false; @@ -2093,7 +2092,7 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure { private Page tail; /** */ - private ByteBuffer tailBuf; + private long tailBuf; /** * Bottom level for insertion (insert can't go deeper). Will be incremented on split on each level. @@ -2117,7 +2116,7 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure { } /** {@inheritDoc} */ - @Override boolean found(BPlusIO<L> io, ByteBuffer buf, int idx, int lvl) { + @Override boolean found(BPlusIO<L> io, long buf, int idx, int lvl) { if (lvl == 0) // Leaf: need to stop. return true; @@ -2131,7 +2130,7 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure { } /** {@inheritDoc} */ - @Override boolean notFound(BPlusIO<L> io, ByteBuffer buf, int idx, int lvl) { + @Override boolean notFound(BPlusIO<L> io, long buf, int idx, int lvl) { assert btmLvl >= 0 : btmLvl; assert lvl >= btmLvl : lvl; @@ -2142,8 +2141,8 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure { * @param tail Tail page. * @param tailBuf Tail buffer. */ - private void tail(Page tail, ByteBuffer tailBuf) { - assert (tail == null) == (tailBuf == null); + private void tail(Page tail, long tailBuf) { + assert (tail == null) == (tailBuf == 0L); if (this.tail != null) writeUnlockAndClose(this.tail, this.tailBuf); @@ -2164,7 +2163,7 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure { row = null; rightId = 0; - tail(null, null); + tail(null, 0L); } /** @@ -2183,7 +2182,7 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure { * @return Move up row. * @throws IgniteCheckedException If failed. */ - private L insert(Page page, BPlusIO<L> io, ByteBuffer buf, int idx, int lvl) + private L insert(Page page, BPlusIO<L> io, long buf, int idx, int lvl) throws IgniteCheckedException { int maxCnt = io.getMaxCount(pageMem.pageSize(), buf); int cnt = io.getCount(buf); @@ -2203,7 +2202,7 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure { * @param idx Index. * @throws IgniteCheckedException If failed. */ - private void insertSimple(Page page, BPlusIO<L> io, ByteBuffer buf, int idx) + private void insertSimple(Page page, BPlusIO<L> io, long buf, int idx) throws IgniteCheckedException { io.insert(buf, idx, row, null, rightId); @@ -2220,7 +2219,7 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure { * @return Move up row. * @throws IgniteCheckedException If failed. */ - private L insertWithSplit(Page page, BPlusIO<L> io, final ByteBuffer buf, int idx, int lvl) + private L insertWithSplit(Page page, BPlusIO<L> io, final long buf, int idx, int lvl) throws IgniteCheckedException { long fwdId = allocatePage(bag); @@ -2228,9 +2227,9 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure { // Need to check this before the actual split, because after the split we will have new forward page here. boolean hadFwd = io.getForward(buf) != 0; - ByteBuffer fwdBuf = writeLock(fwd); // Initial write, no need to check for concurrent modification. + long fwdBuf = writeLock(fwd); // Initial write, no need to check for concurrent modification. - assert fwdBuf != null; + assert fwdBuf != 0L; try { // Never write full forward page, because it is known to be new. @@ -2275,9 +2274,9 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure { if (io.isLeaf()) io = latestInnerIO(); - ByteBuffer newRootBuf = writeLock(newRoot); // Initial write. + long newRootBuf = writeLock(newRoot); // Initial write. - assert newRootBuf != null; + assert newRootBuf != 0L; try { // Never write full new root page, because it is known to be new. @@ -2405,7 +2404,7 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure { } /** {@inheritDoc} */ - @Override boolean notFound(BPlusIO<L> io, ByteBuffer buf, int idx, int lvl) { + @Override boolean notFound(BPlusIO<L> io, long buf, int idx, int lvl) { if (lvl == 0) { assert tail == null; @@ -2772,7 +2771,7 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure { * @param idx Index to remove. * @throws IgniteCheckedException If failed. */ - private void removeDataRowFromLeaf(Page page, BPlusIO<L> io, ByteBuffer buf, int cnt, int idx) + private void removeDataRowFromLeaf(Page page, BPlusIO<L> io, long buf, int cnt, int idx) throws IgniteCheckedException { assert idx >= 0 && idx < cnt: idx; assert io.isLeaf(): "inner"; @@ -2794,7 +2793,7 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure { * @param idx Index to remove. * @throws IgniteCheckedException If failed. */ - private void doRemove(Page page, BPlusIO<L> io, ByteBuffer buf, int cnt, int idx) + private void doRemove(Page page, BPlusIO<L> io, long buf, int cnt, int idx) throws IgniteCheckedException { assert cnt > 0 : cnt; assert idx >= 0 && idx < cnt : idx + " " + cnt; @@ -2966,7 +2965,7 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure { * @param release Release write lock and release page. * @throws IgniteCheckedException If failed. */ - private void freePage(Page page, ByteBuffer buf, boolean release) + private void freePage(Page page, long buf, boolean release) throws IgniteCheckedException { long pageId = page.id(); @@ -3165,7 +3164,7 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure { * @param type Type. * @return Added tail. */ - private Tail<L> addTail(Page page, ByteBuffer buf, BPlusIO<L> io, int lvl, byte type) { + private Tail<L> addTail(Page page, long buf, BPlusIO<L> io, int lvl, byte type) { final Tail<L> t = new Tail<>(page, buf, io, type, lvl); if (tail == null) @@ -3273,7 +3272,7 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure { private final Page page; /** */ - private final ByteBuffer buf; + private final long buf; /** */ private final BPlusIO<L> io; @@ -3300,7 +3299,7 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure { * @param type Type. * @param lvl Level. */ - private Tail(Page page, ByteBuffer buf, BPlusIO<L> io, byte type, int lvl) { + private Tail(Page page, long buf, BPlusIO<L> io, byte type, int lvl) { assert type == BACK || type == EXACT || type == FORWARD : type; assert lvl >= 0 && lvl <= Byte.MAX_VALUE : lvl; assert page != null; @@ -3353,7 +3352,7 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure { * @param shift Shift if equal. * @return Insertion point as in {@link Arrays#binarySearch(Object[], Object, Comparator)}. */ - private int findInsertionPoint(BPlusIO<L> io, ByteBuffer buf, int low, int cnt, L row, int shift) + private int findInsertionPoint(BPlusIO<L> io, long buf, int low, int cnt, L row, int shift) throws IgniteCheckedException { assert row != null; @@ -3383,8 +3382,8 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure { * @param buf Buffer. * @return IO. */ - private BPlusIO<L> io(ByteBuffer buf) { - assert buf != null; + private BPlusIO<L> io(long buf) { + assert buf != 0; int type = PageIO.getType(buf); int ver = PageIO.getVersion(buf); @@ -3429,7 +3428,7 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure { * @return Comparison result as in {@link Comparator#compare(Object, Object)}. * @throws IgniteCheckedException If failed. */ - protected abstract int compare(BPlusIO<L> io, ByteBuffer buf, int idx, L row) throws IgniteCheckedException; + protected abstract int compare(BPlusIO<L> io, long buf, int idx, L row) throws IgniteCheckedException; /** * Get the full detached row. Can be called on inner page only if {@link #canGetRowFromInner} is {@code true}. @@ -3440,7 +3439,7 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure { * @return Full detached data row. * @throws IgniteCheckedException If failed. */ - protected abstract T getRow(BPlusIO<L> io, ByteBuffer buf, int idx) throws IgniteCheckedException; + protected abstract T getRow(BPlusIO<L> io, long buf, int idx) throws IgniteCheckedException; /** * Forward cursor. @@ -3480,7 +3479,7 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure { * @param startIdx Start index. * @throws IgniteCheckedException If failed. */ - private void init(ByteBuffer buf, BPlusIO<L> io, int startIdx) throws IgniteCheckedException { + private void init(long buf, BPlusIO<L> io, int startIdx) throws IgniteCheckedException { nextPageId = 0; row = -1; @@ -3509,7 +3508,7 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure { * @return Adjusted to lower bound start index. * @throws IgniteCheckedException If failed. */ - private int findLowerBound(ByteBuffer buf, BPlusIO<L> io, int cnt) throws IgniteCheckedException { + private int findLowerBound(long buf, BPlusIO<L> io, int cnt) throws IgniteCheckedException { // Compare with the first row on the page. int cmp = compare(io, buf, 0, lowerBound); @@ -3532,7 +3531,7 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure { * @return Corrected number of rows with respect to upper bound. * @throws IgniteCheckedException If failed. */ - private int findUpperBound(ByteBuffer buf, BPlusIO<L> io, int low, int cnt) throws IgniteCheckedException { + private int findUpperBound(long buf, BPlusIO<L> io, int low, int cnt) throws IgniteCheckedException { // Compare with the last row on the page. int cmp = compare(io, buf, cnt - 1, upperBound); @@ -3558,7 +3557,7 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure { * @throws IgniteCheckedException If failed. */ @SuppressWarnings("unchecked") - private boolean fillFromBuffer(ByteBuffer buf, BPlusIO<L> io, int startIdx, int cnt) + private boolean fillFromBuffer(long buf, BPlusIO<L> io, int startIdx, int cnt) throws IgniteCheckedException { assert io.isLeaf(); assert cnt != 0: cnt; // We can not see empty pages (empty tree handled in init). @@ -3665,10 +3664,10 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure { } try (Page next = page(nextPageId)) { - ByteBuffer buf = readLock(next); // Doing explicit null check. + long buf = readLock(next); // Doing explicit null check. // If concurrent merge occurred we have to reinitialize cursor from the last returned row. - if (buf == null) + if (buf == 0L) break; try { @@ -3715,7 +3714,7 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure { private abstract class GetPageHandler<G extends Get> extends PageHandler<G, Result> { /** {@inheritDoc} */ @SuppressWarnings("unchecked") - @Override public final Result run(Page page, PageIO iox, ByteBuffer buf, G g, int lvl) + @Override public final Result run(Page page, PageIO iox, long buf, G g, int lvl) throws IgniteCheckedException { assert PageIO.getPageId(buf) == page.id(); @@ -3739,7 +3738,7 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure { * @return Result code. * @throws IgniteCheckedException If failed. */ - protected abstract Result run0(Page page, ByteBuffer buf, BPlusIO<L> io, G g, int lvl) + protected abstract Result run0(Page page, long buf, BPlusIO<L> io, G g, int lvl) throws IgniteCheckedException; /** {@inheritDoc} */ http://git-wip-us.apache.org/repos/asf/ignite/blob/94f22a0c/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/io/DataPageIO.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/io/DataPageIO.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/io/DataPageIO.java index e1bab5f..ca8ea39 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/io/DataPageIO.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/io/DataPageIO.java @@ -88,7 +88,7 @@ public class DataPageIO extends PageIO { } /** {@inheritDoc} */ - @Override public void initNewPage(ByteBuffer buf, long pageId) { + @Override public void initNewPage(long buf, long pageId) { super.initNewPage(buf, pageId); setEmptyPage(buf); @@ -98,7 +98,7 @@ public class DataPageIO extends PageIO { /** * @param buf Buffer. */ - private void setEmptyPage(ByteBuffer buf) { + private void setEmptyPage(long buf) { setDirectCount(buf, 0); setIndirectCount(buf, 0); setFirstEntryOffset(buf, buf.capacity()); @@ -127,8 +127,8 @@ public class DataPageIO extends PageIO { * @param show What elements of data page entry to show in the result. * @return Data page entry size. */ - private int getPageEntrySize(ByteBuffer buf, int dataOff, int show) { - int payloadLen = buf.getShort(dataOff) & 0xFFFF; + private int getPageEntrySize(long buf, int dataOff, int show) { + int payloadLen = PageUtils.getShort(buf, dataOff) & 0xFFFF; if ((payloadLen & FRAGMENTED_FLAG) != 0) payloadLen &= ~FRAGMENTED_FLAG; // We are fragmented and have a link. @@ -164,28 +164,28 @@ public class DataPageIO extends PageIO { * @param buf Buffer. * @param dataOff Entry data offset. */ - private void setFirstEntryOffset(ByteBuffer buf, int dataOff) { + private void setFirstEntryOffset(long buf, int dataOff) { assert dataOff >= ITEMS_OFF + ITEM_SIZE && dataOff <= buf.capacity(): dataOff; - buf.putShort(FIRST_ENTRY_OFF, (short)dataOff); + PageUtils.putShort(buf, FIRST_ENTRY_OFF, (short)dataOff); } /** * @param buf Buffer. * @return Entry data offset. */ - private int getFirstEntryOffset(ByteBuffer buf) { - return buf.getShort(FIRST_ENTRY_OFF) & 0xFFFF; + private int getFirstEntryOffset(long buf) { + return PageUtils.getShort(buf, FIRST_ENTRY_OFF) & 0xFFFF; } /** * @param buf Buffer. * @param freeSpace Free space. */ - private void setRealFreeSpace(ByteBuffer buf, int freeSpace) { + private void setRealFreeSpace(long buf, int freeSpace) { assert freeSpace == actualFreeSpace(buf): freeSpace + " != " + actualFreeSpace(buf); - buf.putShort(FREE_SPACE_OFF, (short)freeSpace); + PageUtils.putShort(buf, FREE_SPACE_OFF, (short)freeSpace); } /** @@ -195,7 +195,7 @@ public class DataPageIO extends PageIO { * @param buf Buffer. * @return Free space. */ - public int getFreeSpace(ByteBuffer buf) { + public int getFreeSpace(long buf) { if (getFreeItemSlots(buf) == 0) return 0; @@ -218,23 +218,23 @@ public class DataPageIO extends PageIO { } /** - * Equivalent for {@link #actualFreeSpace(ByteBuffer)} but reads saved value. + * Equivalent for {@link #actualFreeSpace(long)} but reads saved value. * * @param buf Buffer. * @return Free space. */ - private int getRealFreeSpace(ByteBuffer buf) { - return buf.getShort(FREE_SPACE_OFF); + private int getRealFreeSpace(long buf) { + return PageUtils.getShort(buf, FREE_SPACE_OFF); } /** * @param buf Buffer. * @param cnt Direct count. */ - private void setDirectCount(ByteBuffer buf, int cnt) { + private void setDirectCount(long buf, int cnt) { assert checkCount(cnt): cnt; - buf.put(DIRECT_CNT_OFF, (byte)cnt); + PageUtils.putByte(buf, DIRECT_CNT_OFF, (byte)cnt); } /** @@ -249,10 +249,10 @@ public class DataPageIO extends PageIO { * @param buf Buffer. * @param cnt Indirect count. */ - private void setIndirectCount(ByteBuffer buf, int cnt) { + private void setIndirectCount(long buf, int cnt) { assert checkCount(cnt): cnt; - buf.put(INDIRECT_CNT_OFF, (byte)cnt); + PageUtils.putByte(buf, INDIRECT_CNT_OFF, (byte)cnt); } /** @@ -275,15 +275,15 @@ public class DataPageIO extends PageIO { * @param buf Buffer. * @return Indirect count. */ - private int getIndirectCount(ByteBuffer buf) { - return buf.get(INDIRECT_CNT_OFF) & 0xFF; + private int getIndirectCount(long buf) { + return PageUtils.getByte(buf, INDIRECT_CNT_OFF) & 0xFF; } /** * @param buf Buffer. * @return Number of free entry slots. */ - private int getFreeItemSlots(ByteBuffer buf) { + private int getFreeItemSlots(long buf) { return 0xFF - getDirectCount(buf); } @@ -294,7 +294,7 @@ public class DataPageIO extends PageIO { * @param indirectCnt Indirect items count. * @return Found index of indirect item. */ - private int findIndirectItemIndex(ByteBuffer buf, int itemId, int directCnt, int indirectCnt) { + private int findIndirectItemIndex(long buf, int itemId, int directCnt, int indirectCnt) { int low = directCnt; int high = directCnt + indirectCnt - 1; @@ -318,7 +318,7 @@ public class DataPageIO extends PageIO { * @param buf Buffer. * @return String representation. */ - public String printPageLayout(ByteBuffer buf) { + public String printPageLayout(long buf) { int directCnt = getDirectCount(buf); int indirectCnt = getIndirectCount(buf); int free = getRealFreeSpace(buf); @@ -395,7 +395,7 @@ public class DataPageIO extends PageIO { * @param itemId Fixed item ID (the index used for referencing an entry from the outside). * @return Data entry offset in bytes. */ - private int getDataOffset(ByteBuffer buf, int itemId) { + private int getDataOffset(long buf, int itemId) { assert checkIndex(itemId): itemId; int directCnt = getDirectCount(buf); @@ -427,10 +427,10 @@ public class DataPageIO extends PageIO { * @param dataOff Points to the entry start. * @return Link to the next entry fragment or 0 if no fragments left or if entry is not fragmented. */ - private long getNextFragmentLink(ByteBuffer buf, int dataOff) { + private long getNextFragmentLink(long buf, int dataOff) { assert isFragmented(buf, dataOff); - return buf.getLong(dataOff + PAYLOAD_LEN_SIZE); + return PageUtils.getLong(buf, dataOff + PAYLOAD_LEN_SIZE); } /** @@ -438,8 +438,8 @@ public class DataPageIO extends PageIO { * @param dataOff Data offset. * @return {@code true} If the data row is fragmented across multiple pages. */ - private boolean isFragmented(ByteBuffer buf, int dataOff) { - return (buf.getShort(dataOff) & FRAGMENTED_FLAG) != 0; + private boolean isFragmented(long buf, int dataOff) { + return (PageUtils.getShort(buf, dataOff) & FRAGMENTED_FLAG) != 0; } /** @@ -449,7 +449,7 @@ public class DataPageIO extends PageIO { * @param itemId Item to position on. * @return Link to the next fragment or {@code 0} if it is the last fragment or the data row is not fragmented. */ - public long setPositionAndLimitOnPayload(final ByteBuffer buf, final int itemId) { + public long setPositionAndLimitOnPayload(final long buf, final int itemId) { int dataOff = getDataOffset(buf, itemId); boolean fragmented = isFragmented(buf, dataOff); @@ -468,8 +468,8 @@ public class DataPageIO extends PageIO { * @param idx Item index. * @return Item. */ - private short getItem(ByteBuffer buf, int idx) { - return buf.getShort(itemOffset(idx)); + private short getItem(long buf, int idx) { + return PageUtils.getShort(buf, itemOffset(idx)); } /** @@ -477,8 +477,8 @@ public class DataPageIO extends PageIO { * @param idx Item index. * @param item Item. */ - private void setItem(ByteBuffer buf, int idx, short item) { - buf.putShort(itemOffset(idx), item); + private void setItem(long buf, int idx, short item) { + PageUtils.putShort(buf, itemOffset(idx), item); } /** @@ -546,7 +546,7 @@ public class DataPageIO extends PageIO { * @param indirectCnt Indirect items count. * @return {@code true} If the last direct item already had corresponding indirect item. */ - private boolean moveLastItem(ByteBuffer buf, int freeDirectIdx, int directCnt, int indirectCnt) { + private boolean moveLastItem(long buf, int freeDirectIdx, int directCnt, int indirectCnt) { int lastIndirectId = findIndirectIndexForLastDirect(buf, directCnt, indirectCnt); int lastItemId = directCnt - 1; @@ -577,7 +577,7 @@ public class DataPageIO extends PageIO { * @param indirectCnt Indirect items count. * @return Index of indirect item for the last direct item. */ - private int findIndirectIndexForLastDirect(ByteBuffer buf, int directCnt, int indirectCnt) { + private int findIndirectIndexForLastDirect(long buf, int directCnt, int indirectCnt) { int lastDirectId = directCnt - 1; for (int i = directCnt, end = directCnt + indirectCnt; i < end; i++) { @@ -596,7 +596,7 @@ public class DataPageIO extends PageIO { * @return Next link for fragmented entries or {@code 0} if none. * @throws IgniteCheckedException If failed. */ - public long removeRow(ByteBuffer buf, int itemId) throws IgniteCheckedException { + public long removeRow(long buf, int itemId) throws IgniteCheckedException { assert checkIndex(itemId) : itemId; final int dataOff = getDataOffset(buf, itemId); @@ -675,7 +675,7 @@ public class DataPageIO extends PageIO { * @param cnt Count. * @param step Step. */ - private void moveItems(ByteBuffer buf, int idx, int cnt, int step) { + private void moveItems(long buf, int idx, int cnt, int step) { assert cnt >= 0: cnt; if (cnt != 0) @@ -702,7 +702,7 @@ public class DataPageIO extends PageIO { * @throws IgniteCheckedException If failed. */ public void addRow( - ByteBuffer buf, + long buf, CacheDataRow row, int rowSize ) throws IgniteCheckedException { @@ -729,7 +729,7 @@ public class DataPageIO extends PageIO { * @throws IgniteCheckedException If failed. */ public void addRow( - ByteBuffer buf, + long buf, byte[] payload ) throws IgniteCheckedException { assert payload.length <= getFreeSpace(buf): "can't call addRow if not enough space for the whole row"; @@ -755,7 +755,7 @@ public class DataPageIO extends PageIO { * @return First entry offset after compaction. */ private int compactIfNeed( - final ByteBuffer buf, + final long buf, final int entryFullSize, final int directCnt, final int indirectCnt, @@ -780,7 +780,7 @@ public class DataPageIO extends PageIO { * @param dataOff Data offset. * @return Item ID. */ - private int addItem(final ByteBuffer buf, final int fullEntrySize, final int directCnt, + private int addItem(final long buf, final int fullEntrySize, final int directCnt, final int indirectCnt, final int dataOff) { setFirstEntryOffset(buf, dataOff); @@ -803,7 +803,7 @@ public class DataPageIO extends PageIO { * @param indirectCnt Indirect items count. * @return Offset in the buffer where the entry must be written. */ - private int getDataOffsetForWrite(ByteBuffer buf, int fullEntrySize, int directCnt, int indirectCnt) { + private int getDataOffsetForWrite(long buf, int fullEntrySize, int directCnt, int indirectCnt) { int dataOff = getFirstEntryOffset(buf); // Compact if we do not have enough space for entry. @@ -826,7 +826,7 @@ public class DataPageIO extends PageIO { * @throws IgniteCheckedException If failed. */ public int addRowFragment( - ByteBuffer buf, + long buf, CacheDataRow row, int written, int rowSize @@ -843,7 +843,7 @@ public class DataPageIO extends PageIO { * @throws IgniteCheckedException If failed. */ public void addRowFragment( - ByteBuffer buf, + long buf, byte[] payload, long lastLink ) throws IgniteCheckedException { @@ -863,7 +863,7 @@ public class DataPageIO extends PageIO { * @throws IgniteCheckedException If failed. */ private int addRowFragment( - ByteBuffer buf, + long buf, int written, int rowSize, long lastLink, @@ -881,23 +881,16 @@ public class DataPageIO extends PageIO { int fullEntrySize = getPageEntrySize(payloadSize, SHOW_PAYLOAD_LEN | SHOW_LINK | SHOW_ITEM); int dataOff = getDataOffsetForWrite(buf, fullEntrySize, directCnt, indirectCnt); - try { - buf.position(dataOff); - - buf.putShort((short) (payloadSize | FRAGMENTED_FLAG)); - buf.putLong(lastLink); + PageUtils.putShort(buf, dataOff, (short)(payloadSize | FRAGMENTED_FLAG)); + PageUtils.putLong(buf, dataOff + 2, lastLink); - if (payload == null) { - int rowOff = rowSize - written - payloadSize; + if (payload == null) { + int rowOff = rowSize - written - payloadSize; - writeFragmentData(row, buf, rowOff, payloadSize); - } - else - buf.put(payload); - } - finally { - buf.position(0); + writeFragmentData(row, buf + dataOff + 10, rowOff, payloadSize); } + else + PageUtils.putBytes(buf, dataOff + 10, payload); int itemId = addItem(buf, fullEntrySize, directCnt, indirectCnt, dataOff); @@ -912,7 +905,7 @@ public class DataPageIO extends PageIO { * @param buf Page buffer. * @param itemId Item ID. */ - private void setLink(CacheDataRow row, ByteBuffer buf, int itemId) { + private void setLink(CacheDataRow row, long buf, int itemId) { row.link(PageIdUtils.link(getPageId(buf), itemId)); } @@ -927,7 +920,7 @@ public class DataPageIO extends PageIO { */ private void writeFragmentData( final CacheDataRow row, - final ByteBuffer buf, + final long buf, final int rowOff, final int payloadSize ) throws IgniteCheckedException { @@ -953,7 +946,7 @@ public class DataPageIO extends PageIO { */ private int writeFragment( final CacheDataRow row, - final ByteBuffer buf, + final long buf, final int rowOff, final int payloadSize, final EntryPart type, @@ -1089,7 +1082,7 @@ public class DataPageIO extends PageIO { * @param indirectCnt Indirect items count. * @return Item ID (insertion index). */ - private int insertItem(ByteBuffer buf, int dataOff, int directCnt, int indirectCnt) { + private int insertItem(long buf, int dataOff, int directCnt, int indirectCnt) { if (indirectCnt > 0) { // If the first indirect item is on correct place to become the last direct item, do the transition // and insert the new item into the free slot which was referenced by this first indirect item. @@ -1124,7 +1117,7 @@ public class DataPageIO extends PageIO { * @param directCnt Direct items count. * @return New first entry offset. */ - private int compactDataEntries(ByteBuffer buf, int directCnt) { + private int compactDataEntries(long buf, int directCnt) { assert checkCount(directCnt): directCnt; int[] offs = new int[directCnt]; @@ -1173,7 +1166,7 @@ public class DataPageIO extends PageIO { * @param buf Buffer to scan. * @return Actual free space in the buffer. */ - private int actualFreeSpace(ByteBuffer buf) { + private int actualFreeSpace(long buf) { int directCnt = getDirectCount(buf); int entriesSize = 0; @@ -1195,7 +1188,7 @@ public class DataPageIO extends PageIO { * @param cnt Count. * @param step Step. */ - private void moveBytes(ByteBuffer buf, int off, int cnt, int step) { + private void moveBytes(long buf, int off, int cnt, int step) { assert step != 0: step; assert off + step >= 0; assert off + step + cnt <= buf.capacity() : "[off=" + off + ", step=" + step + ", cnt=" + cnt + @@ -1212,7 +1205,7 @@ public class DataPageIO extends PageIO { * @throws IgniteCheckedException If failed. */ private void writeRowData( - ByteBuffer buf, + long buf, int dataOff, int payloadSize, CacheDataRow row @@ -1245,7 +1238,7 @@ public class DataPageIO extends PageIO { * @param payload Payload */ private void writeRowData( - ByteBuffer buf, + long buf, int dataOff, byte[] payload ) { http://git-wip-us.apache.org/repos/asf/ignite/blob/94f22a0c/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/reuse/ReuseListImpl.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/reuse/ReuseListImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/reuse/ReuseListImpl.java index d2813c9..ce8266a 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/reuse/ReuseListImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/reuse/ReuseListImpl.java @@ -65,7 +65,7 @@ public class ReuseListImpl extends PagesList implements ReuseList { /** {@inheritDoc} */ @Override public void addForRecycle(ReuseBag bag) throws IgniteCheckedException { - put(bag, null, null, 0); + put(bag, null, 0, 0); } /** {@inheritDoc} */ http://git-wip-us.apache.org/repos/asf/ignite/blob/94f22a0c/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/H2Tree.java ---------------------------------------------------------------------- diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/H2Tree.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/H2Tree.java index 0593c60..5f9d0fa 100644 --- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/H2Tree.java +++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/H2Tree.java @@ -76,7 +76,7 @@ public abstract class H2Tree extends BPlusTree<SearchRow, GridH2Row> { } /** {@inheritDoc} */ - @Override protected GridH2Row getRow(BPlusIO<SearchRow> io, ByteBuffer buf, int idx) + @Override protected GridH2Row getRow(BPlusIO<SearchRow> io, long buf, int idx) throws IgniteCheckedException { return (GridH2Row)io.getLookupRow(this, buf, idx); }