http://git-wip-us.apache.org/repos/asf/ignite/blob/7db65ddd/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/io/PageIO.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/io/PageIO.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/io/PageIO.java index aa2d368..f6ac905 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/io/PageIO.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/io/PageIO.java @@ -20,6 +20,8 @@ package org.apache.ignite.internal.processors.cache.database.tree.io; import java.nio.ByteBuffer; import org.apache.ignite.IgniteCheckedException; import org.apache.ignite.internal.pagemem.Page; +import org.apache.ignite.internal.pagemem.PageMemory; +import org.apache.ignite.internal.pagemem.PageUtils; import org.apache.ignite.internal.pagemem.wal.IgniteWriteAheadLogManager; import org.apache.ignite.internal.processors.cache.IgniteCacheOffheapManagerImpl; import org.apache.ignite.internal.processors.cache.database.MetadataStorage; @@ -36,10 +38,10 @@ import org.apache.ignite.internal.processors.cache.database.tree.util.PageLockLi * 1. IO should not have any `public static` methods. * We have versioned IOs and any static method will mean that it have to always work in backward * compatible way between all the IO versions. The base class {@link PageIO} has - * static methods (like {@code {@link #getPageId(ByteBuffer)}}) intentionally: + * static methods (like {@code {@link #getPageId(long)}}) intentionally: * this base format can not be changed between versions. * - * 2. IO must correctly override {@link #initNewPage(ByteBuffer, long)} method and call super. + * 2. IO must correctly override {@link #initNewPage(long, long, int)} method and call super. * We have logic that relies on this behavior. * * 3. Page IO type ID constant must be declared in this class to have a list of all the @@ -58,7 +60,7 @@ import org.apache.ignite.internal.processors.cache.database.tree.util.PageLockLi * * 7. It is almost always preferable to read or write (especially write) page contents using * static methods on {@link PageHandler}. To just initialize new page use - * {@link PageHandler#initPage(Page, PageLockListener, PageIO, IgniteWriteAheadLogManager)} + * {@link PageHandler#initPage(PageMemory, Page, PageLockListener, PageIO, IgniteWriteAheadLogManager)} * method with needed IO instance. */ public abstract class PageIO { @@ -164,6 +166,7 @@ public abstract class PageIO { } /** + * @param buf Buffer. * @return Page type. */ public static int getType(ByteBuffer buf) { @@ -171,13 +174,21 @@ public abstract class PageIO { } /** - * @param buf Buffer. + * @param pageAddr Page addres. + * @return Page type. + */ + public static int getType(long pageAddr) { + return PageUtils.getShort(pageAddr, TYPE_OFF) & 0xFFFF; + } + + /** + * @param pageAddr Page address. * @param type Type. */ - public static void setType(ByteBuffer buf, int type) { - buf.putShort(TYPE_OFF, (short)type); + public static void setType(long pageAddr, int type) { + PageUtils.putShort(pageAddr, TYPE_OFF, (short)type); - assert getType(buf) == type; + assert getType(pageAddr) == type; } /** @@ -189,13 +200,21 @@ public abstract class PageIO { } /** - * @param buf Buffer. + * @param pageAddr Page address. + * @return Version. + */ + public static int getVersion(long pageAddr) { + return PageUtils.getShort(pageAddr, VER_OFF) & 0xFFFF; + } + + /** + * @param pageAddr Page address. * @param ver Version. */ - public static void setVersion(ByteBuffer buf, int ver) { - buf.putShort(VER_OFF, (short)ver); + private static void setVersion(long pageAddr, int ver) { + PageUtils.putShort(pageAddr, VER_OFF, (short)ver); - assert getVersion(buf) == ver; + assert getVersion(pageAddr) == ver; } /** @@ -207,13 +226,37 @@ public abstract class PageIO { } /** - * @param buf Buffer. + * @param pageAddr Page address. + * @return Page ID. + */ + public static long getPageId(long pageAddr) { + return PageUtils.getLong(pageAddr, PAGE_ID_OFF); + } + + /** + * @param pageAddr Page address. * @param pageId Page ID. */ - public static void setPageId(ByteBuffer buf, long pageId) { - buf.putLong(PAGE_ID_OFF, pageId); + public static void setPageId(long pageAddr, long pageId) { + PageUtils.putLong(pageAddr, PAGE_ID_OFF, pageId); + + assert getPageId(pageAddr) == pageId; + } + + /** + * @param pageAddr Page address. + * @return Checksum. + */ + public static int getCrc(long pageAddr) { + return PageUtils.getInt(pageAddr, CRC_OFF); + } - assert getPageId(buf) == pageId; + /** + * @param pageAddr Page address. + * @param crc Checksum. + */ + public static void setCrc(long pageAddr, int crc) { + PageUtils.putInt(pageAddr, CRC_OFF, crc); } /** @@ -272,18 +315,19 @@ public abstract class PageIO { } /** - * @param buf Buffer. + * @param pageAddr Page address. * @param pageId Page ID. + * @param pageSize Page size. */ - public void initNewPage(ByteBuffer buf, long pageId) { - setType(buf, getType()); - setVersion(buf, getVersion()); - setPageId(buf, pageId); - setCrc(buf, 0); - - buf.putLong(RESERVED_1_OFF, 0L); - buf.putLong(RESERVED_2_OFF, 0L); - buf.putLong(RESERVED_3_OFF, 0L); + public void initNewPage(long pageAddr, long pageId, int pageSize) { + setType(pageAddr, getType()); + setVersion(pageAddr, getVersion()); + setPageId(pageAddr, pageId); + setCrc(pageAddr, 0); + + PageUtils.putLong(pageAddr, RESERVED_1_OFF, 0L); + PageUtils.putLong(pageAddr, RESERVED_2_OFF, 0L); + PageUtils.putLong(pageAddr, RESERVED_3_OFF, 0L); } /** {@inheritDoc} */ @@ -292,13 +336,13 @@ public abstract class PageIO { } /** - * @param buf Buffer. + * @param pageAddr Page address. * @return IO. * @throws IgniteCheckedException If failed. */ - public static <Q extends PageIO> Q getPageIO(ByteBuffer buf) throws IgniteCheckedException { - int type = getType(buf); - int ver = getVersion(buf); + public static <Q extends PageIO> Q getPageIO(long pageAddr) throws IgniteCheckedException { + int type = getType(pageAddr); + int ver = getVersion(pageAddr); return getPageIO(type, ver); } @@ -339,13 +383,13 @@ public abstract class PageIO { } /** - * @param buf Buffer. + * @param pageAddr Page address. * @return IO for either inner or leaf B+Tree page. * @throws IgniteCheckedException If failed. */ - public static <Q extends BPlusIO<?>> Q getBPlusIO(ByteBuffer buf) throws IgniteCheckedException { - int type = getType(buf); - int ver = getVersion(buf); + public static <Q extends BPlusIO<?>> Q getBPlusIO(long pageAddr) throws IgniteCheckedException { + int type = getType(pageAddr); + int ver = getVersion(pageAddr); return getBPlusIO(type, ver); }
http://git-wip-us.apache.org/repos/asf/ignite/blob/7db65ddd/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/io/PageMetaIO.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/io/PageMetaIO.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/io/PageMetaIO.java index 8d12f7c..e768f47 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/io/PageMetaIO.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/io/PageMetaIO.java @@ -18,6 +18,7 @@ package org.apache.ignite.internal.processors.cache.database.tree.io; import java.nio.ByteBuffer; +import org.apache.ignite.internal.pagemem.PageUtils; import org.jetbrains.annotations.NotNull; /** @@ -72,117 +73,117 @@ public class PageMetaIO extends PageIO { } /** {@inheritDoc} */ - @Override public void initNewPage(ByteBuffer buf, long pageId) { - super.initNewPage(buf, pageId); + @Override public void initNewPage(long pageAddr, long pageId, int pageSize) { + super.initNewPage(pageAddr, pageId, pageSize); - setTreeRoot(buf, 0); - setReuseListRoot(buf, 0); - setLastSuccessfulFullSnapshotId(buf, 0); - setLastSuccessfulSnapshotId(buf, 0); - setNextSnapshotTag(buf, 1); - setLastSuccessfulSnapshotTag(buf, 0); - setLastAllocatedIndex(buf, 0); - setCandidateAllocatedIndex(buf, 0); + setTreeRoot(pageAddr, 0); + setReuseListRoot(pageAddr, 0); + setLastSuccessfulFullSnapshotId(pageAddr, 0); + setLastSuccessfulSnapshotId(pageAddr, 0); + setNextSnapshotTag(pageAddr, 1); + setLastSuccessfulSnapshotTag(pageAddr, 0); + setLastAllocatedIndex(pageAddr, 0); + setCandidateAllocatedIndex(pageAddr, 0); } /** - * @param buf Buffer. + * @param pageAddr Page address. * @return Tree root page. */ - public long getTreeRoot(ByteBuffer buf) { - return buf.getLong(TREE_ROOT_OFF); + public long getTreeRoot(long pageAddr) { + return PageUtils.getLong(pageAddr, TREE_ROOT_OFF); } /** - * @param buf Buffer. + * @param pageAddr Page address. * @param treeRoot Tree root */ - public void setTreeRoot(@NotNull ByteBuffer buf, long treeRoot) { - buf.putLong(TREE_ROOT_OFF, treeRoot); + public void setTreeRoot(long pageAddr, long treeRoot) { + PageUtils.putLong(pageAddr, TREE_ROOT_OFF, treeRoot); } /** - * @param buf Buffer. + * @param pageAddr Page address. * @return Reuse list root page. */ - public long getReuseListRoot(ByteBuffer buf) { - return buf.getLong(REUSE_LIST_ROOT_OFF); + public long getReuseListRoot(long pageAddr) { + return PageUtils.getLong(pageAddr, REUSE_LIST_ROOT_OFF); } /** - * @param buf Buffer. + * @param pageAddr Page address. * @param pageId Root page ID. */ - public void setReuseListRoot(@NotNull ByteBuffer buf, long pageId) { - buf.putLong(REUSE_LIST_ROOT_OFF, pageId); + public void setReuseListRoot(long pageAddr, long pageId) { + PageUtils.putLong(pageAddr, REUSE_LIST_ROOT_OFF, pageId); } /** - * @param buf Buffer. + * @param pageAddr Page address. * @param lastSuccessfulSnapshotId Last successful snapshot id. */ - public void setLastSuccessfulSnapshotId(@NotNull ByteBuffer buf, long lastSuccessfulSnapshotId) { - buf.putLong(LAST_SUCCESSFUL_SNAPSHOT_ID_OFF, lastSuccessfulSnapshotId); + public void setLastSuccessfulSnapshotId(long pageAddr, long lastSuccessfulSnapshotId) { + PageUtils.putLong(pageAddr, LAST_SUCCESSFUL_SNAPSHOT_ID_OFF, lastSuccessfulSnapshotId); } /** - * @param buf Buffer. + * @param pageAddr Page address. */ - public long getLastSuccessfulSnapshotId(@NotNull ByteBuffer buf) { - return buf.getLong(LAST_SUCCESSFUL_SNAPSHOT_ID_OFF); + public long getLastSuccessfulSnapshotId(long pageAddr) { + return PageUtils.getLong(pageAddr, LAST_SUCCESSFUL_SNAPSHOT_ID_OFF); } /** - * @param buf Buffer. + * @param pageAddr Page address. * @param lastSuccessfulFullSnapshotId Last successful full snapshot id. */ - public void setLastSuccessfulFullSnapshotId(@NotNull ByteBuffer buf, long lastSuccessfulFullSnapshotId) { - buf.putLong(LAST_SUCCESSFUL_FULL_SNAPSHOT_ID_OFF, lastSuccessfulFullSnapshotId); + public void setLastSuccessfulFullSnapshotId(long pageAddr, long lastSuccessfulFullSnapshotId) { + PageUtils.putLong(pageAddr, LAST_SUCCESSFUL_FULL_SNAPSHOT_ID_OFF, lastSuccessfulFullSnapshotId); } /** - * @param buf Buffer. + * @param pageAddr Page address. */ - public long getLastSuccessfulFullSnapshotId(@NotNull ByteBuffer buf) { - return buf.getLong(LAST_SUCCESSFUL_FULL_SNAPSHOT_ID_OFF); + public long getLastSuccessfulFullSnapshotId(long pageAddr) { + return PageUtils.getLong(pageAddr, LAST_SUCCESSFUL_FULL_SNAPSHOT_ID_OFF); } /** - * @param buf Buffer. + * @param pageAddr Page address. * @param nextSnapshotId Next snapshot id. */ - public void setNextSnapshotTag(@NotNull ByteBuffer buf, long nextSnapshotId) { - buf.putLong(NEXT_SNAPSHOT_TAG_OFF, nextSnapshotId); + public void setNextSnapshotTag(long pageAddr, long nextSnapshotId) { + PageUtils.putLong(pageAddr, NEXT_SNAPSHOT_TAG_OFF, nextSnapshotId); } /** - * @param buf Buffer. + * @param pageAddr Page address. */ - public long getLastSuccessfulSnapshotTag(@NotNull ByteBuffer buf) { - return buf.getLong(LAST_SUCCESSFUL_FULL_SNAPSHOT_TAG_OFF); + public long getLastSuccessfulSnapshotTag(long pageAddr) { + return PageUtils.getLong(pageAddr, LAST_SUCCESSFUL_FULL_SNAPSHOT_TAG_OFF); } /** - * @param buf Buffer. + * @param pageAddr Page address. * @param lastSuccessfulSnapshotTag Last successful snapshot tag. */ - public void setLastSuccessfulSnapshotTag(@NotNull ByteBuffer buf, long lastSuccessfulSnapshotTag) { - buf.putLong(LAST_SUCCESSFUL_FULL_SNAPSHOT_TAG_OFF, lastSuccessfulSnapshotTag); + public void setLastSuccessfulSnapshotTag(long pageAddr, long lastSuccessfulSnapshotTag) { + PageUtils.putLong(pageAddr, LAST_SUCCESSFUL_FULL_SNAPSHOT_TAG_OFF, lastSuccessfulSnapshotTag); } /** - * @param buf Buffer. + * @param pageAddr Page address. */ - public long getNextSnapshotTag(@NotNull ByteBuffer buf) { - return buf.getLong(NEXT_SNAPSHOT_TAG_OFF); + public long getNextSnapshotTag(long pageAddr) { + return PageUtils.getLong(pageAddr, NEXT_SNAPSHOT_TAG_OFF); } /** - * @param buf Buffer. + * @param pageAddr Page address. * @param lastAllocatedIdx Last allocated index. */ - public void setLastAllocatedIndex(@NotNull ByteBuffer buf, int lastAllocatedIdx) { - buf.putInt(LAST_ALLOCATED_INDEX_OFF, lastAllocatedIdx); + public void setLastAllocatedIndex(long pageAddr, int lastAllocatedIdx) { + PageUtils.putInt(pageAddr, LAST_ALLOCATED_INDEX_OFF, lastAllocatedIdx); } /** @@ -193,17 +194,24 @@ public class PageMetaIO extends PageIO { } /** - * @param buf Buffer. + * @param pageAddr Page address. + */ + public int getLastAllocatedIndex(long pageAddr) { + return PageUtils.getInt(pageAddr, LAST_ALLOCATED_INDEX_OFF); + } + + /** + * @param pageAddr Page address. * @param previousAllocatedIdx Last allocated index. */ - public void setCandidateAllocatedIndex(@NotNull ByteBuffer buf, int previousAllocatedIdx) { - buf.putInt(CANDIDATE_ALLOCATED_INDEX_OFF, previousAllocatedIdx); + public void setCandidateAllocatedIndex(long pageAddr, int previousAllocatedIdx) { + PageUtils.putInt(pageAddr, CANDIDATE_ALLOCATED_INDEX_OFF, previousAllocatedIdx); } /** - * @param buf Buffer. + * @param pageAddr Page address. */ - public int getCandidateAllocatedIndex(@NotNull ByteBuffer buf) { - return buf.getInt(CANDIDATE_ALLOCATED_INDEX_OFF); + public int getCandidateAllocatedIndex(long pageAddr) { + return PageUtils.getInt(pageAddr, CANDIDATE_ALLOCATED_INDEX_OFF); } } http://git-wip-us.apache.org/repos/asf/ignite/blob/7db65ddd/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/io/PagePartitionMetaIO.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/io/PagePartitionMetaIO.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/io/PagePartitionMetaIO.java index c01d774..aca0725 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/io/PagePartitionMetaIO.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/io/PagePartitionMetaIO.java @@ -18,8 +18,11 @@ package org.apache.ignite.internal.processors.cache.database.tree.io; -import java.nio.ByteBuffer; +import org.apache.ignite.internal.pagemem.PageUtils; +/** + * + */ public class PagePartitionMetaIO extends PageMetaIO { /** */ private static final int SIZE_OFF = PageMetaIO.END_OF_PAGE_META; @@ -39,13 +42,13 @@ public class PagePartitionMetaIO extends PageMetaIO { ); /** {@inheritDoc} */ - @Override public void initNewPage(ByteBuffer buf, long pageId) { - super.initNewPage(buf, pageId); + @Override public void initNewPage(long pageAddr, long pageId, int pageSize) { + super.initNewPage(pageAddr, pageId, pageSize); - setSize(buf, 0); - setUpdateCounter(buf, 0); - setGlobalRemoveId(buf, 0); - setPartitionState(buf, (byte)-1); + setSize(pageAddr, 0); + setUpdateCounter(pageAddr, 0); + setGlobalRemoveId(pageAddr, 0); + setPartitionState(pageAddr, (byte)-1); } /** @@ -56,65 +59,65 @@ public class PagePartitionMetaIO extends PageMetaIO { } /** - * @param buf Buffer. + * @param pageAddr Page address. * @return Partition size. */ - public long getSize(ByteBuffer buf) { - return buf.getLong(SIZE_OFF); + public long getSize(long pageAddr) { + return PageUtils.getLong(pageAddr, SIZE_OFF); } /** - * @param buf Buffer. + * @param pageAddr Page address. * @param size Partition size. */ - public void setSize(ByteBuffer buf, long size) { - buf.putLong(SIZE_OFF, size); + public void setSize(long pageAddr, long size) { + PageUtils.putLong(pageAddr, SIZE_OFF, size); } /** - * @param buf Buffer. + * @param pageAddr Page address. * @return Partition update counter. */ - public long getUpdateCounter(ByteBuffer buf) { - return buf.getLong(UPDATE_CNTR_OFF); + public long getUpdateCounter(long pageAddr) { + return PageUtils.getLong(pageAddr, UPDATE_CNTR_OFF); } /** - * @param buf Buffer. + * @param pageAddr Page address. * @param cntr Partition update counter. */ - public void setUpdateCounter(ByteBuffer buf, long cntr) { - buf.putLong(UPDATE_CNTR_OFF, cntr); + public void setUpdateCounter(long pageAddr, long cntr) { + PageUtils.putLong(pageAddr, UPDATE_CNTR_OFF, cntr); } /** - * @param buf Buffer. + * @param pageAddr Page address. * @return Global remove ID. */ - public long getGlobalRemoveId(ByteBuffer buf) { - return buf.getLong(GLOBAL_RMV_ID_OFF); + public long getGlobalRemoveId(long pageAddr) { + return PageUtils.getLong(pageAddr, GLOBAL_RMV_ID_OFF); } /** - * @param buf Buffer. + * @param pageAddr Page address. * @param rmvId Global remove ID. */ - public void setGlobalRemoveId(ByteBuffer buf, long rmvId) { - buf.putLong(GLOBAL_RMV_ID_OFF, rmvId); + public void setGlobalRemoveId(long pageAddr, long rmvId) { + PageUtils.putLong(pageAddr, GLOBAL_RMV_ID_OFF, rmvId); } /** - * @param buf Buffer. + * @param pageAddr Page address. */ - public byte getPartitionState(ByteBuffer buf) { - return buf.get(PARTITION_STATE_OFF); + public byte getPartitionState(long pageAddr) { + return PageUtils.getByte(pageAddr, PARTITION_STATE_OFF); } /** - * @param buf - * @param state + * @param pageAddr Page address + * @param state State. */ - public void setPartitionState(ByteBuffer buf, byte state) { - buf.put(PARTITION_STATE_OFF, state); + public void setPartitionState(long pageAddr, byte state) { + PageUtils.putByte(pageAddr, PARTITION_STATE_OFF, state); } } http://git-wip-us.apache.org/repos/asf/ignite/blob/7db65ddd/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/7db65ddd/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/util/PageHandler.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/util/PageHandler.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/util/PageHandler.java index fadf74d..97b5a04 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/util/PageHandler.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/util/PageHandler.java @@ -20,11 +20,11 @@ package org.apache.ignite.internal.processors.cache.database.tree.util; import java.nio.ByteBuffer; import org.apache.ignite.IgniteCheckedException; import org.apache.ignite.internal.pagemem.Page; +import org.apache.ignite.internal.pagemem.PageMemory; import org.apache.ignite.internal.pagemem.wal.IgniteWriteAheadLogManager; import org.apache.ignite.internal.pagemem.wal.record.delta.InitNewPageRecord; import org.apache.ignite.internal.processors.cache.database.tree.io.PageIO; import org.apache.ignite.internal.util.GridUnsafe; -import sun.nio.ch.DirectBuffer; import static java.lang.Boolean.FALSE; import static java.lang.Boolean.TRUE; @@ -35,7 +35,7 @@ import static java.lang.Boolean.TRUE; public abstract class PageHandler<X, R> { /** */ private static final PageHandler<Void, Boolean> NOOP = new PageHandler<Void, Boolean>() { - @Override public Boolean run(Page page, PageIO io, ByteBuffer buf, Void arg, int intArg) + @Override public Boolean run(Page page, PageIO io, long pageAddr, Void arg, int intArg) throws IgniteCheckedException { return TRUE; } @@ -44,13 +44,13 @@ public abstract class PageHandler<X, R> { /** * @param page Page. * @param io IO. - * @param buf Page buffer. + * @param pageAddr Page address. * @param arg Argument. * @param intArg Argument of type {@code int}. * @return Result. * @throws IgniteCheckedException If failed. */ - public abstract R run(Page page, PageIO io, ByteBuffer buf, X arg, int intArg) + public abstract R run(Page page, PageIO io, long pageAddr, X arg, int intArg) throws IgniteCheckedException; /** @@ -65,6 +65,7 @@ public abstract class PageHandler<X, R> { /** * @param page Page. + * @param lockLsnr Lock listener. * @param h Handler. * @param arg Argument. * @param intArg Argument of type {@code int}. @@ -74,29 +75,31 @@ public abstract class PageHandler<X, R> { */ public static <X, R> R readPage( Page page, - PageLockListener lockListener, + PageLockListener lockLsnr, PageHandler<X, R> h, X arg, int intArg, R lockFailed ) throws IgniteCheckedException { - ByteBuffer buf = readLock(page, lockListener); + long pageAddr = readLock(page, lockLsnr); - if (buf == null) + if (pageAddr == 0L) return lockFailed; try { - PageIO io = PageIO.getPageIO(buf); + PageIO io = PageIO.getPageIO(pageAddr); - return h.run(page, io, buf, arg, intArg); + return h.run(page, io, pageAddr, arg, intArg); } finally { - readUnlock(page, buf, lockListener); + readUnlock(page, pageAddr, lockLsnr); } } /** + * @param pageMem Page memory. * @param page Page. + * @param lockLsnr Lock listener. * @param h Handler. * @param arg Argument. * @param intArg Argument of type {@code int}. @@ -105,92 +108,97 @@ public abstract class PageHandler<X, R> { * @throws IgniteCheckedException If failed. */ public static <X, R> R writePage( + PageMemory pageMem, Page page, - PageLockListener lockListener, + PageLockListener lockLsnr, PageHandler<X, R> h, X arg, int intArg, R lockFailed ) throws IgniteCheckedException { - return writePage(page, lockListener, h, null, null, arg, intArg, lockFailed); + return writePage(pageMem, page, lockLsnr, h, null, null, arg, intArg, lockFailed); } /** + * @param pageMem Page memory. * @param page Page. - * @param lockListener Lock listener. + * @param lockLsnr Lock listener. * @param init IO for new page initialization or {@code null} if it is an existing page. + * @param wal WAL manager. * @throws IgniteCheckedException If failed. */ public static void initPage( + PageMemory pageMem, Page page, - PageLockListener lockListener, + PageLockListener lockLsnr, PageIO init, IgniteWriteAheadLogManager wal ) throws IgniteCheckedException { - Boolean res = writePage(page, lockListener, NOOP, init, wal, null, 0, FALSE); + Boolean res = writePage(pageMem, page, lockLsnr, NOOP, init, wal, null, 0, FALSE); assert res == TRUE : res; // It must be newly allocated page, can't be recycled. } /** * @param page Page. - * @param lockListener Lock listener. - * @return Byte buffer or {@code null} if failed to lock due to recycling. + * @param lockLsnr Lock listener. + * @return Page address or {@code 0} if failed to lock due to recycling. */ - public static ByteBuffer readLock(Page page, PageLockListener lockListener) { - lockListener.onBeforeReadLock(page); + public static long readLock(Page page, PageLockListener lockLsnr) { + lockLsnr.onBeforeReadLock(page); - ByteBuffer buf = page.getForRead(); + long pageAddr = page.getForReadPointer(); - lockListener.onReadLock(page, buf); + lockLsnr.onReadLock(page, pageAddr); - return buf; + return pageAddr; } /** * @param page Page. - * @param buf Page buffer. - * @param lockListener Lock listener. + * @param pageAddr Page address. + * @param lockLsnr Lock listener. */ - public static void readUnlock(Page page, ByteBuffer buf, PageLockListener lockListener) { - lockListener.onReadUnlock(page, buf); + public static void readUnlock(Page page, long pageAddr, PageLockListener lockLsnr) { + lockLsnr.onReadUnlock(page, pageAddr); page.releaseRead(); } /** * @param page Page. - * @param lockListener Lock listener. + * @param lockLsnr Lock listener. * @param tryLock Only try to lock without waiting. - * @return Byte buffer or {@code null} if failed to lock due to recycling. + * @return Page address or {@code 0} if failed to lock due to recycling. */ - public static ByteBuffer writeLock(Page page, PageLockListener lockListener, boolean tryLock) { - lockListener.onBeforeWriteLock(page); + public static long writeLock(Page page, PageLockListener lockLsnr, boolean tryLock) { + lockLsnr.onBeforeWriteLock(page); - ByteBuffer buf = tryLock ? page.tryGetForWrite() : page.getForWrite(); + long pageAddr = tryLock ? page.tryGetForWritePointer() : page.getForWritePointer(); - lockListener.onWriteLock(page, buf); + lockLsnr.onWriteLock(page, pageAddr); - return buf; + return pageAddr; } /** * @param page Page. * @param buf Page buffer. - * @param lockListener Lock listener. + * @param lockLsnr Lock listener. * @param dirty Page is dirty. */ - public static void writeUnlock(Page page, ByteBuffer buf, PageLockListener lockListener, boolean dirty) { - lockListener.onWriteUnlock(page, buf); + public static void writeUnlock(Page page, long buf, PageLockListener lockLsnr, boolean dirty) { + lockLsnr.onWriteUnlock(page, buf); page.releaseWrite(dirty); } /** * @param page Page. - * @param lockListener Lock listener. + * @param lockLsnr Lock listener. * @param h Handler. * @param init IO for new page initialization or {@code null} if it is an existing page. + * @param wal WAL manager. * @param arg Argument. * @param intArg Argument of type {@code int}. * @param lockFailed Result in case of lock failure due to page recycling. @@ -198,8 +206,9 @@ public abstract class PageHandler<X, R> { * @throws IgniteCheckedException If failed. */ public static <X, R> R writePage( + PageMemory pageMem, Page page, - PageLockListener lockListener, + PageLockListener lockLsnr, PageHandler<X, R> h, PageIO init, IgniteWriteAheadLogManager wal, @@ -207,9 +216,9 @@ public abstract class PageHandler<X, R> { int intArg, R lockFailed ) throws IgniteCheckedException { - ByteBuffer buf = writeLock(page, lockListener, false); + long pageAddr = writeLock(page, lockLsnr, false); - if (buf == null) + if (pageAddr == 0L) return lockFailed; R res; @@ -218,42 +227,44 @@ public abstract class PageHandler<X, R> { try { if (init != null) // It is a new page and we have to initialize it. - doInitPage(page, buf, init, wal); + doInitPage(pageMem, page, pageAddr, init, wal); else - init = PageIO.getPageIO(buf); + init = PageIO.getPageIO(pageAddr); - res = h.run(page, init, buf, arg, intArg); + res = h.run(page, init, pageAddr, arg, intArg); ok = true; } finally { - assert PageIO.getCrc(buf) == 0; //TODO GG-11480 + assert PageIO.getCrc(pageAddr) == 0; //TODO GG-11480 if (h.releaseAfterWrite(page, arg, intArg)) - writeUnlock(page, buf, lockListener, ok); + writeUnlock(page, pageAddr, lockLsnr, ok); } return res; } /** + * @param pageMem Page memory. * @param page Page. - * @param buf Buffer. + * @param pageAddr Page address. * @param init Initial IO. * @param wal Write ahead log. * @throws IgniteCheckedException If failed. */ private static void doInitPage( + PageMemory pageMem, Page page, - ByteBuffer buf, + long pageAddr, PageIO init, IgniteWriteAheadLogManager wal ) throws IgniteCheckedException { - assert PageIO.getCrc(buf) == 0; //TODO GG-11480 + assert PageIO.getCrc(pageAddr) == 0; //TODO GG-11480 long pageId = page.id(); - init.initNewPage(buf, pageId); + init.initNewPage(pageAddr, pageId, pageMem.pageSize()); // Here we should never write full page, because it is known to be new. page.fullPageWalRecordPolicy(FALSE); @@ -288,8 +299,8 @@ public abstract class PageHandler<X, R> { long srcArrOff = src.hasArray() ? src.arrayOffset() + GridUnsafe.BYTE_ARR_OFF : 0; long dstArrOff = dst.hasArray() ? dst.arrayOffset() + GridUnsafe.BYTE_ARR_OFF : 0; - long srcPtr = src.isDirect() ? ((DirectBuffer)src).address() : 0; - long dstPtr = dst.isDirect() ? ((DirectBuffer)dst).address() : 0; + long srcPtr = src.isDirect() ? GridUnsafe.bufferAddress(src) : 0; + long dstPtr = dst.isDirect() ? GridUnsafe.bufferAddress(dst) : 0; GridUnsafe.copyMemory(srcArr, srcPtr + srcArrOff + srcOff, dstArr, dstPtr + dstArrOff + dstOff, cnt); } @@ -302,11 +313,31 @@ public abstract class PageHandler<X, R> { */ public static void zeroMemory(ByteBuffer buf, int off, int len) { if (buf.isDirect()) - GridUnsafe.setMemory(((DirectBuffer)buf).address() + off, len, (byte)0); + GridUnsafe.setMemory(GridUnsafe.bufferAddress(buf) + off, len, (byte)0); else { for (int i = off; i < off + len; i++) buf.put(i, (byte)0); //TODO Optimize! } } + + /** + * @param srcAddr Source. + * @param dstAddr Destination. + * @param srcOff Source offset in bytes. + * @param dstOff Destination offset in bytes. + * @param cnt Bytes count to copy. + */ + public static void copyMemory(long srcAddr, long dstAddr, long srcOff, long dstOff, long cnt) { + GridUnsafe.copyMemory(null, srcAddr + srcOff, null, dstAddr + dstOff, cnt); + } + + /** + * @param addr Address. + * @param off Offset. + * @param len Length. + */ + public static void zeroMemory(long addr, int off, int len) { + GridUnsafe.setMemory(addr + off, len, (byte)0); + } } http://git-wip-us.apache.org/repos/asf/ignite/blob/7db65ddd/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/util/PageLockListener.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/util/PageLockListener.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/util/PageLockListener.java index 216bdd3..07cdd43 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/util/PageLockListener.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/util/PageLockListener.java @@ -17,7 +17,6 @@ package org.apache.ignite.internal.processors.cache.database.tree.util; -import java.nio.ByteBuffer; import org.apache.ignite.internal.pagemem.Page; /** @@ -31,15 +30,15 @@ public interface PageLockListener { /** * @param page Page. - * @param buf Buffer or {@code null} if attempt to lock failed. + * @param pageAddr Page address or {@code 0} if attempt to lock failed. */ - public void onWriteLock(Page page, ByteBuffer buf); + public void onWriteLock(Page page, long pageAddr); /** * @param page Page. - * @param buf Buffer. + * @param pageAddr Page address. */ - public void onWriteUnlock(Page page, ByteBuffer buf); + public void onWriteUnlock(Page page, long pageAddr); /** * @param page Page. @@ -48,13 +47,13 @@ public interface PageLockListener { /** * @param page Page. - * @param buf Buffer or {@code null} if attempt to lock failed. + * @param pageAddr Page address or {@code 0} if attempt to lock failed. */ - public void onReadLock(Page page, ByteBuffer buf); + public void onReadLock(Page page, long pageAddr); /** * @param page Page. - * @param buf Buffer. + * @param pageAddr Page address. */ - public void onReadUnlock(Page page, ByteBuffer buf); + public void onReadUnlock(Page page, long pageAddr); } http://git-wip-us.apache.org/repos/asf/ignite/blob/7db65ddd/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicSingleUpdateFuture.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicSingleUpdateFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicSingleUpdateFuture.java index 20d6e90..5fa1daa 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicSingleUpdateFuture.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicSingleUpdateFuture.java @@ -163,7 +163,8 @@ class GridDhtAtomicSingleUpdateFuture extends GridDhtAtomicAbstractUpdateFuture /** {@inheritDoc} */ @Override protected void addFailedKeys(GridNearAtomicUpdateResponse updateRes, Throwable err) { - updateRes.addFailedKey(key, err); + if (key != null) + updateRes.addFailedKey(key, err); } /** http://git-wip-us.apache.org/repos/asf/ignite/blob/7db65ddd/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicUpdateResponse.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicUpdateResponse.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicUpdateResponse.java index 2e38733..b5b11db 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicUpdateResponse.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicUpdateResponse.java @@ -341,6 +341,9 @@ public class GridNearAtomicUpdateResponse extends GridCacheMessage implements Gr * @param e Error cause. */ public synchronized void addFailedKey(KeyCacheObject key, Throwable e) { + assert key != null; + assert e != null; + if (failedKeys == null) failedKeys = new ConcurrentLinkedQueue<>(); http://git-wip-us.apache.org/repos/asf/ignite/blob/7db65ddd/modules/core/src/main/java/org/apache/ignite/internal/util/GridUnsafe.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/GridUnsafe.java b/modules/core/src/main/java/org/apache/ignite/internal/util/GridUnsafe.java index 783ab96..1926f01 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/util/GridUnsafe.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/util/GridUnsafe.java @@ -18,6 +18,7 @@ package org.apache.ignite.internal.util; import java.lang.reflect.Field; +import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.security.AccessController; import java.security.PrivilegedActionException; @@ -25,6 +26,7 @@ import java.security.PrivilegedExceptionAction; import org.apache.ignite.IgniteSystemProperties; import sun.misc.Unsafe; +import sun.nio.ch.DirectBuffer; /** * <p>Wrapper for {@link sun.misc.Unsafe} class.</p> @@ -1602,4 +1604,14 @@ public abstract class GridUnsafe { UNSAFE.putByte(addr, (byte)(val)); } } + + /** + * @param buf Direct buffer. + * @return Buffer memory address. + */ + public static long bufferAddress(ByteBuffer buf) { + assert buf instanceof DirectBuffer : buf; + + return ((DirectBuffer)buf).address(); + } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ignite/blob/7db65ddd/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteTree.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteTree.java b/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteTree.java index 0c08cd9..8dcd205 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteTree.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteTree.java @@ -17,10 +17,8 @@ package org.apache.ignite.internal.util; -import org.apache.ignite.*; -import org.apache.ignite.internal.util.lang.*; - -import java.util.*; +import org.apache.ignite.IgniteCheckedException; +import org.apache.ignite.internal.util.lang.GridCursor; /** * Interface for ignite internal tree. @@ -29,10 +27,11 @@ public interface IgniteTree<L, T> { /** * Put value in this tree. * - * @param value value to be associated with the specified key - * @return the previous value associated with key + * @param val Value to be associated with the specified key. + * @return The previous value associated with key. + * @throws IgniteCheckedException If failed. */ - T put(T value) throws IgniteCheckedException; + public T put(T val) throws IgniteCheckedException; /** * Returns the value to which the specified key is mapped, or {@code null} if this tree contains no mapping for the @@ -40,9 +39,10 @@ public interface IgniteTree<L, T> { * * @param key the key whose associated value is to be returned * @return the value to which the specified key is mapped, or {@code null} if this tree contains no mapping for the - * key + * key. + * @throws IgniteCheckedException If failed. */ - T findOne(L key) throws IgniteCheckedException; + public T findOne(L key) throws IgniteCheckedException; /** * Returns a cursor from lower to upper bounds inclusive. @@ -50,21 +50,24 @@ public interface IgniteTree<L, T> { * @param lower Lower bound or {@code null} if unbounded. * @param upper Upper bound or {@code null} if unbounded. * @return Cursor. + * @throws IgniteCheckedException If failed. */ - GridCursor<T> find(L lower, L upper) throws IgniteCheckedException; + public GridCursor<T> find(L lower, L upper) throws IgniteCheckedException; /** * Removes the mapping for a key from this tree if it is present. * - * @param key key whose mapping is to be removed from the tree - * @return the previous value associated with key, or null if there was no mapping for key. + * @param key Key whose mapping is to be removed from the tree. + * @return The previous value associated with key, or null if there was no mapping for key. + * @throws IgniteCheckedException If failed. */ - T remove(L key) throws IgniteCheckedException; + public T remove(L key) throws IgniteCheckedException; /** * Returns the number of elements in this tree. * * @return the number of elements in this tree + * @throws IgniteCheckedException If failed. */ - long size() throws IgniteCheckedException; + public long size() throws IgniteCheckedException; } http://git-wip-us.apache.org/repos/asf/ignite/blob/7db65ddd/modules/core/src/test/java/org/apache/ignite/internal/GridAffinityNoCacheSelfTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/internal/GridAffinityNoCacheSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/GridAffinityNoCacheSelfTest.java index ef8b4b4..0052de9 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/GridAffinityNoCacheSelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/GridAffinityNoCacheSelfTest.java @@ -267,6 +267,11 @@ public class GridAffinityNoCacheSelfTest extends GridCommonAbstractTest { } /** {@inheritDoc} */ + @Override public int putValue(long addr) throws IgniteCheckedException { + return 0; + } + + /** {@inheritDoc} */ @Override public boolean putValue(final ByteBuffer buf, final int off, final int len) throws IgniteCheckedException { return false; http://git-wip-us.apache.org/repos/asf/ignite/blob/7db65ddd/modules/core/src/test/java/org/apache/ignite/internal/pagemem/impl/PageMemoryNoLoadSelfTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/internal/pagemem/impl/PageMemoryNoLoadSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/pagemem/impl/PageMemoryNoLoadSelfTest.java index ae81616..ec62c9b 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/pagemem/impl/PageMemoryNoLoadSelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/pagemem/impl/PageMemoryNoLoadSelfTest.java @@ -18,12 +18,10 @@ package org.apache.ignite.internal.pagemem.impl; import java.io.File; -import java.nio.ByteBuffer; import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; import java.util.List; - import org.apache.ignite.IgniteCheckedException; import org.apache.ignite.internal.mem.DirectMemoryProvider; import org.apache.ignite.internal.mem.file.MappedFileMemoryProvider; @@ -32,6 +30,7 @@ import org.apache.ignite.internal.pagemem.Page; import org.apache.ignite.internal.pagemem.PageIdAllocator; import org.apache.ignite.internal.pagemem.PageIdUtils; import org.apache.ignite.internal.pagemem.PageMemory; +import org.apache.ignite.internal.pagemem.PageUtils; import org.apache.ignite.internal.processors.cache.database.tree.io.PageIO; import org.apache.ignite.internal.util.typedef.internal.U; import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest; @@ -190,7 +189,7 @@ public class PageMemoryNoLoadSelfTest extends GridCommonAbstractTest { // Check that initial pages are accessible. for (FullPageId id : old) { try (Page page = mem.page(id.cacheId(), id.pageId())) { - ByteBuffer buf = page.getForWrite(); + long buf = page.getForWritePointer(); assertNotNull(buf); @@ -210,17 +209,17 @@ public class PageMemoryNoLoadSelfTest extends GridCommonAbstractTest { // Check that updated pages are inaccessible using old IDs. for (FullPageId id : old) { try (Page page = mem.page(id.cacheId(), id.pageId())) { - ByteBuffer buf = page.getForWrite(); + long pageAddr = page.getForWritePointer(); - if (buf != null) { + if (pageAddr != 0L) { page.releaseWrite(false); fail("Was able to acquire page write lock."); } - buf = page.getForRead(); + pageAddr = page.getForReadPointer(); - if (buf != null) { + if (pageAddr != 0) { page.releaseRead(); fail("Was able to acquire page read lock."); @@ -231,7 +230,7 @@ public class PageMemoryNoLoadSelfTest extends GridCommonAbstractTest { // Check that updated pages are accessible using new IDs. for (FullPageId id : updated) { try (Page page = mem.page(id.cacheId(), id.pageId())) { - ByteBuffer buf = page.getForWrite(); + long buf = page.getForWritePointer(); assertNotNull(buf); @@ -242,7 +241,7 @@ public class PageMemoryNoLoadSelfTest extends GridCommonAbstractTest { page.releaseWrite(false); } - buf = page.getForRead(); + buf = page.getForReadPointer(); assertNotNull(buf); @@ -274,7 +273,7 @@ public class PageMemoryNoLoadSelfTest extends GridCommonAbstractTest { DirectMemoryProvider provider = new MappedFileMemoryProvider(log(), memDir, true, sizes); - return new PageMemoryNoStoreImpl(log(), provider, null, PAGE_SIZE); + return new PageMemoryNoStoreImpl(log(), provider, null, PAGE_SIZE, true); } /** @@ -282,13 +281,13 @@ public class PageMemoryNoLoadSelfTest extends GridCommonAbstractTest { * @param val Value to write. */ private void writePage(Page page, int val) { - ByteBuffer bytes = page.getForWrite(); + long bytes = page.getForWritePointer(); try { PageIO.setPageId(bytes, page.id()); for (int i = PageIO.COMMON_HEADER_END; i < PAGE_SIZE; i++) - bytes.put(i, (byte)val); + PageUtils.putByte(bytes, i, (byte)val); } finally { page.releaseWrite(true); @@ -302,13 +301,13 @@ public class PageMemoryNoLoadSelfTest extends GridCommonAbstractTest { private void readPage(Page page, int expVal) { expVal &= 0xFF; - ByteBuffer bytes = page.getForRead(); + long pageAddr = page.getForReadPointer(); - assertNotNull(bytes); + assert(pageAddr != 0); try { for (int i = PageIO.COMMON_HEADER_END; i < PAGE_SIZE; i++) { - int val = bytes.get(i) & 0xFF; + int val = PageUtils.getByte(pageAddr, i) & 0xFF; assertEquals("Unexpected value at position: " + i, expVal, val); } http://git-wip-us.apache.org/repos/asf/ignite/blob/7db65ddd/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteIncompleteCacheObjectSelfTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteIncompleteCacheObjectSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteIncompleteCacheObjectSelfTest.java index 0224a88..32503d2 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteIncompleteCacheObjectSelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteIncompleteCacheObjectSelfTest.java @@ -122,6 +122,11 @@ public class IgniteIncompleteCacheObjectSelfTest extends GridCommonAbstractTest } /** {@inheritDoc} */ + @Override public int putValue(long addr) throws IgniteCheckedException { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ @Override public boolean putValue(final ByteBuffer buf, final int off, final int len) throws IgniteCheckedException { return false; http://git-wip-us.apache.org/repos/asf/ignite/blob/7db65ddd/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/database/tree/io/TrackingPageIOTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/database/tree/io/TrackingPageIOTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/database/tree/io/TrackingPageIOTest.java index cb8ba1f..e2767bb 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/database/tree/io/TrackingPageIOTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/database/tree/io/TrackingPageIOTest.java @@ -18,6 +18,7 @@ package org.apache.ignite.internal.processors.cache.database.tree.io; import java.nio.ByteBuffer; +import java.nio.ByteOrder; import java.util.HashMap; import java.util.Map; import java.util.NavigableSet; @@ -25,6 +26,7 @@ import java.util.Set; import java.util.TreeSet; import java.util.concurrent.ThreadLocalRandom; import junit.framework.TestCase; +import org.apache.ignite.internal.util.GridUnsafe; /** * @@ -33,13 +35,15 @@ public class TrackingPageIOTest extends TestCase { /** Page size. */ public static final int PAGE_SIZE = 2048; + /** */ private final TrackingPageIO io = TrackingPageIO.VERSIONS.latest(); /** * */ public void testBasics() { - ByteBuffer buf = ByteBuffer.allocate(PAGE_SIZE); + ByteBuffer buf = ByteBuffer.allocateDirect(PAGE_SIZE); + buf.order(ByteOrder.nativeOrder()); io.markChanged(buf, 2, 0, -1, PAGE_SIZE); @@ -54,7 +58,8 @@ public class TrackingPageIOTest extends TestCase { * */ public void testMarkingRandomly() { - ByteBuffer buf = ByteBuffer.allocate(PAGE_SIZE); + ByteBuffer buf = ByteBuffer.allocateDirect(PAGE_SIZE); + buf.order(ByteOrder.nativeOrder()); int cntOfPageToTrack = io.countOfPageToTrack(PAGE_SIZE); @@ -66,7 +71,8 @@ public class TrackingPageIOTest extends TestCase { * */ public void testZeroingRandomly() { - ByteBuffer buf = ByteBuffer.allocate(PAGE_SIZE); + ByteBuffer buf = ByteBuffer.allocateDirect(PAGE_SIZE); + buf.order(ByteOrder.nativeOrder()); for (int i = 0; i < 1001; i++) checkMarkingRandomly(buf, i, true); @@ -87,7 +93,7 @@ public class TrackingPageIOTest extends TestCase { assert basePageId >= 0; - PageIO.setPageId(buf, basePageId); + PageIO.setPageId(GridUnsafe.bufferAddress(buf), basePageId); Map<Long, Boolean> map = new HashMap<>(); @@ -122,8 +128,12 @@ public class TrackingPageIOTest extends TestCase { } } + /** + * @throws Exception If failed. + */ public void testFindNextChangedPage() throws Exception { - ByteBuffer buf = ByteBuffer.allocate(PAGE_SIZE); + ByteBuffer buf = ByteBuffer.allocateDirect(PAGE_SIZE); + buf.order(ByteOrder.nativeOrder()); for (int i = 0; i < 101; i++) checkFindingRandomly(buf, i); @@ -144,7 +154,7 @@ public class TrackingPageIOTest extends TestCase { assert basePageId >= 0; - PageIO.setPageId(buf, basePageId); + PageIO.setPageId(GridUnsafe.bufferAddress(buf), basePageId); try { TreeSet<Long> setIdx = new TreeSet<>(); @@ -174,8 +184,12 @@ public class TrackingPageIOTest extends TestCase { } } + /** + * + */ public void testMerging() { - ByteBuffer buf = ByteBuffer.allocate(PAGE_SIZE); + ByteBuffer buf = ByteBuffer.allocateDirect(PAGE_SIZE); + buf.order(ByteOrder.nativeOrder()); ThreadLocalRandom rand = ThreadLocalRandom.current(); @@ -185,7 +199,7 @@ public class TrackingPageIOTest extends TestCase { assert basePageId >= 0; - PageIO.setPageId(buf, basePageId); + PageIO.setPageId(GridUnsafe.bufferAddress(buf), basePageId); TreeSet<Long> setIdx = new TreeSet<>(); @@ -209,8 +223,12 @@ public class TrackingPageIOTest extends TestCase { assertFalse(io.wasChanged(buf, i, 5, 4, PAGE_SIZE)); } + /** + * + */ public void testMerging_MarksShouldBeDropForSuccessfulBackup() { - ByteBuffer buf = ByteBuffer.allocate(PAGE_SIZE); + ByteBuffer buf = ByteBuffer.allocateDirect(PAGE_SIZE); + buf.order(ByteOrder.nativeOrder()); ThreadLocalRandom rand = ThreadLocalRandom.current(); @@ -220,7 +238,7 @@ public class TrackingPageIOTest extends TestCase { assert basePageId >= 0; - PageIO.setPageId(buf, basePageId); + PageIO.setPageId(GridUnsafe.bufferAddress(buf), basePageId); TreeSet<Long> setIdx = new TreeSet<>(); http://git-wip-us.apache.org/repos/asf/ignite/blob/7db65ddd/modules/core/src/test/java/org/apache/ignite/internal/processors/database/BPlusTreeReuseSelfTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/database/BPlusTreeReuseSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/database/BPlusTreeReuseSelfTest.java index cfc58b0..5f38bb0 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/database/BPlusTreeReuseSelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/database/BPlusTreeReuseSelfTest.java @@ -17,7 +17,6 @@ package org.apache.ignite.internal.processors.database; -import java.nio.ByteBuffer; import java.util.HashSet; import java.util.Set; import org.apache.ignite.IgniteCheckedException; @@ -47,6 +46,9 @@ public class BPlusTreeReuseSelfTest extends BPlusTreeSelfTest { assertTrue(TestReuseList.checkNoLocks()); } + /** + * + */ private static class TestReuseList extends ReuseListImpl { /** */ private static ThreadLocal<Set<Long>> readLocks = new ThreadLocal<Set<Long>>() { @@ -88,15 +90,15 @@ public class BPlusTreeReuseSelfTest extends BPlusTreeSelfTest { } /** {@inheritDoc} */ - @Override public void onReadLock(Page page, ByteBuffer buf) { - checkPageId(page, buf); + @Override public void onReadLock(Page page, long pageAddr) { + checkPageId(page, pageAddr); assertTrue(readLocks.get().add(page.id())); } /** {@inheritDoc} */ - @Override public void onReadUnlock(Page page, ByteBuffer buf) { - checkPageId(page, buf); + @Override public void onReadUnlock(Page page, long pageAddr) { + checkPageId(page, pageAddr); assertTrue(readLocks.get().remove(page.id())); } @@ -107,18 +109,18 @@ public class BPlusTreeReuseSelfTest extends BPlusTreeSelfTest { } /** {@inheritDoc} */ - @Override public void onWriteLock(Page page, ByteBuffer buf) { - if (buf == null) + @Override public void onWriteLock(Page page, long pageAddr) { + if (pageAddr == 0L) return; // Failed to lock. - checkPageId(page, buf); + checkPageId(page, pageAddr); assertTrue(writeLocks.get().add(page.id())); } /** {@inheritDoc} */ - @Override public void onWriteUnlock(Page page, ByteBuffer buf) { - assertEquals(effectivePageId(page.id()), effectivePageId(PageIO.getPageId(buf))); + @Override public void onWriteUnlock(Page page, long pageAddr) { + assertEquals(effectivePageId(page.id()), effectivePageId(PageIO.getPageId(pageAddr))); assertTrue(writeLocks.get().remove(page.id())); } http://git-wip-us.apache.org/repos/asf/ignite/blob/7db65ddd/modules/core/src/test/java/org/apache/ignite/internal/processors/database/BPlusTreeSelfTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/database/BPlusTreeSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/database/BPlusTreeSelfTest.java index 4dcb7a9..928c86d 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/database/BPlusTreeSelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/database/BPlusTreeSelfTest.java @@ -38,6 +38,7 @@ import org.apache.ignite.internal.pagemem.FullPageId; import org.apache.ignite.internal.pagemem.Page; import org.apache.ignite.internal.pagemem.PageIdAllocator; import org.apache.ignite.internal.pagemem.PageMemory; +import org.apache.ignite.internal.pagemem.PageUtils; import org.apache.ignite.internal.pagemem.impl.PageMemoryNoStoreImpl; import org.apache.ignite.internal.processors.cache.database.DataStructure; import org.apache.ignite.internal.processors.cache.database.tree.BPlusTree; @@ -1165,10 +1166,10 @@ public class BPlusTreeSelfTest extends GridCommonAbstractTest { /** * @param page Page. - * @param buf Buffer. + * @param pageAddr Page address. */ - public static void checkPageId(Page page, ByteBuffer buf) { - long pageId = PageIO.getPageId(buf); + public static void checkPageId(Page page, long pageAddr) { + long pageId = PageIO.getPageId(pageAddr); // Page ID must be 0L for newly allocated page, for reused page effective ID must remain the same. if (pageId != 0L && page.id() != pageId) @@ -1232,18 +1233,18 @@ public class BPlusTreeSelfTest extends GridCommonAbstractTest { } /** {@inheritDoc} */ - @Override protected int compare(BPlusIO<Long> io, ByteBuffer buf, int idx, Long n2) + @Override protected int compare(BPlusIO<Long> io, long pageAddr, int idx, Long n2) throws IgniteCheckedException { - Long n1 = io.getLookupRow(this, buf, idx); + Long n1 = io.getLookupRow(this, pageAddr, idx); return Long.compare(n1, n2); } /** {@inheritDoc} */ - @Override protected Long getRow(BPlusIO<Long> io, ByteBuffer buf, int idx) throws IgniteCheckedException { + @Override protected Long getRow(BPlusIO<Long> io, long pageAddr, int idx) throws IgniteCheckedException { assert io.canGetRow() : io; - return io.getLookupRow(this, buf, idx); + return io.getLookupRow(this, pageAddr, idx); } /** @@ -1280,11 +1281,11 @@ public class BPlusTreeSelfTest extends GridCommonAbstractTest { } /** {@inheritDoc} */ - @Override public void onReadLock(Page page, ByteBuffer buf) { - if (buf != null) { - long pageId = PageIO.getPageId(buf); + @Override public void onReadLock(Page page, long pageAddr) { + if (pageAddr != 0L) { + long pageId = PageIO.getPageId(pageAddr); - checkPageId(page, buf); + checkPageId(page, pageAddr); assertNull(locks(true).put(page.id(), pageId)); } @@ -1293,10 +1294,10 @@ public class BPlusTreeSelfTest extends GridCommonAbstractTest { } /** {@inheritDoc} */ - @Override public void onReadUnlock(Page page, ByteBuffer buf) { - checkPageId(page, buf); + @Override public void onReadUnlock(Page page, long pageAddr) { + checkPageId(page, pageAddr); - long pageId = PageIO.getPageId(buf); + long pageId = PageIO.getPageId(pageAddr); assertEquals(Long.valueOf(pageId), locks(true).remove(page.id())); } @@ -1307,11 +1308,11 @@ public class BPlusTreeSelfTest extends GridCommonAbstractTest { } /** {@inheritDoc} */ - @Override public void onWriteLock(Page page, ByteBuffer buf) { - if (buf != null) { - checkPageId(page, buf); + @Override public void onWriteLock(Page page, long pageAddr) { + if (pageAddr != 0L) { + checkPageId(page, pageAddr); - long pageId = PageIO.getPageId(buf); + long pageId = PageIO.getPageId(pageAddr); if (pageId == 0L) pageId = page.id(); // It is a newly allocated page. @@ -1323,8 +1324,8 @@ public class BPlusTreeSelfTest extends GridCommonAbstractTest { } /** {@inheritDoc} */ - @Override public void onWriteUnlock(Page page, ByteBuffer buf) { - assertEquals(effectivePageId(page.id()), effectivePageId(PageIO.getPageId(buf))); + @Override public void onWriteUnlock(Page page, long pageAddr) { + assertEquals(effectivePageId(page.id()), effectivePageId(PageIO.getPageId(pageAddr))); assertEquals(Long.valueOf(page.id()), locks(false).remove(page.id())); } @@ -1391,15 +1392,15 @@ public class BPlusTreeSelfTest extends GridCommonAbstractTest { } /** {@inheritDoc} */ - @Override public int getMaxCount(ByteBuffer buf) { + @Override public int getMaxCount(long buf, int pageSize) { if (MAX_PER_PAGE != 0) return MAX_PER_PAGE; - return super.getMaxCount(buf); + return super.getMaxCount(buf, pageSize); } /** {@inheritDoc} */ - @Override public void store(ByteBuffer dst, int dstIdx, BPlusIO<Long> srcIo, ByteBuffer src, int srcIdx) + @Override public void store(long dst, int dstIdx, BPlusIO<Long> srcIo, long src, int srcIdx) throws IgniteCheckedException { Long row = srcIo.getLookupRow(null, src, srcIdx); @@ -1415,16 +1416,21 @@ public class BPlusTreeSelfTest extends GridCommonAbstractTest { } /** {@inheritDoc} */ - @Override public void storeByOffset(ByteBuffer buf, int off, Long row) { + @Override public void storeByOffset(ByteBuffer buf, int off, Long row) throws IgniteCheckedException { + throw new UnsupportedOperationException(); + } + + /** {@inheritDoc} */ + @Override public void storeByOffset(long pageAddr, int off, Long row) { checkNotRemoved(row); - buf.putLong(off, row); + PageUtils.putLong(pageAddr, off, row); } /** {@inheritDoc} */ - @Override public Long getLookupRow(BPlusTree<Long,?> tree, ByteBuffer buf, int idx) + @Override public Long getLookupRow(BPlusTree<Long,?> tree, long pageAddr, int idx) throws IgniteCheckedException { - Long row = buf.getLong(offset(idx)); + Long row = PageUtils.getLong(pageAddr, offset(idx)); checkNotRemoved(row); @@ -1441,7 +1447,7 @@ public class BPlusTreeSelfTest extends GridCommonAbstractTest { for (int i = 0; i < sizes.length; i++) sizes[i] = 1024 * MB / CPUS; - PageMemory pageMem = new PageMemoryNoStoreImpl(log, new UnsafeMemoryProvider(sizes), null, PAGE_SIZE); + PageMemory pageMem = new PageMemoryNoStoreImpl(log, new UnsafeMemoryProvider(sizes), null, PAGE_SIZE, true); pageMem.start(); @@ -1461,34 +1467,39 @@ public class BPlusTreeSelfTest extends GridCommonAbstractTest { private static final class LongLeafIO extends BPlusLeafIO<Long> { /** */ - protected LongLeafIO() { + LongLeafIO() { super(LONG_LEAF_IO, 1, 8); } /** {@inheritDoc} */ - @Override public int getMaxCount(ByteBuffer buf) { + @Override public int getMaxCount(long pageAddr, int pageSize) { if (MAX_PER_PAGE != 0) return MAX_PER_PAGE; - return super.getMaxCount(buf); + return super.getMaxCount(pageAddr, pageSize); + } + + /** {@inheritDoc} */ + @Override public void storeByOffset(ByteBuffer buf, int off, Long row) throws IgniteCheckedException { + throw new UnsupportedOperationException(); } /** {@inheritDoc} */ - @Override public void storeByOffset(ByteBuffer buf, int off, Long row) { - buf.putLong(off, row); + @Override public void storeByOffset(long pageAddr, int off, Long row) { + PageUtils.putLong(pageAddr, off, row); } /** {@inheritDoc} */ - @Override public void store(ByteBuffer dst, int dstIdx, BPlusIO<Long> srcIo, ByteBuffer src, int srcIdx) { + @Override public void store(long dst, int dstIdx, BPlusIO<Long> srcIo, long src, int srcIdx) { assert srcIo == this; - dst.putLong(offset(dstIdx), src.getLong(offset(srcIdx))); + PageUtils.putLong(dst, offset(dstIdx), PageUtils.getLong(src, offset(srcIdx))); } /** {@inheritDoc} */ - @Override public Long getLookupRow(BPlusTree<Long,?> tree, ByteBuffer buf, int idx) + @Override public Long getLookupRow(BPlusTree<Long,?> tree, long pageAddr, int idx) throws IgniteCheckedException { - return buf.getLong(offset(idx)); + return PageUtils.getLong(pageAddr, offset(idx)); } } } http://git-wip-us.apache.org/repos/asf/ignite/blob/7db65ddd/modules/core/src/test/java/org/apache/ignite/internal/processors/database/FreeListImplSelfTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/database/FreeListImplSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/database/FreeListImplSelfTest.java index 2b93d48..d0d495e 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/database/FreeListImplSelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/database/FreeListImplSelfTest.java @@ -32,6 +32,7 @@ import org.apache.ignite.IgniteCheckedException; import org.apache.ignite.internal.mem.unsafe.UnsafeMemoryProvider; import org.apache.ignite.internal.pagemem.PageIdAllocator; import org.apache.ignite.internal.pagemem.PageMemory; +import org.apache.ignite.internal.pagemem.PageUtils; import org.apache.ignite.internal.pagemem.impl.PageMemoryNoStoreImpl; import org.apache.ignite.internal.processors.cache.CacheObject; import org.apache.ignite.internal.processors.cache.CacheObjectContext; @@ -315,7 +316,7 @@ public class FreeListImplSelfTest extends GridCommonAbstractTest { for (int i = 0; i < sizes.length; i++) sizes[i] = 1024 * MB / CPUS; - PageMemory pageMem = new PageMemoryNoStoreImpl(log, new UnsafeMemoryProvider(sizes), null, pageSize); + PageMemory pageMem = new PageMemoryNoStoreImpl(log, new UnsafeMemoryProvider(sizes), null, pageSize, true); pageMem.start(); @@ -395,6 +396,11 @@ public class FreeListImplSelfTest extends GridCommonAbstractTest { @Override public void link(long link) { this.link = link; } + + /** {@inheritDoc} */ + @Override public int hash() { + throw new UnsupportedOperationException(); + } } /** @@ -458,6 +464,13 @@ public class FreeListImplSelfTest extends GridCommonAbstractTest { } /** {@inheritDoc} */ + @Override public int putValue(long addr) throws IgniteCheckedException { + PageUtils.putBytes(addr, 0, data); + + return data.length; + } + + /** {@inheritDoc} */ @Override public boolean putValue(ByteBuffer buf, int off, int len) throws IgniteCheckedException { buf.put(data, off, len); http://git-wip-us.apache.org/repos/asf/ignite/blob/7db65ddd/modules/core/src/test/java/org/apache/ignite/internal/processors/database/MetadataStorageSelfTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/database/MetadataStorageSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/database/MetadataStorageSelfTest.java index 252ea82..7eeda4b 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/database/MetadataStorageSelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/database/MetadataStorageSelfTest.java @@ -160,6 +160,6 @@ public class MetadataStorageSelfTest extends GridCommonAbstractTest { DirectMemoryProvider provider = new MappedFileMemoryProvider(log(), allocationPath, clean, sizes); - return new PageMemoryNoStoreImpl(log, provider, null, PAGE_SIZE); + return new PageMemoryNoStoreImpl(log, provider, null, PAGE_SIZE, true); } } http://git-wip-us.apache.org/repos/asf/ignite/blob/7db65ddd/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/H2Cursor.java ---------------------------------------------------------------------- diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/H2Cursor.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/H2Cursor.java index cc71813..de3111d 100644 --- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/H2Cursor.java +++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/H2Cursor.java @@ -31,13 +31,13 @@ import org.h2.result.*; */ public class H2Cursor implements Cursor { /** */ - final GridCursor<GridH2Row> cursor; + private final GridCursor<GridH2Row> cursor; /** */ - final IgniteBiPredicate<Object,Object> filter; + private final IgniteBiPredicate<Object,Object> filter; /** */ - final long time = U.currentTimeMillis(); + private final long time = U.currentTimeMillis(); /** * @param cursor Cursor. @@ -50,6 +50,9 @@ public class H2Cursor implements Cursor { this.filter = filter; } + /** + * @param cursor Cursor. + */ public H2Cursor(GridCursor<GridH2Row> cursor) { this(cursor, null); } http://git-wip-us.apache.org/repos/asf/ignite/blob/7db65ddd/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..5c60b16 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 @@ -17,7 +17,6 @@ package org.apache.ignite.internal.processors.query.h2.database; -import java.nio.ByteBuffer; import java.util.concurrent.atomic.AtomicLong; import org.apache.ignite.IgniteCheckedException; import org.apache.ignite.internal.pagemem.PageMemory; @@ -76,9 +75,9 @@ 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 pageAddr, int idx) throws IgniteCheckedException { - return (GridH2Row)io.getLookupRow(this, buf, idx); + return (GridH2Row)io.getLookupRow(this, pageAddr, idx); } } http://git-wip-us.apache.org/repos/asf/ignite/blob/7db65ddd/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/H2TreeIndex.java ---------------------------------------------------------------------- diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/H2TreeIndex.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/H2TreeIndex.java index 19cbbf9..6cabd77 100644 --- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/H2TreeIndex.java +++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/H2TreeIndex.java @@ -17,7 +17,6 @@ package org.apache.ignite.internal.processors.query.h2.database; -import java.nio.ByteBuffer; import java.util.List; import org.apache.ignite.IgniteCheckedException; import org.apache.ignite.IgniteException; @@ -87,9 +86,9 @@ public class H2TreeIndex extends GridH2IndexBase { tree = new H2Tree(name, cctx.offheap().reuseListForIndex(name), cctx.cacheId(), dbMgr.pageMemory(), cctx.shared().wal(), cctx.offheap().globalRemoveId(), tbl.rowFactory(), page.pageId().pageId(), page.isAllocated()) { - @Override protected int compare(BPlusIO<SearchRow> io, ByteBuffer buf, int idx, SearchRow row) + @Override protected int compare(BPlusIO<SearchRow> io, long pageAddr, int idx, SearchRow row) throws IgniteCheckedException { - return compareRows(getRow(io, buf, idx), row); + return compareRows(getRow(io, pageAddr, idx), row); } }; } http://git-wip-us.apache.org/repos/asf/ignite/blob/7db65ddd/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/io/H2InnerIO.java ---------------------------------------------------------------------- diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/io/H2InnerIO.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/io/H2InnerIO.java index 6868205..f697121 100644 --- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/io/H2InnerIO.java +++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/io/H2InnerIO.java @@ -19,6 +19,7 @@ package org.apache.ignite.internal.processors.query.h2.database.io; import java.nio.ByteBuffer; import org.apache.ignite.IgniteCheckedException; +import org.apache.ignite.internal.pagemem.PageUtils; import org.apache.ignite.internal.processors.cache.database.tree.BPlusTree; import org.apache.ignite.internal.processors.cache.database.tree.io.BPlusIO; import org.apache.ignite.internal.processors.cache.database.tree.io.BPlusInnerIO; @@ -53,22 +54,31 @@ public class H2InnerIO extends BPlusInnerIO<SearchRow> implements H2RowLinkIO { } /** {@inheritDoc} */ - @Override public SearchRow getLookupRow(BPlusTree<SearchRow,?> tree, ByteBuffer buf, int idx) + @Override public void storeByOffset(long pageAddr, int off, SearchRow row) { + GridH2Row row0 = (GridH2Row)row; + + assert row0.link != 0; + + PageUtils.putLong(pageAddr, off, row0.link); + } + + /** {@inheritDoc} */ + @Override public SearchRow getLookupRow(BPlusTree<SearchRow,?> tree, long pageAddr, int idx) throws IgniteCheckedException { - long link = getLink(buf, idx); + long link = getLink(pageAddr, idx); return ((H2Tree)tree).getRowFactory().getRow(link); } /** {@inheritDoc} */ - @Override public void store(ByteBuffer dst, int dstIdx, BPlusIO<SearchRow> srcIo, ByteBuffer src, int srcIdx) { - long link = ((H2RowLinkIO)srcIo).getLink(src, srcIdx); + @Override public void store(long dstPageAddr, int dstIdx, BPlusIO<SearchRow> srcIo, long srcPageAddr, int srcIdx) { + long link = ((H2RowLinkIO)srcIo).getLink(srcPageAddr, srcIdx); - dst.putLong(offset(dstIdx), link); + PageUtils.putLong(dstPageAddr, offset(dstIdx), link); } /** {@inheritDoc} */ - @Override public long getLink(ByteBuffer buf, int idx) { - return buf.getLong(offset(idx)); + @Override public long getLink(long pageAddr, int idx) { + return PageUtils.getLong(pageAddr, offset(idx)); } } http://git-wip-us.apache.org/repos/asf/ignite/blob/7db65ddd/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/io/H2LeafIO.java ---------------------------------------------------------------------- diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/io/H2LeafIO.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/io/H2LeafIO.java index ce517a8..26cbdc5 100644 --- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/io/H2LeafIO.java +++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/io/H2LeafIO.java @@ -19,6 +19,7 @@ package org.apache.ignite.internal.processors.query.h2.database.io; import java.nio.ByteBuffer; import org.apache.ignite.IgniteCheckedException; +import org.apache.ignite.internal.pagemem.PageUtils; import org.apache.ignite.internal.processors.cache.database.tree.BPlusTree; import org.apache.ignite.internal.processors.cache.database.tree.io.BPlusIO; import org.apache.ignite.internal.processors.cache.database.tree.io.BPlusLeafIO; @@ -53,22 +54,31 @@ public class H2LeafIO extends BPlusLeafIO<SearchRow> implements H2RowLinkIO { } /** {@inheritDoc} */ - @Override public void store(ByteBuffer dst, int dstIdx, BPlusIO<SearchRow> srcIo, ByteBuffer src, int srcIdx) { + @Override public void storeByOffset(long pageAddr, int off, SearchRow row) { + GridH2Row row0 = (GridH2Row)row; + + assert row0.link != 0; + + PageUtils.putLong(pageAddr, off, row0.link); + } + + /** {@inheritDoc} */ + @Override public void store(long dstPageAddr, int dstIdx, BPlusIO<SearchRow> srcIo, long srcPageAddr, int srcIdx) { assert srcIo == this; - dst.putLong(offset(dstIdx), getLink(src, srcIdx)); + PageUtils.putLong(dstPageAddr, offset(dstIdx), getLink(srcPageAddr, srcIdx)); } /** {@inheritDoc} */ - @Override public SearchRow getLookupRow(BPlusTree<SearchRow,?> tree, ByteBuffer buf, int idx) + @Override public SearchRow getLookupRow(BPlusTree<SearchRow,?> tree, long pageAddr, int idx) throws IgniteCheckedException { - long link = getLink(buf, idx); + long link = getLink(pageAddr, idx); return ((H2Tree)tree).getRowFactory().getRow(link); } /** {@inheritDoc} */ - @Override public long getLink(ByteBuffer buf, int idx) { - return buf.getLong(offset(idx)); + @Override public long getLink(long pageAddr, int idx) { + return PageUtils.getLong(pageAddr, offset(idx)); } } http://git-wip-us.apache.org/repos/asf/ignite/blob/7db65ddd/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/io/H2RowLinkIO.java ---------------------------------------------------------------------- diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/io/H2RowLinkIO.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/io/H2RowLinkIO.java index 9c4737d..ce69197 100644 --- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/io/H2RowLinkIO.java +++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/database/io/H2RowLinkIO.java @@ -17,16 +17,14 @@ package org.apache.ignite.internal.processors.query.h2.database.io; -import java.nio.ByteBuffer; - /** * Row link IO. */ public interface H2RowLinkIO { /** - * @param buf Buffer. + * @param pageAddr Page address. * @param idx Index. * @return Row link. */ - public long getLink(ByteBuffer buf, int idx); + public long getLink(long pageAddr, int idx); } http://git-wip-us.apache.org/repos/asf/ignite/blob/7db65ddd/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2Row.java ---------------------------------------------------------------------- diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2Row.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2Row.java index ac48fcb..bdd43ef 100644 --- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2Row.java +++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2Row.java @@ -164,4 +164,9 @@ public abstract class GridH2Row extends Row implements GridSearchRowPointer, Cac @Override public Value[] getValueList() { throw new UnsupportedOperationException(); } + + /** {@inheritDoc} */ + @Override public int hash() { + throw new UnsupportedOperationException(); + } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ignite/blob/7db65ddd/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/IgniteSqlDistributedJoinSelfTest.java ---------------------------------------------------------------------- diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/IgniteSqlDistributedJoinSelfTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/IgniteSqlDistributedJoinSelfTest.java index e9f41c8..81201c8 100644 --- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/IgniteSqlDistributedJoinSelfTest.java +++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/IgniteSqlDistributedJoinSelfTest.java @@ -17,18 +17,18 @@ package org.apache.ignite.internal.processors.query; -import org.apache.ignite.*; -import org.apache.ignite.cache.*; -import org.apache.ignite.cache.query.*; -import org.apache.ignite.cache.query.annotations.*; -import org.apache.ignite.configuration.*; -import org.apache.ignite.plugin.*; -import org.apache.ignite.spi.discovery.tcp.*; -import org.apache.ignite.spi.discovery.tcp.ipfinder.*; -import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.*; -import org.apache.ignite.testframework.junits.common.*; - -import java.util.*; +import java.util.List; +import org.apache.ignite.IgniteCache; +import org.apache.ignite.cache.CacheAtomicityMode; +import org.apache.ignite.cache.CacheMode; +import org.apache.ignite.cache.query.SqlQuery; +import org.apache.ignite.cache.query.annotations.QuerySqlField; +import org.apache.ignite.configuration.CacheConfiguration; +import org.apache.ignite.configuration.IgniteConfiguration; +import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi; +import org.apache.ignite.spi.discovery.tcp.ipfinder.TcpDiscoveryIpFinder; +import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder; +import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest; /** * Tests for correct distributed sql joins. @@ -36,8 +36,14 @@ import java.util.*; public class IgniteSqlDistributedJoinSelfTest extends GridCommonAbstractTest { /** */ private static final TcpDiscoveryIpFinder IP_FINDER = new TcpDiscoveryVmIpFinder(true); + + /** */ private static final int NODES_COUNT = 2; + + /** */ private static final int ORG_COUNT = NODES_COUNT; + + /** */ private static final int PERSON_PER_ORG_COUNT = 50; /** {@inheritDoc} */ @@ -81,7 +87,7 @@ public class IgniteSqlDistributedJoinSelfTest extends GridCommonAbstractTest { } /** - * + * @throws Exception If failed. */ public void testNonCollocatedDistributedJoin() throws Exception { CacheConfiguration ccfg1 = cacheConfig("pers", true, String.class, Person.class); @@ -141,11 +147,19 @@ public class IgniteSqlDistributedJoinSelfTest extends GridCommonAbstractTest { } } + /** + * + */ private static class Person { + /** */ @QuerySqlField(index = true) private String id; + + /** */ @QuerySqlField(index = true) private String orgId; + + /** */ @QuerySqlField(index = true) private String name; @@ -162,9 +176,15 @@ public class IgniteSqlDistributedJoinSelfTest extends GridCommonAbstractTest { public void setName(String name) { this.name = name; } } + /** + * + */ private static class Organization { + /** */ @QuerySqlField(index = true) private String id; + + /** */ @QuerySqlField(index = true) private String name; http://git-wip-us.apache.org/repos/asf/ignite/blob/7db65ddd/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/GridIndexingSpiAbstractSelfTest.java ---------------------------------------------------------------------- diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/GridIndexingSpiAbstractSelfTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/GridIndexingSpiAbstractSelfTest.java index 593ba95..b9152fa 100644 --- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/GridIndexingSpiAbstractSelfTest.java +++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/GridIndexingSpiAbstractSelfTest.java @@ -694,6 +694,11 @@ public abstract class GridIndexingSpiAbstractSelfTest extends GridCommonAbstract } /** {@inheritDoc} */ + @Override public int putValue(long addr) throws IgniteCheckedException { + return 0; + } + + /** {@inheritDoc} */ @Override public boolean putValue(final ByteBuffer buf, final int off, final int len) throws IgniteCheckedException { return false;