You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by dp...@apache.org on 2018/04/20 12:29:01 UTC

ignite git commit: IGNITE-8258 Race in page memory in copyPageForCheckpoint, Ignite PDS 1 suite, test failed suite IgnitePdsPageReplacementTest.testPageReplacement. - Fixes #3821.

Repository: ignite
Updated Branches:
  refs/heads/master 10a4c48bf -> 8caeb3dc1


IGNITE-8258 Race in page memory in copyPageForCheckpoint, Ignite PDS 1 suite, test failed suite IgnitePdsPageReplacementTest.testPageReplacement. - Fixes #3821.

Signed-off-by: dpavlov <dp...@apache.org>


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/8caeb3dc
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/8caeb3dc
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/8caeb3dc

Branch: refs/heads/master
Commit: 8caeb3dc19e623fcb082b31625489b3ae0c0cc5e
Parents: 10a4c48
Author: Alexey Goncharuk <al...@gmail.com>
Authored: Fri Apr 20 15:28:31 2018 +0300
Committer: dpavlov <dp...@apache.org>
Committed: Fri Apr 20 15:28:31 2018 +0300

----------------------------------------------------------------------
 .../cache/persistence/pagemem/PageMemoryImpl.java       | 12 +++++-------
 1 file changed, 5 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/8caeb3dc/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/pagemem/PageMemoryImpl.java
----------------------------------------------------------------------
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 4463224..c684ce1 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
@@ -1144,7 +1144,7 @@ public class PageMemoryImpl implements PageMemoryEx {
 
             assert success : "Page was pin when we resolve abs pointer, it can not be evicted";
 
-            if (tmpRelPtr != INVALID_REL_PTR){
+            if (tmpRelPtr != INVALID_REL_PTR) {
                 PageHeader.tempBufferPointer(absPtr, INVALID_REL_PTR);
 
                 long tmpAbsPtr = checkpointPool.absolute(tmpRelPtr);
@@ -1158,9 +1158,6 @@ public class PageMemoryImpl implements PageMemoryEx {
 
                 checkpointPool.releaseFreePage(tmpRelPtr);
 
-                // We pinned the page when allocated the temp buffer, release it now.
-                PageHeader.releasePage(absPtr);
-
                 // Need release again because we pin page when resolve abs pointer,
                 // and page did not have tmp buffer page.
                 if (!pageSingleAcquire)
@@ -1171,9 +1168,6 @@ public class PageMemoryImpl implements PageMemoryEx {
                 copyInBuffer(absPtr, outBuf);
 
                 PageHeader.dirty(absPtr, false);
-
-                // We pinned the page when resolve abs pointer.
-                PageHeader.releasePage(absPtr);
             }
 
             assert PageIO.getType(outBuf) != 0 : "Invalid state. Type is 0! pageId = " + U.hexLong(fullId.pageId());
@@ -1183,6 +1177,10 @@ public class PageMemoryImpl implements PageMemoryEx {
         }
         finally {
             rwLock.writeUnlock(absPtr + PAGE_LOCK_OFFSET, OffheapReadWriteLock.TAG_LOCK_ALWAYS);
+
+            // We pinned the page either when allocated the temp buffer, or when resolved abs pointer.
+            // Must release the page only after write unlock.
+            PageHeader.releasePage(absPtr);
         }
     }