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;
             }

Reply via email to