You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by sb...@apache.org on 2017/01/17 14:05:20 UTC
[44/50] [abbrv] ignite git commit: ignite-3477 PageMemory
optimizations - use page address instead of ByteBuffer to work with page
memory - got rid of pages pin/unpin - do not copy byte array for cache key
comparison - reduced size of data tree search ro
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;