You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by al...@apache.org on 2023/08/04 06:40:30 UTC
[ignite] branch master updated: IGNITE-19904 Fix assertion on defragmentation - Fixes #10866.
This is an automated email from the ASF dual-hosted git repository.
alexpl pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ignite.git
The following commit(s) were added to refs/heads/master by this push:
new c1b1aa413fc IGNITE-19904 Fix assertion on defragmentation - Fixes #10866.
c1b1aa413fc is described below
commit c1b1aa413fcb81216c93c0596117fe9f1a4098b7
Author: Vladimir Steshin <vl...@gmail.com>
AuthorDate: Fri Aug 4 09:08:15 2023 +0300
IGNITE-19904 Fix assertion on defragmentation - Fixes #10866.
Signed-off-by: Aleksey Plekhanov <pl...@gmail.com>
---
.../persistence/GridCacheDatabaseSharedManager.java | 8 +++++++-
.../CachePartitionDefragmentationManager.java | 20 +++++++++++++++++---
.../cache/persistence/pagemem/PageHeader.java | 2 +-
3 files changed, 25 insertions(+), 5 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 7dabf06c8dd..aeee241b98f 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
@@ -1203,6 +1203,10 @@ public class GridCacheDatabaseSharedManager extends IgniteCacheDatabaseSharedMan
chpBufSize = cacheSize;
}
+ // TODO IGNITE-20138 : Should be actual checkpoint lock checker, related to the checkpointer for this data
+ // region. Like LightweightCheckpointManager#checkpointer for the defragmentation.
+ CheckpointLockStateChecker chpLockChecker = this;
+
PageMemoryImpl pageMem = new PageMemoryImpl(
wrapMetricsPersistentMemoryProvider(memProvider, regMetrics),
calculateFragmentSizes(
@@ -1220,10 +1224,12 @@ public class GridCacheDatabaseSharedManager extends IgniteCacheDatabaseSharedMan
// Write page to disk.
pageMgr.write(fullId.groupId(), fullId.pageId(), pageBuf, tag, true);
+ // TODO IGNITE-20138 : Should be actual checkpointer, related to this data rageion. Like
+ // LightweightCheckpointManager#checkpointer for the defragmentation.
getCheckpointer().currentProgress().updateEvictedPages(1);
},
trackable,
- this,
+ chpLockChecker,
regMetrics,
regCfg,
resolveThrottlingPolicy(),
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/defragmentation/CachePartitionDefragmentationManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/defragmentation/CachePartitionDefragmentationManager.java
index 70de48d2aaf..00c680d3bcb 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/defragmentation/CachePartitionDefragmentationManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/defragmentation/CachePartitionDefragmentationManager.java
@@ -54,6 +54,7 @@ import org.apache.ignite.internal.processors.cache.persistence.GridCacheOffheapM
import org.apache.ignite.internal.processors.cache.persistence.GridCacheOffheapManager.GridCacheDataStore;
import org.apache.ignite.internal.processors.cache.persistence.checkpoint.CheckpointManager;
import org.apache.ignite.internal.processors.cache.persistence.checkpoint.CheckpointTimeoutLock;
+import org.apache.ignite.internal.processors.cache.persistence.checkpoint.Checkpointer;
import org.apache.ignite.internal.processors.cache.persistence.checkpoint.LightweightCheckpointManager;
import org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager;
import org.apache.ignite.internal.processors.cache.persistence.file.FileVersionCheckingFactory;
@@ -209,10 +210,12 @@ public class CachePartitionDefragmentationManager {
new LinkedBlockingQueue<>()
);
- completionFut.listen(future -> {
+ completionFut.chain(future -> {
linkMapByPart.values().forEach(LinkMap::close);
linkMapByPart.clear();
+
+ return future.result();
});
}
@@ -225,6 +228,19 @@ public class CachePartitionDefragmentationManager {
nodeCheckpoint.forceCheckpoint("beforeDefragmentation", null).futureFor(FINISHED).get();
+ // The concurrent default checkpointer has various listeners, interferes with new dedicated
+ // CacheGroupContext for defragmentation and at least clears shared CheckpointProgress#clearCounters().
+ // Should be properly reconfigured and restarted after the defragmentation task to have ability launch
+ // other maintenance tasks after.
+ Checkpointer defaultCheckpointer = nodeCheckpoint.getCheckpointer();
+
+ if (defaultCheckpointer != null && !defaultCheckpointer.isDone()) {
+ if (log.isDebugEnabled())
+ log.debug("Stopping default checkpointer.");
+
+ defaultCheckpointer.shutdownNow();
+ }
+
dbMgr.preserveWalTailPointer();
sharedCtx.wal().onDeActivate(sharedCtx.kernalContext());
@@ -322,8 +338,6 @@ public class CachePartitionDefragmentationManager {
cacheDataStores.put(store.partId(), store);
}
- dbMgr.checkpointedDataRegions().remove(oldGrpCtx.dataRegion());
-
// Another cheat. Ttl cleanup manager knows too much shit.
oldGrpCtx.caches().stream()
.filter(cacheCtx -> cacheCtx.groupId() == grpId)
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/pagemem/PageHeader.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/pagemem/PageHeader.java
index 2fcd6bd3087..d424efce7e8 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/pagemem/PageHeader.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/pagemem/PageHeader.java
@@ -145,7 +145,7 @@ class PageHeader {
* @return Number of acquires for the page.
*/
public static int pinCount(long absPtr) {
- return GridUnsafe.getIntVolatile(null, absPtr);
+ return GridUnsafe.getIntVolatile(null, absPtr + PAGE_PIN_CNT_OFFSET);
}
/**