From 0c44087b4cb8165705a70520e66ac1488f3a948c Mon Sep 17 00:00:00 2001 From: Ilya Lantukh Date: Wed, 12 Jul 2017 19:41:07 +0300 Subject: [PATCH 1/6] gg-12400 : WIP --- .../cache/persistence/GridCacheDatabaseSharedManager.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheDatabaseSharedManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheDatabaseSharedManager.java index 51367316ba8c5..348617cc1d604 100755 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheDatabaseSharedManager.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheDatabaseSharedManager.java @@ -1538,6 +1538,8 @@ private void restorePartitionState( if (storeMgr.pages(grpId, i) <= 1) continue; + grp.offheap().onPartitionInitialCounterUpdated(i, 0); + long partMetaId = pageMem.partitionMetaPageId(grpId, i); long partMetaPage = pageMem.acquirePage(grpId, partMetaId); try { From 1af3a5b1459dcb3a231ccb9ae73f995a91d6feea Mon Sep 17 00:00:00 2001 From: Ilya Lantukh Date: Fri, 14 Jul 2017 19:10:01 +0300 Subject: [PATCH 2/6] gg-12400 : WIP --- .../cache/persistence/pagemem/PageMemoryImpl.java | 7 +++++++ 1 file changed, 7 insertions(+) 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 e4428a2ab3b41..f534676c9acf5 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 @@ -656,6 +656,13 @@ private long refreshOutdatedPage(Segment seg, int cacheId, long pageId, boolean if (rmv) seg.loadedPages.remove(cacheId, PageIdUtils.effectivePageId(pageId), tag); + // TODO: verify consistency + if (seg.segCheckpointPages != null) + seg.segCheckpointPages.remove(new FullPageId(pageId, cacheId)); + + if (seg.dirtyPages != null) + seg.dirtyPages.remove(new FullPageId(pageId, cacheId)); + return relPtr; } From ce2fcfed01db4b1c7e85ddb030a687cea7a59262 Mon Sep 17 00:00:00 2001 From: Ilya Lantukh Date: Tue, 15 Aug 2017 14:49:18 +0300 Subject: [PATCH 3/6] Fixed PageHeader.dirty flag value consistency. --- .../processors/cache/persistence/pagemem/PageMemoryImpl.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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 ce9f8ba524497..891136156648f 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 @@ -639,13 +639,14 @@ private long refreshOutdatedPage(Segment seg, int cacheId, long pageId, boolean GridUnsafe.setMemory(absPtr + PAGE_OVERHEAD, pageSize(), (byte)0); + PageHeader.dirty(absPtr, false); + long tmpBufPtr = PageHeader.tempBufferPointer(absPtr); if (tmpBufPtr != INVALID_REL_PTR) { GridUnsafe.setMemory(checkpointPool.absolute(tmpBufPtr) + PAGE_OVERHEAD, pageSize(), (byte)0); PageHeader.tempBufferPointer(absPtr, INVALID_REL_PTR); - PageHeader.dirty(absPtr, false); // We pinned the page when allocated the temp buffer, release it now. PageHeader.releasePage(absPtr); From 2a57557162debad6989a8647f8c9995e3b3c7b01 Mon Sep 17 00:00:00 2001 From: Ilya Lantukh Date: Wed, 16 Aug 2017 13:03:57 +0300 Subject: [PATCH 4/6] gg-12400 : Fixed race between CacheDataStore creation and deletion. --- .../dht/GridDhtPartitionTopologyImpl.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtPartitionTopologyImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtPartitionTopologyImpl.java index d7a224c3dd0eb..0eff7fa8a3551 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtPartitionTopologyImpl.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtPartitionTopologyImpl.java @@ -660,6 +660,15 @@ private GridDhtLocalPartition createPartition(int p) { GridDhtLocalPartition loc = locParts.get(p); if (loc == null || loc.state() == EVICTED) { + if (loc != null) { + try { + loc.rent(false).get(); + } + catch (IgniteCheckedException e) { + throw new IgniteException(e); + } + } + locParts.set(p, loc = new GridDhtLocalPartition(ctx, grp, p)); T2 cntr = cntrMap.get(p); @@ -741,6 +750,13 @@ private GridDhtLocalPartition localPartition0(int p, boolean belongs = partitionLocalNode(p, topVer); if (loc != null && state == EVICTED) { + try { + loc.rent(false).get(); + } + catch (IgniteCheckedException ex) { + throw new IgniteException(ex); + } + locParts.set(p, loc = null); if (!belongs) From e18d9b07c4acb03a11a34fdc5903127297ce6f2a Mon Sep 17 00:00:00 2001 From: Ilya Lantukh Date: Wed, 16 Aug 2017 15:02:27 +0300 Subject: [PATCH 5/6] gg-12400 : Link to another ticket. --- .../cache/persistence/GridCacheDatabaseSharedManager.java | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheDatabaseSharedManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheDatabaseSharedManager.java index c38ba749d8b36..4b738f3899997 100755 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheDatabaseSharedManager.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheDatabaseSharedManager.java @@ -1548,6 +1548,7 @@ private void restorePartitionState( if (storeMgr.pages(grpId, i) <= 1) continue; + // TODO: https://ggsystems.atlassian.net/browse/GG-12487 grp.offheap().onPartitionInitialCounterUpdated(i, 0); long partMetaId = pageMem.partitionMetaPageId(grpId, i); From d4ad5a4bcf511cc02465f3db7421dbce6e5ba6c4 Mon Sep 17 00:00:00 2001 From: Ilya Lantukh Date: Thu, 17 Aug 2017 12:48:09 +0300 Subject: [PATCH 6/6] gg-12400 : Minors --- .../persistence/GridCacheDatabaseSharedManager.java | 10 +++++----- .../cache/persistence/pagemem/PageMemoryImpl.java | 1 - 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheDatabaseSharedManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheDatabaseSharedManager.java index 4b738f3899997..a3268e8789a23 100755 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheDatabaseSharedManager.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheDatabaseSharedManager.java @@ -1548,7 +1548,11 @@ private void restorePartitionState( if (storeMgr.pages(grpId, i) <= 1) continue; - // TODO: https://ggsystems.atlassian.net/browse/GG-12487 + GridDhtLocalPartition part = grp.topology().forceCreatePartition(i); + + assert part != null; + + // TODO: https://issues.apache.org/jira/browse/IGNITE-6097 grp.offheap().onPartitionInitialCounterUpdated(i, 0); long partMetaId = pageMem.partitionMetaPageId(grpId, i); @@ -1563,10 +1567,6 @@ private void restorePartitionState( T2 fromWal = partStates.get(new T2<>(grpId, i)); - GridDhtLocalPartition part = grp.topology().forceCreatePartition(i); - - assert part != null; - if (fromWal != null) { int stateId = fromWal.get1(); 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 891136156648f..d74753e77a116 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 @@ -657,7 +657,6 @@ private long refreshOutdatedPage(Segment seg, int cacheId, long pageId, boolean if (rmv) seg.loadedPages.remove(cacheId, PageIdUtils.effectivePageId(pageId), tag); - // TODO: verify consistency if (seg.segCheckpointPages != null) seg.segCheckpointPages.remove(new FullPageId(pageId, cacheId));