http://git-wip-us.apache.org/repos/asf/ignite/blob/4183186a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/io/PageMetaIO.java ---------------------------------------------------------------------- diff --cc modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/io/PageMetaIO.java index 413f306,8d12f7c..5e6dd87 --- 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 @@@ -68,16 -72,17 +71,17 @@@ 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(pageAddr, 0); - setReuseListRoot(pageAddr, 0); - setLastSuccessfulFullBackupId(pageAddr, 0); - setLastSuccessfulBackupId(pageAddr, 0); - setNextBackupId(pageAddr, 1); - setLastAllocatedIndex(pageAddr, 0); - setCandidateAllocatedIndex(pageAddr, 0); + setTreeRoot(buf, 0); + setReuseListRoot(buf, 0); + setLastSuccessfulFullSnapshotId(buf, 0); + setLastSuccessfulSnapshotId(buf, 0); + setNextSnapshotTag(buf, 1); + setLastSuccessfulSnapshotTag(buf, 0); + setLastAllocatedIndex(buf, 0); + setCandidateAllocatedIndex(buf, 0); } /** @@@ -121,10 -126,10 +125,10 @@@ } /** - * @param buf Buffer. + * @param pageAddr Page address. */ - public long getLastSuccessfulBackupId(long pageAddr) { - return PageUtils.getLong(pageAddr, LAST_SUCCESSFUL_BACKUP_ID_OFF); + public long getLastSuccessfulSnapshotId(@NotNull ByteBuffer buf) { + return buf.getLong(LAST_SUCCESSFUL_SNAPSHOT_ID_OFF); } /** @@@ -136,10 -141,10 +140,10 @@@ } /** - * @param buf Buffer. + * @param pageAddr Page address. */ - public long getLastSuccessfulFullBackupId(long pageAddr) { - return PageUtils.getLong(pageAddr, LAST_SUCCESSFUL_FULL_BACKUP_ID_OFF); + public long getLastSuccessfulFullSnapshotId(@NotNull ByteBuffer buf) { + return buf.getLong(LAST_SUCCESSFUL_FULL_SNAPSHOT_ID_OFF); } /** @@@ -174,16 -201,9 +200,9 @@@ } /** - * @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); } - - /** - * @param pageAddr Page address. - */ - public long getNextBackupId(long pageAddr) { - return PageUtils.getLong(pageAddr, NEXT_BACKUP_ID_OFF); - } }
http://git-wip-us.apache.org/repos/asf/ignite/blob/4183186a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/io/TrackingPageIO.java ---------------------------------------------------------------------- diff --cc modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/io/TrackingPageIO.java index 4beef7d,136ebff..a2fed21 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/io/TrackingPageIO.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/io/TrackingPageIO.java @@@ -147,21 -149,21 +149,21 @@@ public class TrackingPageIO extends Pag newSize += Long.bitCount(newVal); - buf.putLong(sizeOff2 + SIZE_FIELD_SIZE + i, newVal); + PageUtils.putLong(buf, sizeOff2 + SIZE_FIELD_SIZE + i, newVal); } - for (i -= 8; i < len; i ++) { - byte newVal = (byte) (PageUtils.getByte(buf, sizeOff + SIZE_FIELD_SIZE + i) | PageUtils.getByte(buf, sizeOff2 + SIZE_FIELD_SIZE + i)); + for (; i < len; i ++) { + byte newVal = (byte) (buf.get(sizeOff + SIZE_FIELD_SIZE + i) | buf.get(sizeOff2 + SIZE_FIELD_SIZE + i)); newSize += Integer.bitCount(newVal & 0xFF); - buf.put(sizeOff2 + SIZE_FIELD_SIZE + i, newVal); + PageUtils.putByte(buf, sizeOff2 + SIZE_FIELD_SIZE + i, newVal); } - buf.putShort(sizeOff2, (short)newSize); + PageUtils.putShort(buf, sizeOff2, (short)newSize); } - PageUtils.putLong(buf, LAST_BACKUP_OFFSET, nextBackupId); + buf.putLong(LAST_SNAPSHOT_TAG_OFFSET, nextSnapshotTag); PageHandler.zeroMemory(buf, sizeOff, len + SIZE_FIELD_SIZE); } @@@ -191,10 -196,10 +196,10 @@@ byte byteToTest; - if (useLeftHalf(curBackupId)) - byteToTest = PageUtils.getByte(buf, BITMAP_OFFSET + (idxToTest >> 3)); + if (useLeftHalf(curSnapshotTag)) + byteToTest = buf.get(BITMAP_OFFSET + (idxToTest >> 3)); else - byteToTest = buf.get(BITMAP_OFFSET + SIZE_FIELD_SIZE + ((idxToTest + cntOfPage) >> 3)); + byteToTest = PageUtils.getByte(buf, BITMAP_OFFSET + SIZE_FIELD_SIZE + ((idxToTest + cntOfPage) >> 3)); int testTemplate = 1 << (idxToTest & 0b111); @@@ -214,10 -219,10 +219,10 @@@ if (dif != 0 && dif != 1) return -1; - if (useLeftHalf(backupId)) - return PageUtils.getShort(buf, SIZE_FIELD_OFFSET); + if (useLeftHalf(snapshotTag)) + return buf.getShort(SIZE_FIELD_OFFSET); else - return buf.getShort(BITMAP_OFFSET + (countOfPageToTrack(pageSize) >> 3)); + return PageUtils.getShort(buf, BITMAP_OFFSET + (countOfPageToTrack(pageSize) >> 3)); } /** http://git-wip-us.apache.org/repos/asf/ignite/blob/4183186a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/util/PageHandler.java ---------------------------------------------------------------------- diff --cc modules/core/src/main/java/org/apache/ignite/internal/processors/cache/database/tree/util/PageHandler.java index ccd8dee,fadf74d..222a6a0 --- 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 @@@ -285,11 -275,38 +285,16 @@@ public abstract class PageHandler<X, R (page.fullPageWalRecordPolicy() == FALSE || page.isDirty()); } - /** - * @param src Source. - * @param dst Destination. - * @param srcOff Source offset in bytes. - * @param dstOff Destination offset in bytes. - * @param cnt Bytes count to copy. - */ - public static void copyMemory(ByteBuffer src, ByteBuffer dst, long srcOff, long dstOff, long cnt) { - byte[] srcArr = src.hasArray() ? src.array() : null; - byte[] dstArr = dst.hasArray() ? dst.array() : null; - long srcArrOff = src.hasArray() ? src.arrayOffset() + GridUnsafe.BYTE_ARR_OFF : 0; - long dstArrOff = dst.hasArray() ? dst.arrayOffset() + GridUnsafe.BYTE_ARR_OFF : 0; - - long srcPtr = src.isDirect() ? ((DirectBuffer)src).address() : 0; - long dstPtr = dst.isDirect() ? ((DirectBuffer)dst).address() : 0; - - GridUnsafe.copyMemory(srcArr, srcPtr + srcArrOff + srcOff, dstArr, dstPtr + dstArrOff + dstOff, cnt); + public static void copyMemory(long srcAddr, long dstAddr, long srcOff, long dstOff, long cnt) { + GridUnsafe.copyMemory(null, srcAddr + srcOff, null, dstAddr + dstOff, cnt); } + /** - * Will zero memory in buf - * @param buf Buffer. ++ * @param addr Address. + * @param off Offset. + * @param len Length. + */ - public static void zeroMemory(ByteBuffer buf, int off, int len) { - if (buf.isDirect()) - GridUnsafe.setMemory(((DirectBuffer)buf).address() + off, len, (byte)0); - - else { - for (int i = off; i < off + len; i++) - buf.put(i, (byte)0); //TODO Optimize! - } + 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/4183186a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtLocalPartition.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/4183186a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicCache.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/4183186a/modules/core/src/main/java/org/apache/ignite/internal/util/GridUnsafe.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/4183186a/modules/core/src/test/java/org/apache/ignite/internal/pagemem/impl/PageMemoryNoLoadSelfTest.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/4183186a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/database/tree/io/TrackingPageIOTest.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/4183186a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/GridIndexingSpiAbstractSelfTest.java ----------------------------------------------------------------------