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:27 UTC
(ignite-3) 01/01: IGNITE-26216 wip
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;