You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by tk...@apache.org on 2023/06/16 11:03:51 UTC

[ignite-3] branch main updated: IGNITE-19718 Move DataStorageConfigurationSchema#gcOnUpdateBatchSize to another place (#2204)

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

tkalkirill 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 36a04befa3 IGNITE-19718 Move DataStorageConfigurationSchema#gcOnUpdateBatchSize to another place (#2204)
36a04befa3 is described below

commit 36a04befa3810cead0670a2ef383d6c14d6bb722
Author: Kirill Tkalenko <tk...@yandex.ru>
AuthorDate: Fri Jun 16 14:03:46 2023 +0300

    IGNITE-19718 Move DataStorageConfigurationSchema#gcOnUpdateBatchSize to another place (#2204)
---
 .../repl/executor/ItIgnitePicocliCommandsTest.java |  4 +--
 .../storage/ItRebalanceDistributedTest.java        | 22 ++++++++++-----
 .../runner/app/ItIgniteNodeRestartTest.java        | 33 +++++++++++++---------
 .../org/apache/ignite/internal/app/IgniteImpl.java | 21 ++++++++------
 ...ationSchema.java => GcConfigurationSchema.java} | 28 +++++-------------
 .../SchemaDistributedConfigurationModule.java      |  5 +++-
 .../configuration/TablesConfigurationSchema.java   |  9 ------
 .../storage/DataStorageConfigurationSchema.java    |  6 ----
 .../sql/engine/exec/MockedStructuresTest.java      |  7 +++++
 .../ignite/distributed/ItTablePersistenceTest.java |  6 +++-
 .../distributed/ItTxDistributedTestSingleNode.java |  6 ++--
 .../table/distributed/StorageUpdateHandler.java    | 13 +++++----
 .../internal/table/distributed/TableManager.java   | 20 +++++++------
 .../ignite/internal/table/distributed/gc/MvGc.java | 14 ++++-----
 .../AbstractMvStorageUpdateHandlerTest.java        |  8 +++---
 .../internal/table/distributed/IndexBaseTest.java  |  6 ++--
 .../distributed/StorageUpdateHandlerTest.java      |  6 ++--
 .../table/distributed/TableManagerTest.java        |  7 +++++
 .../internal/table/distributed/gc/MvGcTest.java    | 18 ++++--------
 .../raft/PartitionCommandListenerTest.java         | 10 +++----
 .../PartitionReplicaListenerIndexLockingTest.java  |  6 ++--
 .../replication/PartitionReplicaListenerTest.java  |  6 ++--
 .../table/impl/DummyInternalTableImpl.java         |  8 +++---
 23 files changed, 137 insertions(+), 132 deletions(-)

diff --git a/modules/cli/src/integrationTest/java/org/apache/ignite/internal/cli/core/repl/executor/ItIgnitePicocliCommandsTest.java b/modules/cli/src/integrationTest/java/org/apache/ignite/internal/cli/core/repl/executor/ItIgnitePicocliCommandsTest.java
index 1c6702c0b0..e6e8f4d392 100644
--- a/modules/cli/src/integrationTest/java/org/apache/ignite/internal/cli/core/repl/executor/ItIgnitePicocliCommandsTest.java
+++ b/modules/cli/src/integrationTest/java/org/apache/ignite/internal/cli/core/repl/executor/ItIgnitePicocliCommandsTest.java
@@ -265,7 +265,7 @@ public class ItIgnitePicocliCommandsTest extends CliCommandTestInitializedIntegr
         // wait for lazy init of cluster config completer
         await("For given parsed words: " + givenParsedLine.words()).until(
                 () -> complete(givenParsedLine),
-                containsInAnyOrder("aimem", "aipersist", "metrics", "rocksDb", "table", "zone", "security", "schemaSync")
+                containsInAnyOrder("aimem", "aipersist", "metrics", "rocksDb", "table", "zone", "security", "schemaSync", "gc")
         );
     }
 
@@ -288,7 +288,7 @@ public class ItIgnitePicocliCommandsTest extends CliCommandTestInitializedIntegr
         // wait for lazy init of cluster config completer
         await("For given parsed words: " + givenParsedLine.words()).until(
                 () -> complete(givenParsedLine),
-                containsInAnyOrder("aimem", "aipersist", "metrics", "rocksDb", "table", "zone", "security", "schemaSync")
+                containsInAnyOrder("aimem", "aipersist", "metrics", "rocksDb", "table", "zone", "security", "schemaSync", "gc")
         );
     }
 
diff --git a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/configuration/storage/ItRebalanceDistributedTest.java b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/configuration/storage/ItRebalanceDistributedTest.java
index 1594f8f319..a51e9ac216 100644
--- a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/configuration/storage/ItRebalanceDistributedTest.java
+++ b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/configuration/storage/ItRebalanceDistributedTest.java
@@ -80,6 +80,7 @@ import org.apache.ignite.internal.cluster.management.raft.TestClusterStateStorag
 import org.apache.ignite.internal.cluster.management.topology.LogicalTopologyImpl;
 import org.apache.ignite.internal.cluster.management.topology.LogicalTopologyServiceImpl;
 import org.apache.ignite.internal.configuration.ConfigurationManager;
+import org.apache.ignite.internal.configuration.ConfigurationRegistry;
 import org.apache.ignite.internal.configuration.ConfigurationTreeGenerator;
 import org.apache.ignite.internal.configuration.testframework.ConfigurationExtension;
 import org.apache.ignite.internal.configuration.testframework.InjectConfiguration;
@@ -113,6 +114,7 @@ import org.apache.ignite.internal.rest.configuration.RestConfiguration;
 import org.apache.ignite.internal.schema.SchemaManager;
 import org.apache.ignite.internal.schema.configuration.ExtendedTableConfiguration;
 import org.apache.ignite.internal.schema.configuration.ExtendedTableConfigurationSchema;
+import org.apache.ignite.internal.schema.configuration.GcConfiguration;
 import org.apache.ignite.internal.schema.configuration.TablesConfiguration;
 import org.apache.ignite.internal.schema.configuration.defaultvalue.ConstantValueDefaultConfigurationSchema;
 import org.apache.ignite.internal.schema.configuration.defaultvalue.FunctionCallDefaultConfigurationSchema;
@@ -695,7 +697,8 @@ public class ItRebalanceDistributedTest {
                             PersistentPageMemoryStorageEngineConfiguration.KEY,
                             VolatilePageMemoryStorageEngineConfiguration.KEY,
                             TablesConfiguration.KEY,
-                            DistributionZonesConfiguration.KEY
+                            DistributionZonesConfiguration.KEY,
+                            GcConfiguration.KEY
                     ),
                     List.of(ExtendedTableConfigurationSchema.class),
                     List.of(
@@ -714,20 +717,24 @@ public class ItRebalanceDistributedTest {
                             PersistentPageMemoryStorageEngineConfiguration.KEY,
                             VolatilePageMemoryStorageEngineConfiguration.KEY,
                             TablesConfiguration.KEY,
-                            DistributionZonesConfiguration.KEY
+                            DistributionZonesConfiguration.KEY,
+                            GcConfiguration.KEY
                     ),
                     cfgStorage,
                     clusterCfgGenerator,
                     new TestConfigurationValidator()
             );
 
+            ConfigurationRegistry clusterConfigRegistry = clusterCfgMgr.configurationRegistry();
+
             Consumer<LongFunction<CompletableFuture<?>>> registry = (LongFunction<CompletableFuture<?>> function) ->
-                    clusterCfgMgr.configurationRegistry().listenUpdateStorageRevision(function::apply);
+                    clusterConfigRegistry.listenUpdateStorageRevision(function::apply);
+
+            TablesConfiguration tablesCfg = clusterConfigRegistry.getConfiguration(TablesConfiguration.KEY);
 
-            TablesConfiguration tablesCfg = clusterCfgMgr.configurationRegistry().getConfiguration(TablesConfiguration.KEY);
+            DistributionZonesConfiguration zonesCfg = clusterConfigRegistry.getConfiguration(DistributionZonesConfiguration.KEY);
 
