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);
     }
 
     /**

Reply via email to