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

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

commit 8084b95c0008c1e9005fc64b5ce35fd54bb57a96
Author: Kirill Tkalenko <[email protected]>
AuthorDate: Wed Nov 12 08:59:14 2025 +0300

    IGNITE-27028 wip
---
 .../pagememory/AbstractPageMemoryTableStorage.java | 33 +++++++++++++---------
 .../PersistentPageMemoryTableStorage.java          |  7 ++++-
 .../pagememory/VolatilePageMemoryTableStorage.java |  7 ++++-
 3 files changed, 32 insertions(+), 15 deletions(-)

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..3f3a2a8de6f 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
@@ -294,22 +294,23 @@ public abstract class AbstractPageMemoryTableStorage<T 
extends AbstractPageMemor
         return busy(() -> mvPartitionStorages.startRebalance(partitionId, 
mvPartitionStorage -> {
             mvPartitionStorage.startRebalance();
 
-            return clearStorageAndUpdateDataStructures(mvPartitionStorage)
-                    .thenAccept(unused ->
-                            mvPartitionStorage.runConsistently(locker -> {
-                                
mvPartitionStorage.lastAppliedOnRebalance(REBALANCE_IN_PROGRESS, 
REBALANCE_IN_PROGRESS);
-
-                                return null;
-                            })
-                    );
+            return clearStorageAndUpdateDataStructures(
+                    mvPartitionStorage,
+                    () -> mvPartitionStorage.runConsistently(locker -> {
+                        
mvPartitionStorage.lastAppliedOnRebalance(REBALANCE_IN_PROGRESS, 
REBALANCE_IN_PROGRESS);
+
+                        return null;
+                    })
+            );
         }));
     }
 
     @Override
     public CompletableFuture<Void> abortRebalancePartition(int partitionId) {
         return busy(() -> mvPartitionStorages.abortRebalance(partitionId, 
mvPartitionStorage ->
-                clearStorageAndUpdateDataStructures(mvPartitionStorage)
-                        .thenAccept(unused -> {
+                clearStorageAndUpdateDataStructures(
+                        mvPartitionStorage,
+                        () -> {
                             mvPartitionStorage.runConsistently(locker -> {
                                 mvPartitionStorage.lastAppliedOnRebalance(0, 
0);
 
@@ -317,7 +318,8 @@ public abstract class AbstractPageMemoryTableStorage<T 
extends AbstractPageMemor
                             });
 
                             mvPartitionStorage.completeRebalance();
-                        })
+                        }
+                )
         ));
     }
 
@@ -349,7 +351,7 @@ public abstract class AbstractPageMemoryTableStorage<T 
extends AbstractPageMemor
             try {
                 mvPartitionStorage.startCleanup();
 
-                return clearStorageAndUpdateDataStructures(mvPartitionStorage)
+                return clearStorageAndUpdateDataStructures(mvPartitionStorage, 
() -> {})
                         .whenComplete((unused, throwable) -> 
mvPartitionStorage.finishCleanup());
             } catch (StorageException e) {
                 mvPartitionStorage.finishCleanup();
@@ -367,9 +369,14 @@ public abstract class AbstractPageMemoryTableStorage<T 
extends AbstractPageMemor
      * Clears the partition multi-version storage and all its indexes, updates 
their internal data structures such as {@link BplusTree},
      * {@link FreeList} and {@link ReuseList}.
      *
+     * @param mvPartitionStorage Storage to be cleared.
+     * @param afterUpdateStructuresCallback Callback after updating internal 
structures.
      * @return Future of the operation.
      */
-    abstract CompletableFuture<Void> 
clearStorageAndUpdateDataStructures(AbstractPageMemoryMvPartitionStorage 
mvPartitionStorage);
+    abstract CompletableFuture<Void> clearStorageAndUpdateDataStructures(
+            AbstractPageMemoryMvPartitionStorage mvPartitionStorage,
+            Runnable afterUpdateStructuresCallback
+    );
 
     /**
      * Returns the table ID.
diff --git 
a/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/PersistentPageMemoryTableStorage.java
 
b/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/PersistentPageMemoryTableStorage.java
index e9c50688e0b..7385839d8c7 100644
--- 
a/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/PersistentPageMemoryTableStorage.java
+++ 
b/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/PersistentPageMemoryTableStorage.java
@@ -332,7 +332,10 @@ public class PersistentPageMemoryTableStorage extends 
AbstractPageMemoryTableSto
     }
 
     @Override
-    CompletableFuture<Void> 
clearStorageAndUpdateDataStructures(AbstractPageMemoryMvPartitionStorage 
mvPartitionStorage) {
+    CompletableFuture<Void> clearStorageAndUpdateDataStructures(
+            AbstractPageMemoryMvPartitionStorage mvPartitionStorage,
+            Runnable afterUpdateStructuresCallback
+    ) {
         GroupPartitionId groupPartitionId = 
createGroupPartitionId(mvPartitionStorage.partitionId());
 
         return destroyPartitionPhysically(groupPartitionId).thenAccept(unused 
-> {
@@ -359,6 +362,8 @@ public class PersistentPageMemoryTableStorage extends 
AbstractPageMemoryTableSto
                         gcQueue
                 );
 
+                afterUpdateStructuresCallback.run();
+
                 return null;
             });
         });
diff --git 
a/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/VolatilePageMemoryTableStorage.java
 
b/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/VolatilePageMemoryTableStorage.java
index 5dec337b499..1cf367f0f5c 100644
--- 
a/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/VolatilePageMemoryTableStorage.java
+++ 
b/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/VolatilePageMemoryTableStorage.java
@@ -175,7 +175,10 @@ public class VolatilePageMemoryTableStorage extends 
AbstractPageMemoryTableStora
     }
 
     @Override
-    CompletableFuture<Void> 
clearStorageAndUpdateDataStructures(AbstractPageMemoryMvPartitionStorage 
mvPartitionStorage) {
+    CompletableFuture<Void> clearStorageAndUpdateDataStructures(
+            AbstractPageMemoryMvPartitionStorage mvPartitionStorage,
+            Runnable afterUpdateStructuresCallback
+    ) {
         VolatilePageMemoryMvPartitionStorage volatilePartitionStorage = 
(VolatilePageMemoryMvPartitionStorage) mvPartitionStorage;
 
         volatilePartitionStorage.destroyStructures().whenComplete((res, ex) -> 
{
@@ -196,6 +199,8 @@ public class VolatilePageMemoryTableStorage extends 
AbstractPageMemoryTableStora
                 createGarbageCollectionTree(partitionId)
         );
 
+        afterUpdateStructuresCallback.run();
+
         return nullCompletedFuture();
     }
 

Reply via email to