Repository: ignite Updated Branches: refs/heads/master a9f37a2e4 -> 829dc1f24
IGNITE-9854 Correct remove from dirtyPages and segCheckpointPages - Fixes #4988. Signed-off-by: Dmitriy Govorukhin <[email protected]> Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/829dc1f2 Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/829dc1f2 Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/829dc1f2 Branch: refs/heads/master Commit: 829dc1f240c07731a1ee98ae18c80ea6074dc6c4 Parents: a9f37a2 Author: Ivan Daschinskiy <[email protected]> Authored: Thu Oct 18 14:33:28 2018 +0300 Committer: Dmitriy Govorukhin <[email protected]> Committed: Thu Oct 18 14:33:28 2018 +0300 ---------------------------------------------------------------------- .../cache/persistence/pagemem/PageMemoryImpl.java | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/829dc1f2/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 55c5fb5..48e33c0 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 @@ -851,11 +851,15 @@ public class PageMemoryImpl implements PageMemoryEx { if (rmv) seg.loadedPages.remove(grpId, PageIdUtils.effectivePageId(pageId)); - if (seg.segCheckpointPages != null) - seg.segCheckpointPages.remove(new FullPageId(pageId, grpId)); + Collection<FullPageId> cpPages = seg.segCheckpointPages; - if (seg.dirtyPages != null) - seg.dirtyPages.remove(new FullPageId(pageId, grpId)); + if (cpPages != null) + cpPages.remove(new FullPageId(pageId, grpId)); + + Collection<FullPageId> dirtyPages = seg.dirtyPages; + + if (dirtyPages != null) + dirtyPages.remove(new FullPageId(pageId, grpId)); return relPtr; } @@ -1875,7 +1879,7 @@ public class PageMemoryImpl implements PageMemoryEx { private static final int ACQUIRED_PAGES_PADDING = 4; /** Page ID to relative pointer map. */ - private LoadedPagesMap loadedPages; + private final LoadedPagesMap loadedPages; /** Pointer to acquired pages integer counter. */ private long acquiredPagesPtr; @@ -1887,7 +1891,7 @@ public class PageMemoryImpl implements PageMemoryEx { private long memPerTbl; /** Pages marked as dirty since the last checkpoint. */ - private Collection<FullPageId> dirtyPages = new GridConcurrentHashSet<>(); + private volatile Collection<FullPageId> dirtyPages = new GridConcurrentHashSet<>(); /** */ private volatile Collection<FullPageId> segCheckpointPages;
