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

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


The following commit(s) were added to refs/heads/main by this push:
     new 497e76e0add IGNITE-28205 Disable MetaStorage flush on shutdown (#7819)
497e76e0add is described below

commit 497e76e0add23b21778f911b3245efab36a67b74
Author: Alexander Polovtcev <[email protected]>
AuthorDate: Fri Mar 20 09:45:00 2026 +0200

    IGNITE-28205 Disable MetaStorage flush on shutdown (#7819)
---
 .../catalog/CatalogManagerRecoveryTest.java        |  7 +++++-
 ...niteDistributionZoneManagerNodeRestartTest.java | 12 +++++++----
 .../IndexAvailabilityControllerRestorerTest.java   |  5 ++---
 .../server/persistence/RocksDbKeyValueStorage.java |  4 +++-
 .../server/RocksDbKeyValueStorageTest.java         | 12 +----------
 .../server/AbstractKeyValueStorageTest.java        |  4 ++++
 .../ItMetastorageGroupDisasterRecoveryTest.java    | 11 +++++++++-
 .../distributed/TableManagerRecoveryTest.java      | 25 +++++++++++++---------
 .../index/IndexMetaStorageRecoveryTest.java        |  6 +++++-
 9 files changed, 54 insertions(+), 32 deletions(-)

diff --git 
a/modules/catalog/src/test/java/org/apache/ignite/internal/catalog/CatalogManagerRecoveryTest.java
 
b/modules/catalog/src/test/java/org/apache/ignite/internal/catalog/CatalogManagerRecoveryTest.java
index 5dfce33d3e0..24cd3586d48 100644
--- 
a/modules/catalog/src/test/java/org/apache/ignite/internal/catalog/CatalogManagerRecoveryTest.java
+++ 
b/modules/catalog/src/test/java/org/apache/ignite/internal/catalog/CatalogManagerRecoveryTest.java
@@ -58,6 +58,7 @@ import org.apache.ignite.internal.hlc.HybridTimestamp;
 import org.apache.ignite.internal.manager.ComponentContext;
 import org.apache.ignite.internal.metastorage.MetaStorageManager;
 import 
org.apache.ignite.internal.metastorage.impl.StandaloneMetaStorageManager;
+import org.apache.ignite.internal.metastorage.server.KeyValueStorage;
 import 
org.apache.ignite.internal.metastorage.server.ReadOperationForCompactionTracker;
 import 
org.apache.ignite.internal.metastorage.server.persistence.RocksDbKeyValueStorage;
 import org.apache.ignite.internal.testframework.BaseIgniteAbstractTest;
@@ -88,6 +89,8 @@ public class CatalogManagerRecoveryTest extends 
BaseIgniteAbstractTest {
 
     private CatalogManager catalogManager;
 
+    private KeyValueStorage keyValueStorage;
+
     private TestUpdateHandlerInterceptor interceptor;
 
     @AfterEach
@@ -200,7 +203,7 @@ public class CatalogManagerRecoveryTest extends 
BaseIgniteAbstractTest {
     private void createComponents() {
         var readOperationForCompactionTracker = new 
ReadOperationForCompactionTracker();
 
-        var keyValueStorage = new RocksDbKeyValueStorage(
+        keyValueStorage = new RocksDbKeyValueStorage(
                 NODE_NAME,
                 workDir,
                 new NoOpFailureManager(),
@@ -233,6 +236,8 @@ public class CatalogManagerRecoveryTest extends 
BaseIgniteAbstractTest {
     }
 
     private void stopComponents() {
+        assertThat(keyValueStorage.flush(), willCompleteSuccessfully());
+
         assertThat(stopAsync(new ComponentContext(), catalogManager, 
metaStorageManager), willCompleteSuccessfully());
     }
 }
diff --git 
a/modules/distribution-zones/src/integrationTest/java/org/apache/ignite/internal/distributionzones/ItIgniteDistributionZoneManagerNodeRestartTest.java
 
b/modules/distribution-zones/src/integrationTest/java/org/apache/ignite/internal/distributionzones/ItIgniteDistributionZoneManagerNodeRestartTest.java
index cbbef0cc695..6c89b338022 100644
--- 
a/modules/distribution-zones/src/integrationTest/java/org/apache/ignite/internal/distributionzones/ItIgniteDistributionZoneManagerNodeRestartTest.java
+++ 
b/modules/distribution-zones/src/integrationTest/java/org/apache/ignite/internal/distributionzones/ItIgniteDistributionZoneManagerNodeRestartTest.java
@@ -116,7 +116,6 @@ import org.apache.ignite.internal.manager.ComponentContext;
 import org.apache.ignite.internal.manager.IgniteComponent;
 import org.apache.ignite.internal.metastorage.Entry;
 import org.apache.ignite.internal.metastorage.MetaStorageManager;
-import 
org.apache.ignite.internal.metastorage.impl.MetaStorageRevisionListenerRegistry;
 import 
org.apache.ignite.internal.metastorage.impl.StandaloneMetaStorageManager;
 import org.apache.ignite.internal.metastorage.server.If;
 import 
org.apache.ignite.internal.metastorage.server.ReadOperationForCompactionTracker;
@@ -278,7 +277,14 @@ public class 
ItIgniteDistributionZoneManagerNodeRestartTest extends BaseIgniteRe
                 failureProcessor,
                 readOperationForCompactionTracker,
                 commonScheduledExecutorService
-        );
+        ) {
+            @Override
+            public void close() throws Exception {
+                assertThat(flush(), willCompleteSuccessfully());
+
+                super.close();
+            }
+        };
 
         var clock = new HybridClockImpl();
 
@@ -288,8 +294,6 @@ public class ItIgniteDistributionZoneManagerNodeRestartTest 
extends BaseIgniteRe
 
         blockMetaStorageUpdates(metastore);
 
-        var revisionUpdater = new 
MetaStorageRevisionListenerRegistry(metastore);
-
         var cfgStorage = new DistributedConfigurationStorage("test", 
metastore);
 
         ConfigurationTreeGenerator distributedConfigurationGenerator = new 
ConfigurationTreeGenerator(
diff --git 
a/modules/index/src/test/java/org/apache/ignite/internal/index/IndexAvailabilityControllerRestorerTest.java
 
b/modules/index/src/test/java/org/apache/ignite/internal/index/IndexAvailabilityControllerRestorerTest.java
index 7497f1f3a69..d80740ba8fd 100644
--- 
a/modules/index/src/test/java/org/apache/ignite/internal/index/IndexAvailabilityControllerRestorerTest.java
+++ 
b/modules/index/src/test/java/org/apache/ignite/internal/index/IndexAvailabilityControllerRestorerTest.java
@@ -60,7 +60,6 @@ import 
org.apache.ignite.internal.metastorage.impl.StandaloneMetaStorageManager;
 import org.apache.ignite.internal.metastorage.server.KeyValueStorage;
 import 
org.apache.ignite.internal.metastorage.server.ReadOperationForCompactionTracker;
 import 
org.apache.ignite.internal.metastorage.server.persistence.RocksDbKeyValueStorage;
-import org.apache.ignite.internal.network.ClusterService;
 import org.apache.ignite.internal.testframework.BaseIgniteAbstractTest;
 import org.apache.ignite.internal.testframework.ExecutorServiceExtension;
 import org.apache.ignite.internal.testframework.InjectExecutorService;
@@ -83,8 +82,6 @@ public class IndexAvailabilityControllerRestorerTest extends 
BaseIgniteAbstractT
 
     private final HybridClock clock = new HybridClockImpl();
 
-    private final ClusterService clusterService = mock(ClusterService.class);
-
     private KeyValueStorage keyValueStorage;
 
     private MetaStorageManagerImpl metaStorageManager;
@@ -221,6 +218,8 @@ public class IndexAvailabilityControllerRestorerTest 
extends BaseIgniteAbstractT
     private void stopAndRestartComponentsNoDeployWatches() throws Exception {
         awaitTillGlobalMetastoreRevisionIsApplied(metaStorageManager);
 
+        assertThat(keyValueStorage.flush(), willCompleteSuccessfully());
+
         ComponentContext componentContext = new ComponentContext();
         closeAll(
                 catalogManager == null ? null :
diff --git 
a/modules/metastorage/src/main/java/org/apache/ignite/internal/metastorage/server/persistence/RocksDbKeyValueStorage.java
 
b/modules/metastorage/src/main/java/org/apache/ignite/internal/metastorage/server/persistence/RocksDbKeyValueStorage.java
index c5c2f1f8f3a..a0dc16d9e5a 100644
--- 
a/modules/metastorage/src/main/java/org/apache/ignite/internal/metastorage/server/persistence/RocksDbKeyValueStorage.java
+++ 
b/modules/metastorage/src/main/java/org/apache/ignite/internal/metastorage/server/persistence/RocksDbKeyValueStorage.java
@@ -384,7 +384,9 @@ public class RocksDbKeyValueStorage extends 
AbstractKeyValueStorage {
                 .setAtomicFlush(true)
                 .setCreateMissingColumnFamilies(true)
                 .setListeners(List.of(flusher.listener()))
-                .setCreateIfMissing(true);
+                .setCreateIfMissing(true)
+                // Don't flush on shutdown to speed up node shutdown as on 
recovery we'll apply commands from log.
+                .setAvoidFlushDuringShutdown(true);
 
         rocksResources.add(options);
 
diff --git 
a/modules/metastorage/src/test/java/org/apache/ignite/internal/metastorage/server/RocksDbKeyValueStorageTest.java
 
b/modules/metastorage/src/test/java/org/apache/ignite/internal/metastorage/server/RocksDbKeyValueStorageTest.java
index 326d9a964e1..92a0475a780 100644
--- 
a/modules/metastorage/src/test/java/org/apache/ignite/internal/metastorage/server/RocksDbKeyValueStorageTest.java
+++ 
b/modules/metastorage/src/test/java/org/apache/ignite/internal/metastorage/server/RocksDbKeyValueStorageTest.java
@@ -85,17 +85,7 @@ public class RocksDbKeyValueStorageTest extends 
BasicOperationsKeyValueStorageTe
 
         long revisionBeforeRestart = storage.revision();
 
-        storage.close();
-
-        storage = new RocksDbKeyValueStorage(
-                NODE_NAME,
-                workDir.resolve("storage"),
-                new NoOpFailureManager(),
-                new ReadOperationForCompactionTracker(),
-                scheduledExecutorService
-        );
-
-        storage.start();
+        restartStorage();
 
         assertEquals(revisionBeforeRestart, storage.revision());
 
diff --git 
a/modules/metastorage/src/testFixtures/java/org/apache/ignite/internal/metastorage/server/AbstractKeyValueStorageTest.java
 
b/modules/metastorage/src/testFixtures/java/org/apache/ignite/internal/metastorage/server/AbstractKeyValueStorageTest.java
index fcc77384721..b5312eddf9d 100644
--- 
a/modules/metastorage/src/testFixtures/java/org/apache/ignite/internal/metastorage/server/AbstractKeyValueStorageTest.java
+++ 
b/modules/metastorage/src/testFixtures/java/org/apache/ignite/internal/metastorage/server/AbstractKeyValueStorageTest.java
@@ -18,6 +18,8 @@
 package org.apache.ignite.internal.metastorage.server;
 
 import static java.nio.charset.StandardCharsets.UTF_8;
+import static 
org.apache.ignite.internal.testframework.matchers.CompletableFutureMatcher.willCompleteSuccessfully;
+import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 
 import org.apache.ignite.internal.testframework.BaseIgniteAbstractTest;
@@ -56,6 +58,8 @@ public abstract class AbstractKeyValueStorageTest extends 
BaseIgniteAbstractTest
     protected void restartStorage() throws Exception {
         assertNotNull(storage);
 
+        assertThat(storage.flush(), willCompleteSuccessfully());
+
         storage.close();
 
         storage = createStorage();
diff --git 
a/modules/system-disaster-recovery/src/integrationTest/java/org/apache/ignite/internal/disaster/system/ItMetastorageGroupDisasterRecoveryTest.java
 
b/modules/system-disaster-recovery/src/integrationTest/java/org/apache/ignite/internal/disaster/system/ItMetastorageGroupDisasterRecoveryTest.java
index 5a5422b3a1e..6f25282cf74 100644
--- 
a/modules/system-disaster-recovery/src/integrationTest/java/org/apache/ignite/internal/disaster/system/ItMetastorageGroupDisasterRecoveryTest.java
+++ 
b/modules/system-disaster-recovery/src/integrationTest/java/org/apache/ignite/internal/disaster/system/ItMetastorageGroupDisasterRecoveryTest.java
@@ -328,7 +328,16 @@ class ItMetastorageGroupDisasterRecoveryTest extends 
ItSystemGroupDisasterRecove
         // have, Metastorage divergence will have to be detected.
         cluster.stopNode(0);
 
-        igniteImpl(1).metaStorageManager().put(new ByteArray("test-key"), new 
byte[]{42});
+        assertThat(
+                igniteImpl(1).metaStorageManager().put(new 
ByteArray("test-key"), new byte[]{42}),
+                willCompleteSuccessfully()
+        );
+
+        // Do an explicit storage flush to make sure the command has been 
applied.
+        assertThat(
+                ((MetaStorageManagerImpl) 
igniteImpl(1).metaStorageManager()).storage().flush(),
+                willCompleteSuccessfully()
+        );
 
         // This makes the MG majority go away.
         cluster.stopNode(1);
diff --git 
a/modules/table/src/test/java/org/apache/ignite/internal/table/distributed/TableManagerRecoveryTest.java
 
b/modules/table/src/test/java/org/apache/ignite/internal/table/distributed/TableManagerRecoveryTest.java
index 89eb454fd4d..ee428ec30b1 100644
--- 
a/modules/table/src/test/java/org/apache/ignite/internal/table/distributed/TableManagerRecoveryTest.java
+++ 
b/modules/table/src/test/java/org/apache/ignite/internal/table/distributed/TableManagerRecoveryTest.java
@@ -225,6 +225,8 @@ public class TableManagerRecoveryTest extends 
IgniteAbstractTest {
     private TestLowWatermark lowWatermark;
     private PartitionReplicaLifecycleManager partitionReplicaLifecycleManager;
 
+    private RocksDbKeyValueStorage keyValueStorage;
+
     private IndexMetaStorage indexMetaStorage;
 
     // Table internal components
@@ -263,8 +265,7 @@ public class TableManagerRecoveryTest extends 
IgniteAbstractTest {
 
         savedWatermark = clock.now();
 
-        stopComponents();
-        startComponents();
+        restartComponents();
 
         // Table below LWM shouldn't started.
         assertEquals(0, tableManager.startedTables().size());
@@ -289,8 +290,7 @@ public class TableManagerRecoveryTest extends 
IgniteAbstractTest {
         // Drop table.
         dropTable(TABLE_NAME);
 
-        stopComponents();
-        startComponents();
+        restartComponents();
 
         // Table is available after restart.
         assertThat(tableManager.startedTables().keySet(), contains(tableId));
@@ -306,8 +306,7 @@ public class TableManagerRecoveryTest extends 
IgniteAbstractTest {
 
         clearInvocations(mvTableStorage);
 
-        stopComponents();
-        startComponents();
+        restartComponents();
 
         // Table is available after restart.
         verify(mvTableStorage, 
timeout(WAIT_TIMEOUT).atLeastOnce()).createMvPartition(anyInt());
@@ -330,8 +329,7 @@ public class TableManagerRecoveryTest extends 
IgniteAbstractTest {
         verify(partitionReplicaLifecycleManager, times(defaultZonePartitions))
                 .loadTableListenerToZoneReplica(any(), anyInt(), any(), any(), 
any(), eq(false));
 
-        stopComponents();
-        startComponents();
+        restartComponents();
 
         // Verify that the listeners were loaded with the correct recovery 
flag value.
         verify(partitionReplicaLifecycleManager, times(defaultZonePartitions))
@@ -407,7 +405,7 @@ public class TableManagerRecoveryTest extends 
IgniteAbstractTest {
     private void startComponents() throws Exception {
         var readOperationForCompactionTracker = new 
ReadOperationForCompactionTracker();
 
-        var storage = new RocksDbKeyValueStorage(
+        keyValueStorage = new RocksDbKeyValueStorage(
                 NODE_NAME,
                 workDir,
                 new NoOpFailureManager(),
@@ -500,7 +498,7 @@ public class TableManagerRecoveryTest extends 
IgniteAbstractTest {
                     .thenReturn(assignment);
         }
 
-        metaStorageManager = StandaloneMetaStorageManager.create(storage, 
clock, readOperationForCompactionTracker);
+        metaStorageManager = 
StandaloneMetaStorageManager.create(keyValueStorage, clock, 
readOperationForCompactionTracker);
         catalogManager = createTestCatalogManager(NODE_NAME, clock, 
metaStorageManager);
 
         var revisionUpdater = new 
MetaStorageRevisionListenerRegistry(metaStorageManager);
@@ -657,6 +655,13 @@ public class TableManagerRecoveryTest extends 
IgniteAbstractTest {
         );
     }
 
+    private void restartComponents() throws Exception {
+        assertThat(keyValueStorage.flush(), willCompleteSuccessfully());
+
+        stopComponents();
+        startComponents();
+    }
+
     private DataStorageManager createDataStorageManager(MetricManager 
metricManager) {
         ConfigurationRegistry mockedRegistry = 
mock(ConfigurationRegistry.class);
 
diff --git 
a/modules/table/src/test/java/org/apache/ignite/internal/table/distributed/index/IndexMetaStorageRecoveryTest.java
 
b/modules/table/src/test/java/org/apache/ignite/internal/table/distributed/index/IndexMetaStorageRecoveryTest.java
index 0806076c96e..837f3539b5d 100644
--- 
a/modules/table/src/test/java/org/apache/ignite/internal/table/distributed/index/IndexMetaStorageRecoveryTest.java
+++ 
b/modules/table/src/test/java/org/apache/ignite/internal/table/distributed/index/IndexMetaStorageRecoveryTest.java
@@ -84,11 +84,13 @@ public class IndexMetaStorageRecoveryTest extends 
BaseIndexMetaStorageTest {
 
     private final TestUpdateHandlerInterceptor interceptor = new 
TestUpdateHandlerInterceptor();
 
+    private RocksDbKeyValueStorage keyValueStorage;
+
     @Override
     MetaStorageManager createMetastore() {
         var readOperationForCompactionTracker = new 
ReadOperationForCompactionTracker();
 
-        var keyValueStorage = new RocksDbKeyValueStorage(
+        keyValueStorage = new RocksDbKeyValueStorage(
                 NODE_NAME,
                 workDir,
                 new NoOpFailureManager(),
@@ -603,6 +605,8 @@ public class IndexMetaStorageRecoveryTest extends 
BaseIndexMetaStorageTest {
     }
 
     private void restartComponents(boolean updateLwmToTriggerDestruction) 
throws Exception {
+        assertThat(keyValueStorage.flush(), willCompleteSuccessfully());
+
         var componentContext = new ComponentContext();
 
         IgniteUtils.closeAll(

Reply via email to