-            DistributionZonesConfiguration zonesCfg =
-                    clusterCfgMgr.configurationRegistry().getConfiguration(DistributionZonesConfiguration.KEY);
+            GcConfiguration gcConfig = clusterConfigRegistry.getConfiguration(GcConfiguration.KEY);
 
             DataStorageModules dataStorageModules = new DataStorageModules(List.of(
                     new PersistentPageMemoryDataStorageModule(),
@@ -741,7 +748,7 @@ public class ItRebalanceDistributedTest {
                     zonesCfg,
                     dataStorageModules.createStorageEngines(
                             name,
-                            clusterCfgMgr.configurationRegistry(),
+                            clusterConfigRegistry,
                             dir.resolve("storage"),
                             null));
 
@@ -776,6 +783,7 @@ public class ItRebalanceDistributedTest {
                     registry,
                     tablesCfg,
                     zonesCfg,
+                    gcConfig,
                     clusterService,
                     raftManager,
                     replicaManager,
diff --git a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/ItIgniteNodeRestartTest.java b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/ItIgniteNodeRestartTest.java
index f8bb563339..bd23ff039c 100644
--- a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/ItIgniteNodeRestartTest.java
+++ b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/ItIgniteNodeRestartTest.java
@@ -69,6 +69,7 @@ import org.apache.ignite.internal.cluster.management.topology.LogicalTopologyImp
 import org.apache.ignite.internal.cluster.management.topology.LogicalTopologyServiceImpl;
 import org.apache.ignite.internal.configuration.ConfigurationManager;
 import org.apache.ignite.internal.configuration.ConfigurationModules;
+import org.apache.ignite.internal.configuration.ConfigurationRegistry;
 import org.apache.ignite.internal.configuration.ConfigurationTreeGenerator;
 import org.apache.ignite.internal.configuration.NodeConfigWriteException;
 import org.apache.ignite.internal.configuration.ServiceLoaderModulesProvider;
@@ -99,6 +100,7 @@ import org.apache.ignite.internal.recovery.RecoveryCompletionFutureFactory;
 import org.apache.ignite.internal.replicator.ReplicaManager;
 import org.apache.ignite.internal.replicator.ReplicaService;
 import org.apache.ignite.internal.schema.SchemaManager;
+import org.apache.ignite.internal.schema.configuration.GcConfiguration;
 import org.apache.ignite.internal.schema.configuration.TablesConfiguration;
 import org.apache.ignite.internal.sql.engine.SqlQueryProcessor;
 import org.apache.ignite.internal.storage.DataStorageManager;
@@ -355,35 +357,37 @@ public class ItIgniteNodeRestartTest extends IgniteAbstractTest {
                 ConfigurationValidatorImpl.withDefaultValidators(distributedConfigurationGenerator, modules.distributed().validators())
         );
 
-        Consumer<LongFunction<CompletableFuture<?>>> registry = (c) -> clusterCfgMgr.configurationRegistry()
-                .listenUpdateStorageRevision(c::apply);
+        ConfigurationRegistry clusterConfigRegistry = clusterCfgMgr.configurationRegistry();
+
+        Consumer<LongFunction<CompletableFuture<?>>> registry = (c) -> clusterConfigRegistry.listenUpdateStorageRevision(c::apply);
 
         DataStorageModules dataStorageModules = new DataStorageModules(ServiceLoader.load(DataStorageModule.class));
 
         Path storagePath = getPartitionsStorePath(dir);
 
+        DistributionZonesConfiguration zonesConfig = clusterConfigRegistry.getConfiguration(DistributionZonesConfiguration.KEY);
+
         DataStorageManager dataStorageManager = new DataStorageManager(
-                clusterCfgMgr.configurationRegistry().getConfiguration(DistributionZonesConfiguration.KEY),
+                zonesConfig,
                 dataStorageModules.createStorageEngines(
                         name,
-                        clusterCfgMgr.configurationRegistry(),
+                        clusterConfigRegistry,
                         storagePath,
                         null
                 )
         );
 
-        TablesConfiguration tablesConfiguration = clusterCfgMgr.configurationRegistry().getConfiguration(TablesConfiguration.KEY);
+        TablesConfiguration tablesConfig = clusterConfigRegistry.getConfiguration(TablesConfiguration.KEY);
 
-        DistributionZonesConfiguration zonesConfiguration = clusterCfgMgr.configurationRegistry()
-                .getConfiguration(DistributionZonesConfiguration.KEY);
+        GcConfiguration gcConfig = clusterConfigRegistry.getConfiguration(GcConfiguration.KEY);
 
-        SchemaManager schemaManager = new SchemaManager(registry, tablesConfiguration, metaStorageMgr);
+        SchemaManager schemaManager = new SchemaManager(registry, tablesConfig, metaStorageMgr);
 
         LogicalTopologyServiceImpl logicalTopologyService = new LogicalTopologyServiceImpl(logicalTopology, cmgManager);
 
         DistributionZoneManager distributionZoneManager = new DistributionZoneManager(
-                zonesConfiguration,
-                tablesConfiguration,
+                zonesConfig,
+                tablesConfig,
                 metaStorageMgr,
                 logicalTopologyService,
                 vault,
@@ -402,8 +406,9 @@ public class ItIgniteNodeRestartTest extends IgniteAbstractTest {
         TableManager tableManager = new TableManager(
                 name,
                 registry,
-                tablesConfiguration,
-                zonesConfiguration,
+                tablesConfig,
+                zonesConfig,
+                gcConfig,
                 clusterSvc,
                 raftMgr,
                 replicaMgr,
@@ -425,7 +430,7 @@ public class ItIgniteNodeRestartTest extends IgniteAbstractTest {
                 null
         );
 
-        var indexManager = new IndexManager(tablesConfiguration, schemaManager, tableManager);
+        var indexManager = new IndexManager(tablesConfig, schemaManager, tableManager);
 
         SqlQueryProcessor qryEngine = new SqlQueryProcessor(
                 registry,
@@ -497,7 +502,7 @@ public class ItIgniteNodeRestartTest extends IgniteAbstractTest {
 
         CompletableFuture<?> startFuture = CompletableFuture.allOf(
                 nodeCfgMgr.configurationRegistry().notifyCurrentConfigurationListeners(),
-                clusterCfgMgr.configurationRegistry().notifyCurrentConfigurationListeners()
+                clusterConfigRegistry.notifyCurrentConfigurationListeners()
         ).thenCompose(unused ->
                 // Deploy all registered watches because all components are ready and have registered their listeners.
                 CompletableFuture.allOf(metaStorageMgr.deployWatches(), configurationCatchUpFuture)
diff --git a/modules/runner/src/main/java/org/apache/ignite/internal/app/IgniteImpl.java b/modules/runner/src/main/java/org/apache/ignite/internal/app/IgniteImpl.java
index 91c329dcac..322252bfd5 100644
--- a/modules/runner/src/main/java/org/apache/ignite/internal/app/IgniteImpl.java
+++ b/modules/runner/src/main/java/org/apache/ignite/internal/app/IgniteImpl.java
@@ -112,6 +112,7 @@ import org.apache.ignite.internal.rest.deployment.CodeDeploymentRestFactory;
 import org.apache.ignite.internal.rest.metrics.MetricRestFactory;
 import org.apache.ignite.internal.rest.node.NodeManagementRestFactory;
 import org.apache.ignite.internal.schema.SchemaManager;
+import org.apache.ignite.internal.schema.configuration.GcConfiguration;
 import org.apache.ignite.internal.schema.configuration.TablesConfiguration;
 import org.apache.ignite.internal.security.authentication.AuthenticationManager;
 import org.apache.ignite.internal.security.authentication.AuthenticationManagerImpl;
@@ -424,7 +425,7 @@ public class IgniteImpl implements Ignite {
 
         ConfigurationRegistry clusterConfigRegistry = clusterCfgMgr.configurationRegistry();
 
-        TablesConfiguration tablesConfiguration = clusterConfigRegistry.getConfiguration(TablesConfiguration.KEY);
+        TablesConfiguration tablesConfig = clusterConfigRegistry.getConfiguration(TablesConfiguration.KEY);
 
         TopologyAwareRaftGroupServiceFactory topologyAwareRaftGroupServiceFactory = new TopologyAwareRaftGroupServiceFactory(
                 clusterSvc,
@@ -455,11 +456,12 @@ public class IgniteImpl implements Ignite {
 
         Path storagePath = getPartitionsStorePath(workDir);
 
-        DistributionZonesConfiguration distributionZonesConfiguration =
-                clusterConfigRegistry.getConfiguration(DistributionZonesConfiguration.KEY);
+        DistributionZonesConfiguration zonesConfig = clusterConfigRegistry.getConfiguration(DistributionZonesConfiguration.KEY);
+
+        GcConfiguration gcConfig = clusterConfigRegistry.getConfiguration(GcConfiguration.KEY);
 
         dataStorageMgr = new DataStorageManager(
-                distributionZonesConfiguration,
+                zonesConfig,
                 dataStorageModules.createStorageEngines(
                         name,
                         clusterConfigRegistry,
@@ -468,11 +470,11 @@ public class IgniteImpl implements Ignite {
                 )
         );
 
-        schemaManager = new SchemaManager(registry, tablesConfiguration, metaStorageMgr);
+        schemaManager = new SchemaManager(registry, tablesConfig, metaStorageMgr);
 
         distributionZoneManager = new DistributionZoneManager(
                 zonesConfiguration,
-                tablesConfiguration,
+                tablesConfig,
                 metaStorageMgr,
                 logicalTopologyService,
                 vaultMgr,
@@ -488,8 +490,9 @@ public class IgniteImpl implements Ignite {
         distributedTblMgr = new TableManager(
                 name,
                 registry,
-                tablesConfiguration,
-                distributionZonesConfiguration,
+                tablesConfig,
+                zonesConfig,
+                gcConfig,
                 clusterSvc,
                 raftMgr,
                 replicaMgr,
@@ -511,7 +514,7 @@ public class IgniteImpl implements Ignite {
                 distributionZoneManager
         );
 
-        indexManager = new IndexManager(tablesConfiguration, schemaManager, distributedTblMgr);
+        indexManager = new IndexManager(tablesConfig, schemaManager, distributedTblMgr);
 
         qryEngine = new SqlQueryProcessor(
                 registry,
diff --git a/modules/schema/src/main/java/org/apache/ignite/internal/schema/configuration/TablesConfigurationSchema.java b/modules/schema/src/main/java/org/apache/ignite/internal/schema/configuration/GcConfigurationSchema.java
similarity index 59%
copy from modules/schema/src/main/java/org/apache/ignite/internal/schema/configuration/TablesConfigurationSchema.java
copy to modules/schema/src/main/java/org/apache/ignite/internal/schema/configuration/GcConfigurationSchema.java
index 3d32831925..6b25cd8656 100644
--- a/modules/schema/src/main/java/org/apache/ignite/internal/schema/configuration/TablesConfigurationSchema.java
+++ b/modules/schema/src/main/java/org/apache/ignite/internal/schema/configuration/GcConfigurationSchema.java
@@ -20,34 +20,20 @@ package org.apache.ignite.internal.schema.configuration;
 import org.apache.ignite.configuration.annotation.ConfigValue;
 import org.apache.ignite.configuration.annotation.ConfigurationRoot;
 import org.apache.ignite.configuration.annotation.ConfigurationType;
-import org.apache.ignite.configuration.annotation.NamedConfigValue;
 import org.apache.ignite.configuration.annotation.Value;
-import org.apache.ignite.internal.schema.configuration.index.IndexValidator;
-import org.apache.ignite.internal.schema.configuration.index.TableIndexConfigurationSchema;
 
 /**
- * Tables configuration schema.
+ * Garbage collector configuration schema.
  */
-@SuppressWarnings("PMD.UnusedPrivateField")
-@ConfigurationRoot(rootName = "table", type = ConfigurationType.DISTRIBUTED)
-public class TablesConfigurationSchema {
-    /** Global integer id counter. Used as an auto-increment counter to generate integer identifiers for table. */
+@ConfigurationRoot(rootName = "gc", type = ConfigurationType.DISTRIBUTED)
+public class GcConfigurationSchema {
+    /** Number of garbage collector threads. */
     @Value(hasDefault = true)
-    public int globalIdCounter = 0;
-
-    /** List of configured tables. */
-    @NamedConfigValue
-    @TableValidator
-    public TableConfigurationSchema tables;
+    public int threads = Runtime.getRuntime().availableProcessors();
 
-    /** List of configured indexes. */
-    @NamedConfigValue
-    @IndexValidator
-    public TableIndexConfigurationSchema indexes;
-
-    /** Number of garbage collector threads. */
+    /** The number of entries in the storage to be garbage collected during a storage update operation. */
     @Value(hasDefault = true)
-    public int gcThreads = Runtime.getRuntime().availableProcessors();
+    public int onUpdateBatchSize = 5;
 
     /** Low watermark configuration. */
     @ConfigValue
diff --git a/modules/schema/src/main/java/org/apache/ignite/internal/schema/configuration/SchemaDistributedConfigurationModule.java b/modules/schema/src/main/java/org/apache/ignite/internal/schema/configuration/SchemaDistributedConfigurationModule.java
index b7b54b6212..5bc1f2b6ae 100644
--- a/modules/schema/src/main/java/org/apache/ignite/internal/schema/configuration/SchemaDistributedConfigurationModule.java
+++ b/modules/schema/src/main/java/org/apache/ignite/internal/schema/configuration/SchemaDistributedConfigurationModule.java
@@ -44,7 +44,10 @@ public class SchemaDistributedConfigurationModule implements ConfigurationModule
 
     @Override
     public Collection<RootKey<?, ?>> rootKeys() {
-        return List.of(TablesConfiguration.KEY);
+        return List.of(
+                TablesConfiguration.KEY,
+                GcConfiguration.KEY
+        );
     }
 
     @Override
diff --git a/modules/schema/src/main/java/org/apache/ignite/internal/schema/configuration/TablesConfigurationSchema.java b/modules/schema/src/main/java/org/apache/ignite/internal/schema/configuration/TablesConfigurationSchema.java
index 3d32831925..cfcc0b7f00 100644
--- a/modules/schema/src/main/java/org/apache/ignite/internal/schema/configuration/TablesConfigurationSchema.java
+++ b/modules/schema/src/main/java/org/apache/ignite/internal/schema/configuration/TablesConfigurationSchema.java
@@ -17,7 +17,6 @@
 
 package org.apache.ignite.internal.schema.configuration;
 
-import org.apache.ignite.configuration.annotation.ConfigValue;
 import org.apache.ignite.configuration.annotation.ConfigurationRoot;
 import org.apache.ignite.configuration.annotation.ConfigurationType;
 import org.apache.ignite.configuration.annotation.NamedConfigValue;
@@ -44,12 +43,4 @@ public class TablesConfigurationSchema {
     @NamedConfigValue
     @IndexValidator
     public TableIndexConfigurationSchema indexes;
-
-    /** Number of garbage collector threads. */
-    @Value(hasDefault = true)
-    public int gcThreads = Runtime.getRuntime().availableProcessors();
-
-    /** Low watermark configuration. */
-    @ConfigValue
-    public LowWatermarkConfigurationSchema lowWatermark;
 }
diff --git a/modules/schema/src/main/java/org/apache/ignite/internal/schema/configuration/storage/DataStorageConfigurationSchema.java b/modules/schema/src/main/java/org/apache/ignite/internal/schema/configuration/storage/DataStorageConfigurationSchema.java
index 70149208ed..9a70bc8288 100644
--- a/modules/schema/src/main/java/org/apache/ignite/internal/schema/configuration/storage/DataStorageConfigurationSchema.java
+++ b/modules/schema/src/main/java/org/apache/ignite/internal/schema/configuration/storage/DataStorageConfigurationSchema.java
@@ -19,7 +19,6 @@ package org.apache.ignite.internal.schema.configuration.storage;
 
 import org.apache.ignite.configuration.annotation.PolymorphicConfig;
 import org.apache.ignite.configuration.annotation.PolymorphicId;
-import org.apache.ignite.configuration.annotation.Value;
 
 /**
  * Configuration schema for data storage.
@@ -29,9 +28,4 @@ public class DataStorageConfigurationSchema {
     /** Name of data storage. */
     @PolymorphicId(hasDefault = true)
     public String name = "aipersist";
-
-    /** The number of entries in the storage to be garbage collected during a storage update operation. */
-    @Value(hasDefault = true)
-    // TODO: IGNITE-19718 Need to move somewhere
-    public int gcOnUpdateBatchSize = 5;
 }
diff --git a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/MockedStructuresTest.java b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/MockedStructuresTest.java
index 530e18609c..773393d6db 100644
--- a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/MockedStructuresTest.java
+++ b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/exec/MockedStructuresTest.java
@@ -69,6 +69,7 @@ import org.apache.ignite.internal.replicator.ReplicaService;
 import org.apache.ignite.internal.schema.SchemaDescriptor;
 import org.apache.ignite.internal.schema.SchemaManager;
 import org.apache.ignite.internal.schema.SchemaUtils;
+import org.apache.ignite.internal.schema.configuration.GcConfiguration;
 import org.apache.ignite.internal.schema.configuration.TableView;
 import org.apache.ignite.internal.schema.configuration.TablesConfiguration;
 import org.apache.ignite.internal.sql.engine.AsyncCursor.BatchedResult;
@@ -181,9 +182,14 @@ public class MockedStructuresTest extends IgniteAbstractTest {
     @InjectConfiguration
     private TablesConfiguration tblsCfg;
 
+    /** Distribution zones configuration. */
     @InjectConfiguration("mock.distributionZones." + ZONE_NAME + "{dataStorage.name = " + ENGINE_NAME + ", zoneId = " + ZONE_ID + "}")
     private DistributionZonesConfiguration dstZnsCfg;
 
+    /** Garbage collector configuration. */
+    @InjectConfiguration
+    private GcConfiguration gcConfig;
+
     TableManager tblManager;
 
     IndexManager idxManager;
@@ -567,6 +573,7 @@ public class MockedStructuresTest extends IgniteAbstractTest {
                 revisionUpdater,
                 tblsCfg,
                 dstZnsCfg,
+                gcConfig,
                 cs,
                 rm,
                 replicaManager,
diff --git a/modules/table/src/integrationTest/java/org/apache/ignite/distributed/ItTablePersistenceTest.java b/modules/table/src/integrationTest/java/org/apache/ignite/distributed/ItTablePersistenceTest.java
index a489ebb422..4242179de6 100644
--- a/modules/table/src/integrationTest/java/org/apache/ignite/distributed/ItTablePersistenceTest.java
+++ b/modules/table/src/integrationTest/java/org/apache/ignite/distributed/ItTablePersistenceTest.java
@@ -59,6 +59,7 @@ import org.apache.ignite.internal.schema.BinaryRow;
 import org.apache.ignite.internal.schema.Column;
 import org.apache.ignite.internal.schema.NativeTypes;
 import org.apache.ignite.internal.schema.SchemaDescriptor;
+import org.apache.ignite.internal.schema.configuration.GcConfiguration;
 import org.apache.ignite.internal.schema.configuration.TablesConfiguration;
 import org.apache.ignite.internal.schema.row.Row;
 import org.apache.ignite.internal.schema.row.RowAssembler;
@@ -117,6 +118,9 @@ public class ItTablePersistenceTest extends ItAbstractListenerSnapshotTest<Parti
     @InjectConfiguration("mock.partitions = 1")
     private DistributionZoneConfiguration zoneCfg;
 
+    @InjectConfiguration
+    private GcConfiguration gcConfig;
+
     @InjectConfiguration("mock {flushDelayMillis = 0, defaultRegion {size = 16777216, writeBufferSize = 16777216}}")
     private RocksDbStorageEngineConfiguration engineConfig;
 
@@ -387,7 +391,7 @@ public class ItTablePersistenceTest extends ItAbstractListenerSnapshotTest<Parti
                     StorageUpdateHandler storageUpdateHandler = new StorageUpdateHandler(
                             0,
                             partitionDataStorage,
-                            zoneCfg.dataStorage(),
+                            gcConfig,
                             mock(LowWatermark.class),
                             indexUpdateHandler,
                             new GcUpdateHandler(partitionDataStorage, safeTime, indexUpdateHandler)
diff --git a/modules/table/src/integrationTest/java/org/apache/ignite/distributed/ItTxDistributedTestSingleNode.java b/modules/table/src/integrationTest/java/org/apache/ignite/distributed/ItTxDistributedTestSingleNode.java
index 987667023e..14623ee957 100644
--- a/modules/table/src/integrationTest/java/org/apache/ignite/distributed/ItTxDistributedTestSingleNode.java
+++ b/modules/table/src/integrationTest/java/org/apache/ignite/distributed/ItTxDistributedTestSingleNode.java
@@ -76,8 +76,8 @@ import org.apache.ignite.internal.schema.BinaryRow;
 import org.apache.ignite.internal.schema.BinaryRowConverter;
 import org.apache.ignite.internal.schema.BinaryTuple;
 import org.apache.ignite.internal.schema.SchemaDescriptor;
+import org.apache.ignite.internal.schema.configuration.GcConfiguration;
 import org.apache.ignite.internal.schema.configuration.TablesConfiguration;
-import org.apache.ignite.internal.schema.configuration.storage.DataStorageConfiguration;
 import org.apache.ignite.internal.storage.MvPartitionStorage;
 import org.apache.ignite.internal.storage.engine.MvTableStorage;
 import org.apache.ignite.internal.storage.impl.TestMvPartitionStorage;
@@ -143,7 +143,7 @@ public class ItTxDistributedTestSingleNode extends TxAbstractTest {
     private static RaftConfiguration raftConfiguration;
 
     @InjectConfiguration
-    private static DataStorageConfiguration dsCfg;
+    private static GcConfiguration gcConfig;
 
     @InjectConfiguration("mock.tables.foo {}")
     private static TablesConfiguration tablesConfig;
@@ -471,7 +471,7 @@ public class ItTxDistributedTestSingleNode extends TxAbstractTest {
                 StorageUpdateHandler storageUpdateHandler = new StorageUpdateHandler(
                         partId,
                         partitionDataStorage,
-                        dsCfg,
+                        gcConfig,
                         mock(LowWatermark.class),
                         indexUpdateHandler,
                         new GcUpdateHandler(partitionDataStorage, safeTime, indexUpdateHandler)
diff --git a/modules/table/src/main/java/org/apache/ignite/internal/table/distributed/StorageUpdateHandler.java b/modules/table/src/main/java/org/apache/ignite/internal/table/distributed/StorageUpdateHandler.java
index 187faeaa38..9da8aaf775 100644
--- a/modules/table/src/main/java/org/apache/ignite/internal/table/distributed/StorageUpdateHandler.java
+++ b/modules/table/src/main/java/org/apache/ignite/internal/table/distributed/StorageUpdateHandler.java
@@ -33,7 +33,7 @@ import org.apache.ignite.internal.hlc.HybridTimestamp;
 import org.apache.ignite.internal.replicator.TablePartitionId;
 import org.apache.ignite.internal.schema.BinaryRow;
 import org.apache.ignite.internal.schema.ByteBufferRow;
-import org.apache.ignite.internal.schema.configuration.storage.DataStorageConfiguration;
+import org.apache.ignite.internal.schema.configuration.GcConfiguration;
 import org.apache.ignite.internal.storage.ReadResult;
 import org.apache.ignite.internal.storage.RowId;
 import org.apache.ignite.internal.table.distributed.gc.GcUpdateHandler;
@@ -52,7 +52,8 @@ public class StorageUpdateHandler {
     /** Partition storage with access to MV data of a partition. */
     private final PartitionDataStorage storage;
 
-    private final DataStorageConfiguration dsCfg;
+    /** Garbage collector configuration. */
+    private final GcConfiguration gcConfig;
 
     /** Low watermark. */
     private final LowWatermark lowWatermark;
@@ -68,21 +69,21 @@ public class StorageUpdateHandler {
      *
      * @param partitionId Partition id.
      * @param storage Partition data storage.
-     * @param dsCfg Data storage configuration.
+     * @param gcConfig Garbage collector configuration.
      * @param indexUpdateHandler Partition index update handler.
      * @param gcUpdateHandler Partition gc update handler.
      */
     public StorageUpdateHandler(
             int partitionId,
             PartitionDataStorage storage,
-            DataStorageConfiguration dsCfg,
+            GcConfiguration gcConfig,
             LowWatermark lowWatermark,
             IndexUpdateHandler indexUpdateHandler,
             GcUpdateHandler gcUpdateHandler
     ) {
         this.partitionId = partitionId;
         this.storage = storage;
-        this.dsCfg = dsCfg;
+        this.gcConfig = gcConfig;
         this.lowWatermark = lowWatermark;
         this.indexUpdateHandler = indexUpdateHandler;
         this.gcUpdateHandler = gcUpdateHandler;
@@ -201,7 +202,7 @@ public class StorageUpdateHandler {
             return;
         }
 
-        gcUpdateHandler.vacuumBatch(lwm, dsCfg.gcOnUpdateBatchSize().value());
+        gcUpdateHandler.vacuumBatch(lwm, gcConfig.onUpdateBatchSize().value());
     }
 
     /**
diff --git a/modules/table/src/main/java/org/apache/ignite/internal/table/distributed/TableManager.java b/modules/table/src/main/java/org/apache/ignite/internal/table/distributed/TableManager.java
index c392d7a019..3534b34311 100644
--- a/modules/table/src/main/java/org/apache/ignite/internal/table/distributed/TableManager.java
+++ b/modules/table/src/main/java/org/apache/ignite/internal/table/distributed/TableManager.java
@@ -128,12 +128,12 @@ import org.apache.ignite.internal.replicator.ReplicaService;
 import org.apache.ignite.internal.replicator.TablePartitionId;
 import org.apache.ignite.internal.schema.SchemaManager;
 import org.apache.ignite.internal.schema.configuration.ExtendedTableChange;
+import org.apache.ignite.internal.schema.configuration.GcConfiguration;
 import org.apache.ignite.internal.schema.configuration.TableChange;
 import org.apache.ignite.internal.schema.configuration.TableConfiguration;
 import org.apache.ignite.internal.schema.configuration.TableView;
 import org.apache.ignite.internal.schema.configuration.TablesConfiguration;
 import org.apache.ignite.internal.schema.configuration.index.TableIndexView;
-import org.apache.ignite.internal.schema.configuration.storage.DataStorageConfiguration;
 import org.apache.ignite.internal.schema.event.SchemaEvent;
 import org.apache.ignite.internal.schema.event.SchemaEventParameters;
 import org.apache.ignite.internal.storage.DataStorageManager;
@@ -232,6 +232,9 @@ public class TableManager extends Producer<TableEvent, TableEventParameters> imp
     /** Distribution zones configuration. */
     private final DistributionZonesConfiguration zonesConfig;
 
+    /** Garbage collector configuration. */
+    private final GcConfiguration gcConfig;
+
     private final ClusterService clusterService;
 
     /** Raft manager. */
@@ -368,6 +371,8 @@ public class TableManager extends Producer<TableEvent, TableEventParameters> imp
      * @param nodeName Node name.
      * @param registry Registry for versioned values.
      * @param tablesCfg Tables configuration.
+     * @param zonesConfig Distribution zones configuration.
+     * @param gcConfig Garbage collector configuration.
      * @param raftMgr Raft manager.
      * @param replicaMgr Replica manager.
      * @param lockMgr Lock manager.
@@ -386,6 +391,7 @@ public class TableManager extends Producer<TableEvent, TableEventParameters> imp
             Consumer<LongFunction<CompletableFuture<?>>> registry,
             TablesConfiguration tablesCfg,
             DistributionZonesConfiguration zonesConfig,
+            GcConfiguration gcConfig,
             ClusterService clusterService,
             RaftManager raftMgr,
             ReplicaManager replicaMgr,
@@ -408,6 +414,7 @@ public class TableManager extends Producer<TableEvent, TableEventParameters> imp
     ) {
         this.tablesCfg = tablesCfg;
         this.zonesConfig = zonesConfig;
+        this.gcConfig = gcConfig;
         this.clusterService = clusterService;
         this.raftMgr = raftMgr;
         this.baselineMgr = baselineMgr;
@@ -474,9 +481,9 @@ public class TableManager extends Producer<TableEvent, TableEventParameters> imp
 
         assignmentsSwitchRebalanceListener = createAssignmentsSwitchRebalanceListener();
 
-        mvGc = new MvGc(nodeName, tablesCfg);
+        mvGc = new MvGc(nodeName, gcConfig);
 
-        lowWatermark = new LowWatermark(nodeName, tablesCfg.lowWatermark(), clock, txManager, vaultManager, mvGc);
+        lowWatermark = new LowWatermark(nodeName, gcConfig.lowWatermark(), clock, txManager, vaultManager, mvGc);
 
         indexBuilder = new IndexBuilder(nodeName, cpus);
     }
@@ -748,7 +755,6 @@ public class TableManager extends Producer<TableEvent, TableEventParameters> imp
                         partId,
                         partitionDataStorage,
                         table,
-                        getZoneById(zonesConfig, zoneId).dataStorage(),
                         safeTimeTracker
                 );
 
@@ -2121,8 +2127,6 @@ public class TableManager extends Producer<TableEvent, TableEventParameters> imp
 
         PeersAndLearners pendingConfiguration = configurationFromAssignments(pendingAssignments);
 
-        CatalogTableDescriptor tableDescriptor = getTableDescriptor(tbl.tableId());
-
         int tableId = tbl.tableId();
         int partId = replicaGrpId.partitionId();
 
@@ -2179,7 +2183,6 @@ public class TableManager extends Producer<TableEvent, TableEventParameters> imp
                         partId,
                         partitionDataStorage,
                         tbl,
-                        getZoneById(zonesConfig, tableDescriptor.zoneId()).dataStorage(),
                         safeTimeTracker
                 );
 
@@ -2575,7 +2578,6 @@ public class TableManager extends Producer<TableEvent, TableEventParameters> imp
             int partitionId,
             PartitionDataStorage partitionDataStorage,
             TableImpl table,
-            DataStorageConfiguration dsCfg,
             PendingComparableValuesTracker<HybridTimestamp, Void> safeTimeTracker
     ) {
         TableIndexStoragesSupplier indexes = table.indexStorageAdapters(partitionId);
@@ -2587,7 +2589,7 @@ public class TableManager extends Producer<TableEvent, TableEventParameters> imp
         StorageUpdateHandler storageUpdateHandler = new StorageUpdateHandler(
                 partitionId,
                 partitionDataStorage,
-                dsCfg,
+                gcConfig,
                 lowWatermark,
                 indexUpdateHandler,
                 gcUpdateHandler
diff --git a/modules/table/src/main/java/org/apache/ignite/internal/table/distributed/gc/MvGc.java b/modules/table/src/main/java/org/apache/ignite/internal/table/distributed/gc/MvGc.java
index eef28b85bb..4840827a59 100644
--- a/modules/table/src/main/java/org/apache/ignite/internal/table/distributed/gc/MvGc.java
+++ b/modules/table/src/main/java/org/apache/ignite/internal/table/distributed/gc/MvGc.java
@@ -36,7 +36,7 @@ import org.apache.ignite.internal.hlc.HybridTimestamp;
 import org.apache.ignite.internal.logger.IgniteLogger;
 import org.apache.ignite.internal.logger.Loggers;
 import org.apache.ignite.internal.replicator.TablePartitionId;
-import org.apache.ignite.internal.schema.configuration.TablesConfiguration;
+import org.apache.ignite.internal.schema.configuration.GcConfiguration;
 import org.apache.ignite.internal.thread.NamedThreadFactory;
 import org.apache.ignite.internal.util.IgniteSpinBusyLock;
 import org.apache.ignite.internal.util.TrackerClosedException;
@@ -58,8 +58,8 @@ public class MvGc implements ManuallyCloseable {
     /** Node name. */
     private final String nodeName;
 
-    /** Tables configuration. */
-    private final TablesConfiguration tablesConfig;
+    /** Garbage collector configuration. */
+    private final GcConfiguration gcConfig;
 
     /** Garbage collection thread pool. */
     private volatile ExecutorService executor;
@@ -80,18 +80,18 @@ public class MvGc implements ManuallyCloseable {
      * Constructor.
      *
      * @param nodeName Node name.
-     * @param tablesConfig Tables configuration.
+     * @param gcConfig Garbage collector configuration.
      */
-    public MvGc(String nodeName, TablesConfiguration tablesConfig) {
+    public MvGc(String nodeName, GcConfiguration gcConfig) {
         this.nodeName = nodeName;
-        this.tablesConfig = tablesConfig;
+        this.gcConfig = gcConfig;
     }
 
     /**
      * Starts the garbage collector.
      */
     public void start() {
-        int threadCount = tablesConfig.gcThreads().value();
+        int threadCount = gcConfig.threads().value();
 
         executor = new ThreadPoolExecutor(
                 threadCount,
diff --git a/modules/table/src/test/java/org/apache/ignite/internal/table/distributed/AbstractMvStorageUpdateHandlerTest.java b/modules/table/src/test/java/org/apache/ignite/internal/table/distributed/AbstractMvStorageUpdateHandlerTest.java
index 5f3593b5cf..6e56bcbf98 100644
--- a/modules/table/src/test/java/org/apache/ignite/internal/table/distributed/AbstractMvStorageUpdateHandlerTest.java
+++ b/modules/table/src/test/java/org/apache/ignite/internal/table/distributed/AbstractMvStorageUpdateHandlerTest.java
@@ -28,9 +28,9 @@ import java.util.UUID;
 import org.apache.ignite.distributed.TestPartitionDataStorage;
 import org.apache.ignite.internal.configuration.testframework.ConfigurationExtension;
 import org.apache.ignite.internal.configuration.testframework.InjectConfiguration;
-import org.apache.ignite.internal.distributionzones.configuration.DistributionZoneConfiguration;
 import org.apache.ignite.internal.hlc.HybridTimestamp;
 import org.apache.ignite.internal.schema.BinaryRow;
+import org.apache.ignite.internal.schema.configuration.GcConfiguration;
 import org.apache.ignite.internal.storage.BaseMvStoragesTest;
 import org.apache.ignite.internal.storage.MvPartitionStorage;
 import org.apache.ignite.internal.storage.RowId;
@@ -66,7 +66,7 @@ abstract class AbstractMvStorageUpdateHandlerTest extends BaseMvStoragesTest {
     private LowWatermark lowWatermark;
 
     @InjectConfiguration
-    private DistributionZoneConfiguration distributionZoneConfig;
+    private GcConfiguration gcConfig;
 
     /**
      * Initializes the internal structures needed for tests.
@@ -83,7 +83,7 @@ abstract class AbstractMvStorageUpdateHandlerTest extends BaseMvStoragesTest {
         storageUpdateHandler = new StorageUpdateHandler(
                 PARTITION_ID,
                 partitionDataStorage,
-                distributionZoneConfig.dataStorage(),
+                gcConfig,
                 lowWatermark,
                 indexUpdateHandler,
                 new GcUpdateHandler(
@@ -96,7 +96,7 @@ abstract class AbstractMvStorageUpdateHandlerTest extends BaseMvStoragesTest {
 
     @Test
     void testConcurrentExecuteBatchGc() {
-        assertThat(distributionZoneConfig.dataStorage().gcOnUpdateBatchSize().update(4), willSucceedFast());
+        assertThat(gcConfig.onUpdateBatchSize().update(4), willSucceedFast());
 
         when(lowWatermark.getLowWatermark()).thenReturn(HybridTimestamp.MAX_VALUE);
 
diff --git a/modules/table/src/test/java/org/apache/ignite/internal/table/distributed/IndexBaseTest.java b/modules/table/src/test/java/org/apache/ignite/internal/table/distributed/IndexBaseTest.java
index 52796e3dd6..e5eb1e768b 100644
--- a/modules/table/src/test/java/org/apache/ignite/internal/table/distributed/IndexBaseTest.java
+++ b/modules/table/src/test/java/org/apache/ignite/internal/table/distributed/IndexBaseTest.java
@@ -34,7 +34,7 @@ import org.apache.ignite.internal.schema.BinaryRowConverter;
 import org.apache.ignite.internal.schema.BinaryTuple;
 import org.apache.ignite.internal.schema.BinaryTupleSchema;
 import org.apache.ignite.internal.schema.NativeTypes;
-import org.apache.ignite.internal.schema.configuration.storage.DataStorageConfiguration;
+import org.apache.ignite.internal.schema.configuration.GcConfiguration;
 import org.apache.ignite.internal.storage.BaseMvStoragesTest;
 import org.apache.ignite.internal.storage.ReadResult;
 import org.apache.ignite.internal.storage.RowId;
@@ -88,7 +88,7 @@ public abstract class IndexBaseTest extends BaseMvStoragesTest {
     GcUpdateHandler gcUpdateHandler;
 
     @BeforeEach
-    void setUp(@InjectConfiguration DataStorageConfiguration dsCfg) {
+    void setUp(@InjectConfiguration GcConfiguration gcConfig) {
         int pkIndexId = 1;
         int sortedIndexId = 2;
         int hashIndexId = 3;
@@ -144,7 +144,7 @@ public abstract class IndexBaseTest extends BaseMvStoragesTest {
         storageUpdateHandler = new StorageUpdateHandler(
                 PARTITION_ID,
                 partitionDataStorage,
-                dsCfg,
+                gcConfig,
                 mock(LowWatermark.class),
                 indexUpdateHandler,
                 gcUpdateHandler
diff --git a/modules/table/src/test/java/org/apache/ignite/internal/table/distributed/StorageUpdateHandlerTest.java b/modules/table/src/test/java/org/apache/ignite/internal/table/distributed/StorageUpdateHandlerTest.java
index 54ff39b19f..0a0ce0ee33 100644
--- a/modules/table/src/test/java/org/apache/ignite/internal/table/distributed/StorageUpdateHandlerTest.java
+++ b/modules/table/src/test/java/org/apache/ignite/internal/table/distributed/StorageUpdateHandlerTest.java
@@ -33,7 +33,7 @@ import org.apache.ignite.internal.configuration.testframework.ConfigurationExten
 import org.apache.ignite.internal.configuration.testframework.InjectConfiguration;
 import org.apache.ignite.internal.hlc.HybridTimestamp;
 import org.apache.ignite.internal.replicator.TablePartitionId;
-import org.apache.ignite.internal.schema.configuration.storage.DataStorageConfiguration;
+import org.apache.ignite.internal.schema.configuration.GcConfiguration;
 import org.apache.ignite.internal.storage.impl.TestMvPartitionStorage;
 import org.apache.ignite.internal.table.distributed.gc.GcUpdateHandler;
 import org.apache.ignite.internal.table.distributed.index.IndexUpdateHandler;
@@ -50,7 +50,7 @@ public class StorageUpdateHandlerTest {
     private static final int PARTITION_ID = 0;
 
     @InjectConfiguration
-    private DataStorageConfiguration dataStorageConfig;
+    private GcConfiguration gcConfig;
 
     private final PendingComparableValuesTracker<HybridTimestamp, Void> safeTimeTracker = spy(new PendingComparableValuesTracker<>(
             new HybridTimestamp(1, 0)
@@ -143,7 +143,7 @@ public class StorageUpdateHandlerTest {
         return new StorageUpdateHandler(
                 PARTITION_ID,
                 partitionStorage,
-                dataStorageConfig,
+                gcConfig,
                 lowWatermark,
                 indexUpdateHandler,
                 new GcUpdateHandler(partitionStorage, safeTimeTracker, indexUpdateHandler)
diff --git a/modules/table/src/test/java/org/apache/ignite/internal/table/distributed/TableManagerTest.java b/modules/table/src/test/java/org/apache/ignite/internal/table/distributed/TableManagerTest.java
index d9ac117a58..b52e6688b6 100644
--- a/modules/table/src/test/java/org/apache/ignite/internal/table/distributed/TableManagerTest.java
+++ b/modules/table/src/test/java/org/apache/ignite/internal/table/distributed/TableManagerTest.java
@@ -92,6 +92,7 @@ import org.apache.ignite.internal.schema.SchemaDescriptor;
 import org.apache.ignite.internal.schema.SchemaManager;
 import org.apache.ignite.internal.schema.SchemaUtils;
 import org.apache.ignite.internal.schema.configuration.ExtendedTableChange;
+import org.apache.ignite.internal.schema.configuration.GcConfiguration;
 import org.apache.ignite.internal.schema.configuration.TableChange;
 import org.apache.ignite.internal.schema.configuration.TableView;
 import org.apache.ignite.internal.schema.configuration.TablesConfiguration;
@@ -217,9 +218,14 @@ public class TableManagerTest extends IgniteAbstractTest {
     @InjectConfiguration
     private TablesConfiguration tblsCfg;
 
+    /** Distribution zones configuration. */
     @InjectConfiguration
     private DistributionZonesConfiguration distributionZonesConfiguration;
 
+    /** Garbage collector configuration. */
+    @InjectConfiguration
+    private GcConfiguration gcConfig;
+
     @InjectConfiguration
     private PersistentPageMemoryStorageEngineConfiguration storageEngineConfig;
 
@@ -856,6 +862,7 @@ public class TableManagerTest extends IgniteAbstractTest {
                 revisionUpdater,
                 tblsCfg,
                 distributionZonesConfiguration,
+                gcConfig,
                 clusterService,
                 rm,
                 replicaMgr,
diff --git a/modules/table/src/test/java/org/apache/ignite/internal/table/distributed/gc/MvGcTest.java b/modules/table/src/test/java/org/apache/ignite/internal/table/distributed/gc/MvGcTest.java
index a4bf9b87b3..febf9fb402 100644
--- a/modules/table/src/test/java/org/apache/ignite/internal/table/distributed/gc/MvGcTest.java
+++ b/modules/table/src/test/java/org/apache/ignite/internal/table/distributed/gc/MvGcTest.java
@@ -43,7 +43,7 @@ import org.apache.ignite.internal.configuration.testframework.ConfigurationExten
 import org.apache.ignite.internal.configuration.testframework.InjectConfiguration;
 import org.apache.ignite.internal.hlc.HybridTimestamp;
 import org.apache.ignite.internal.replicator.TablePartitionId;
-import org.apache.ignite.internal.schema.configuration.TablesConfiguration;
+import org.apache.ignite.internal.schema.configuration.GcConfiguration;
 import org.apache.ignite.internal.util.PendingComparableValuesTracker;
 import org.apache.ignite.lang.ErrorGroups.GarbageCollector;
 import org.apache.ignite.lang.IgniteInternalException;
@@ -66,11 +66,8 @@ public class MvGcTest {
     private final AtomicInteger nextTableId = new AtomicInteger(1001);
 
     @BeforeEach
-    void setUp(
-            @InjectConfiguration("mock.gcThreads = 1")
-            TablesConfiguration tablesConfig
-    ) {
-        gc = new MvGc("test", tablesConfig);
+    void setUp(@InjectConfiguration("mock.threads = 1") GcConfiguration gcConfig) {
+        gc = new MvGc("test", gcConfig);
 
         gc.start();
     }
@@ -305,16 +302,13 @@ public class MvGcTest {
     }
 
     @Test
-    void testParallelUpdateLowWatermark(
-            @InjectConfiguration
-            TablesConfiguration tablesConfig
-    ) throws Exception {
+    void testParallelUpdateLowWatermark(@InjectConfiguration GcConfiguration gcConfig) throws Exception {
         // By default, in the tests we work in one thread, we don’t have enough this, we will add more.
-        assertThat(tablesConfig.gcThreads().update(Runtime.getRuntime().availableProcessors()), willCompleteSuccessfully());
+        assertThat(gcConfig.threads().update(Runtime.getRuntime().availableProcessors()), willCompleteSuccessfully());
 
         gc.close();
 
-        gc = new MvGc("test", tablesConfig);
+        gc = new MvGc("test", gcConfig);
 
         gc.start();
 
diff --git a/modules/table/src/test/java/org/apache/ignite/internal/table/distributed/raft/PartitionCommandListenerTest.java b/modules/table/src/test/java/org/apache/ignite/internal/table/distributed/raft/PartitionCommandListenerTest.java
index 78adaee7e9..f1d103dc99 100644
--- a/modules/table/src/test/java/org/apache/ignite/internal/table/distributed/raft/PartitionCommandListenerTest.java
+++ b/modules/table/src/test/java/org/apache/ignite/internal/table/distributed/raft/PartitionCommandListenerTest.java
@@ -72,7 +72,7 @@ import org.apache.ignite.internal.schema.BinaryRowConverter;
 import org.apache.ignite.internal.schema.Column;
 import org.apache.ignite.internal.schema.NativeTypes;
 import org.apache.ignite.internal.schema.SchemaDescriptor;
-import org.apache.ignite.internal.schema.configuration.storage.DataStorageConfiguration;
+import org.apache.ignite.internal.schema.configuration.GcConfiguration;
 import org.apache.ignite.internal.schema.row.Row;
 import org.apache.ignite.internal.schema.row.RowAssembler;
 import org.apache.ignite.internal.storage.MvPartitionStorage;
@@ -181,7 +181,7 @@ public class PartitionCommandListenerTest {
      * Initializes a table listener before tests.
      */
     @BeforeEach
-    public void before(@InjectConfiguration DataStorageConfiguration dsCfg) {
+    public void before(@InjectConfiguration GcConfiguration gcConfig) {
         NetworkAddress addr = new NetworkAddress("127.0.0.1", 5003);
 
         ClusterService clusterService = mock(ClusterService.class, RETURNS_DEEP_STUBS);
@@ -197,7 +197,7 @@ public class PartitionCommandListenerTest {
         storageUpdateHandler = spy(new StorageUpdateHandler(
                 PARTITION_ID,
                 partitionDataStorage,
-                dsCfg,
+                gcConfig,
                 mock(LowWatermark.class),
                 indexUpdateHandler,
                 new GcUpdateHandler(partitionDataStorage, safeTimeTracker, indexUpdateHandler)
@@ -287,7 +287,7 @@ public class PartitionCommandListenerTest {
      * the maximal last applied index among storages to all storages.
      */
     @Test
-    public void testOnSnapshotSavePropagateLastAppliedIndexAndTerm(@InjectConfiguration DataStorageConfiguration dsCfg) {
+    public void testOnSnapshotSavePropagateLastAppliedIndexAndTerm(@InjectConfiguration GcConfiguration gcConfig) {
         TestPartitionDataStorage partitionDataStorage = new TestPartitionDataStorage(mvPartitionStorage);
 
         IndexUpdateHandler indexUpdateHandler1 = new IndexUpdateHandler(
@@ -297,7 +297,7 @@ public class PartitionCommandListenerTest {
         StorageUpdateHandler storageUpdateHandler = new StorageUpdateHandler(
                 PARTITION_ID,
                 partitionDataStorage,
-                dsCfg,
+                gcConfig,
                 mock(LowWatermark.class),
                 indexUpdateHandler1,
                 new GcUpdateHandler(partitionDataStorage, safeTimeTracker, indexUpdateHandler1)
diff --git a/modules/table/src/test/java/org/apache/ignite/internal/table/distributed/replication/PartitionReplicaListenerIndexLockingTest.java b/modules/table/src/test/java/org/apache/ignite/internal/table/distributed/replication/PartitionReplicaListenerIndexLockingTest.java
index 40a570d3e7..eb73abcd65 100644
--- a/modules/table/src/test/java/org/apache/ignite/internal/table/distributed/replication/PartitionReplicaListenerIndexLockingTest.java
+++ b/modules/table/src/test/java/org/apache/ignite/internal/table/distributed/replication/PartitionReplicaListenerIndexLockingTest.java
@@ -52,8 +52,8 @@ import org.apache.ignite.internal.schema.BinaryTupleSchema;
 import org.apache.ignite.internal.schema.Column;
 import org.apache.ignite.internal.schema.NativeTypes;
 import org.apache.ignite.internal.schema.SchemaDescriptor;
+import org.apache.ignite.internal.schema.configuration.GcConfiguration;
 import org.apache.ignite.internal.schema.configuration.TablesConfiguration;
-import org.apache.ignite.internal.schema.configuration.storage.DataStorageConfiguration;
 import org.apache.ignite.internal.schema.marshaller.KvMarshaller;
 import org.apache.ignite.internal.schema.marshaller.MarshallerException;
 import org.apache.ignite.internal.schema.marshaller.reflection.ReflectionMarshallerFactory;
@@ -126,7 +126,7 @@ public class PartitionReplicaListenerIndexLockingTest extends IgniteAbstractTest
 
     @BeforeAll
     public static void beforeAll(
-            @InjectConfiguration DataStorageConfiguration dsCfg,
+            @InjectConfiguration GcConfiguration gcConfig,
             @InjectConfiguration("mock.tables.foo {}") TablesConfiguration tablesConfig
     ) {
         RaftGroupService mockRaftClient = mock(RaftGroupService.class);
@@ -213,7 +213,7 @@ public class PartitionReplicaListenerIndexLockingTest extends IgniteAbstractTest
                 new StorageUpdateHandler(
                         PART_ID,
                         partitionDataStorage,
-                        dsCfg,
+                        gcConfig,
                         mock(LowWatermark.class),
                         indexUpdateHandler,
                         new GcUpdateHandler(partitionDataStorage, safeTime, indexUpdateHandler)
diff --git a/modules/table/src/test/java/org/apache/ignite/internal/table/distributed/replication/PartitionReplicaListenerTest.java b/modules/table/src/test/java/org/apache/ignite/internal/table/distributed/replication/PartitionReplicaListenerTest.java
index 30984ba733..68dfedb73e 100644
--- a/modules/table/src/test/java/org/apache/ignite/internal/table/distributed/replication/PartitionReplicaListenerTest.java
+++ b/modules/table/src/test/java/org/apache/ignite/internal/table/distributed/replication/PartitionReplicaListenerTest.java
@@ -83,8 +83,8 @@ import org.apache.ignite.internal.schema.BinaryTuple;
 import org.apache.ignite.internal.schema.Column;
 import org.apache.ignite.internal.schema.NativeTypes;
 import org.apache.ignite.internal.schema.SchemaDescriptor;
+import org.apache.ignite.internal.schema.configuration.GcConfiguration;
 import org.apache.ignite.internal.schema.configuration.TablesConfiguration;
-import org.apache.ignite.internal.schema.configuration.storage.DataStorageConfiguration;
 import org.apache.ignite.internal.schema.marshaller.KvMarshaller;
 import org.apache.ignite.internal.schema.marshaller.MarshallerException;
 import org.apache.ignite.internal.schema.marshaller.MarshallerFactory;
@@ -294,7 +294,7 @@ public class PartitionReplicaListenerTest extends IgniteAbstractTest {
 
     @BeforeEach
     public void beforeTest(
-            @InjectConfiguration DataStorageConfiguration dsCfg,
+            @InjectConfiguration GcConfiguration gcConfig,
             @InjectConfiguration("mock.tables.foo {}") TablesConfiguration tablesConfig
     ) {
         lenient().when(mockRaftClient.refreshAndGetLeaderWithTerm()).thenAnswer(invocationOnMock -> {
@@ -403,7 +403,7 @@ public class PartitionReplicaListenerTest extends IgniteAbstractTest {
                 new StorageUpdateHandler(
                         partId,
                         partitionDataStorage,
-                        dsCfg,
+                        gcConfig,
                         mock(LowWatermark.class),
                         indexUpdateHandler,
                         new GcUpdateHandler(partitionDataStorage, safeTimeClock, indexUpdateHandler)
diff --git a/modules/table/src/testFixtures/java/org/apache/ignite/internal/table/impl/DummyInternalTableImpl.java b/modules/table/src/testFixtures/java/org/apache/ignite/internal/table/impl/DummyInternalTableImpl.java
index 853711e897..99d307c6c0 100644
--- a/modules/table/src/testFixtures/java/org/apache/ignite/internal/table/impl/DummyInternalTableImpl.java
+++ b/modules/table/src/testFixtures/java/org/apache/ignite/internal/table/impl/DummyInternalTableImpl.java
@@ -56,8 +56,8 @@ import org.apache.ignite.internal.schema.BinaryTuple;
 import org.apache.ignite.internal.schema.Column;
 import org.apache.ignite.internal.schema.NativeTypes;
 import org.apache.ignite.internal.schema.SchemaDescriptor;
+import org.apache.ignite.internal.schema.configuration.GcConfiguration;
 import org.apache.ignite.internal.schema.configuration.TablesConfiguration;
-import org.apache.ignite.internal.schema.configuration.storage.DataStorageConfiguration;
 import org.apache.ignite.internal.storage.MvPartitionStorage;
 import org.apache.ignite.internal.storage.engine.MvTableStorage;
 import org.apache.ignite.internal.storage.impl.TestMvPartitionStorage;
@@ -278,17 +278,17 @@ public class DummyInternalTableImpl extends InternalTableImpl {
         PartitionDataStorage partitionDataStorage = new TestPartitionDataStorage(mvPartStorage);
         TableIndexStoragesSupplier indexes = createTableIndexStoragesSupplier(Map.of(pkStorage.get().id(), pkStorage.get()));
 
-        DataStorageConfiguration dsCfg = mock(DataStorageConfiguration.class);
+        GcConfiguration gcConfig = mock(GcConfiguration.class);
         ConfigurationValue<Integer> gcBatchSizeValue = mock(ConfigurationValue.class);
         lenient().when(gcBatchSizeValue.value()).thenReturn(5);
-        lenient().when(dsCfg.gcOnUpdateBatchSize()).thenReturn(gcBatchSizeValue);
+        lenient().when(gcConfig.onUpdateBatchSize()).thenReturn(gcBatchSizeValue);
 
         IndexUpdateHandler indexUpdateHandler = new IndexUpdateHandler(indexes);
 
         StorageUpdateHandler storageUpdateHandler = new StorageUpdateHandler(
                 PART_ID,
                 partitionDataStorage,
-                dsCfg,
+                gcConfig,
                 mock(LowWatermark.class),
                 indexUpdateHandler,
                 new GcUpdateHandler(partitionDataStorage, safeTime, indexUpdateHandler)