This is an automated email from the ASF dual-hosted git repository.

tkalkirill pushed a commit to branch ignite-26851
in repository https://gitbox.apache.org/repos/asf/ignite-3.git

commit 7aff5b681906786f4f28b7c84d7b7f85b5e8dc6f
Author: Kirill Tkalenko <[email protected]>
AuthorDate: Tue Nov 11 16:04:40 2025 +0300

    IGNITE-26851 wip
---
 .../persistence/PersistentPageMemory.java          |  2 +-
 .../pagememory/AbstractPageMemoryTableStorage.java | 22 +++++++++++----------
 .../mv/AbstractPageMemoryMvPartitionStorage.java   | 23 ++++++++++++++++++++++
 .../PersistentPageMemoryMvTableStorageTest.java    | 22 +++++++++++++++++++++
 4 files changed, 58 insertions(+), 11 deletions(-)

diff --git 
a/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/PersistentPageMemory.java
 
b/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/PersistentPageMemory.java
index 2c1d0e637a4..cc19d515f2c 100644
--- 
a/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/PersistentPageMemory.java
+++ 
b/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/persistence/PersistentPageMemory.java
@@ -783,7 +783,7 @@ public class PersistentPageMemory implements PageMemory {
                     lockedPageAbsPtr = absPtr;
                 }
             } else if (relPtr == OUTDATED_REL_PTR) {
-                assert pageIndex(pageId) == 0 : fullId;
+                // assert pageIndex(pageId) == 0 : fullId;
 
                 relPtr = seg.refreshOutdatedPage(grpId, pageId, false);
 
diff --git 
a/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/AbstractPageMemoryTableStorage.java
 
b/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/AbstractPageMemoryTableStorage.java
index 1da4f4af9dd..a071959b5b4 100644
--- 
a/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/AbstractPageMemoryTableStorage.java
+++ 
b/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/AbstractPageMemoryTableStorage.java
@@ -307,18 +307,20 @@ public abstract class AbstractPageMemoryTableStorage<T 
extends AbstractPageMemor
 
     @Override
     public CompletableFuture<Void> abortRebalancePartition(int partitionId) {
-        return busy(() -> mvPartitionStorages.abortRebalance(partitionId, 
mvPartitionStorage ->
-                clearStorageAndUpdateDataStructures(mvPartitionStorage)
-                        .thenAccept(unused -> {
-                            mvPartitionStorage.runConsistently(locker -> {
-                                mvPartitionStorage.lastAppliedOnRebalance(0, 
0);
+        return busy(() -> mvPartitionStorages.abortRebalance(partitionId, 
mvPartitionStorage -> {
+            mvPartitionStorage.startAbortRebalance();
 
-                                return null;
-                            });
+            return clearStorageAndUpdateDataStructures(mvPartitionStorage)
+                    .thenAccept(unused -> {
+                        mvPartitionStorage.runConsistently(locker -> {
+                            mvPartitionStorage.lastAppliedOnRebalance(0, 0);
 
-                            mvPartitionStorage.completeRebalance();
-                        })
-        ));
+                            return null;
+                        });
+
+                        mvPartitionStorage.completeRebalance();
+                    });
+        }));
     }
 
     @Override
diff --git 
a/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/mv/AbstractPageMemoryMvPartitionStorage.java
 
b/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/mv/AbstractPageMemoryMvPartitionStorage.java
index fe9582d44d6..6d0fb0ee99a 100644
--- 
a/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/mv/AbstractPageMemoryMvPartitionStorage.java
+++ 
b/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/mv/AbstractPageMemoryMvPartitionStorage.java
@@ -826,6 +826,29 @@ public abstract class AbstractPageMemoryMvPartitionStorage 
implements MvPartitio
         }
     }
 
+    /**
+     * Prepares the storage and its indexes for rebalance abortion.
+     *
+     * <p>Stops ongoing operations on the storage and its indexes.</p>
+     *
+     * @throws StorageRebalanceException If there was an error when starting 
the rebalance abortion.
+     */
+    public void startAbortRebalance() {
+        // Changed storage states and expect all storage operations to stop 
soon.
+        busyLock.block();
+
+        try {
+            closeAll(getResourcesToCloseOnCleanup());
+        } catch (Exception e) {
+            throw new StorageRebalanceException(
+                    IgniteStringFormatter.format("Error on start abort of 
rebalancing: [{}]", createStorageInfo()),
+                    e
+            );
+        } finally {
+            busyLock.unblock();
+        }
+    }
+
     /**
      * Completes the rebalancing of the storage and its indexes.
      *
diff --git 
a/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/PersistentPageMemoryMvTableStorageTest.java
 
b/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/PersistentPageMemoryMvTableStorageTest.java
index 6d05807b29d..6951fc9e9b5 100644
--- 
a/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/PersistentPageMemoryMvTableStorageTest.java
+++ 
b/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/PersistentPageMemoryMvTableStorageTest.java
@@ -544,6 +544,28 @@ public class PersistentPageMemoryMvTableStorageTest 
extends AbstractMvTableStora
         }
     }
 
+    @Test
+    void testSyncFreeListMetadataOnCheckpointAfterAbortRebalance() {
+        int[] partitionIds = IntStream.range(0, 5)
+                .map(i -> PARTITION_ID + i)
+                .toArray();
+
+        PersistentPageMemoryMvPartitionStorage[] partitions = 
getOrCreateMvPartitions(partitionIds);
+
+        for (int i = 0; i < 10; i++) {
+            addWriteCommitted(partitions);
+
+            startRebalance(partitionIds);
+
+            addWriteCommitted(partitions);
+
+            runRace(
+                    () -> abortRebalance(partitionIds),
+                    () -> assertThat(forceCheckpointAsync(), 
willCompleteSuccessfully())
+            );
+        }
+    }
+
     private CompletableFuture<Void> forceCheckpointAsync() {
         return 
engine.checkpointManager().forceCheckpoint("test").futureFor(FINISHED);
     }

Reply via email to