You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by tk...@apache.org on 2025/08/15 12:46:26 UTC
(ignite-3) branch ignite-26216 created (now e102924cf89)
This is an automated email from the ASF dual-hosted git repository.
tkalkirill pushed a change to branch ignite-26216
in repository https://gitbox.apache.org/repos/asf/ignite-3.git
at e102924cf89 IGNITE-26216 wip
This branch includes the following new commits:
new e102924cf89 IGNITE-26216 wip
The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
(ignite-3) 01/01: IGNITE-26216 wip
Posted by tk...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
tkalkirill pushed a commit to branch ignite-26216
in repository https://gitbox.apache.org/repos/asf/ignite-3.git
commit e102924cf89abecba4f4807ab3fc21f79fcaed6e
Author: Kirill Tkalenko <tk...@yandex.ru>
AuthorDate: Fri Aug 15 15:46:06 2025 +0300
IGNITE-26216 wip
---
.../apache/ignite/internal/util/GridUnsafe.java | 5 +-
.../ItBplusTreePersistentPageMemoryTest.java | 3 +-
...BplusTreeReuseListPersistentPageMemoryTest.java | 3 +-
.../pagememory/persistence/PageHeader.java | 246 ++++++++++++---------
.../internal/pagememory/persistence/PagePool.java | 9 +-
.../persistence/PersistentPageMemory.java | 139 ++++++------
.../replacement/ClockPageReplacementPolicy.java | 4 +-
.../RandomLruPageReplacementPolicy.java | 24 +-
.../SegmentedLruPageReplacementPolicy.java | 4 +-
.../RandomLruPageReplacementPolicySelfTest.java | 16 +-
.../pagememory/PersistentPageMemoryNoLoadTest.java | 2 +-
11 files changed, 244 insertions(+), 211 deletions(-)
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 f1d6cb6aa3a..eecb398697f 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
@@ -27,6 +27,7 @@ import java.security.AccessController;
import java.security.PrivilegedAction;
import java.security.PrivilegedActionException;
import java.security.PrivilegedExceptionAction;
+import org.jetbrains.annotations.Nullable;
import sun.misc.Unsafe;
/**
@@ -1324,7 +1325,7 @@ public abstract class GridUnsafe {
* @param off Offset.
* @return Integer value.
*/
- public static int getIntVolatile(Object obj, long off) {
+ public static int getIntVolatile(@Nullable Object obj, long off) {
return UNSAFE.getIntVolatile(obj, off);
}
@@ -1357,7 +1358,7 @@ public abstract class GridUnsafe {
* @param off Offset.
* @param val Value.
*/
- public static void putLongVolatile(Object obj, long off, long val) {
+ public static void putLongVolatile(@Nullable Object obj, long off, long val) {
UNSAFE.putLongVolatile(obj, off, val);
}
diff --git a/modules/page-memory/src/integrationTest/java/org/apache/ignite/internal/pagememory/tree/persistence/ItBplusTreePersistentPageMemoryTest.java b/modules/page-memory/src/integrationTest/java/org/apache/ignite/internal/pagememory/tree/persistence/ItBplusTreePersistentPageMemoryTest.java
index 1b72c95a5ec..7bb5761eb51 100644
--- a/modules/page-memory/src/integrationTest/java/org/apache/ignite/internal/pagememory/tree/persistence/ItBplusTreePersistentPageMemoryTest.java
+++ b/modules/page-memory/src/integrationTest/java/org/apache/ignite/internal/pagememory/tree/persistence/ItBplusTreePersistentPageMemoryTest.java
@@ -26,6 +26,7 @@ import org.apache.ignite.internal.lang.IgniteSystemProperties;
import org.apache.ignite.internal.pagememory.PageMemory;
import org.apache.ignite.internal.pagememory.TestPageIoRegistry;
import org.apache.ignite.internal.pagememory.configuration.PersistentDataRegionConfiguration;
+import org.apache.ignite.internal.pagememory.persistence.PageHeader;
import org.apache.ignite.internal.pagememory.persistence.PersistentPageMemory;
import org.apache.ignite.internal.pagememory.persistence.PersistentPageMemoryMetricSource;
import org.apache.ignite.internal.pagememory.persistence.TestPageReadWriteManager;
@@ -50,7 +51,7 @@ public class ItBplusTreePersistentPageMemoryTest extends AbstractBplusTreePageMe
@BeforeAll
static void initLockOffset() {
- lockOffset = PersistentPageMemory.PAGE_LOCK_OFFSET;
+ lockOffset = PageHeader.PAGE_LOCK_OFFSET;
}
/** {@inheritDoc} */
diff --git a/modules/page-memory/src/integrationTest/java/org/apache/ignite/internal/pagememory/tree/persistence/ItBplusTreeReuseListPersistentPageMemoryTest.java b/modules/page-memory/src/integrationTest/java/org/apache/ignite/internal/pagememory/tree/persistence/ItBplusTreeReuseListPersistentPageMemoryTest.java
index a771351f0fc..cc3f96239b6 100644
--- a/modules/page-memory/src/integrationTest/java/org/apache/ignite/internal/pagememory/tree/persistence/ItBplusTreeReuseListPersistentPageMemoryTest.java
+++ b/modules/page-memory/src/integrationTest/java/org/apache/ignite/internal/pagememory/tree/persistence/ItBplusTreeReuseListPersistentPageMemoryTest.java
@@ -25,6 +25,7 @@ import org.apache.ignite.internal.configuration.testframework.ConfigurationExten
import org.apache.ignite.internal.pagememory.PageMemory;
import org.apache.ignite.internal.pagememory.TestPageIoRegistry;
import org.apache.ignite.internal.pagememory.configuration.PersistentDataRegionConfiguration;
+import org.apache.ignite.internal.pagememory.persistence.PageHeader;
import org.apache.ignite.internal.pagememory.persistence.PersistentPageMemory;
import org.apache.ignite.internal.pagememory.persistence.PersistentPageMemoryMetricSource;
import org.apache.ignite.internal.pagememory.persistence.TestPageReadWriteManager;
@@ -40,7 +41,7 @@ import org.junit.jupiter.api.extension.ExtendWith;
public class ItBplusTreeReuseListPersistentPageMemoryTest extends AbstractBplusTreeReusePageMemoryTest {
@BeforeAll
static void initLockOffset() {
- lockOffset = PersistentPageMemory.PAGE_LOCK_OFFSET;
+ lockOffset = PageHeader.PAGE_LOCK_OFFSET;
}
/** {@inheritDoc} */
diff --git a/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/PageHeader.java b/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/PageHeader.java
index 52f6db69602..f00858d39f6 100644
--- a/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/PageHeader.java
+++ b/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/PageHeader.java
@@ -27,19 +27,47 @@ import static org.apache.ignite.internal.util.GridUnsafe.incrementAndGetInt;
import static org.apache.ignite.internal.util.GridUnsafe.putInt;
import static org.apache.ignite.internal.util.GridUnsafe.putLong;
import static org.apache.ignite.internal.util.GridUnsafe.putLongVolatile;
+import static org.apache.ignite.internal.util.StringUtils.hexLong;
import org.apache.ignite.internal.pagememory.FullPageId;
/**
- * Page header.
+ * Helper class for working with the page header that is stored in memory for {@link PersistentPageMemory}.
+ *
+ * <p>Page header has the following structure:</p>
+ * <pre>
+ * +-----------------+-----------------------------+--------+---------+----------+----------+----------------------+
+ * | 8 bytes | 8 bytes |8 bytes |4 bytes |4 bytes |8 bytes | 8 bytes |
+ * +-----------------+-----------------------------+--------+---------+----------+----------+----------------------+
+ * |Marker/Timestamp |Partition generation + flags |Page ID |Group ID |Pin count |Lock data |Checkpoint tmp buffer |
+ * +-----------------+-----------------------------+--------+---------+----------+----------+----------------------+
+ * </pre>
*/
public class PageHeader {
/** Page marker. */
- public static final long PAGE_MARKER = 0x0000000000000001L;
+ private static final long PAGE_MARKER = 0x0000000000000001L;
/** Dirty flag. */
private static final long DIRTY_FLAG = 0x0100000000000000L;
+ /**
+ * Page overhead in bytes.
+ * <ol>
+ * <li>8 bytes - Marker/Timestamp.</li>
+ * <li>8 bytes - Partition generation(4 bytes) + flags(1 byte) + reserved(3 bytes).</li>
+ * <li>8 bytes - Page ID.</li>
+ * <li>4 bytes - Page group ID.</li>
+ * <li>4 bytes - Page pin counter.</li>
+ * <li>8 bytes - Page lack data.</li>
+ * <li>8 bytes - Checkpoint temporal copy buffer relative pointer.</li>
+ * </ol>
+ */
+ public static final int PAGE_OVERHEAD = 48;
+
+ /** Marker or timestamp offset. */
+ private static final int MARKER_OR_TIMESTAMP_OFFSET = 0;
+
+ // TODO: IGNITE-26216 испрвить документацию
/** Page relative pointer. Does not change once a page is allocated. */
private static final int RELATIVE_PTR_OFFSET = 8;
@@ -47,84 +75,91 @@ public class PageHeader {
private static final int PAGE_ID_OFFSET = 16;
/** Page group ID offset. */
- private static final int PAGE_GROUP_ID_OFFSET = 24;
+ private static final int GROUP_ID_OFFSET = 24;
/** Page pin counter offset. */
- private static final int PAGE_PIN_CNT_OFFSET = 28;
+ private static final int PIN_COUNT_OFFSET = 28;
- /** Page temp copy buffer relative pointer offset. */
- private static final int PAGE_TMP_BUF_OFFSET = 40;
+ /** Page lock data offset. */
+ public static final int PAGE_LOCK_OFFSET = 32;
+
+ /** Page temporal copy buffer relative pointer offset. */
+ private static final int CHECKPOINT_TMP_BUFFER_OFFSET = 40;
/**
- * Initializes the header of the page.
+ * Initializes the header of page.
*
- * @param absPtr Absolute pointer to initialize.
+ * @param absPtr Absolute memory pointer to page header.
* @param relative Relative pointer to write.
*/
+ // TODO: IGNITE-26216 вот тут еще исправить придется!
public static void initNew(long absPtr, long relative) {
+ writePageMarker(absPtr);
+
relative(absPtr, relative);
- tempBufferPointer(absPtr, INVALID_REL_PTR);
+ writeCheckpointTempBufferRelativePointer(absPtr, INVALID_REL_PTR);
- putLong(absPtr, PAGE_MARKER);
- putInt(absPtr + PAGE_PIN_CNT_OFFSET, 0);
+ putInt(absPtr + PIN_COUNT_OFFSET, 0);
}
/**
- * Returns value of dirty flag.
+ * Reads value of dirty flag from page header.
*
- * @param absPtr Absolute pointer.
+ * @param absPtr Absolute memory pointer to page header.
*/
- public static boolean dirty(long absPtr) {
+ public static boolean readDirtyFlag(long absPtr) {
return flag(absPtr, DIRTY_FLAG);
}
/**
- * Updates value of dirty flag.
+ * Write value of dirty flag to page header.
*
- * @param absPtr Page absolute pointer.
- * @param dirty Dirty flag.
+ * @param absPtr Absolute memory pointer to page header.
+ * @param dirty Value dirty flag.
* @return Previous value of dirty flag.
*/
- public static boolean dirty(long absPtr, boolean dirty) {
+ public static boolean writeDirtyFlag(long absPtr, boolean dirty) {
return flag(absPtr, DIRTY_FLAG, dirty);
}
/**
- * Returns flag value.
+ * Reads flag value from page header.
*
- * @param absPtr Absolute pointer.
- * @param flag Flag mask.
+ * @param absPtr Absolute memory pointer to page header.
+ * @param flagMask Flag mask.
*/
- private static boolean flag(long absPtr, long flag) {
- assert (flag & 0xFFFFFFFFFFFFFFL) == 0;
- assert Long.bitCount(flag) == 1;
+ // TODO: IGNITE-26216 Испрвить
+ private static boolean flag(long absPtr, long flagMask) {
+ assert (flagMask & 0xFFFFFFFFFFFFFFL) == 0 : hexLong(flagMask);
+ assert Long.bitCount(flagMask) == 1 : hexLong(flagMask);
long relPtrWithFlags = getLong(absPtr + RELATIVE_PTR_OFFSET);
- return (relPtrWithFlags & flag) != 0;
+ return (relPtrWithFlags & flagMask) != 0;
}
/**
- * Sets flag value.
+ * Writes flag value to page header.
*
- * @param absPtr Absolute pointer.
- * @param flag Flag mask.
+ * @param absPtr Absolute memory pointer to page header.
+ * @param flagMask Flag mask.
* @param set New flag value.
* @return Previous flag value.
*/
- private static boolean flag(long absPtr, long flag, boolean set) {
- assert (flag & 0xFFFFFFFFFFFFFFL) == 0;
- assert Long.bitCount(flag) == 1;
+ // TODO: IGNITE-26216 Испрвить
+ private static boolean flag(long absPtr, long flagMask, boolean set) {
+ assert (flagMask & 0xFFFFFFFFFFFFFFL) == 0 : hexLong(flagMask);
+ assert Long.bitCount(flagMask) == 1 : hexLong(flagMask);
long relPtrWithFlags = getLong(absPtr + RELATIVE_PTR_OFFSET);
- boolean was = (relPtrWithFlags & flag) != 0;
+ boolean was = (relPtrWithFlags & flagMask) != 0;
if (set) {
- relPtrWithFlags |= flag;
+ relPtrWithFlags |= flagMask;
} else {
- relPtrWithFlags &= ~flag;
+ relPtrWithFlags &= ~flagMask;
}
putLong(absPtr + RELATIVE_PTR_OFFSET, relPtrWithFlags);
@@ -133,56 +168,47 @@ public class PageHeader {
}
/**
- * Checks if page is pinned.
+ * Checks if page is pinned from page header.
*
- * @param absPtr Page pointer.
+ * @param absPtr Absolute memory pointer to page header.
*/
public static boolean isAcquired(long absPtr) {
- return getInt(absPtr + PAGE_PIN_CNT_OFFSET) > 0;
+ return getInt(absPtr + PIN_COUNT_OFFSET) > 0;
}
/**
- * Acquires a page.
+ * Atomically acquires a page in page header.
*
- * @param absPtr Absolute pointer.
- * @return Number of acquires for the page.
+ * @param absPtr Absolute memory pointer to page header.
+ * @return Number of acquires for page.
*/
public static int acquirePage(long absPtr) {
- return incrementAndGetInt(absPtr + PAGE_PIN_CNT_OFFSET);
+ return incrementAndGetInt(absPtr + PIN_COUNT_OFFSET);
}
/**
- * Releases the page.
+ * Atomically releases the page in page header.
*
- * @param absPtr Absolute pointer.
- * @return Number of acquires for the page.
+ * @param absPtr Absolute memory pointer to page header.
+ * @return Number of acquires for page.
*/
public static int releasePage(long absPtr) {
- return decrementAndGetInt(absPtr + PAGE_PIN_CNT_OFFSET);
+ return decrementAndGetInt(absPtr + PIN_COUNT_OFFSET);
}
/**
- * Returns number of acquires for the page.
+ * Volatile reads count of acquires for the page from page header.
*
- * @param absPtr Absolute pointer.
+ * @param absPtr Absolute memory pointer to page header.
*/
- public static int pinCount(long absPtr) {
+ static int readAcquiresCount(long absPtr) {
return getIntVolatile(null, absPtr);
}
- /**
- * Reads relative pointer from the page at the given absolute position.
- *
- * @param absPtr Absolute memory pointer to the page header.
- */
- public static long readRelative(long absPtr) {
- return getLong(absPtr + RELATIVE_PTR_OFFSET) & RELATIVE_PTR_MASK;
- }
-
/**
* Writes relative pointer to the page at the given absolute position.
*
- * @param absPtr Absolute memory pointer to the page header.
+ * @param absPtr Absolute memory pointer to page header.
* @param relPtr Relative pointer to write.
*/
public static void relative(long absPtr, long relPtr) {
@@ -190,24 +216,23 @@ public class PageHeader {
}
/**
- * Volatile write for current timestamp to page in {@code absAddr} address.
+ * Volatile writes timestamp to page header.
*
- * @param absPtr Absolute page address.
- * @param tstamp Timestamp.
+ * @param absPtr Absolute memory pointer to page header.
+ * @param timestamp Timestamp.
*/
- public static void writeTimestamp(final long absPtr, long tstamp) {
- tstamp &= 0xFFFFFFFFFFFFFF00L;
+ static void writeTimestamp(long absPtr, long timestamp) {
+ timestamp &= 0xFFFFFFFFFFFFFF00L;
- putLongVolatile(null, absPtr, tstamp | 0x01);
+ putLongVolatile(null, absPtr, timestamp | 0x01);
}
/**
- * Read for timestamp from page in {@code absAddr} address.
+ * Reads timestamp from page header.
*
- * @param absPtr Absolute page address.
- * @return Timestamp.
+ * @param absPtr Absolute memory pointer to page header.
*/
- public static long readTimestamp(final long absPtr) {
+ public static long readTimestamp(long absPtr) {
long markerAndTs = getLong(absPtr);
// Clear last byte as it is occupied by page marker.
@@ -215,85 +240,92 @@ public class PageHeader {
}
/**
- * Sets pointer to checkpoint buffer.
+ * Writes relative pointer to checkpoint temporal copy buffer to page header.
*
- * @param absPtr Page absolute pointer.
- * @param tmpRelPtr Temp buffer relative pointer or {@link PersistentPageMemory#INVALID_REL_PTR} if page is not copied to checkpoint
- * buffer.
+ * @param absPtr Absolute memory pointer to page header.
+ * @param tmpRelPtr Temporal copy buffer relative pointer or {@link PersistentPageMemory#INVALID_REL_PTR} if page is not copied
+ * to checkpoint buffer.
*/
- public static void tempBufferPointer(long absPtr, long tmpRelPtr) {
- putLong(absPtr + PAGE_TMP_BUF_OFFSET, tmpRelPtr);
+ static void writeCheckpointTempBufferRelativePointer(long absPtr, long tmpRelPtr) {
+ putLong(absPtr + CHECKPOINT_TMP_BUFFER_OFFSET, tmpRelPtr);
}
/**
- * Gets pointer to checkpoint buffer or {@link PersistentPageMemory#INVALID_REL_PTR} if page is not copied to checkpoint buffer.
+ * Reads relative pointer to checkpoint temporal copy buffer or {@link PersistentPageMemory#INVALID_REL_PTR} if page is not copied to
+ * checkpoint buffer from page header.
*
- * @param absPtr Page absolute pointer.
- * @return Temp buffer relative pointer.
+ * @param absPtr Absolute memory pointer to page header.
*/
- public static long tempBufferPointer(long absPtr) {
- return getLong(absPtr + PAGE_TMP_BUF_OFFSET);
+ static long readCheckpointTempBufferRelativePointer(long absPtr) {
+ return getLong(absPtr + CHECKPOINT_TMP_BUFFER_OFFSET);
}
/**
- * Reads page ID from the page at the given absolute position.
+ * Reads page ID from page header.
*
- * @param absPtr Absolute memory pointer to the page header.
- * @return Page ID written to the page.
+ * @param absPtr Absolute memory pointer to page header.
*/
- public static long readPageId(long absPtr) {
+ static long readPageId(long absPtr) {
return getLong(absPtr + PAGE_ID_OFFSET);
}
/**
- * Writes page ID to the page at the given absolute position.
+ * Writes page ID to page header.
*
- * @param absPtr Absolute memory pointer to the page header.
- * @param pageId Page ID to write.
+ * @param absPtr Absolute memory pointer to page header.
+ * @param pageId Page ID.
*/
- private static void pageId(long absPtr, long pageId) {
+ private static void writePageId(long absPtr, long pageId) {
putLong(absPtr + PAGE_ID_OFFSET, pageId);
}
/**
- * Reads group ID from the page at the given absolute pointer.
+ * Reads page group ID from page header.
*
- * @param absPtr Absolute memory pointer to the page header.
- * @return Group ID written to the page.
+ * @param absPtr Absolute memory pointer to page header.
+ * @return Page group ID.
*/
- private static int readPageGroupId(final long absPtr) {
- return getInt(absPtr + PAGE_GROUP_ID_OFFSET);
+ private static int readPageGroupId(long absPtr) {
+ return getInt(absPtr + GROUP_ID_OFFSET);
}
/**
- * Writes group ID from the page at the given absolute pointer.
+ * Writes page group ID to page header.
*
- * @param absPtr Absolute memory pointer to the page header.
- * @param grpId Group ID to write.
+ * @param absPtr Absolute memory pointer to page header.
+ * @param groupId Page group ID.
*/
- private static void pageGroupId(final long absPtr, final int grpId) {
- putInt(absPtr + PAGE_GROUP_ID_OFFSET, grpId);
+ private static void writePageGroupId(long absPtr, int groupId) {
+ putInt(absPtr + GROUP_ID_OFFSET, groupId);
}
/**
- * Reads page ID and group ID from the page at the given absolute pointer.
+ * Reads full page ID from page header.
*
- * @param absPtr Absolute memory pointer to the page header.
- * @return Full page ID written to the page.
+ * @param absPtr Absolute memory pointer to page header.
*/
- public static FullPageId fullPageId(final long absPtr) {
+ public static FullPageId readFullPageId(long absPtr) {
return new FullPageId(readPageId(absPtr), readPageGroupId(absPtr));
}
/**
- * Writes page ID and group ID from the page at the given absolute pointer.
+ * Writes full page ID to page header.
*
- * @param absPtr Absolute memory pointer to the page header.
- * @param fullPageId Full page ID to write.
+ * @param absPtr Absolute memory pointer to page header.
+ * @param fullPageId Full page ID.
*/
- public static void fullPageId(final long absPtr, final FullPageId fullPageId) {
- pageId(absPtr, fullPageId.pageId());
+ static void writeFullPageId(long absPtr, FullPageId fullPageId) {
+ writePageId(absPtr, fullPageId.pageId());
+
+ writePageGroupId(absPtr, fullPageId.groupId());
+ }
- pageGroupId(absPtr, fullPageId.groupId());
+ /**
+ * Volatile writes a page marker to page header.
+ *
+ * @param absPtr Absolute memory pointer to page header.
+ */
+ static void writePageMarker(long absPtr) {
+ putLongVolatile(null, absPtr + MARKER_OR_TIMESTAMP_OFFSET, PAGE_MARKER);
}
}
diff --git a/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/PagePool.java b/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/PagePool.java
index 417a549a62c..219643155f4 100644
--- a/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/PagePool.java
+++ b/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/PagePool.java
@@ -17,11 +17,12 @@
package org.apache.ignite.internal.pagememory.persistence;
-import static org.apache.ignite.internal.pagememory.persistence.PageHeader.fullPageId;
+import static org.apache.ignite.internal.pagememory.persistence.PageHeader.PAGE_LOCK_OFFSET;
+import static org.apache.ignite.internal.pagememory.persistence.PageHeader.readFullPageId;
import static org.apache.ignite.internal.pagememory.persistence.PageHeader.initNew;
import static org.apache.ignite.internal.pagememory.persistence.PageHeader.isAcquired;
+import static org.apache.ignite.internal.pagememory.persistence.PageHeader.writePageMarker;
import static org.apache.ignite.internal.pagememory.persistence.PersistentPageMemory.INVALID_REL_PTR;
-import static org.apache.ignite.internal.pagememory.persistence.PersistentPageMemory.PAGE_LOCK_OFFSET;
import static org.apache.ignite.internal.pagememory.persistence.PersistentPageMemory.RELATIVE_PTR_MASK;
import static org.apache.ignite.internal.util.GridUnsafe.compareAndSwapLong;
import static org.apache.ignite.internal.util.GridUnsafe.getLongVolatile;
@@ -153,7 +154,7 @@ public class PagePool {
long cnt = ((freePageRelPtrMasked & COUNTER_MASK) + COUNTER_INC) & COUNTER_MASK;
if (compareAndSwapLong(null, freePageListPtr, freePageRelPtrMasked, nextFreePageRelPtr | cnt)) {
- putLongVolatile(null, freePageAbsPtr, PageHeader.PAGE_MARKER);
+ writePageMarker(freePageAbsPtr);
return freePageRelPtr;
}
@@ -206,7 +207,7 @@ public class PagePool {
public int releaseFreePage(long relPtr) {
long absPtr = absolute(relPtr);
- assert !isAcquired(absPtr) : "Release pinned page: " + fullPageId(absPtr);
+ assert !isAcquired(absPtr) : "Release pinned page: " + readFullPageId(absPtr);
int resCntr = 0;
diff --git a/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/PersistentPageMemory.java b/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/PersistentPageMemory.java
index 653565cc7e0..4d3f30e8939 100644
--- a/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/PersistentPageMemory.java
+++ b/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/PersistentPageMemory.java
@@ -27,11 +27,17 @@ import static org.apache.ignite.internal.pagememory.io.PageIo.setPageId;
import static org.apache.ignite.internal.pagememory.persistence.CheckpointUrgency.MUST_TRIGGER;
import static org.apache.ignite.internal.pagememory.persistence.CheckpointUrgency.NOT_REQUIRED;
import static org.apache.ignite.internal.pagememory.persistence.CheckpointUrgency.SHOULD_TRIGGER;
-import static org.apache.ignite.internal.pagememory.persistence.PageHeader.dirty;
-import static org.apache.ignite.internal.pagememory.persistence.PageHeader.fullPageId;
+import static org.apache.ignite.internal.pagememory.persistence.PageHeader.PAGE_LOCK_OFFSET;
+import static org.apache.ignite.internal.pagememory.persistence.PageHeader.PAGE_OVERHEAD;
+import static org.apache.ignite.internal.pagememory.persistence.PageHeader.readFullPageId;
import static org.apache.ignite.internal.pagememory.persistence.PageHeader.isAcquired;
+import static org.apache.ignite.internal.pagememory.persistence.PageHeader.readAcquiresCount;
+import static org.apache.ignite.internal.pagememory.persistence.PageHeader.readCheckpointTempBufferRelativePointer;
+import static org.apache.ignite.internal.pagememory.persistence.PageHeader.readDirtyFlag;
import static org.apache.ignite.internal.pagememory.persistence.PageHeader.readPageId;
-import static org.apache.ignite.internal.pagememory.persistence.PageHeader.tempBufferPointer;
+import static org.apache.ignite.internal.pagememory.persistence.PageHeader.writeCheckpointTempBufferRelativePointer;
+import static org.apache.ignite.internal.pagememory.persistence.PageHeader.writeDirtyFlag;
+import static org.apache.ignite.internal.pagememory.persistence.PageHeader.writeFullPageId;
import static org.apache.ignite.internal.pagememory.persistence.PageHeader.writeTimestamp;
import static org.apache.ignite.internal.pagememory.persistence.PagePool.SEGMENT_INDEX_MASK;
import static org.apache.ignite.internal.pagememory.persistence.throttling.PagesWriteThrottlePolicy.CP_BUF_FILL_THRESHOLD;
@@ -145,12 +151,6 @@ public class PersistentPageMemory implements PageMemory {
/** Pointer which means that this page is outdated (for example, group was destroyed, partition eviction'd happened. */
public static final long OUTDATED_REL_PTR = INVALID_REL_PTR + 1;
- /** Page lock offset. */
- public static final int PAGE_LOCK_OFFSET = 32;
-
- /** 8b Marker/timestamp 8b Relative pointer 8b Page ID 4b Group ID 4b Pin count 8b Lock 8b Temporary buffer. */
- public static final int PAGE_OVERHEAD = 48;
-
/** Try again tag. */
public static final int TRY_AGAIN_TAG = -1;
@@ -521,7 +521,7 @@ public class PersistentPageMemory implements PageMemory {
public boolean isDirty(int grpId, long pageId, long page) {
assert started;
- return isDirty(page);
+ return readDirtyFlag(page);
}
/**
@@ -529,8 +529,8 @@ public class PersistentPageMemory implements PageMemory {
*
* @param absPtr Absolute pointer.
*/
- boolean isDirty(long absPtr) {
- return dirty(absPtr);
+ private boolean isDirty(long absPtr) {
+ return readDirtyFlag(absPtr);
}
@Override
@@ -583,7 +583,7 @@ public class PersistentPageMemory implements PageMemory {
zeroMemory(absPtr + PAGE_OVERHEAD, pageSize());
- fullPageId(absPtr, fullId);
+ writeFullPageId(absPtr, fullId);
writeTimestamp(absPtr, coarseCurrentTimeMillis());
rwLock.init(absPtr + PAGE_LOCK_OFFSET, tag(pageId));
@@ -592,7 +592,7 @@ public class PersistentPageMemory implements PageMemory {
assert !isAcquired(absPtr) :
"Pin counter must be 0 for a new page [relPtr=" + hexLong(relPtr)
- + ", absPtr=" + hexLong(absPtr) + ", pinCntr=" + PageHeader.pinCount(absPtr) + ']';
+ + ", absPtr=" + hexLong(absPtr) + ", pinCntr=" + readAcquiresCount(absPtr) + ']';
setDirty(fullId, absPtr, true, true);
@@ -739,7 +739,7 @@ public class PersistentPageMemory implements PageMemory {
absPtr = seg.absolute(relPtr);
- fullPageId(absPtr, fullId);
+ writeFullPageId(absPtr, fullId);
writeTimestamp(absPtr, coarseCurrentTimeMillis());
assert !isAcquired(absPtr) :
@@ -790,7 +790,7 @@ public class PersistentPageMemory implements PageMemory {
zeroMemory(pageAddr, pageSize());
- fullPageId(absPtr, fullId);
+ writeFullPageId(absPtr, fullId);
writeTimestamp(absPtr, coarseCurrentTimeMillis());
setPageId(pageAddr, pageId);
@@ -1076,14 +1076,8 @@ public class PersistentPageMemory implements PageMemory {
rwLock.readUnlock(absPtr + PAGE_LOCK_OFFSET);
}
- /**
- * Checks if a page has temp copy buffer.
- *
- * @param absPtr Absolute pointer.
- * @return {@code True} if a page has temp buffer.
- */
- public boolean hasTempCopy(long absPtr) {
- return tempBufferPointer(absPtr) != INVALID_REL_PTR;
+ private static boolean hasCheckpointTempBufferRelativePointer(long absPtr) {
+ return readCheckpointTempBufferRelativePointer(absPtr) != INVALID_REL_PTR;
}
/**
@@ -1112,68 +1106,69 @@ public class PersistentPageMemory implements PageMemory {
return locked ? postWriteLockPage(absPtr, fullId) : 0;
}
- private long postWriteLockPage(long absPtr, FullPageId fullId) {
+ private long postWriteLockPage(long absPtr, FullPageId fullPageId) {
writeTimestamp(absPtr, coarseCurrentTimeMillis());
// Create a buffer copy if the page is scheduled for a checkpoint.
- if (isInCheckpoint(fullId) && tempBufferPointer(absPtr) == INVALID_REL_PTR) {
- long tmpRelPtr;
-
- PagePool checkpointPool = this.checkpointPool;
-
- while (true) {
- tmpRelPtr = checkpointPool.borrowOrAllocateFreePage(tag(fullId.pageId()));
-
- if (tmpRelPtr != INVALID_REL_PTR) {
- break;
- }
-
- // TODO https://issues.apache.org/jira/browse/IGNITE-23106 Replace spin-wait with a proper wait.
- try {
- Thread.sleep(1);
- } catch (InterruptedException ignore) {
- // No-op.
- }
- }
+ if (isInCheckpoint(fullPageId) && !hasCheckpointTempBufferRelativePointer(absPtr)) {
+ long checkpointTmpRelPtr = borrowOrAllocateCheckpointCopyBuffer(fullPageId);
// Pin the page until checkpoint is not finished.
PageHeader.acquirePage(absPtr);
- long tmpAbsPtr = checkpointPool.absolute(tmpRelPtr);
+ long checkpointTmpAbsPtr = checkpointPool.absolute(checkpointTmpRelPtr);
copyMemory(
null,
absPtr + PAGE_OVERHEAD,
null,
- tmpAbsPtr + PAGE_OVERHEAD,
+ checkpointTmpAbsPtr + PAGE_OVERHEAD,
pageSize()
);
- assert getType(tmpAbsPtr + PAGE_OVERHEAD) != 0 : "Invalid state. Type is 0! pageId = " + hexLong(fullId.pageId());
- assert getVersion(tmpAbsPtr + PAGE_OVERHEAD) != 0 :
- "Invalid state. Version is 0! pageId = " + hexLong(fullId.pageId());
+ assert getType(checkpointTmpAbsPtr + PAGE_OVERHEAD) != 0 : hexLong(fullPageId.pageId());
+ assert getVersion(checkpointTmpAbsPtr + PAGE_OVERHEAD) != 0 : hexLong(fullPageId.pageId());
- dirty(absPtr, false);
- tempBufferPointer(absPtr, tmpRelPtr);
+ writeDirtyFlag(absPtr, false);
+ writeCheckpointTempBufferRelativePointer(absPtr, checkpointTmpRelPtr);
// info for checkpoint buffer cleaner.
- fullPageId(tmpAbsPtr, fullId);
+ writeFullPageId(checkpointTmpAbsPtr, fullPageId);
- assert getCrc(absPtr + PAGE_OVERHEAD) == 0; // TODO GG-11480
- assert getCrc(tmpAbsPtr + PAGE_OVERHEAD) == 0; // TODO GG-11480
+ assert getCrc(absPtr + PAGE_OVERHEAD) == 0 : hexLong(fullPageId.pageId()); // TODO GG-11480
+ assert getCrc(checkpointTmpAbsPtr + PAGE_OVERHEAD) == 0 : hexLong(fullPageId.pageId()); // TODO GG-11480
}
- assert getCrc(absPtr + PAGE_OVERHEAD) == 0; // TODO IGNITE-16612
+ assert getCrc(absPtr + PAGE_OVERHEAD) == 0 : hexLong(fullPageId.pageId()); // TODO IGNITE-16612
return absPtr + PAGE_OVERHEAD;
}
+ private long borrowOrAllocateCheckpointCopyBuffer(FullPageId fullPageId) {
+ PagePool checkpointPool = this.checkpointPool;
+
+ while (true) {
+ long checkpointTmpRelPtr = checkpointPool.borrowOrAllocateFreePage(tag(fullPageId.pageId()));
+
+ if (checkpointTmpRelPtr != INVALID_REL_PTR) {
+ return checkpointTmpRelPtr;
+ }
+
+ // TODO https://issues.apache.org/jira/browse/IGNITE-23106 Replace spin-wait with a proper wait.
+ try {
+ Thread.sleep(1);
+ } catch (InterruptedException ignore) {
+ // No-op.
+ }
+ }
+ }
+
private void writeUnlockPage(
long page,
FullPageId fullId,
boolean markDirty,
boolean restore
) {
- boolean wasDirty = isDirty(page);
+ boolean wasDirty = readDirtyFlag(page);
try {
assert getCrc(page + PAGE_OVERHEAD) == 0; // TODO IGNITE-16612
@@ -1265,7 +1260,7 @@ public class PersistentPageMemory implements PageMemory {
* or not.
*/
private void setDirty(FullPageId pageId, long absPtr, boolean dirty, boolean forceAdd) {
- boolean wasDirty = dirty(absPtr, dirty);
+ boolean wasDirty = writeDirtyFlag(absPtr, dirty);
if (dirty) {
assert checkpointTimeoutLock.checkpointLockIsHeldByThread();
@@ -1620,19 +1615,19 @@ public class PersistentPageMemory implements PageMemory {
zeroMemory(absPtr + PAGE_OVERHEAD, pageSize());
- dirty(absPtr, false);
+ writeDirtyFlag(absPtr, false);
- long tmpBufPtr = tempBufferPointer(absPtr);
+ long checkpointTmpBufPtr = readCheckpointTempBufferRelativePointer(absPtr);
- if (tmpBufPtr != INVALID_REL_PTR) {
- zeroMemory(checkpointPool.absolute(tmpBufPtr) + PAGE_OVERHEAD, pageSize());
+ if (checkpointTmpBufPtr != INVALID_REL_PTR) {
+ zeroMemory(checkpointPool.absolute(checkpointTmpBufPtr) + PAGE_OVERHEAD, pageSize());
- tempBufferPointer(absPtr, INVALID_REL_PTR);
+ writeCheckpointTempBufferRelativePointer(absPtr, INVALID_REL_PTR);
// We pinned the page when allocated the temp buffer, release it now.
PageHeader.releasePage(absPtr);
- releaseCheckpointBufferPage(tmpBufPtr);
+ releaseCheckpointBufferPage(checkpointTmpBufPtr);
}
if (rmv) {
@@ -1968,22 +1963,22 @@ public class PersistentPageMemory implements PageMemory {
boolean canWrite = false;
try {
- long tmpRelPtr = tempBufferPointer(absPtr);
+ long checkpointTmpRelPtr = readCheckpointTempBufferRelativePointer(absPtr);
- if (tmpRelPtr != INVALID_REL_PTR) {
- tempBufferPointer(absPtr, INVALID_REL_PTR);
+ if (checkpointTmpRelPtr != INVALID_REL_PTR) {
+ writeCheckpointTempBufferRelativePointer(absPtr, INVALID_REL_PTR);
- long tmpAbsPtr = checkpointPool.absolute(tmpRelPtr);
+ long tmpAbsPtr = checkpointPool.absolute(checkpointTmpRelPtr);
copyInBuffer(tmpAbsPtr, buf);
- fullPageId(tmpAbsPtr, NULL_PAGE);
+ writeFullPageId(tmpAbsPtr, NULL_PAGE);
zeroMemory(tmpAbsPtr + PAGE_OVERHEAD, pageSize());
tracker.onCopyOnWritePageWritten();
- releaseCheckpointBufferPage(tmpRelPtr);
+ releaseCheckpointBufferPage(checkpointTmpRelPtr);
// Need release again because we pin page when resolve abs pointer,
// and page did not have tmp buffer page.
@@ -1993,7 +1988,7 @@ public class PersistentPageMemory implements PageMemory {
} else {
copyInBuffer(absPtr, buf);
- dirty(absPtr, false);
+ writeDirtyFlag(absPtr, false);
}
assert getType(buf) != 0 : "Invalid state. Type is 0! pageId = " + hexLong(fullId.pageId());
@@ -2067,7 +2062,7 @@ public class PersistentPageMemory implements PageMemory {
absPtr = seg.absolute(relPtr);
// Pin the page until page will not be copied. This helpful to prevent page replacement of this page.
- if (tempBufferPointer(absPtr) == INVALID_REL_PTR) {
+ if (!hasCheckpointTempBufferRelativePointer(absPtr)) {
PageHeader.acquirePage(absPtr);
} else {
pageSingleAcquire = true;
@@ -2133,7 +2128,7 @@ public class PersistentPageMemory implements PageMemory {
long freePageAbsPtr = checkpointPool.absolute(relative);
- FullPageId fullPageId = fullPageId(freePageAbsPtr);
+ FullPageId fullPageId = readFullPageId(freePageAbsPtr);
if (fullPageId.pageId() == NULL_PAGE.pageId() || fullPageId.groupId() == NULL_PAGE.groupId()) {
continue;
diff --git a/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/replacement/ClockPageReplacementPolicy.java b/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/replacement/ClockPageReplacementPolicy.java
index f14e80b918c..a327ac7a7f8 100644
--- a/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/replacement/ClockPageReplacementPolicy.java
+++ b/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/replacement/ClockPageReplacementPolicy.java
@@ -17,7 +17,7 @@
package org.apache.ignite.internal.pagememory.persistence.replacement;
-import static org.apache.ignite.internal.pagememory.persistence.PageHeader.fullPageId;
+import static org.apache.ignite.internal.pagememory.persistence.PageHeader.readFullPageId;
import static org.apache.ignite.internal.pagememory.persistence.PersistentPageMemory.INVALID_REL_PTR;
import static org.apache.ignite.internal.pagememory.persistence.PersistentPageMemory.OUTDATED_REL_PTR;
import static org.apache.ignite.internal.pagememory.util.PageIdUtils.partitionId;
@@ -74,7 +74,7 @@ public class ClockPageReplacementPolicy extends PageReplacementPolicy {
long relPtr = seg.relative(pageIdx);
long absPtr = seg.absolute(relPtr);
- FullPageId fullId = fullPageId(absPtr);
+ FullPageId fullId = readFullPageId(absPtr);
// Check loaded pages map for outdated page.
relPtr = loadedPages.get(
diff --git a/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/replacement/RandomLruPageReplacementPolicy.java b/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/replacement/RandomLruPageReplacementPolicy.java
index ae019a32ba0..0e183c29e05 100644
--- a/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/replacement/RandomLruPageReplacementPolicy.java
+++ b/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/replacement/RandomLruPageReplacementPolicy.java
@@ -17,9 +17,12 @@
package org.apache.ignite.internal.pagememory.persistence.replacement;
-import static org.apache.ignite.internal.pagememory.persistence.PageHeader.fullPageId;
+import static org.apache.ignite.internal.pagememory.persistence.PageHeader.PAGE_OVERHEAD;
+import static org.apache.ignite.internal.pagememory.persistence.PageHeader.isAcquired;
+import static org.apache.ignite.internal.pagememory.persistence.PageHeader.readDirtyFlag;
+import static org.apache.ignite.internal.pagememory.persistence.PageHeader.readFullPageId;
+import static org.apache.ignite.internal.pagememory.persistence.PageHeader.readTimestamp;
import static org.apache.ignite.internal.pagememory.persistence.PersistentPageMemory.INVALID_REL_PTR;
-import static org.apache.ignite.internal.pagememory.persistence.PersistentPageMemory.PAGE_OVERHEAD;
import static org.apache.ignite.internal.pagememory.util.PageIdUtils.partitionId;
import java.util.HashSet;
@@ -30,7 +33,6 @@ import org.apache.ignite.internal.pagememory.FullPageId;
import org.apache.ignite.internal.pagememory.freelist.io.PagesListMetaIo;
import org.apache.ignite.internal.pagememory.io.PageIo;
import org.apache.ignite.internal.pagememory.persistence.LoadedPagesMap;
-import org.apache.ignite.internal.pagememory.persistence.PageHeader;
import org.apache.ignite.internal.pagememory.persistence.PagePool;
import org.apache.ignite.internal.pagememory.persistence.PersistentPageMemory.Segment;
import org.apache.ignite.internal.pagememory.persistence.ReplaceCandidate;
@@ -99,7 +101,7 @@ public class RandomLruPageReplacementPolicy extends PageReplacementPolicy {
long absPageAddr = seg.absolute(rndAddr);
- FullPageId fullId = fullPageId(absPageAddr);
+ FullPageId fullId = readFullPageId(absPageAddr);
// Check page mapping consistency.
assert fullId.equals(nearest.fullId()) : "Invalid page mapping [tableId=" + nearest.fullId()
@@ -111,11 +113,11 @@ public class RandomLruPageReplacementPolicy extends PageReplacementPolicy {
return seg.refreshOutdatedPage(fullId.groupId(), fullId.pageId(), true);
}
- boolean pinned = PageHeader.isAcquired(absPageAddr);
+ boolean pinned = isAcquired(absPageAddr);
boolean skip = ignored != null && ignored.contains(rndAddr);
- boolean dirty = PageHeader.dirty(absPageAddr);
+ boolean dirty = readDirtyFlag(absPageAddr);
CheckpointPages checkpointPages = seg.checkpointPages();
@@ -125,7 +127,7 @@ public class RandomLruPageReplacementPolicy extends PageReplacementPolicy {
continue;
}
- long pageTs = PageHeader.readTimestamp(absPageAddr);
+ long pageTs = readTimestamp(absPageAddr);
boolean storMeta = isStoreMetadataPage(absPageAddr);
@@ -158,7 +160,7 @@ public class RandomLruPageReplacementPolicy extends PageReplacementPolicy {
long absRmvAddr = seg.absolute(relRmvAddr);
- FullPageId fullPageId = fullPageId(absRmvAddr);
+ FullPageId fullPageId = readFullPageId(absRmvAddr);
if (!seg.tryToRemovePage(fullPageId, absRmvAddr)) {
if (iterations > 10) {
@@ -220,13 +222,13 @@ public class RandomLruPageReplacementPolicy extends PageReplacementPolicy {
long absPageAddr = seg.absolute(addr);
- FullPageId fullId = fullPageId(absPageAddr);
+ FullPageId fullId = readFullPageId(absPageAddr);
if (partGen < seg.partGeneration(fullId.groupId(), partitionId(fullId.pageId()))) {
return seg.refreshOutdatedPage(fullId.groupId(), fullId.pageId(), true);
}
- boolean pinned = PageHeader.isAcquired(absPageAddr);
+ boolean pinned = isAcquired(absPageAddr);
if (addr == prevAddr || pinned) {
continue;
@@ -234,7 +236,7 @@ public class RandomLruPageReplacementPolicy extends PageReplacementPolicy {
long absEvictAddr = seg.absolute(addr);
- FullPageId fullPageId = fullPageId(absEvictAddr);
+ FullPageId fullPageId = readFullPageId(absEvictAddr);
if (seg.tryToRemovePage(fullPageId, absEvictAddr)) {
return addr;
diff --git a/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/replacement/SegmentedLruPageReplacementPolicy.java b/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/replacement/SegmentedLruPageReplacementPolicy.java
index 541acd23ae9..723389409fa 100644
--- a/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/replacement/SegmentedLruPageReplacementPolicy.java
+++ b/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/replacement/SegmentedLruPageReplacementPolicy.java
@@ -17,7 +17,7 @@
package org.apache.ignite.internal.pagememory.persistence.replacement;
-import static org.apache.ignite.internal.pagememory.persistence.PageHeader.fullPageId;
+import static org.apache.ignite.internal.pagememory.persistence.PageHeader.readFullPageId;
import static org.apache.ignite.internal.pagememory.persistence.PersistentPageMemory.INVALID_REL_PTR;
import static org.apache.ignite.internal.pagememory.persistence.PersistentPageMemory.OUTDATED_REL_PTR;
import static org.apache.ignite.internal.pagememory.util.PageIdUtils.partitionId;
@@ -82,7 +82,7 @@ public class SegmentedLruPageReplacementPolicy extends PageReplacementPolicy {
long relPtr = seg.relative(pageIdx);
long absPtr = seg.absolute(relPtr);
- FullPageId fullId = fullPageId(absPtr);
+ FullPageId fullId = readFullPageId(absPtr);
// Check loaded pages map for outdated page.
relPtr = loadedPages.get(
diff --git a/modules/page-memory/src/test/java/org/apache/ignite/internal/pagememory/persistence/replacement/RandomLruPageReplacementPolicySelfTest.java b/modules/page-memory/src/test/java/org/apache/ignite/internal/pagememory/persistence/replacement/RandomLruPageReplacementPolicySelfTest.java
index 2f4cfb518c3..0fe2f83c071 100644
--- a/modules/page-memory/src/test/java/org/apache/ignite/internal/pagememory/persistence/replacement/RandomLruPageReplacementPolicySelfTest.java
+++ b/modules/page-memory/src/test/java/org/apache/ignite/internal/pagememory/persistence/replacement/RandomLruPageReplacementPolicySelfTest.java
@@ -17,8 +17,9 @@
package org.apache.ignite.internal.pagememory.persistence.replacement;
-import static org.apache.ignite.internal.pagememory.persistence.PageHeader.fullPageId;
-import static org.apache.ignite.internal.pagememory.persistence.PersistentPageMemory.PAGE_OVERHEAD;
+import static org.apache.ignite.internal.pagememory.persistence.PageHeader.PAGE_OVERHEAD;
+import static org.apache.ignite.internal.pagememory.persistence.PageHeader.readFullPageId;
+import static org.apache.ignite.internal.pagememory.persistence.PageHeader.writeDirtyFlag;
import static org.apache.ignite.internal.util.Constants.MiB;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.is;
@@ -38,7 +39,6 @@ import org.apache.ignite.internal.pagememory.mem.DirectMemoryProvider;
import org.apache.ignite.internal.pagememory.mem.DirectMemoryRegion;
import org.apache.ignite.internal.pagememory.mem.unsafe.UnsafeMemoryProvider;
import org.apache.ignite.internal.pagememory.persistence.LoadedPagesMap;
-import org.apache.ignite.internal.pagememory.persistence.PageHeader;
import org.apache.ignite.internal.pagememory.persistence.PagePool;
import org.apache.ignite.internal.pagememory.persistence.PersistentPageMemory.Segment;
import org.apache.ignite.internal.pagememory.persistence.ReplaceCandidate;
@@ -119,9 +119,9 @@ class RandomLruPageReplacementPolicySelfTest extends BaseIgniteAbstractTest {
long pageAbsPtr = pagePool.absolute(pageRelPtr);
- PageHeader.dirty(pageAbsPtr, true);
+ writeDirtyFlag(pageAbsPtr, true);
- FullPageId fullPageId = fullPageId(pageAbsPtr);
+ FullPageId fullPageId = readFullPageId(pageAbsPtr);
when(checkpointPages.contains(fullPageId)).thenReturn(true);
@@ -145,12 +145,12 @@ class RandomLruPageReplacementPolicySelfTest extends BaseIgniteAbstractTest {
when(segment.tryToRemovePage(any(), eq(pageAbsPtr)))
.thenReturn(true);
- PageHeader.dirty(dirtyPageAbsPtr, true);
+ writeDirtyFlag(dirtyPageAbsPtr, true);
when(loadedPagesMap.getNearestAt(0))
- .thenReturn(new ReplaceCandidate(42, pageRelPtr, fullPageId(pageAbsPtr)));
+ .thenReturn(new ReplaceCandidate(42, pageRelPtr, readFullPageId(pageAbsPtr)));
when(loadedPagesMap.getNearestAt(1))
- .thenReturn(new ReplaceCandidate(42, dirtyPageRelPtr, fullPageId(dirtyPageAbsPtr)));
+ .thenReturn(new ReplaceCandidate(42, dirtyPageRelPtr, readFullPageId(dirtyPageAbsPtr)));
// Only gets called during fallback to the sequential search.
lenient().when(segment.getWriteHoldCount()).thenReturn(1);
diff --git a/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/PersistentPageMemoryNoLoadTest.java b/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/PersistentPageMemoryNoLoadTest.java
index 2a980a19a42..72bfa70dcb1 100644
--- a/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/PersistentPageMemoryNoLoadTest.java
+++ b/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/PersistentPageMemoryNoLoadTest.java
@@ -21,7 +21,7 @@ import static java.util.concurrent.TimeUnit.SECONDS;
import static org.apache.ignite.internal.pagememory.persistence.CheckpointUrgency.MUST_TRIGGER;
import static org.apache.ignite.internal.pagememory.persistence.CheckpointUrgency.NOT_REQUIRED;
import static org.apache.ignite.internal.pagememory.persistence.CheckpointUrgency.SHOULD_TRIGGER;
-import static org.apache.ignite.internal.pagememory.persistence.PersistentPageMemory.PAGE_OVERHEAD;
+import static org.apache.ignite.internal.pagememory.persistence.PageHeader.PAGE_OVERHEAD;
import static org.apache.ignite.internal.pagememory.persistence.checkpoint.CheckpointState.FINISHED;
import static org.apache.ignite.internal.pagememory.persistence.checkpoint.CheckpointState.PAGES_SORTED;
import static org.apache.ignite.internal.pagememory.persistence.checkpoint.CheckpointTestUtils.mockCheckpointTimeoutLock;