GG-11044 - Implement page evictions from PageMemory for the case when data size is bigger than allocated memory.
Review fixes: - Replace BitSet with HashSet. - Remove array allocation. - Replace atomic write to volatile write for timestamp. Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/d7dfb91b Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/d7dfb91b Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/d7dfb91b Branch: refs/heads/ignite-db-x-10884 Commit: d7dfb91ba6ec8c494f3776b8892b9923c8e96ed5 Parents: 36b0a20 Author: dkarachentsev <[email protected]> Authored: Mon Apr 25 10:36:13 2016 +0300 Committer: dkarachentsev <[email protected]> Committed: Mon Apr 25 10:36:13 2016 +0300 ---------------------------------------------------------------------- .../internal/pagemem/impl/PageMemoryImpl.java | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/d7dfb91b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/impl/PageMemoryImpl.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/impl/PageMemoryImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/impl/PageMemoryImpl.java index 5075f6a..7863fbc 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/impl/PageMemoryImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/impl/PageMemoryImpl.java @@ -956,6 +956,8 @@ public class PageMemoryImpl implements PageMemory { long relEvictAddr = INVALID_REL_PTR; + int iterations = 0; + while (true) { long cleanAddr = INVALID_REL_PTR; long cleanTs = Long.MAX_VALUE; @@ -1004,10 +1006,12 @@ public class PageMemoryImpl implements PageMemory { final long metaPageId = mem.readLong(dbMetaPageIdPtr); if (fullPageId.pageId() == metaPageId && fullPageId.cacheId() == 0) { - if (ignored == null) - ignored = new HashSet<>(); + if (++iterations > 2) { + if (ignored == null) + ignored = new HashSet<>(); - ignored.add(relEvictAddr); + ignored.add(relEvictAddr); + } continue; } @@ -1017,10 +1021,12 @@ public class PageMemoryImpl implements PageMemory { if (!seg.acquiredPages.containsKey(fullPageId)) seg.loadedPages.remove(fullPageId); else { - if (ignored == null) - ignored = new HashSet<>(); + if (++iterations > 2) { + if (ignored == null) + ignored = new HashSet<>(); - ignored.add(relEvictAddr); + ignored.add(relEvictAddr); + } continue; }
