This is an automated email from the ASF dual-hosted git repository. alexpl pushed a commit to branch ignite-2.9 in repository https://gitbox.apache.org/repos/asf/ignite.git
The following commit(s) were added to refs/heads/ignite-2.9 by this push: new 50fa681 IGNITE-13086 Improve page replacement mechanism - Fixes #7919. 50fa681 is described below commit 50fa681009f05dfbc3a4b9e8df39796939a6cebf Author: Aleksey Plekhanov <plehanov.a...@gmail.com> AuthorDate: Tue Jul 14 16:12:57 2020 +0500 IGNITE-13086 Improve page replacement mechanism - Fixes #7919. Signed-off-by: Aleksey Plekhanov <plehanov.a...@gmail.com> (cherry picked from commit 1d550a5f97db3ec775146f1e6a8c2a8e822225d8) --- .../processors/cache/persistence/pagemem/PageMemoryImpl.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/pagemem/PageMemoryImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/pagemem/PageMemoryImpl.java index 2870dcd..5dc17a0 100755 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/pagemem/PageMemoryImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/pagemem/PageMemoryImpl.java @@ -2318,7 +2318,14 @@ public class PageMemoryImpl implements PageMemoryEx { boolean skip = ignored != null && ignored.contains(rndAddr); - if (relRmvAddr == rndAddr || pinned || skip) { + final boolean dirty = isDirty(absPageAddr); + + CheckpointPages checkpointPages = this.checkpointPages; + + if (relRmvAddr == rndAddr || pinned || skip || + fullId.pageId() == storeMgr.metaPageId(fullId.groupId()) || + (dirty && (checkpointPages == null || !checkpointPages.contains(fullId))) + ) { i--; continue; @@ -2326,7 +2333,6 @@ public class PageMemoryImpl implements PageMemoryEx { final long pageTs = PageHeader.readTimestamp(absPageAddr); - final boolean dirty = isDirty(absPageAddr); final boolean storMeta = isStoreMetadataPage(absPageAddr); if (pageTs < cleanTs && !dirty && !storMeta) {