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 <[email protected]>
AuthorDate: Fri Aug 4 09:08:15 2023 +0300
IGNITE-19904 Fix assertion on defragmentation - Fixes #10866.
Signed-off-by: Aleksey Plekhanov <[email protected]>
---
.../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);
}
/**