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 <tkalkir...@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;

Reply via email to