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(