You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by sd...@apache.org on 2022/10/04 12:24:23 UTC

[ignite-3] branch main updated: IGNITE-17792 Automatically load all configuration extensions for tests (#1146)

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

sdanilov 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 45f3728364 IGNITE-17792 Automatically load all configuration extensions for tests (#1146)
45f3728364 is described below

commit 45f37283649e819b1ea275d67df649e2f3266a08
Author: Semyon Danilov <sa...@yandex.ru>
AuthorDate: Tue Oct 4 15:24:17 2022 +0300

    IGNITE-17792 Automatically load all configuration extensions for tests (#1146)
---
 .../schemas/table/TableConfigurationSchema.java    |   6 --
 .../ClientHandlerConfigurationModule.java}         |  21 ++--
 ...nite.internal.configuration.ConfigurationModule |   6 +-
 modules/cluster-management/build.gradle            |   1 +
 modules/cluster-management/pom.xml                 |   5 +
 .../internal/cluster/management/MockNode.java      |   2 +-
 .../management/raft/ItCmgRaftServiceTest.java      |   9 +-
 modules/compute/build.gradle                       |   2 +
 modules/compute/pom.xml                            |   5 +
 .../configuration/ComputeConfigurationModule.java} |  21 ++--
 ...nite.internal.configuration.ConfigurationModule |   6 +-
 modules/configuration/pom.xml                      |   1 -
 .../testframework/ConfigurationExtension.java      | 111 ++++++++++++++++-----
 modules/index/build.gradle                         |   2 +-
 modules/index/pom.xml                              |   7 +-
 .../configuration/IndexConfigurationModule.java}   |  26 ++---
 ...nite.internal.configuration.ConfigurationModule |   6 +-
 .../ignite/internal/index/IndexManagerTest.java    |   6 +-
 .../configuration/NetworkConfigurationModule.java} |  21 ++--
 ...nite.internal.configuration.ConfigurationModule |   6 +-
 .../tree/ItBplusTreeReplaceRemoveRaceTest.java     |   3 +-
 ...ItBplusTreeReuseListVolatilePageMemoryTest.java |   3 +-
 .../ItBplusTreeVolatilePageMemoryTest.java         |   3 +-
 .../ItBplusTreePersistentPageMemoryTest.java       |   3 +-
 ...BplusTreeReuseListPersistentPageMemoryTest.java |   3 +-
 .../PageMemoryDistributedConfigurationModule.java} |  24 ++---
 ...nite.internal.configuration.ConfigurationModule |   6 +-
 .../pagememory/freelist/AbstractFreeListTest.java  |   3 +-
 .../inmemory/VolatilePageMemoryNoLoadSelfTest.java |   3 +-
 .../PersistentPageMemoryNoLoadTest.java            |   3 +-
 modules/raft/build.gradle                          |   4 +
 modules/raft/pom.xml                               |  15 +++
 .../apache/ignite/internal/raft/ItLozaTest.java    |   9 +-
 .../internal/raft/ItRaftGroupServiceTest.java      |   9 +-
 .../java/org/apache/ignite/internal/raft/Loza.java |  30 ++----
 .../configuration/RaftConfigurationModule.java}    |  34 ++-----
 .../configuration/RaftConfigurationSchema.java}    |  32 +++---
 ...nite.internal.configuration.ConfigurationModule |   6 +-
 ....ignite.raft.jraft.core.LogStorageBudgetsModule |  16 +++
 .../org/apache/ignite/internal/raft/LozaTest.java  |   8 +-
 modules/rest/build.gradle                          |   1 +
 modules/rest/pom.xml                               |   5 +
 .../configuration/RestConfigurationModule.java}    |  21 ++--
 ...nite.internal.configuration.ConfigurationModule |   6 +-
 modules/runner/build.gradle                        |   1 +
 .../ItDistributedConfigurationPropertiesTest.java  |  18 +++-
 .../ItDistributedConfigurationStorageTest.java     |   9 +-
 .../storage/ItRebalanceDistributedTest.java        |  19 ++--
 .../inmemory/ItRaftStorageVolatilityTest.java      |  12 ++-
 .../runner/app/ItIgniteNodeRestartTest.java        |  10 +-
 .../org/apache/ignite/internal/app/IgniteImpl.java |   3 +-
 ...nite.internal.configuration.ConfigurationModule |   6 +-
 .../CoreDistributedConfigurationModuleTest.java    |  82 ---------------
 .../CoreLocalConfigurationModuleTest.java          |  92 -----------------
 ...nite.internal.configuration.ConfigurationModule |   4 +-
 .../SchemaDistributedConfigurationModule.java      |  11 ++
 ...nite.internal.configuration.ConfigurationModule |   4 +-
 .../AbstractTableIndexValidatorTest.java           |  14 ---
 ...nfigurationToSchemaDescriptorConverterTest.java |   8 --
 .../KnownDataStorageValidatorTest.java             |   5 +-
 .../SchemaDistributedConfigurationModuleTest.java  |   5 -
 .../internal/sql/engine/StopCalciteModuleTest.java |  17 +---
 .../sql/engine/exec/MockedStructuresTest.java      |  25 +----
 modules/storage-api/build.gradle                   |   1 +
 modules/storage-api/pom.xml                        |   6 ++
 ...nite.internal.configuration.ConfigurationModule |   4 +-
 .../internal/storage/DataStorageManagerTest.java   |  20 +---
 .../internal/storage/TestMvTableStorageTest.java   |  14 ---
 .../storage/index/TestHashIndexStorageTest.java    |  12 ---
 .../storage/index/TestSortedIndexStorageTest.java  |  12 ---
 ...nite.internal.configuration.ConfigurationModule |   4 +-
 modules/storage-page-memory/build.gradle           |   1 +
 modules/storage-page-memory/pom.xml                |   6 ++
 ...torageEngineDistributedConfigurationModule.java |   4 +-
 ...nite.internal.configuration.ConfigurationModule |   4 +-
 .../PersistentPageMemoryDataRegionTest.java        |   3 +-
 .../PersistentPageMemoryMvTableStorageTest.java    |  17 +---
 .../VolatilePageMemoryMvTableStorageTest.java      |  17 +---
 .../PageMemoryDataRegionValidatorImplTest.java     |   5 +-
 .../PersistentPageMemoryHashIndexStorageTest.java  |  15 +--
 ...PersistentPageMemorySortedIndexStorageTest.java |  15 +--
 .../VolatilePageMemoryHashIndexStorageTest.java    |  15 +--
 .../VolatilePageMemorySortedIndexStorageTest.java  |  15 +--
 ...PersistentPageMemoryMvPartitionStorageTest.java |  18 +---
 .../VolatilePageMemoryMvPartitionStorageTest.java  |  15 +--
 modules/storage-rocksdb/build.gradle               |   1 +
 modules/storage-rocksdb/pom.xml                    |   6 ++
 ...nite.internal.configuration.ConfigurationModule |   4 +-
 .../rocksdb/RocksDbMvPartitionStorageTest.java     |  12 ---
 .../storage/rocksdb/RocksDbMvTableStorageTest.java |  14 ---
 .../storage/rocksdb/RocksDbStorageEngineTest.java  |  19 ----
 .../rocksdb/index/RocksDbHashIndexStorageTest.java |  12 ---
 .../index/RocksDbSortedIndexStorageTest.java       |  12 ---
 modules/table/build.gradle                         |   2 +
 modules/table/pom.xml                              |   6 ++
 .../distributed/ItTxDistributedTestSingleNode.java |  10 +-
 .../internal/table/distributed/TableManager.java   |   2 +-
 ...nite.internal.configuration.ConfigurationModule |   4 +-
 .../table/distributed/TableManagerTest.java        |  28 +-----
 99 files changed, 420 insertions(+), 800 deletions(-)

diff --git a/modules/api/src/main/java/org/apache/ignite/configuration/schemas/table/TableConfigurationSchema.java b/modules/api/src/main/java/org/apache/ignite/configuration/schemas/table/TableConfigurationSchema.java
index 4c2d7a744d..a2ee50dabc 100644
--- a/modules/api/src/main/java/org/apache/ignite/configuration/schemas/table/TableConfigurationSchema.java
+++ b/modules/api/src/main/java/org/apache/ignite/configuration/schemas/table/TableConfigurationSchema.java
@@ -64,10 +64,4 @@ public class TableConfigurationSchema {
     /** Primary key configuration. */
     @ConfigValue
     public PrimaryKeyConfigurationSchema primaryKey;
-
-    // TODO: IGNITE-16647 - RAFT configuration should be moved elsewhere
-
-    /** Configuration for Raft groups corresponding to table partitions. */
-    @ConfigValue
-    public VolatileRaftConfigurationSchema volatileRaft;
 }
diff --git a/modules/runner/src/main/java/org/apache/ignite/internal/configuration/CoreLocalConfigurationModule.java b/modules/client-handler/src/main/java/org/apache/ignite/client/handler/configuration/ClientHandlerConfigurationModule.java
similarity index 66%
copy from modules/runner/src/main/java/org/apache/ignite/internal/configuration/CoreLocalConfigurationModule.java
copy to modules/client-handler/src/main/java/org/apache/ignite/client/handler/configuration/ClientHandlerConfigurationModule.java
index a55546fdc0..60145f8139 100644
--- a/modules/runner/src/main/java/org/apache/ignite/internal/configuration/CoreLocalConfigurationModule.java
+++ b/modules/client-handler/src/main/java/org/apache/ignite/client/handler/configuration/ClientHandlerConfigurationModule.java
@@ -15,35 +15,26 @@
  * limitations under the License.
  */
 
-package org.apache.ignite.internal.configuration;
+package org.apache.ignite.client.handler.configuration;
 
 import java.util.Collection;
-import java.util.List;
+import java.util.Collections;
 import org.apache.ignite.configuration.RootKey;
 import org.apache.ignite.configuration.annotation.ConfigurationType;
 import org.apache.ignite.configuration.schemas.clientconnector.ClientConnectorConfiguration;
-import org.apache.ignite.configuration.schemas.compute.ComputeConfiguration;
-import org.apache.ignite.configuration.schemas.network.NetworkConfiguration;
-import org.apache.ignite.configuration.schemas.rest.RestConfiguration;
+import org.apache.ignite.internal.configuration.ConfigurationModule;
 
 /**
- * {@link ConfigurationModule} for node-local configuration provided by ignite-api.
+ * {@link ConfigurationModule} for node-local configuration provided by client-handler.
  */
-public class CoreLocalConfigurationModule implements ConfigurationModule {
-    /** {@inheritDoc} */
+public class ClientHandlerConfigurationModule implements ConfigurationModule {
     @Override
     public ConfigurationType type() {
         return ConfigurationType.LOCAL;
     }
 
-    /** {@inheritDoc} */
     @Override
     public Collection<RootKey<?, ?>> rootKeys() {
-        return List.of(
-                NetworkConfiguration.KEY,
-                RestConfiguration.KEY,
-                ClientConnectorConfiguration.KEY,
-                ComputeConfiguration.KEY
-        );
+        return Collections.singleton(ClientConnectorConfiguration.KEY);
     }
 }
diff --git a/modules/runner/src/test/resources/META-INF/services/org.apache.ignite.internal.configuration.ConfigurationModule b/modules/client-handler/src/main/resources/META-INF/services/org.apache.ignite.internal.configuration.ConfigurationModule
similarity index 76%
copy from modules/runner/src/test/resources/META-INF/services/org.apache.ignite.internal.configuration.ConfigurationModule
copy to modules/client-handler/src/main/resources/META-INF/services/org.apache.ignite.internal.configuration.ConfigurationModule
index 685b7b2a06..babcf1a737 100644
--- a/modules/runner/src/test/resources/META-INF/services/org.apache.ignite.internal.configuration.ConfigurationModule
+++ b/modules/client-handler/src/main/resources/META-INF/services/org.apache.ignite.internal.configuration.ConfigurationModule
@@ -1,10 +1,10 @@
 #
 # Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
+# contributor license agreements. See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
 # The ASF licenses this file to You under the Apache License, Version 2.0
 # (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
+# the License. You may obtain a copy of the License at
 #
 #      http://www.apache.org/licenses/LICENSE-2.0
 #
@@ -14,4 +14,4 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 #
-org.apache.ignite.internal.configuration.TestConfigurationModule
+org.apache.ignite.client.handler.configuration.ClientHandlerConfigurationModule
diff --git a/modules/cluster-management/build.gradle b/modules/cluster-management/build.gradle
index 73b823126c..e605937e7e 100644
--- a/modules/cluster-management/build.gradle
+++ b/modules/cluster-management/build.gradle
@@ -55,6 +55,7 @@ dependencies {
 
     integrationTestAnnotationProcessor libs.micronaut.inject.annotation.processor
     integrationTestImplementation(testFixtures(project(':ignite-core')))
+    integrationTestImplementation(testFixtures(project(':ignite-configuration')))
     integrationTestImplementation(testFixtures(project(':ignite-network')))
     integrationTestImplementation libs.micronaut.junit5
 
diff --git a/modules/cluster-management/pom.xml b/modules/cluster-management/pom.xml
index 250de9423a..2c250ffe87 100644
--- a/modules/cluster-management/pom.xml
+++ b/modules/cluster-management/pom.xml
@@ -37,6 +37,11 @@
           <artifactId>ignite-core</artifactId>
         </dependency>
 
+        <dependency>
+            <groupId>org.apache.ignite</groupId>
+            <artifactId>ignite-configuration</artifactId>
+        </dependency>
+
         <dependency>
           <groupId>org.apache.ignite</groupId>
           <artifactId>ignite-network-api</artifactId>
diff --git a/modules/cluster-management/src/integrationTest/java/org/apache/ignite/internal/cluster/management/MockNode.java b/modules/cluster-management/src/integrationTest/java/org/apache/ignite/internal/cluster/management/MockNode.java
index b8e37b973c..aa6db645e4 100644
--- a/modules/cluster-management/src/integrationTest/java/org/apache/ignite/internal/cluster/management/MockNode.java
+++ b/modules/cluster-management/src/integrationTest/java/org/apache/ignite/internal/cluster/management/MockNode.java
@@ -73,7 +73,7 @@ public class MockNode {
 
         this.clusterService = ClusterServiceTestUtils.clusterService(testInfo, port, nodeFinder);
 
-        Loza raftManager = new Loza(clusterService, workDir);
+        Loza raftManager = new Loza(clusterService, null, workDir);
 
         this.clusterManager = new ClusterManagementGroupManager(
                 vaultManager,
diff --git a/modules/cluster-management/src/integrationTest/java/org/apache/ignite/internal/cluster/management/raft/ItCmgRaftServiceTest.java b/modules/cluster-management/src/integrationTest/java/org/apache/ignite/internal/cluster/management/raft/ItCmgRaftServiceTest.java
index fdc737ac9e..9b5b80f301 100644
--- a/modules/cluster-management/src/integrationTest/java/org/apache/ignite/internal/cluster/management/raft/ItCmgRaftServiceTest.java
+++ b/modules/cluster-management/src/integrationTest/java/org/apache/ignite/internal/cluster/management/raft/ItCmgRaftServiceTest.java
@@ -40,8 +40,11 @@ import org.apache.ignite.internal.cluster.management.ClusterState;
 import org.apache.ignite.internal.cluster.management.ClusterTag;
 import org.apache.ignite.internal.cluster.management.raft.commands.JoinReadyCommand;
 import org.apache.ignite.internal.cluster.management.raft.commands.JoinRequestCommand;
+import org.apache.ignite.internal.configuration.testframework.ConfigurationExtension;
+import org.apache.ignite.internal.configuration.testframework.InjectConfiguration;
 import org.apache.ignite.internal.properties.IgniteProductVersion;
 import org.apache.ignite.internal.raft.Loza;
+import org.apache.ignite.internal.raft.configuration.RaftConfiguration;
 import org.apache.ignite.internal.testframework.WorkDirectory;
 import org.apache.ignite.internal.testframework.WorkDirectoryExtension;
 import org.apache.ignite.internal.util.IgniteUtils;
@@ -63,9 +66,13 @@ import org.junit.jupiter.api.extension.ExtendWith;
  * Class with tests for the {@link CmgRaftService}.
  */
 @ExtendWith(WorkDirectoryExtension.class)
+@ExtendWith(ConfigurationExtension.class)
 public class ItCmgRaftServiceTest {
     private static final String TEST_GROUP = "test_group";
 
+    @InjectConfiguration
+    private static RaftConfiguration raftConfiguration;
+
     private class Node {
         CmgRaftService raftService;
 
@@ -77,7 +84,7 @@ public class ItCmgRaftServiceTest {
 
         Node(TestInfo testInfo, NetworkAddress addr, NodeFinder nodeFinder, Path workDir) {
             this.clusterService = clusterService(testInfo, addr.port(), nodeFinder);
-            this.raftManager = new Loza(clusterService, workDir);
+            this.raftManager = new Loza(clusterService, raftConfiguration, workDir);
         }
 
         void start() {
diff --git a/modules/compute/build.gradle b/modules/compute/build.gradle
index 7fd1d1d77b..6185fab726 100644
--- a/modules/compute/build.gradle
+++ b/modules/compute/build.gradle
@@ -22,6 +22,7 @@ dependencies {
     implementation project(':ignite-api')
     implementation project(':ignite-network')
     implementation project(':ignite-table')
+    implementation project(':ignite-configuration')
     implementation project(':ignite-core')
     implementation libs.jetbrains.annotations
     implementation libs.fastutil.core
@@ -29,6 +30,7 @@ dependencies {
 
     testImplementation project(':ignite-core')
     testImplementation(testFixtures(project(':ignite-core')))
+    testImplementation(testFixtures(project(':ignite-configuration')))
     testImplementation libs.hamcrest.core
     testImplementation libs.mockito.core
     testImplementation libs.mockito.junit
diff --git a/modules/compute/pom.xml b/modules/compute/pom.xml
index 4071c74ca9..9e5c369153 100644
--- a/modules/compute/pom.xml
+++ b/modules/compute/pom.xml
@@ -48,6 +48,11 @@
             <artifactId>ignite-table</artifactId>
         </dependency>
 
+        <dependency>
+            <groupId>org.apache.ignite</groupId>
+            <artifactId>ignite-configuration</artifactId>
+        </dependency>
+
         <!-- Test dependencies -->
         <dependency>
             <groupId>org.hamcrest</groupId>
diff --git a/modules/runner/src/main/java/org/apache/ignite/internal/configuration/CoreLocalConfigurationModule.java b/modules/compute/src/main/java/org/apache/ignite/internal/compute/configuration/ComputeConfigurationModule.java
similarity index 65%
copy from modules/runner/src/main/java/org/apache/ignite/internal/configuration/CoreLocalConfigurationModule.java
copy to modules/compute/src/main/java/org/apache/ignite/internal/compute/configuration/ComputeConfigurationModule.java
index a55546fdc0..b2839761ae 100644
--- a/modules/runner/src/main/java/org/apache/ignite/internal/configuration/CoreLocalConfigurationModule.java
+++ b/modules/compute/src/main/java/org/apache/ignite/internal/compute/configuration/ComputeConfigurationModule.java
@@ -15,35 +15,26 @@
  * limitations under the License.
  */
 
-package org.apache.ignite.internal.configuration;
+package org.apache.ignite.internal.compute.configuration;
 
 import java.util.Collection;
-import java.util.List;
+import java.util.Collections;
 import org.apache.ignite.configuration.RootKey;
 import org.apache.ignite.configuration.annotation.ConfigurationType;
-import org.apache.ignite.configuration.schemas.clientconnector.ClientConnectorConfiguration;
 import org.apache.ignite.configuration.schemas.compute.ComputeConfiguration;
-import org.apache.ignite.configuration.schemas.network.NetworkConfiguration;
-import org.apache.ignite.configuration.schemas.rest.RestConfiguration;
+import org.apache.ignite.internal.configuration.ConfigurationModule;
 
 /**
- * {@link ConfigurationModule} for node-local configuration provided by ignite-api.
+ * {@link ConfigurationModule} for node-local configuration provided by compute.
  */
-public class CoreLocalConfigurationModule implements ConfigurationModule {
-    /** {@inheritDoc} */
+public class ComputeConfigurationModule implements ConfigurationModule {
     @Override
     public ConfigurationType type() {
         return ConfigurationType.LOCAL;
     }
 
-    /** {@inheritDoc} */
     @Override
     public Collection<RootKey<?, ?>> rootKeys() {
-        return List.of(
-                NetworkConfiguration.KEY,
-                RestConfiguration.KEY,
-                ClientConnectorConfiguration.KEY,
-                ComputeConfiguration.KEY
-        );
+        return Collections.singleton(ComputeConfiguration.KEY);
     }
 }
diff --git a/modules/runner/src/test/resources/META-INF/services/org.apache.ignite.internal.configuration.ConfigurationModule b/modules/compute/src/main/resources/META-INF/services/org.apache.ignite.internal.configuration.ConfigurationModule
similarity index 76%
copy from modules/runner/src/test/resources/META-INF/services/org.apache.ignite.internal.configuration.ConfigurationModule
copy to modules/compute/src/main/resources/META-INF/services/org.apache.ignite.internal.configuration.ConfigurationModule
index 685b7b2a06..75aa9bedbe 100644
--- a/modules/runner/src/test/resources/META-INF/services/org.apache.ignite.internal.configuration.ConfigurationModule
+++ b/modules/compute/src/main/resources/META-INF/services/org.apache.ignite.internal.configuration.ConfigurationModule
@@ -1,10 +1,10 @@
 #
 # Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
+# contributor license agreements. See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
 # The ASF licenses this file to You under the Apache License, Version 2.0
 # (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
+# the License. You may obtain a copy of the License at
 #
 #      http://www.apache.org/licenses/LICENSE-2.0
 #
@@ -14,4 +14,4 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 #
-org.apache.ignite.internal.configuration.TestConfigurationModule
+org.apache.ignite.internal.compute.configuration.ComputeConfigurationModule
diff --git a/modules/configuration/pom.xml b/modules/configuration/pom.xml
index d97d770f94..65d4ade82a 100644
--- a/modules/configuration/pom.xml
+++ b/modules/configuration/pom.xml
@@ -101,7 +101,6 @@
             <scope>test</scope>
         </dependency>
 
-
         <dependency>
             <groupId>io.micronaut.test</groupId>
             <artifactId>micronaut-test-junit5</artifactId>
diff --git a/modules/configuration/src/testFixtures/java/org/apache/ignite/internal/configuration/testframework/ConfigurationExtension.java b/modules/configuration/src/testFixtures/java/org/apache/ignite/internal/configuration/testframework/ConfigurationExtension.java
index 6d61b77e00..2a81dc9480 100644
--- a/modules/configuration/src/testFixtures/java/org/apache/ignite/internal/configuration/testframework/ConfigurationExtension.java
+++ b/modules/configuration/src/testFixtures/java/org/apache/ignite/internal/configuration/testframework/ConfigurationExtension.java
@@ -17,6 +17,7 @@
 
 package org.apache.ignite.internal.configuration.testframework;
 
+import static java.lang.reflect.Modifier.isStatic;
 import static java.util.concurrent.Executors.newSingleThreadExecutor;
 import static org.apache.ignite.configuration.annotation.ConfigurationType.LOCAL;
 import static org.apache.ignite.internal.configuration.notifications.ConfigurationNotifier.notifyListeners;
@@ -35,6 +36,7 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Iterator;
 import java.util.List;
+import java.util.ServiceLoader;
 import java.util.UUID;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.ExecutorService;
@@ -42,7 +44,10 @@ import java.util.concurrent.atomic.AtomicLong;
 import java.util.concurrent.atomic.AtomicReference;
 import java.util.function.Function;
 import org.apache.ignite.configuration.RootKey;
+import org.apache.ignite.configuration.annotation.InternalConfiguration;
+import org.apache.ignite.configuration.annotation.PolymorphicConfigInstance;
 import org.apache.ignite.internal.configuration.ConfigurationListenerHolder;
+import org.apache.ignite.internal.configuration.ConfigurationModule;
 import org.apache.ignite.internal.configuration.DynamicConfiguration;
 import org.apache.ignite.internal.configuration.DynamicConfigurationChanger;
 import org.apache.ignite.internal.configuration.RootInnerNode;
@@ -61,6 +66,7 @@ import org.junit.jupiter.api.extension.BeforeAllCallback;
 import org.junit.jupiter.api.extension.BeforeEachCallback;
 import org.junit.jupiter.api.extension.ExtensionContext;
 import org.junit.jupiter.api.extension.ExtensionContext.Namespace;
+import org.junit.jupiter.api.extension.ExtensionContext.Store;
 import org.junit.jupiter.api.extension.ParameterContext;
 import org.junit.jupiter.api.extension.ParameterResolutionException;
 import org.junit.jupiter.api.extension.ParameterResolver;
@@ -84,58 +90,100 @@ public class ConfigurationExtension implements BeforeEachCallback, AfterEachCall
     /** Key to store {@link ExecutorService} in {@link ExtensionContext.Store}. */
     private static final Object POOL_KEY = new Object();
 
-    /** Key to store {@link StorageRevisionListenerHolderImpl} in {@link ExtensionContext.Store}. */
-    private static final Object REVISION_LISTENER_HOLDER_KEY = new Object();
+    /** Key to store {@link StorageRevisionListenerHolderImpl} in {@link ExtensionContext.Store} for all tests. */
+    private static final Object REVISION_LISTENER_ALL_TEST_HOLDER_KEY = new Object();
+
+    /** Key to store {@link StorageRevisionListenerHolderImpl} in {@link ExtensionContext.Store} for each test. */
+    private static final Object REVISION_LISTENER_PER_TEST_HOLDER_KEY = new Object();
+
+    /** All {@link InternalConfiguration} classes in classpath. */
+    private static final List<Class<?>> INTERNAL_EXTENSIONS;
+
+    /** All {@link PolymorphicConfigInstance} classes in classpath. */
+    private static final List<Class<?>> POLYMORPHIC_EXTENSIONS;
+
+    static {
+        // Automatically find all @InternalConfiguration and @PolymorphicConfigInstance classes
+        // to avoid configuring extensions manually in every test.
+        ServiceLoader<ConfigurationModule> modules = ServiceLoader.load(ConfigurationModule.class);
+
+        List<Class<?>> internalExtensions = new ArrayList<>();
+        List<Class<?>> polymorphicExtensions = new ArrayList<>();
+
+        modules.forEach(configurationModule -> {
+            internalExtensions.addAll(configurationModule.internalSchemaExtensions());
+            polymorphicExtensions.addAll(configurationModule.polymorphicSchemaExtensions());
+        });
+
+        INTERNAL_EXTENSIONS = List.copyOf(internalExtensions);
+        POLYMORPHIC_EXTENSIONS = List.copyOf(polymorphicExtensions);
+    }
 
     /** {@inheritDoc} */
     @Override
     public void beforeAll(ExtensionContext context) throws Exception {
+        context.getStore(NAMESPACE).put(CGEN_KEY, new ConfigurationAsmGenerator());
         context.getStore(NAMESPACE).put(POOL_KEY, newSingleThreadExecutor());
+
+        injectFields(context, true);
     }
 
     /** {@inheritDoc} */
     @Override
     public void afterAll(ExtensionContext context) throws Exception {
-        ExecutorService pool = context.getStore(NAMESPACE).remove(POOL_KEY, ExecutorService.class);
+        context.getStore(NAMESPACE).remove(CGEN_KEY);
+
+        context.getStore(NAMESPACE).remove(POOL_KEY, ExecutorService.class).shutdownNow();
 
-        pool.shutdownNow();
+        context.getStore(NAMESPACE).remove(REVISION_LISTENER_ALL_TEST_HOLDER_KEY);
     }
 
     /** {@inheritDoc} */
     @Override
     public void beforeEach(ExtensionContext context) throws Exception {
-        ConfigurationAsmGenerator cgen = new ConfigurationAsmGenerator();
+        injectFields(context, false);
+    }
+
+    private void injectFields(ExtensionContext context, boolean forStatic) throws Exception {
+        Class<?> testClass = context.getRequiredTestClass();
+        Object testInstance = context.getTestInstance().orElse(null);
 
-        context.getStore(NAMESPACE).put(CGEN_KEY, cgen);
+        assert forStatic || testInstance != null;
 
-        Object testInstance = context.getRequiredTestInstance();
+        Store store = context.getStore(NAMESPACE);
 
-        ExecutorService pool = context.getStore(NAMESPACE).get(POOL_KEY, ExecutorService.class);
+        ConfigurationAsmGenerator cgen = store.get(CGEN_KEY, ConfigurationAsmGenerator.class);
+        ExecutorService pool = store.get(POOL_KEY, ExecutorService.class);
 
         StorageRevisionListenerHolderImpl revisionListenerHolder = new StorageRevisionListenerHolderImpl();
 
-        context.getStore(NAMESPACE).put(REVISION_LISTENER_HOLDER_KEY, revisionListenerHolder);
+        if (forStatic) {
+            store.put(REVISION_LISTENER_ALL_TEST_HOLDER_KEY, revisionListenerHolder);
+        } else {
+            store.put(REVISION_LISTENER_PER_TEST_HOLDER_KEY, revisionListenerHolder);
+        }
 
-        for (Field field : getInjectConfigurationFields(testInstance.getClass())) {
+        for (Field field : getInjectConfigurationFields(testClass, forStatic)) {
             field.setAccessible(true);
 
             InjectConfiguration annotation = field.getAnnotation(InjectConfiguration.class);
 
-            field.set(testInstance, cfgValue(field.getType(), annotation, cgen, pool, revisionListenerHolder));
+            Object cfgValue = cfgValue(field.getType(), annotation, cgen, pool, revisionListenerHolder);
+
+            field.set(forStatic ? null : testInstance, cfgValue);
         }
 
-        for (Field field : getInjectRevisionListenerHolderFields(testInstance.getClass())) {
+        for (Field field : getInjectRevisionListenerHolderFields(testClass, forStatic)) {
             field.setAccessible(true);
 
-            field.set(testInstance, revisionListenerHolder);
+            field.set(forStatic ? null : testInstance, revisionListenerHolder);
         }
     }
 
     /** {@inheritDoc} */
     @Override
     public void afterEach(ExtensionContext context) throws Exception {
-        context.getStore(NAMESPACE).remove(CGEN_KEY);
-        context.getStore(NAMESPACE).remove(REVISION_LISTENER_HOLDER_KEY);
+        context.getStore(NAMESPACE).remove(REVISION_LISTENER_PER_TEST_HOLDER_KEY);
     }
 
     /** {@inheritDoc} */
@@ -162,8 +210,8 @@ public class ConfigurationExtension implements BeforeEachCallback, AfterEachCall
             ConfigurationAsmGenerator cgen =
                     extensionContext.getStore(NAMESPACE).get(CGEN_KEY, ConfigurationAsmGenerator.class);
 
-            StorageRevisionListenerHolderImpl revisionListenerHolder =
-                    extensionContext.getStore(NAMESPACE).get(REVISION_LISTENER_HOLDER_KEY, StorageRevisionListenerHolderImpl.class);
+            StorageRevisionListenerHolderImpl revisionListenerHolder = extensionContext.getStore(NAMESPACE)
+                    .get(REVISION_LISTENER_PER_TEST_HOLDER_KEY, StorageRevisionListenerHolderImpl.class);
 
             try {
                 ExecutorService pool = extensionContext.getStore(NAMESPACE).get(POOL_KEY, ExecutorService.class);
@@ -177,9 +225,9 @@ public class ConfigurationExtension implements BeforeEachCallback, AfterEachCall
                 );
             }
         } else if (parameterContext.isAnnotated(InjectRevisionListenerHolder.class)) {
-            return extensionContext.getStore(NAMESPACE).get(REVISION_LISTENER_HOLDER_KEY, StorageRevisionListenerHolderImpl.class);
+            return extensionContext.getStore(NAMESPACE).get(REVISION_LISTENER_PER_TEST_HOLDER_KEY, StorageRevisionListenerHolderImpl.class);
         } else {
-            throw new ParameterResolutionException("Unknown parametr:" + parameterContext.getParameter());
+            throw new ParameterResolutionException("Unknown parameter:" + parameterContext.getParameter());
         }
     }
 
@@ -205,10 +253,23 @@ public class ConfigurationExtension implements BeforeEachCallback, AfterEachCall
         // classes, extension is designed to mock actual configurations from public API to configure Ignite components.
         Class<?> schemaClass = Class.forName(type.getCanonicalName() + "Schema");
 
+        List<Class<?>> internalExtensions = INTERNAL_EXTENSIONS;
+        List<Class<?>> polymorphicExtensions = POLYMORPHIC_EXTENSIONS;
+
+        if (annotation.internalExtensions().length > 0) {
+            internalExtensions = new ArrayList<>(internalExtensions);
+            internalExtensions.addAll(List.of(annotation.internalExtensions()));
+        }
+
+        if (annotation.polymorphicExtensions().length > 0) {
+            polymorphicExtensions = new ArrayList<>(polymorphicExtensions);
+            polymorphicExtensions.addAll(List.of(annotation.polymorphicExtensions()));
+        }
+
         cgen.compileRootSchema(
                 schemaClass,
-                internalSchemaExtensions(List.of(annotation.internalExtensions())),
-                polymorphicSchemaExtensions(List.of(annotation.polymorphicExtensions()))
+                internalSchemaExtensions(internalExtensions),
+                polymorphicSchemaExtensions(polymorphicExtensions)
         );
 
         // RootKey must be mocked, there's no way to instantiate it using a public constructor.
@@ -300,20 +361,20 @@ public class ConfigurationExtension implements BeforeEachCallback, AfterEachCall
         return cfgRef.get();
     }
 
-    private static List<Field> getInjectConfigurationFields(Class<?> testClass) {
+    private static List<Field> getInjectConfigurationFields(Class<?> testClass, boolean forStatic) {
         return AnnotationSupport.findAnnotatedFields(
                 testClass,
                 InjectConfiguration.class,
-                field -> supportsAsConfigurationType(field.getType()),
+                field -> supportsAsConfigurationType(field.getType()) && (isStatic(field.getModifiers()) == forStatic),
                 HierarchyTraversalMode.TOP_DOWN
         );
     }
 
-    private static List<Field> getInjectRevisionListenerHolderFields(Class<?> testClass) {
+    private static List<Field> getInjectRevisionListenerHolderFields(Class<?> testClass, boolean forStatic) {
         return AnnotationSupport.findAnnotatedFields(
                 testClass,
                 InjectRevisionListenerHolder.class,
-                field -> isRevisionListenerHolder(field.getType()),
+                field -> isRevisionListenerHolder(field.getType()) && (isStatic(field.getModifiers()) == forStatic),
                 HierarchyTraversalMode.TOP_DOWN
         );
     }
diff --git a/modules/index/build.gradle b/modules/index/build.gradle
index 3542181844..0b2eac7f70 100644
--- a/modules/index/build.gradle
+++ b/modules/index/build.gradle
@@ -21,7 +21,7 @@ apply from: "$rootDir/buildscripts/java-junit5.gradle"
 dependencies {
     implementation project(':ignite-api')
     implementation project(':ignite-core')
-    implementation project(':ignite-table')
+    implementation project(':ignite-configuration')
     implementation project(':ignite-schema')
     implementation project(':ignite-configuration')
     implementation project(':ignite-extended-api')
diff --git a/modules/index/pom.xml b/modules/index/pom.xml
index 4c6e7628c0..969eff252b 100644
--- a/modules/index/pom.xml
+++ b/modules/index/pom.xml
@@ -45,7 +45,12 @@
 
         <dependency>
             <groupId>org.apache.ignite</groupId>
-            <artifactId>ignite-table</artifactId>
+            <artifactId>ignite-configuration</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.ignite</groupId>
+            <artifactId>ignite-schema</artifactId>
         </dependency>
 
         <!-- Test dependencies -->
diff --git a/modules/runner/src/main/java/org/apache/ignite/internal/configuration/CoreLocalConfigurationModule.java b/modules/index/src/main/java/org/apache/ignite/internal/index/configuration/IndexConfigurationModule.java
similarity index 54%
copy from modules/runner/src/main/java/org/apache/ignite/internal/configuration/CoreLocalConfigurationModule.java
copy to modules/index/src/main/java/org/apache/ignite/internal/index/configuration/IndexConfigurationModule.java
index a55546fdc0..b91ec83a66 100644
--- a/modules/runner/src/main/java/org/apache/ignite/internal/configuration/CoreLocalConfigurationModule.java
+++ b/modules/index/src/main/java/org/apache/ignite/internal/index/configuration/IndexConfigurationModule.java
@@ -15,35 +15,29 @@
  * limitations under the License.
  */
 
-package org.apache.ignite.internal.configuration;
+package org.apache.ignite.internal.index.configuration;
 
 import java.util.Collection;
 import java.util.List;
-import org.apache.ignite.configuration.RootKey;
 import org.apache.ignite.configuration.annotation.ConfigurationType;
-import org.apache.ignite.configuration.schemas.clientconnector.ClientConnectorConfiguration;
-import org.apache.ignite.configuration.schemas.compute.ComputeConfiguration;
-import org.apache.ignite.configuration.schemas.network.NetworkConfiguration;
-import org.apache.ignite.configuration.schemas.rest.RestConfiguration;
+import org.apache.ignite.configuration.schemas.table.HashIndexConfigurationSchema;
+import org.apache.ignite.configuration.schemas.table.SortedIndexConfigurationSchema;
+import org.apache.ignite.internal.configuration.ConfigurationModule;
 
 /**
- * {@link ConfigurationModule} for node-local configuration provided by ignite-api.
+ * {@link ConfigurationModule} for cluster-wide configuration provided by index.
  */
-public class CoreLocalConfigurationModule implements ConfigurationModule {
-    /** {@inheritDoc} */
+public class IndexConfigurationModule implements ConfigurationModule {
     @Override
     public ConfigurationType type() {
-        return ConfigurationType.LOCAL;
+        return ConfigurationType.DISTRIBUTED;
     }
 
-    /** {@inheritDoc} */
     @Override
-    public Collection<RootKey<?, ?>> rootKeys() {
+    public Collection<Class<?>> polymorphicSchemaExtensions() {
         return List.of(
-                NetworkConfiguration.KEY,
-                RestConfiguration.KEY,
-                ClientConnectorConfiguration.KEY,
-                ComputeConfiguration.KEY
+                HashIndexConfigurationSchema.class,
+                SortedIndexConfigurationSchema.class
         );
     }
 }
diff --git a/modules/runner/src/test/resources/META-INF/services/org.apache.ignite.internal.configuration.ConfigurationModule b/modules/index/src/main/resources/META-INF/services/org.apache.ignite.internal.configuration.ConfigurationModule
similarity index 76%
copy from modules/runner/src/test/resources/META-INF/services/org.apache.ignite.internal.configuration.ConfigurationModule
copy to modules/index/src/main/resources/META-INF/services/org.apache.ignite.internal.configuration.ConfigurationModule
index 685b7b2a06..0443aee5a8 100644
--- a/modules/runner/src/test/resources/META-INF/services/org.apache.ignite.internal.configuration.ConfigurationModule
+++ b/modules/index/src/main/resources/META-INF/services/org.apache.ignite.internal.configuration.ConfigurationModule
@@ -1,10 +1,10 @@
 #
 # Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
+# contributor license agreements. See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
 # The ASF licenses this file to You under the Apache License, Version 2.0
 # (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
+# the License. You may obtain a copy of the License at
 #
 #      http://www.apache.org/licenses/LICENSE-2.0
 #
@@ -14,4 +14,4 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 #
-org.apache.ignite.internal.configuration.TestConfigurationModule
+org.apache.ignite.internal.index.configuration.IndexConfigurationModule
diff --git a/modules/index/src/test/java/org/apache/ignite/internal/index/IndexManagerTest.java b/modules/index/src/test/java/org/apache/ignite/internal/index/IndexManagerTest.java
index 2fb61706a8..42f1dfc764 100644
--- a/modules/index/src/test/java/org/apache/ignite/internal/index/IndexManagerTest.java
+++ b/modules/index/src/test/java/org/apache/ignite/internal/index/IndexManagerTest.java
@@ -41,7 +41,6 @@ import java.util.concurrent.atomic.AtomicReference;
 import org.apache.ignite.configuration.NamedConfigurationTree;
 import org.apache.ignite.configuration.schemas.store.UnknownDataStorageConfigurationSchema;
 import org.apache.ignite.configuration.schemas.table.ConstantValueDefaultConfigurationSchema;
-import org.apache.ignite.configuration.schemas.table.EntryCountBudgetConfigurationSchema;
 import org.apache.ignite.configuration.schemas.table.FunctionCallDefaultConfigurationSchema;
 import org.apache.ignite.configuration.schemas.table.HashIndexChange;
 import org.apache.ignite.configuration.schemas.table.HashIndexConfigurationSchema;
@@ -54,7 +53,6 @@ import org.apache.ignite.configuration.schemas.table.TableConfiguration;
 import org.apache.ignite.configuration.schemas.table.TableIndexConfiguration;
 import org.apache.ignite.configuration.schemas.table.TableView;
 import org.apache.ignite.configuration.schemas.table.TablesConfiguration;
-import org.apache.ignite.configuration.schemas.table.UnlimitedBudgetConfigurationSchema;
 import org.apache.ignite.configuration.validation.ConfigurationValidationException;
 import org.apache.ignite.internal.configuration.ConfigurationRegistry;
 import org.apache.ignite.internal.configuration.NamedListConfiguration;
@@ -111,9 +109,7 @@ public class IndexManagerTest {
                         UnknownDataStorageConfigurationSchema.class,
                         ConstantValueDefaultConfigurationSchema.class,
                         FunctionCallDefaultConfigurationSchema.class,
-                        NullValueDefaultConfigurationSchema.class,
-                        UnlimitedBudgetConfigurationSchema.class,
-                        EntryCountBudgetConfigurationSchema.class
+                        NullValueDefaultConfigurationSchema.class
                 )
         );
 
diff --git a/modules/runner/src/main/java/org/apache/ignite/internal/configuration/CoreLocalConfigurationModule.java b/modules/network/src/main/java/org/apache/ignite/network/configuration/NetworkConfigurationModule.java
similarity index 65%
copy from modules/runner/src/main/java/org/apache/ignite/internal/configuration/CoreLocalConfigurationModule.java
copy to modules/network/src/main/java/org/apache/ignite/network/configuration/NetworkConfigurationModule.java
index a55546fdc0..80196cef2b 100644
--- a/modules/runner/src/main/java/org/apache/ignite/internal/configuration/CoreLocalConfigurationModule.java
+++ b/modules/network/src/main/java/org/apache/ignite/network/configuration/NetworkConfigurationModule.java
@@ -15,35 +15,26 @@
  * limitations under the License.
  */
 
-package org.apache.ignite.internal.configuration;
+package org.apache.ignite.network.configuration;
 
 import java.util.Collection;
-import java.util.List;
+import java.util.Collections;
 import org.apache.ignite.configuration.RootKey;
 import org.apache.ignite.configuration.annotation.ConfigurationType;
-import org.apache.ignite.configuration.schemas.clientconnector.ClientConnectorConfiguration;
-import org.apache.ignite.configuration.schemas.compute.ComputeConfiguration;
 import org.apache.ignite.configuration.schemas.network.NetworkConfiguration;
-import org.apache.ignite.configuration.schemas.rest.RestConfiguration;
+import org.apache.ignite.internal.configuration.ConfigurationModule;
 
 /**
- * {@link ConfigurationModule} for node-local configuration provided by ignite-api.
+ * {@link ConfigurationModule} for node-local configuration provided by ignite-network.
  */
-public class CoreLocalConfigurationModule implements ConfigurationModule {
-    /** {@inheritDoc} */
+public class NetworkConfigurationModule implements ConfigurationModule {
     @Override
     public ConfigurationType type() {
         return ConfigurationType.LOCAL;
     }
 
-    /** {@inheritDoc} */
     @Override
     public Collection<RootKey<?, ?>> rootKeys() {
-        return List.of(
-                NetworkConfiguration.KEY,
-                RestConfiguration.KEY,
-                ClientConnectorConfiguration.KEY,
-                ComputeConfiguration.KEY
-        );
+        return Collections.singleton(NetworkConfiguration.KEY);
     }
 }
diff --git a/modules/runner/src/test/resources/META-INF/services/org.apache.ignite.internal.configuration.ConfigurationModule b/modules/network/src/main/resources/META-INF/services/org.apache.ignite.internal.configuration.ConfigurationModule
similarity index 77%
copy from modules/runner/src/test/resources/META-INF/services/org.apache.ignite.internal.configuration.ConfigurationModule
copy to modules/network/src/main/resources/META-INF/services/org.apache.ignite.internal.configuration.ConfigurationModule
index 685b7b2a06..b718f733a9 100644
--- a/modules/runner/src/test/resources/META-INF/services/org.apache.ignite.internal.configuration.ConfigurationModule
+++ b/modules/network/src/main/resources/META-INF/services/org.apache.ignite.internal.configuration.ConfigurationModule
@@ -1,10 +1,10 @@
 #
 # Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
+# contributor license agreements. See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
 # The ASF licenses this file to You under the Apache License, Version 2.0
 # (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
+# the License. You may obtain a copy of the License at
 #
 #      http://www.apache.org/licenses/LICENSE-2.0
 #
@@ -14,4 +14,4 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 #
-org.apache.ignite.internal.configuration.TestConfigurationModule
+org.apache.ignite.network.configuration.NetworkConfigurationModule
diff --git a/modules/page-memory/src/integrationTest/java/org/apache/ignite/internal/pagememory/tree/ItBplusTreeReplaceRemoveRaceTest.java b/modules/page-memory/src/integrationTest/java/org/apache/ignite/internal/pagememory/tree/ItBplusTreeReplaceRemoveRaceTest.java
index 6d6f4996cb..e09f4482db 100644
--- a/modules/page-memory/src/integrationTest/java/org/apache/ignite/internal/pagememory/tree/ItBplusTreeReplaceRemoveRaceTest.java
+++ b/modules/page-memory/src/integrationTest/java/org/apache/ignite/internal/pagememory/tree/ItBplusTreeReplaceRemoveRaceTest.java
@@ -34,7 +34,6 @@ import org.apache.ignite.internal.configuration.testframework.InjectConfiguratio
 import org.apache.ignite.internal.pagememory.FullPageId;
 import org.apache.ignite.internal.pagememory.PageMemory;
 import org.apache.ignite.internal.pagememory.TestPageIoRegistry;
-import org.apache.ignite.internal.pagememory.configuration.schema.UnsafeMemoryAllocatorConfigurationSchema;
 import org.apache.ignite.internal.pagememory.configuration.schema.VolatilePageMemoryDataRegionConfiguration;
 import org.apache.ignite.internal.pagememory.inmemory.VolatilePageMemory;
 import org.apache.ignite.internal.pagememory.io.IoVersions;
@@ -66,7 +65,7 @@ public class ItBplusTreeReplaceRemoveRaceTest extends BaseIgniteAbstractTest {
 
     private static final int GROUP_ID = 100500;
 
-    @InjectConfiguration(polymorphicExtensions = UnsafeMemoryAllocatorConfigurationSchema.class)
+    @InjectConfiguration
     private VolatilePageMemoryDataRegionConfiguration dataRegionCfg;
 
     @Nullable
diff --git a/modules/page-memory/src/integrationTest/java/org/apache/ignite/internal/pagememory/tree/inmemory/ItBplusTreeReuseListVolatilePageMemoryTest.java b/modules/page-memory/src/integrationTest/java/org/apache/ignite/internal/pagememory/tree/inmemory/ItBplusTreeReuseListVolatilePageMemoryTest.java
index 09c7534c55..28e21aff4c 100644
--- a/modules/page-memory/src/integrationTest/java/org/apache/ignite/internal/pagememory/tree/inmemory/ItBplusTreeReuseListVolatilePageMemoryTest.java
+++ b/modules/page-memory/src/integrationTest/java/org/apache/ignite/internal/pagememory/tree/inmemory/ItBplusTreeReuseListVolatilePageMemoryTest.java
@@ -22,7 +22,6 @@ import org.apache.ignite.internal.configuration.testframework.ConfigurationExten
 import org.apache.ignite.internal.configuration.testframework.InjectConfiguration;
 import org.apache.ignite.internal.pagememory.PageMemory;
 import org.apache.ignite.internal.pagememory.TestPageIoRegistry;
-import org.apache.ignite.internal.pagememory.configuration.schema.UnsafeMemoryAllocatorConfigurationSchema;
 import org.apache.ignite.internal.pagememory.configuration.schema.VolatilePageMemoryDataRegionConfiguration;
 import org.apache.ignite.internal.pagememory.inmemory.VolatilePageMemory;
 import org.apache.ignite.internal.pagememory.tree.AbstractBplusTreeReusePageMemoryTest;
@@ -33,7 +32,7 @@ import org.junit.jupiter.api.extension.ExtendWith;
  */
 @ExtendWith(ConfigurationExtension.class)
 public class ItBplusTreeReuseListVolatilePageMemoryTest extends AbstractBplusTreeReusePageMemoryTest {
-    @InjectConfiguration(polymorphicExtensions = UnsafeMemoryAllocatorConfigurationSchema.class)
+    @InjectConfiguration
     private VolatilePageMemoryDataRegionConfiguration dataRegionCfg;
 
     /** {@inheritDoc} */
diff --git a/modules/page-memory/src/integrationTest/java/org/apache/ignite/internal/pagememory/tree/inmemory/ItBplusTreeVolatilePageMemoryTest.java b/modules/page-memory/src/integrationTest/java/org/apache/ignite/internal/pagememory/tree/inmemory/ItBplusTreeVolatilePageMemoryTest.java
index 60fc88f8a6..d3c5417b13 100644
--- a/modules/page-memory/src/integrationTest/java/org/apache/ignite/internal/pagememory/tree/inmemory/ItBplusTreeVolatilePageMemoryTest.java
+++ b/modules/page-memory/src/integrationTest/java/org/apache/ignite/internal/pagememory/tree/inmemory/ItBplusTreeVolatilePageMemoryTest.java
@@ -22,7 +22,6 @@ import org.apache.ignite.internal.configuration.testframework.ConfigurationExten
 import org.apache.ignite.internal.configuration.testframework.InjectConfiguration;
 import org.apache.ignite.internal.pagememory.PageMemory;
 import org.apache.ignite.internal.pagememory.TestPageIoRegistry;
-import org.apache.ignite.internal.pagememory.configuration.schema.UnsafeMemoryAllocatorConfigurationSchema;
 import org.apache.ignite.internal.pagememory.configuration.schema.VolatilePageMemoryDataRegionConfiguration;
 import org.apache.ignite.internal.pagememory.inmemory.VolatilePageMemory;
 import org.apache.ignite.internal.pagememory.reuse.ReuseList;
@@ -36,7 +35,7 @@ import org.junit.jupiter.api.extension.ExtendWith;
  */
 @ExtendWith(ConfigurationExtension.class)
 public class ItBplusTreeVolatilePageMemoryTest extends AbstractBplusTreePageMemoryTest {
-    @InjectConfiguration(polymorphicExtensions = UnsafeMemoryAllocatorConfigurationSchema.class)
+    @InjectConfiguration
     private VolatilePageMemoryDataRegionConfiguration dataRegionCfg;
 
     /** {@inheritDoc} */
diff --git a/modules/page-memory/src/integrationTest/java/org/apache/ignite/internal/pagememory/tree/persistence/ItBplusTreePersistentPageMemoryTest.java b/modules/page-memory/src/integrationTest/java/org/apache/ignite/internal/pagememory/tree/persistence/ItBplusTreePersistentPageMemoryTest.java
index 87327a12fc..888989605e 100644
--- a/modules/page-memory/src/integrationTest/java/org/apache/ignite/internal/pagememory/tree/persistence/ItBplusTreePersistentPageMemoryTest.java
+++ b/modules/page-memory/src/integrationTest/java/org/apache/ignite/internal/pagememory/tree/persistence/ItBplusTreePersistentPageMemoryTest.java
@@ -27,7 +27,6 @@ import org.apache.ignite.internal.configuration.testframework.InjectConfiguratio
 import org.apache.ignite.internal.pagememory.PageMemory;
 import org.apache.ignite.internal.pagememory.TestPageIoRegistry;
 import org.apache.ignite.internal.pagememory.configuration.schema.PersistentPageMemoryDataRegionConfiguration;
-import org.apache.ignite.internal.pagememory.configuration.schema.UnsafeMemoryAllocatorConfigurationSchema;
 import org.apache.ignite.internal.pagememory.persistence.PersistentPageMemory;
 import org.apache.ignite.internal.pagememory.persistence.TestPageReadWriteManager;
 import org.apache.ignite.internal.pagememory.reuse.ReuseList;
@@ -41,7 +40,7 @@ import org.junit.jupiter.api.extension.ExtendWith;
  */
 @ExtendWith(ConfigurationExtension.class)
 public class ItBplusTreePersistentPageMemoryTest extends AbstractBplusTreePageMemoryTest {
-    @InjectConfiguration(polymorphicExtensions = UnsafeMemoryAllocatorConfigurationSchema.class)
+    @InjectConfiguration
     private PersistentPageMemoryDataRegionConfiguration dataRegionCfg;
 
     /** {@inheritDoc} */
diff --git a/modules/page-memory/src/integrationTest/java/org/apache/ignite/internal/pagememory/tree/persistence/ItBplusTreeReuseListPersistentPageMemoryTest.java b/modules/page-memory/src/integrationTest/java/org/apache/ignite/internal/pagememory/tree/persistence/ItBplusTreeReuseListPersistentPageMemoryTest.java
index 2143a09b0f..ac2360d17d 100644
--- a/modules/page-memory/src/integrationTest/java/org/apache/ignite/internal/pagememory/tree/persistence/ItBplusTreeReuseListPersistentPageMemoryTest.java
+++ b/modules/page-memory/src/integrationTest/java/org/apache/ignite/internal/pagememory/tree/persistence/ItBplusTreeReuseListPersistentPageMemoryTest.java
@@ -27,7 +27,6 @@ import org.apache.ignite.internal.configuration.testframework.InjectConfiguratio
 import org.apache.ignite.internal.pagememory.PageMemory;
 import org.apache.ignite.internal.pagememory.TestPageIoRegistry;
 import org.apache.ignite.internal.pagememory.configuration.schema.PersistentPageMemoryDataRegionConfiguration;
-import org.apache.ignite.internal.pagememory.configuration.schema.UnsafeMemoryAllocatorConfigurationSchema;
 import org.apache.ignite.internal.pagememory.persistence.PersistentPageMemory;
 import org.apache.ignite.internal.pagememory.persistence.TestPageReadWriteManager;
 import org.apache.ignite.internal.pagememory.tree.AbstractBplusTreeReusePageMemoryTest;
@@ -38,7 +37,7 @@ import org.junit.jupiter.api.extension.ExtendWith;
  */
 @ExtendWith(ConfigurationExtension.class)
 public class ItBplusTreeReuseListPersistentPageMemoryTest extends AbstractBplusTreeReusePageMemoryTest {
-    @InjectConfiguration(polymorphicExtensions = UnsafeMemoryAllocatorConfigurationSchema.class)
+    @InjectConfiguration
     private PersistentPageMemoryDataRegionConfiguration dataRegionCfg;
 
     /** {@inheritDoc} */
diff --git a/modules/runner/src/main/java/org/apache/ignite/internal/configuration/CoreLocalConfigurationModule.java b/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/configuration/PageMemoryDistributedConfigurationModule.java
similarity index 54%
copy from modules/runner/src/main/java/org/apache/ignite/internal/configuration/CoreLocalConfigurationModule.java
copy to modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/configuration/PageMemoryDistributedConfigurationModule.java
index a55546fdc0..eca69e21b8 100644
--- a/modules/runner/src/main/java/org/apache/ignite/internal/configuration/CoreLocalConfigurationModule.java
+++ b/modules/page-memory/src/main/java/org/apache/ignite/internal/pagememory/configuration/PageMemoryDistributedConfigurationModule.java
@@ -15,35 +15,27 @@
  * limitations under the License.
  */
 
-package org.apache.ignite.internal.configuration;
+package org.apache.ignite.internal.pagememory.configuration;
 
 import java.util.Collection;
 import java.util.List;
-import org.apache.ignite.configuration.RootKey;
 import org.apache.ignite.configuration.annotation.ConfigurationType;
-import org.apache.ignite.configuration.schemas.clientconnector.ClientConnectorConfiguration;
-import org.apache.ignite.configuration.schemas.compute.ComputeConfiguration;
-import org.apache.ignite.configuration.schemas.network.NetworkConfiguration;
-import org.apache.ignite.configuration.schemas.rest.RestConfiguration;
+import org.apache.ignite.internal.configuration.ConfigurationModule;
+import org.apache.ignite.internal.pagememory.configuration.schema.UnsafeMemoryAllocatorConfigurationSchema;
 
 /**
- * {@link ConfigurationModule} for node-local configuration provided by ignite-api.
+ * {@link ConfigurationModule} for cluster-wide configuration provided by ignite-page-memory.
  */
-public class CoreLocalConfigurationModule implements ConfigurationModule {
+public class PageMemoryDistributedConfigurationModule implements ConfigurationModule {
     /** {@inheritDoc} */
     @Override
     public ConfigurationType type() {
-        return ConfigurationType.LOCAL;
+        return ConfigurationType.DISTRIBUTED;
     }
 
     /** {@inheritDoc} */
     @Override
-    public Collection<RootKey<?, ?>> rootKeys() {
-        return List.of(
-                NetworkConfiguration.KEY,
-                RestConfiguration.KEY,
-                ClientConnectorConfiguration.KEY,
-                ComputeConfiguration.KEY
-        );
+    public Collection<Class<?>> polymorphicSchemaExtensions() {
+        return List.of(UnsafeMemoryAllocatorConfigurationSchema.class);
     }
 }
diff --git a/modules/storage-api/src/main/resources/META-INF/services/org.apache.ignite.internal.configuration.ConfigurationModule b/modules/page-memory/src/main/resources/META-INF/services/org.apache.ignite.internal.configuration.ConfigurationModule
similarity index 78%
copy from modules/storage-api/src/main/resources/META-INF/services/org.apache.ignite.internal.configuration.ConfigurationModule
copy to modules/page-memory/src/main/resources/META-INF/services/org.apache.ignite.internal.configuration.ConfigurationModule
index fad3807f86..874e3071ba 100644
--- a/modules/storage-api/src/main/resources/META-INF/services/org.apache.ignite.internal.configuration.ConfigurationModule
+++ b/modules/page-memory/src/main/resources/META-INF/services/org.apache.ignite.internal.configuration.ConfigurationModule
@@ -1,10 +1,10 @@
 #
 # Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
+# contributor license agreements. See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
 # The ASF licenses this file to You under the Apache License, Version 2.0
 # (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
+# the License. You may obtain a copy of the License at
 #
 #      http://www.apache.org/licenses/LICENSE-2.0
 #
@@ -14,4 +14,4 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 #
-org.apache.ignite.internal.storage.configuration.StorageEngineDistributedConfigurationModule
+org.apache.ignite.internal.pagememory.configuration.PageMemoryDistributedConfigurationModule
diff --git a/modules/page-memory/src/test/java/org/apache/ignite/internal/pagememory/freelist/AbstractFreeListTest.java b/modules/page-memory/src/test/java/org/apache/ignite/internal/pagememory/freelist/AbstractFreeListTest.java
index 32830b89ef..595b20ade3 100644
--- a/modules/page-memory/src/test/java/org/apache/ignite/internal/pagememory/freelist/AbstractFreeListTest.java
+++ b/modules/page-memory/src/test/java/org/apache/ignite/internal/pagememory/freelist/AbstractFreeListTest.java
@@ -41,7 +41,6 @@ import org.apache.ignite.internal.configuration.testframework.ConfigurationExten
 import org.apache.ignite.internal.configuration.testframework.InjectConfiguration;
 import org.apache.ignite.internal.pagememory.PageMemory;
 import org.apache.ignite.internal.pagememory.TestPageIoRegistry;
-import org.apache.ignite.internal.pagememory.configuration.schema.UnsafeMemoryAllocatorConfigurationSchema;
 import org.apache.ignite.internal.pagememory.configuration.schema.VolatilePageMemoryDataRegionConfiguration;
 import org.apache.ignite.internal.pagememory.evict.PageEvictionTrackerNoOp;
 import org.apache.ignite.internal.pagememory.inmemory.VolatilePageMemory;
@@ -66,7 +65,7 @@ public class AbstractFreeListTest extends BaseIgniteAbstractTest {
 
     private static final int BATCH_SIZE = 100;
 
-    @InjectConfiguration(polymorphicExtensions = UnsafeMemoryAllocatorConfigurationSchema.class)
+    @InjectConfiguration
     private VolatilePageMemoryDataRegionConfiguration dataRegionCfg;
 
     @Nullable
diff --git a/modules/page-memory/src/test/java/org/apache/ignite/internal/pagememory/inmemory/VolatilePageMemoryNoLoadSelfTest.java b/modules/page-memory/src/test/java/org/apache/ignite/internal/pagememory/inmemory/VolatilePageMemoryNoLoadSelfTest.java
index b73769b275..27a93eccfe 100644
--- a/modules/page-memory/src/test/java/org/apache/ignite/internal/pagememory/inmemory/VolatilePageMemoryNoLoadSelfTest.java
+++ b/modules/page-memory/src/test/java/org/apache/ignite/internal/pagememory/inmemory/VolatilePageMemoryNoLoadSelfTest.java
@@ -22,7 +22,6 @@ import static java.util.concurrent.TimeUnit.SECONDS;
 import org.apache.ignite.internal.configuration.testframework.ConfigurationExtension;
 import org.apache.ignite.internal.configuration.testframework.InjectConfiguration;
 import org.apache.ignite.internal.pagememory.AbstractPageMemoryNoLoadSelfTest;
-import org.apache.ignite.internal.pagememory.configuration.schema.UnsafeMemoryAllocatorConfigurationSchema;
 import org.apache.ignite.internal.pagememory.configuration.schema.VolatilePageMemoryDataRegionConfiguration;
 import org.apache.ignite.internal.pagememory.io.PageIoRegistry;
 import org.junit.jupiter.api.BeforeEach;
@@ -33,7 +32,7 @@ import org.junit.jupiter.api.extension.ExtendWith;
  */
 @ExtendWith(ConfigurationExtension.class)
 public class VolatilePageMemoryNoLoadSelfTest extends AbstractPageMemoryNoLoadSelfTest {
-    @InjectConfiguration(polymorphicExtensions = UnsafeMemoryAllocatorConfigurationSchema.class)
+    @InjectConfiguration
     private VolatilePageMemoryDataRegionConfiguration dataRegionCfg;
 
     @BeforeEach
diff --git a/modules/page-memory/src/test/java/org/apache/ignite/internal/pagememory/persistence/PersistentPageMemoryNoLoadTest.java b/modules/page-memory/src/test/java/org/apache/ignite/internal/pagememory/persistence/PersistentPageMemoryNoLoadTest.java
index 725bd05b5e..6054662a1a 100644
--- a/modules/page-memory/src/test/java/org/apache/ignite/internal/pagememory/persistence/PersistentPageMemoryNoLoadTest.java
+++ b/modules/page-memory/src/test/java/org/apache/ignite/internal/pagememory/persistence/PersistentPageMemoryNoLoadTest.java
@@ -55,7 +55,6 @@ import org.apache.ignite.internal.pagememory.FullPageId;
 import org.apache.ignite.internal.pagememory.PageMemory;
 import org.apache.ignite.internal.pagememory.configuration.schema.PageMemoryCheckpointConfiguration;
 import org.apache.ignite.internal.pagememory.configuration.schema.PersistentPageMemoryDataRegionConfiguration;
-import org.apache.ignite.internal.pagememory.configuration.schema.UnsafeMemoryAllocatorConfigurationSchema;
 import org.apache.ignite.internal.pagememory.io.PageIoRegistry;
 import org.apache.ignite.internal.pagememory.persistence.PartitionMeta.PartitionMetaSnapshot;
 import org.apache.ignite.internal.pagememory.persistence.checkpoint.CheckpointManager;
@@ -79,7 +78,7 @@ import org.junit.jupiter.api.extension.ExtendWith;
 public class PersistentPageMemoryNoLoadTest extends AbstractPageMemoryNoLoadSelfTest {
     private static PageIoRegistry ioRegistry;
 
-    @InjectConfiguration(polymorphicExtensions = UnsafeMemoryAllocatorConfigurationSchema.class)
+    @InjectConfiguration
     private PersistentPageMemoryDataRegionConfiguration dataRegionCfg;
 
     @BeforeAll
diff --git a/modules/raft/build.gradle b/modules/raft/build.gradle
index 8f38119578..90a284c31f 100644
--- a/modules/raft/build.gradle
+++ b/modules/raft/build.gradle
@@ -24,6 +24,7 @@ description = 'ignite-raft'
 
 dependencies {
     implementation project(':ignite-core')
+    implementation project(':ignite-configuration')
     implementation project(':ignite-raft-client')
     implementation project(':ignite-network')
     implementation libs.jetbrains.annotations
@@ -32,10 +33,12 @@ dependencies {
     implementation libs.rocksdb.jni
     implementation libs.dropwizard.metrics
     implementation libs.jctools.core
+    annotationProcessor project(":ignite-configuration-annotation-processor")
     annotationProcessor project(":ignite-network-annotation-processor")
     annotationProcessor libs.jmh.annotation.processor
 
     testAnnotationProcessor project(":ignite-network-annotation-processor")
+    testAnnotationProcessor project(":ignite-configuration-annotation-processor")
     testImplementation(testFixtures(project(':ignite-core')))
     testImplementation(testFixtures(project(':ignite-network')))
     testImplementation project(':ignite-configuration')
@@ -60,5 +63,6 @@ dependencies {
     testFixturesImplementation libs.jetbrains.annotations
 
     integrationTestImplementation(testFixtures(project(':ignite-core')))
+    integrationTestImplementation(testFixtures(project(':ignite-configuration')))
     integrationTestImplementation(testFixtures(project(':ignite-network')))
 }
diff --git a/modules/raft/pom.xml b/modules/raft/pom.xml
index 3d6f259a2b..bd68cef47c 100644
--- a/modules/raft/pom.xml
+++ b/modules/raft/pom.xml
@@ -38,6 +38,11 @@
             <artifactId>ignite-core</artifactId>
         </dependency>
 
+        <dependency>
+            <groupId>org.apache.ignite</groupId>
+            <artifactId>ignite-configuration</artifactId>
+        </dependency>
+
         <dependency>
             <groupId>org.apache.ignite</groupId>
             <artifactId>ignite-raft-client</artifactId>
@@ -147,6 +152,11 @@
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-compiler-plugin</artifactId>
                 <dependencies>
+                    <dependency>
+                        <groupId>org.apache.ignite</groupId>
+                        <artifactId>ignite-configuration-annotation-processor</artifactId>
+                        <version>${project.version}</version>
+                    </dependency>
                     <dependency>
                         <groupId>org.apache.ignite</groupId>
                         <artifactId>ignite-network-annotation-processor</artifactId>
@@ -160,6 +170,11 @@
                 </dependencies>
                 <configuration>
                     <annotationProcessorPaths>
+                        <path>
+                            <groupId>org.apache.ignite</groupId>
+                            <artifactId>ignite-configuration-annotation-processor</artifactId>
+                            <version>${project.version}</version>
+                        </path>
                         <path>
                             <groupId>org.apache.ignite</groupId>
                             <artifactId>ignite-network-annotation-processor</artifactId>
diff --git a/modules/raft/src/integrationTest/java/org/apache/ignite/internal/raft/ItLozaTest.java b/modules/raft/src/integrationTest/java/org/apache/ignite/internal/raft/ItLozaTest.java
index dd3668c9dc..b64b2ea504 100644
--- a/modules/raft/src/integrationTest/java/org/apache/ignite/internal/raft/ItLozaTest.java
+++ b/modules/raft/src/integrationTest/java/org/apache/ignite/internal/raft/ItLozaTest.java
@@ -35,6 +35,9 @@ import java.util.List;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.TimeUnit;
 import java.util.function.Supplier;
+import org.apache.ignite.internal.configuration.testframework.ConfigurationExtension;
+import org.apache.ignite.internal.configuration.testframework.InjectConfiguration;
+import org.apache.ignite.internal.raft.configuration.RaftConfiguration;
 import org.apache.ignite.internal.testframework.WorkDirectory;
 import org.apache.ignite.internal.testframework.WorkDirectoryExtension;
 import org.apache.ignite.network.ClusterNode;
@@ -54,6 +57,7 @@ import org.junit.jupiter.api.extension.ExtendWith;
  * Tests for {@link Loza} functionality.
  */
 @ExtendWith(WorkDirectoryExtension.class)
+@ExtendWith(ConfigurationExtension.class)
 public class ItLozaTest {
     /** Server port offset. */
     private static final int PORT = 20010;
@@ -61,6 +65,9 @@ public class ItLozaTest {
     @WorkDirectory
     private Path dataPath;
 
+    @InjectConfiguration
+    private static RaftConfiguration raftConfiguration;
+
     /**
      * Starts a raft group service with a provided group id on a provided Loza instance.
      *
@@ -116,7 +123,7 @@ public class ItLozaTest {
 
             CompletableFuture<NetworkMessage> exception = CompletableFuture.failedFuture(new IOException());
 
-            loza = new Loza(service, dataPath);
+            loza = new Loza(service, raftConfiguration, dataPath);
 
             loza.start();
 
diff --git a/modules/raft/src/integrationTest/java/org/apache/ignite/internal/raft/ItRaftGroupServiceTest.java b/modules/raft/src/integrationTest/java/org/apache/ignite/internal/raft/ItRaftGroupServiceTest.java
index 2e5e5102cb..b8b7080576 100644
--- a/modules/raft/src/integrationTest/java/org/apache/ignite/internal/raft/ItRaftGroupServiceTest.java
+++ b/modules/raft/src/integrationTest/java/org/apache/ignite/internal/raft/ItRaftGroupServiceTest.java
@@ -31,6 +31,9 @@ import java.util.List;
 import java.util.Map;
 import java.util.concurrent.CompletableFuture;
 import java.util.stream.Collectors;
+import org.apache.ignite.internal.configuration.testframework.ConfigurationExtension;
+import org.apache.ignite.internal.configuration.testframework.InjectConfiguration;
+import org.apache.ignite.internal.raft.configuration.RaftConfiguration;
 import org.apache.ignite.internal.testframework.WorkDirectory;
 import org.apache.ignite.internal.testframework.WorkDirectoryExtension;
 import org.apache.ignite.network.ClusterNode;
@@ -54,10 +57,14 @@ import org.junit.jupiter.api.extension.ExtendWith;
  */
 @ExtendWith(WorkDirectoryExtension.class)
 @TestInstance(TestInstance.Lifecycle.PER_CLASS)
+@ExtendWith(ConfigurationExtension.class)
 public class ItRaftGroupServiceTest {
     @WorkDirectory
     private static Path workDir;
 
+    @InjectConfiguration
+    private static RaftConfiguration raftConfiguration;
+
     private static final int NODES_CNT = 2;
 
     private static final int NODE_PORT_BASE = 20_000;
@@ -92,7 +99,7 @@ public class ItRaftGroupServiceTest {
         CompletableFuture<RaftGroupService>[] svcFutures = new CompletableFuture[NODES_CNT];
 
         for (int i = 0; i < NODES_CNT; i++) {
-            Loza raftServer = new Loza(clusterServices.get(i), workDir.resolve("node" + i));
+            Loza raftServer = new Loza(clusterServices.get(i), raftConfiguration, workDir.resolve("node" + i));
 
             raftSrvs.add(raftServer);
 
diff --git a/modules/raft/src/main/java/org/apache/ignite/internal/raft/Loza.java b/modules/raft/src/main/java/org/apache/ignite/internal/raft/Loza.java
index 22a976a1f1..1da1d1e317 100644
--- a/modules/raft/src/main/java/org/apache/ignite/internal/raft/Loza.java
+++ b/modules/raft/src/main/java/org/apache/ignite/internal/raft/Loza.java
@@ -28,9 +28,11 @@ import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.function.Supplier;
 import java.util.stream.Collectors;
+import org.apache.ignite.configuration.schemas.table.VolatileRaftConfiguration;
 import org.apache.ignite.internal.logger.IgniteLogger;
 import org.apache.ignite.internal.logger.Loggers;
 import org.apache.ignite.internal.manager.IgniteComponent;
+import org.apache.ignite.internal.raft.configuration.RaftConfiguration;
 import org.apache.ignite.internal.raft.server.RaftGroupEventsListener;
 import org.apache.ignite.internal.raft.server.RaftGroupOptions;
 import org.apache.ignite.internal.raft.server.RaftServer;
@@ -93,14 +95,18 @@ public class Loza implements IgniteComponent {
     /** Prevents double stopping the component. */
     private final AtomicBoolean stopGuard = new AtomicBoolean();
 
+    /** Raft configuration. */
+    private final RaftConfiguration raftConfiguration;
+
     /**
      * The constructor.
      *
      * @param clusterNetSvc Cluster network service.
      * @param dataPath      Data path.
      */
-    public Loza(ClusterService clusterNetSvc, Path dataPath) {
+    public Loza(ClusterService clusterNetSvc, RaftConfiguration raftConfiguration, Path dataPath) {
         this.clusterNetSvc = clusterNetSvc;
+        this.raftConfiguration = raftConfiguration;
 
         this.raftServer = new JraftServerImpl(clusterNetSvc, dataPath);
 
@@ -111,24 +117,6 @@ public class Loza implements IgniteComponent {
         );
     }
 
-    /**
-     * The constructor. Used for testing purposes.
-     *
-     * @param srv Pre-started raft server.
-     */
-    @TestOnly
-    public Loza(JraftServerImpl srv) {
-        this.clusterNetSvc = srv.clusterService();
-
-        this.raftServer = srv;
-
-        this.executor = new ScheduledThreadPoolExecutor(CLIENT_POOL_SIZE,
-                new NamedThreadFactory(NamedThreadFactory.threadPrefix(clusterNetSvc.localConfiguration().getName(),
-                        CLIENT_POOL_NAME), LOG
-                )
-        );
-    }
-
     /** {@inheritDoc} */
     @Override
     public void start() {
@@ -345,6 +333,10 @@ public class Loza implements IgniteComponent {
         return clusterNetSvc.topologyService();
     }
 
+    public VolatileRaftConfiguration volatileRaft() {
+        return raftConfiguration.volatileRaft();
+    }
+
     /**
      * Returns a cluster service.
      *
diff --git a/modules/runner/src/main/java/org/apache/ignite/internal/configuration/CoreDistributedConfigurationModule.java b/modules/raft/src/main/java/org/apache/ignite/internal/raft/configuration/RaftConfigurationModule.java
similarity index 51%
rename from modules/runner/src/main/java/org/apache/ignite/internal/configuration/CoreDistributedConfigurationModule.java
rename to modules/raft/src/main/java/org/apache/ignite/internal/raft/configuration/RaftConfigurationModule.java
index df12a87dcc..3c4ea3edc5 100644
--- a/modules/runner/src/main/java/org/apache/ignite/internal/configuration/CoreDistributedConfigurationModule.java
+++ b/modules/raft/src/main/java/org/apache/ignite/internal/raft/configuration/RaftConfigurationModule.java
@@ -15,56 +15,36 @@
  * limitations under the License.
  */
 
-package org.apache.ignite.internal.configuration;
+package org.apache.ignite.internal.raft.configuration;
 
-import java.lang.annotation.Annotation;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.List;
-import java.util.Map;
-import java.util.Set;
 import org.apache.ignite.configuration.RootKey;
 import org.apache.ignite.configuration.annotation.ConfigurationType;
-import org.apache.ignite.configuration.schemas.store.KnownDataStorage;
-import org.apache.ignite.configuration.schemas.store.UnknownDataStorageConfigurationSchema;
 import org.apache.ignite.configuration.schemas.table.EntryCountBudgetConfigurationSchema;
-import org.apache.ignite.configuration.schemas.table.HashIndexConfigurationSchema;
-import org.apache.ignite.configuration.schemas.table.SortedIndexConfigurationSchema;
-import org.apache.ignite.configuration.schemas.table.TablesConfiguration;
 import org.apache.ignite.configuration.schemas.table.UnlimitedBudgetConfigurationSchema;
-import org.apache.ignite.configuration.validation.Validator;
-import org.apache.ignite.internal.schema.configuration.KnownDataStorageValidator;
+import org.apache.ignite.internal.configuration.ConfigurationModule;
 
 /**
- * {@link ConfigurationModule} for cluster-wide configuration provided by ignite-api.
+ * {@link ConfigurationModule} for node-local configuration provided by ignite-raft.
  */
-public class CoreDistributedConfigurationModule implements ConfigurationModule {
-    /** {@inheritDoc} */
+public class RaftConfigurationModule implements ConfigurationModule {
     @Override
     public ConfigurationType type() {
-        return ConfigurationType.DISTRIBUTED;
+        return ConfigurationType.LOCAL;
     }
 
-    /** {@inheritDoc} */
     @Override
     public Collection<RootKey<?, ?>> rootKeys() {
-        return List.of(TablesConfiguration.KEY);
+        return Collections.singleton(RaftConfiguration.KEY);
     }
 
-    /** {@inheritDoc} */
     @Override
     public Collection<Class<?>> polymorphicSchemaExtensions() {
         return List.of(
-                HashIndexConfigurationSchema.class,
-                SortedIndexConfigurationSchema.class,
-                UnknownDataStorageConfigurationSchema.class,
                 UnlimitedBudgetConfigurationSchema.class,
                 EntryCountBudgetConfigurationSchema.class
         );
     }
-
-    /** {@inheritDoc} */
-    @Override
-    public Map<Class<? extends Annotation>, Set<Validator<? extends Annotation, ?>>> validators() {
-        return Map.of(KnownDataStorage.class, Set.of(new KnownDataStorageValidator()));
-    }
 }
diff --git a/modules/compute/build.gradle b/modules/raft/src/main/java/org/apache/ignite/internal/raft/configuration/RaftConfigurationSchema.java
similarity index 51%
copy from modules/compute/build.gradle
copy to modules/raft/src/main/java/org/apache/ignite/internal/raft/configuration/RaftConfigurationSchema.java
index 7fd1d1d77b..64bcd3a218 100644
--- a/modules/compute/build.gradle
+++ b/modules/raft/src/main/java/org/apache/ignite/internal/raft/configuration/RaftConfigurationSchema.java
@@ -15,23 +15,21 @@
  * limitations under the License.
  */
 
-apply from: "$rootDir/buildscripts/java-core.gradle"
-apply from: "$rootDir/buildscripts/java-junit5.gradle"
+package org.apache.ignite.internal.raft.configuration;
 
-dependencies {
-    implementation project(':ignite-api')
-    implementation project(':ignite-network')
-    implementation project(':ignite-table')
-    implementation project(':ignite-core')
-    implementation libs.jetbrains.annotations
-    implementation libs.fastutil.core
-    annotationProcessor project(':ignite-network-annotation-processor')
+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.schemas.table.VolatileRaftConfigurationSchema;
 
-    testImplementation project(':ignite-core')
-    testImplementation(testFixtures(project(':ignite-core')))
-    testImplementation libs.hamcrest.core
-    testImplementation libs.mockito.core
-    testImplementation libs.mockito.junit
+/**
+ * Raft configuration schema.
+ */
+@SuppressWarnings("PMD.UnusedPrivateField")
+@ConfigurationRoot(rootName = "raft", type = ConfigurationType.LOCAL)
+public class RaftConfigurationSchema {
+    /** Configuration for Raft groups corresponding to table partitions. */
+    // TODO: IGNITE-16647 - Volatile RAFT configuration should be moved elsewhere
+    @ConfigValue
+    public VolatileRaftConfigurationSchema volatileRaft;
 }
-
-description = 'ignite-compute'
diff --git a/modules/runner/src/test/resources/META-INF/services/org.apache.ignite.internal.configuration.ConfigurationModule b/modules/raft/src/main/resources/META-INF/services/org.apache.ignite.internal.configuration.ConfigurationModule
similarity index 77%
copy from modules/runner/src/test/resources/META-INF/services/org.apache.ignite.internal.configuration.ConfigurationModule
copy to modules/raft/src/main/resources/META-INF/services/org.apache.ignite.internal.configuration.ConfigurationModule
index 685b7b2a06..5534123ec1 100644
--- a/modules/runner/src/test/resources/META-INF/services/org.apache.ignite.internal.configuration.ConfigurationModule
+++ b/modules/raft/src/main/resources/META-INF/services/org.apache.ignite.internal.configuration.ConfigurationModule
@@ -1,10 +1,10 @@
 #
 # Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
+# contributor license agreements. See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
 # The ASF licenses this file to You under the Apache License, Version 2.0
 # (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
+# the License. You may obtain a copy of the License at
 #
 #      http://www.apache.org/licenses/LICENSE-2.0
 #
@@ -14,4 +14,4 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 #
-org.apache.ignite.internal.configuration.TestConfigurationModule
+org.apache.ignite.internal.raft.configuration.RaftConfigurationModule
diff --git a/modules/raft/src/main/resources/META-INF/services/org.apache.ignite.raft.jraft.core.LogStorageBudgetsModule b/modules/raft/src/main/resources/META-INF/services/org.apache.ignite.raft.jraft.core.LogStorageBudgetsModule
index 49ca1c1809..b2688f3c14 100644
--- a/modules/raft/src/main/resources/META-INF/services/org.apache.ignite.raft.jraft.core.LogStorageBudgetsModule
+++ b/modules/raft/src/main/resources/META-INF/services/org.apache.ignite.raft.jraft.core.LogStorageBudgetsModule
@@ -1 +1,17 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
 org.apache.ignite.internal.raft.CoreLogStorageBudgetsModule
diff --git a/modules/raft/src/test/java/org/apache/ignite/internal/raft/LozaTest.java b/modules/raft/src/test/java/org/apache/ignite/internal/raft/LozaTest.java
index f7ee5249b4..7579ac820b 100644
--- a/modules/raft/src/test/java/org/apache/ignite/internal/raft/LozaTest.java
+++ b/modules/raft/src/test/java/org/apache/ignite/internal/raft/LozaTest.java
@@ -19,10 +19,12 @@ package org.apache.ignite.internal.raft;
 
 import static org.apache.ignite.internal.raft.server.RaftGroupOptions.defaults;
 import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.mockito.Mockito.mock;
 
 import java.util.List;
 import java.util.UUID;
 import java.util.function.Supplier;
+import org.apache.ignite.internal.raft.configuration.RaftConfiguration;
 import org.apache.ignite.internal.testframework.IgniteAbstractTest;
 import org.apache.ignite.lang.NodeStoppingException;
 import org.apache.ignite.network.ClusterLocalConfiguration;
@@ -57,10 +59,10 @@ public class LozaTest extends IgniteAbstractTest {
     @Test
     public void testLozaStop() throws Exception {
         Mockito.doReturn(new ClusterLocalConfiguration("test_node", null)).when(clusterNetSvc).localConfiguration();
-        Mockito.doReturn(Mockito.mock(MessagingService.class)).when(clusterNetSvc).messagingService();
-        Mockito.doReturn(Mockito.mock(TopologyService.class)).when(clusterNetSvc).topologyService();
+        Mockito.doReturn(mock(MessagingService.class)).when(clusterNetSvc).messagingService();
+        Mockito.doReturn(mock(TopologyService.class)).when(clusterNetSvc).topologyService();
 
-        Loza loza = new Loza(clusterNetSvc, workDir);
+        Loza loza = new Loza(clusterNetSvc, mock(RaftConfiguration.class), workDir);
 
         loza.start();
 
diff --git a/modules/rest/build.gradle b/modules/rest/build.gradle
index abd7235546..32338bec4a 100644
--- a/modules/rest/build.gradle
+++ b/modules/rest/build.gradle
@@ -26,6 +26,7 @@ dependencies {
     annotationProcessor libs.micronaut.openapi
 
     implementation project(':ignite-api')
+    implementation project(':ignite-configuration')
     implementation project(':ignite-rest-api')
     implementation project(':ignite-core')
     implementation libs.jetbrains.annotations
diff --git a/modules/rest/pom.xml b/modules/rest/pom.xml
index 8c61ac59b9..da3537b825 100644
--- a/modules/rest/pom.xml
+++ b/modules/rest/pom.xml
@@ -38,6 +38,11 @@
             <artifactId>ignite-api</artifactId>
         </dependency>
 
+        <dependency>
+            <groupId>org.apache.ignite</groupId>
+            <artifactId>ignite-configuration</artifactId>
+        </dependency>
+
         <dependency>
             <groupId>org.apache.ignite</groupId>
             <artifactId>ignite-rest-api</artifactId>
diff --git a/modules/runner/src/main/java/org/apache/ignite/internal/configuration/CoreLocalConfigurationModule.java b/modules/rest/src/main/java/org/apache/ignite/internal/rest/configuration/RestConfigurationModule.java
similarity index 65%
rename from modules/runner/src/main/java/org/apache/ignite/internal/configuration/CoreLocalConfigurationModule.java
rename to modules/rest/src/main/java/org/apache/ignite/internal/rest/configuration/RestConfigurationModule.java
index a55546fdc0..ecdb7f9811 100644
--- a/modules/runner/src/main/java/org/apache/ignite/internal/configuration/CoreLocalConfigurationModule.java
+++ b/modules/rest/src/main/java/org/apache/ignite/internal/rest/configuration/RestConfigurationModule.java
@@ -15,35 +15,26 @@
  * limitations under the License.
  */
 
-package org.apache.ignite.internal.configuration;
+package org.apache.ignite.internal.rest.configuration;
 
 import java.util.Collection;
-import java.util.List;
+import java.util.Collections;
 import org.apache.ignite.configuration.RootKey;
 import org.apache.ignite.configuration.annotation.ConfigurationType;
-import org.apache.ignite.configuration.schemas.clientconnector.ClientConnectorConfiguration;
-import org.apache.ignite.configuration.schemas.compute.ComputeConfiguration;
-import org.apache.ignite.configuration.schemas.network.NetworkConfiguration;
 import org.apache.ignite.configuration.schemas.rest.RestConfiguration;
+import org.apache.ignite.internal.configuration.ConfigurationModule;
 
 /**
- * {@link ConfigurationModule} for node-local configuration provided by ignite-api.
+ * {@link ConfigurationModule} for node-local configuration provided by ignite-rest.
  */
-public class CoreLocalConfigurationModule implements ConfigurationModule {
-    /** {@inheritDoc} */
+public class RestConfigurationModule implements ConfigurationModule {
     @Override
     public ConfigurationType type() {
         return ConfigurationType.LOCAL;
     }
 
-    /** {@inheritDoc} */
     @Override
     public Collection<RootKey<?, ?>> rootKeys() {
-        return List.of(
-                NetworkConfiguration.KEY,
-                RestConfiguration.KEY,
-                ClientConnectorConfiguration.KEY,
-                ComputeConfiguration.KEY
-        );
+        return Collections.singleton(RestConfiguration.KEY);
     }
 }
diff --git a/modules/runner/src/test/resources/META-INF/services/org.apache.ignite.internal.configuration.ConfigurationModule b/modules/rest/src/main/resources/META-INF/services/org.apache.ignite.internal.configuration.ConfigurationModule
similarity index 77%
copy from modules/runner/src/test/resources/META-INF/services/org.apache.ignite.internal.configuration.ConfigurationModule
copy to modules/rest/src/main/resources/META-INF/services/org.apache.ignite.internal.configuration.ConfigurationModule
index 685b7b2a06..17fdec3caa 100644
--- a/modules/runner/src/test/resources/META-INF/services/org.apache.ignite.internal.configuration.ConfigurationModule
+++ b/modules/rest/src/main/resources/META-INF/services/org.apache.ignite.internal.configuration.ConfigurationModule
@@ -1,10 +1,10 @@
 #
 # Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
+# contributor license agreements. See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
 # The ASF licenses this file to You under the Apache License, Version 2.0
 # (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
+# the License. You may obtain a copy of the License at
 #
 #      http://www.apache.org/licenses/LICENSE-2.0
 #
@@ -14,4 +14,4 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 #
-org.apache.ignite.internal.configuration.TestConfigurationModule
+org.apache.ignite.internal.rest.configuration.RestConfigurationModule
diff --git a/modules/runner/build.gradle b/modules/runner/build.gradle
index 1154be5186..06da07f691 100644
--- a/modules/runner/build.gradle
+++ b/modules/runner/build.gradle
@@ -82,6 +82,7 @@ dependencies {
     integrationTestImplementation project(':ignite-raft-client')
     integrationTestImplementation project(':ignite-client')
     integrationTestImplementation(testFixtures(project(':ignite-core')))
+    integrationTestImplementation(testFixtures(project(':ignite-configuration')))
     integrationTestImplementation(testFixtures(project(':ignite-schema')))
     integrationTestImplementation(testFixtures(project(':ignite-cluster-management')))
     integrationTestImplementation(testFixtures(project(':ignite-metastorage-server')))
diff --git a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/configuration/ItDistributedConfigurationPropertiesTest.java b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/configuration/ItDistributedConfigurationPropertiesTest.java
index e23456df53..7e89f9aedd 100644
--- a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/configuration/ItDistributedConfigurationPropertiesTest.java
+++ b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/configuration/ItDistributedConfigurationPropertiesTest.java
@@ -41,10 +41,13 @@ import org.apache.ignite.internal.cluster.management.ClusterManagementGroupManag
 import org.apache.ignite.internal.cluster.management.raft.ConcurrentMapClusterStateStorage;
 import org.apache.ignite.internal.configuration.storage.ConfigurationStorageListener;
 import org.apache.ignite.internal.configuration.storage.DistributedConfigurationStorage;
+import org.apache.ignite.internal.configuration.testframework.ConfigurationExtension;
+import org.apache.ignite.internal.configuration.testframework.InjectConfiguration;
 import org.apache.ignite.internal.manager.IgniteComponent;
 import org.apache.ignite.internal.metastorage.MetaStorageManager;
 import org.apache.ignite.internal.metastorage.server.SimpleInMemoryKeyValueStorage;
 import org.apache.ignite.internal.raft.Loza;
+import org.apache.ignite.internal.raft.configuration.RaftConfiguration;
 import org.apache.ignite.internal.testframework.WorkDirectory;
 import org.apache.ignite.internal.testframework.WorkDirectoryExtension;
 import org.apache.ignite.internal.util.IgniteUtils;
@@ -65,6 +68,7 @@ import org.junit.jupiter.api.extension.ExtendWith;
  * Integration test for checking different aspects of distributed configuration.
  */
 @ExtendWith(WorkDirectoryExtension.class)
+@ExtendWith(ConfigurationExtension.class)
 public class ItDistributedConfigurationPropertiesTest {
     /** Test distributed configuration schema. */
     @ConfigurationRoot(rootName = "root", type = ConfigurationType.DISTRIBUTED)
@@ -73,6 +77,9 @@ public class ItDistributedConfigurationPropertiesTest {
         public String str = "foo";
     }
 
+    @InjectConfiguration
+    private static RaftConfiguration raftConfiguration;
+
     /**
      * An emulation of an Ignite node, that only contains components necessary for tests.
      */
@@ -99,7 +106,8 @@ public class ItDistributedConfigurationPropertiesTest {
                 TestInfo testInfo,
                 Path workDir,
                 NetworkAddress addr,
-                List<NetworkAddress> memberAddrs
+                List<NetworkAddress> memberAddrs,
+                RaftConfiguration raftConfiguration
         ) {
             vaultManager = new VaultManager(new InMemoryVaultService());
 
@@ -109,7 +117,7 @@ public class ItDistributedConfigurationPropertiesTest {
                     new StaticNodeFinder(memberAddrs)
             );
 
-            raftManager = new Loza(clusterService, workDir);
+            raftManager = new Loza(clusterService, raftConfiguration, workDir);
 
             cmgManager = new ClusterManagementGroupManager(
                     vaultManager,
@@ -213,14 +221,16 @@ public class ItDistributedConfigurationPropertiesTest {
                 testInfo,
                 workDir.resolve("firstNode"),
                 firstNodeAddr,
-                allNodes
+                allNodes,
+                raftConfiguration
         );
 
         secondNode = new Node(
                 testInfo,
                 workDir.resolve("secondNode"),
                 secondNodeAddr,
-                allNodes
+                allNodes,
+                raftConfiguration
         );
 
         firstNode.start();
diff --git a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/configuration/storage/ItDistributedConfigurationStorageTest.java b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/configuration/storage/ItDistributedConfigurationStorageTest.java
index 1079da25cd..73a8de9750 100644
--- a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/configuration/storage/ItDistributedConfigurationStorageTest.java
+++ b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/configuration/storage/ItDistributedConfigurationStorageTest.java
@@ -32,10 +32,13 @@ import java.util.concurrent.CompletableFuture;
 import java.util.stream.Stream;
 import org.apache.ignite.internal.cluster.management.ClusterManagementGroupManager;
 import org.apache.ignite.internal.cluster.management.raft.ConcurrentMapClusterStateStorage;
+import org.apache.ignite.internal.configuration.testframework.ConfigurationExtension;
+import org.apache.ignite.internal.configuration.testframework.InjectConfiguration;
 import org.apache.ignite.internal.manager.IgniteComponent;
 import org.apache.ignite.internal.metastorage.MetaStorageManager;
 import org.apache.ignite.internal.metastorage.server.SimpleInMemoryKeyValueStorage;
 import org.apache.ignite.internal.raft.Loza;
+import org.apache.ignite.internal.raft.configuration.RaftConfiguration;
 import org.apache.ignite.internal.testframework.WorkDirectory;
 import org.apache.ignite.internal.testframework.WorkDirectoryExtension;
 import org.apache.ignite.internal.vault.VaultManager;
@@ -52,7 +55,11 @@ import org.junit.jupiter.api.extension.ExtendWith;
  * Tests for the {@link DistributedConfigurationStorage}.
  */
 @ExtendWith(WorkDirectoryExtension.class)
+@ExtendWith(ConfigurationExtension.class)
 public class ItDistributedConfigurationStorageTest {
+    @InjectConfiguration
+    private static RaftConfiguration raftConfiguration;
+
     /**
      * An emulation of an Ignite node, that only contains components necessary for tests.
      */
@@ -83,7 +90,7 @@ public class ItDistributedConfigurationStorageTest {
                     new StaticNodeFinder(List.of(addr))
             );
 
-            raftManager = new Loza(clusterService, workDir);
+            raftManager = new Loza(clusterService, raftConfiguration, workDir);
 
             cmgManager = new ClusterManagementGroupManager(
                     vaultManager,
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 5cb7f04af7..7d8916680f 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
@@ -43,23 +43,24 @@ import org.apache.ignite.configuration.schemas.network.NetworkConfiguration;
 import org.apache.ignite.configuration.schemas.rest.RestConfiguration;
 import org.apache.ignite.configuration.schemas.store.UnknownDataStorageConfigurationSchema;
 import org.apache.ignite.configuration.schemas.table.ConstantValueDefaultConfigurationSchema;
-import org.apache.ignite.configuration.schemas.table.EntryCountBudgetConfigurationSchema;
 import org.apache.ignite.configuration.schemas.table.FunctionCallDefaultConfigurationSchema;
 import org.apache.ignite.configuration.schemas.table.HashIndexConfigurationSchema;
 import org.apache.ignite.configuration.schemas.table.NullValueDefaultConfigurationSchema;
 import org.apache.ignite.configuration.schemas.table.TablesConfiguration;
-import org.apache.ignite.configuration.schemas.table.UnlimitedBudgetConfigurationSchema;
 import org.apache.ignite.internal.baseline.BaselineManager;
 import org.apache.ignite.internal.cluster.management.ClusterManagementGroupManager;
 import org.apache.ignite.internal.cluster.management.raft.ConcurrentMapClusterStateStorage;
 import org.apache.ignite.internal.configuration.ConfigurationManager;
 import org.apache.ignite.internal.configuration.schema.ExtendedTableConfiguration;
 import org.apache.ignite.internal.configuration.schema.ExtendedTableConfigurationSchema;
+import org.apache.ignite.internal.configuration.testframework.ConfigurationExtension;
+import org.apache.ignite.internal.configuration.testframework.InjectConfiguration;
 import org.apache.ignite.internal.manager.IgniteComponent;
 import org.apache.ignite.internal.metastorage.MetaStorageManager;
 import org.apache.ignite.internal.metastorage.server.SimpleInMemoryKeyValueStorage;
 import org.apache.ignite.internal.pagememory.configuration.schema.UnsafeMemoryAllocatorConfigurationSchema;
 import org.apache.ignite.internal.raft.Loza;
+import org.apache.ignite.internal.raft.configuration.RaftConfiguration;
 import org.apache.ignite.internal.raft.server.impl.JraftServerImpl;
 import org.apache.ignite.internal.raft.storage.impl.LocalLogStorageFactory;
 import org.apache.ignite.internal.schema.SchemaManager;
@@ -104,6 +105,7 @@ import org.junit.jupiter.api.extension.ExtendWith;
  * Test suite for rebalance process, when replicas' number changed.
  */
 @ExtendWith(WorkDirectoryExtension.class)
+@ExtendWith(ConfigurationExtension.class)
 public class ItRebalanceDistributedTest {
 
     public static final int BASE_PORT = 20_000;
@@ -114,6 +116,9 @@ public class ItRebalanceDistributedTest {
 
     private static List<Node> nodes;
 
+    @InjectConfiguration
+    private static RaftConfiguration raftConfiguration;
+
     @BeforeEach
     private void before(@WorkDirectory Path workDir, TestInfo testInfo) throws Exception {
         nodes = new ArrayList<>();
@@ -127,7 +132,7 @@ public class ItRebalanceDistributedTest {
         finder = new StaticNodeFinder(nodeAddresses);
 
         for (NetworkAddress addr : nodeAddresses) {
-            var node = new Node(testInfo, workDir, addr);
+            var node = new Node(testInfo, workDir, addr, raftConfiguration);
 
             nodes.add(node);
 
@@ -384,7 +389,7 @@ public class ItRebalanceDistributedTest {
         /**
          * Constructor that simply creates a subset of components of this node.
          */
-        Node(TestInfo testInfo, Path workDir, NetworkAddress addr) {
+        Node(TestInfo testInfo, Path workDir, NetworkAddress addr, RaftConfiguration raftConfiguration) {
 
             name = testNodeName(testInfo, addr.port());
 
@@ -410,7 +415,7 @@ public class ItRebalanceDistributedTest {
 
             lockManager = new HeapLockManager();
 
-            raftManager = new Loza(clusterService, dir);
+            raftManager = new Loza(clusterService, raftConfiguration, dir);
 
             txManager = new TableTxManagerImpl(clusterService, lockManager);
 
@@ -445,9 +450,7 @@ public class ItRebalanceDistributedTest {
                             HashIndexConfigurationSchema.class,
                             ConstantValueDefaultConfigurationSchema.class,
                             FunctionCallDefaultConfigurationSchema.class,
-                            NullValueDefaultConfigurationSchema.class,
-                            UnlimitedBudgetConfigurationSchema.class,
-                            EntryCountBudgetConfigurationSchema.class
+                            NullValueDefaultConfigurationSchema.class
                     )
             );
 
diff --git a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/inmemory/ItRaftStorageVolatilityTest.java b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/inmemory/ItRaftStorageVolatilityTest.java
index e693f2315b..82fc038a51 100644
--- a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/inmemory/ItRaftStorageVolatilityTest.java
+++ b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/inmemory/ItRaftStorageVolatilityTest.java
@@ -39,6 +39,7 @@ import java.util.stream.Stream;
 import org.apache.ignite.configuration.schemas.table.EntryCountBudgetChange;
 import org.apache.ignite.internal.AbstractClusterIntegrationTest;
 import org.apache.ignite.internal.app.IgniteImpl;
+import org.apache.ignite.internal.raft.configuration.RaftConfiguration;
 import org.apache.ignite.internal.schema.testutils.SchemaConfigurationConverter;
 import org.apache.ignite.internal.schema.testutils.builder.SchemaBuilders;
 import org.apache.ignite.internal.schema.testutils.definition.ColumnType;
@@ -216,6 +217,12 @@ class ItRaftStorageVolatilityTest extends AbstractClusterIntegrationTest {
 
     @Test
     void logSpillsOutToDisk() {
+        node(0).nodeConfiguration().getConfiguration(RaftConfiguration.KEY).change(cfg -> {
+            cfg.changeVolatileRaft(change -> {
+                change.changeLogStorage(budgetChange -> budgetChange.convert(EntryCountBudgetChange.class).changeEntriesCountLimit(1));
+            });
+        });
+
         createTableWithMaxOneInMemoryEntryAllowed("PERSON");
 
         executeSql("INSERT INTO PERSON(ID, NAME) VALUES (1, 'JOHN')");
@@ -233,11 +240,6 @@ class ItRaftStorageVolatilityTest extends AbstractClusterIntegrationTest {
                     .changePartitions(1)
                     .changeDataStorage(storageChange -> {
                         storageChange.convert(VolatilePageMemoryDataStorageChange.class);
-                    })
-                    .changeVolatileRaft(raftChange -> {
-                        raftChange.changeLogStorage(budgetChange -> {
-                            budgetChange.convert(EntryCountBudgetChange.class).changeEntriesCountLimit(1);
-                        });
                     });
         }));
     }
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 badde4e77c..69cd50d6a1 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
@@ -62,11 +62,14 @@ import org.apache.ignite.internal.configuration.ServiceLoaderModulesProvider;
 import org.apache.ignite.internal.configuration.storage.ConfigurationStorage;
 import org.apache.ignite.internal.configuration.storage.DistributedConfigurationStorage;
 import org.apache.ignite.internal.configuration.storage.LocalConfigurationStorage;
+import org.apache.ignite.internal.configuration.testframework.ConfigurationExtension;
+import org.apache.ignite.internal.configuration.testframework.InjectConfiguration;
 import org.apache.ignite.internal.logger.IgniteLogger;
 import org.apache.ignite.internal.manager.IgniteComponent;
 import org.apache.ignite.internal.metastorage.MetaStorageManager;
 import org.apache.ignite.internal.metastorage.server.persistence.RocksDbKeyValueStorage;
 import org.apache.ignite.internal.raft.Loza;
+import org.apache.ignite.internal.raft.configuration.RaftConfiguration;
 import org.apache.ignite.internal.raft.storage.impl.LocalLogStorageFactory;
 import org.apache.ignite.internal.recovery.ConfigurationCatchUpListener;
 import org.apache.ignite.internal.recovery.RecoveryCompletionFutureFactory;
@@ -104,11 +107,13 @@ import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.TestInfo;
+import org.junit.jupiter.api.extension.ExtendWith;
 
 /**
  * These tests check node restart scenarios.
  */
 @WithSystemProperty(key = CONFIGURATION_CATCH_UP_DIFFERENCE_PROPERTY, value = "0")
+@ExtendWith(ConfigurationExtension.class)
 public class ItIgniteNodeRestartTest extends IgniteAbstractTest {
     /** Default node port. */
     private static final int DEFAULT_NODE_PORT = 3344;
@@ -136,6 +141,9 @@ public class ItIgniteNodeRestartTest extends IgniteAbstractTest {
     /** Cluster nodes. */
     private List<IgniteComponent> partialNode = null;
 
+    @InjectConfiguration
+    private static RaftConfiguration raftConfiguration;
+
     /**
      * Stops all started nodes.
      */
@@ -217,7 +225,7 @@ public class ItIgniteNodeRestartTest extends IgniteAbstractTest {
                 nettyBootstrapFactory
         );
 
-        var raftMgr = new Loza(clusterSvc, dir);
+        var raftMgr = new Loza(clusterSvc, raftConfiguration, dir);
 
         var txManager = new TableTxManagerImpl(clusterSvc, new HeapLockManager());
 
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 4040f5a865..b87e8d4738 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
@@ -62,6 +62,7 @@ import org.apache.ignite.internal.metastorage.server.persistence.RocksDbKeyValue
 import org.apache.ignite.internal.metrics.MetricManager;
 import org.apache.ignite.internal.metrics.configuration.MetricConfiguration;
 import org.apache.ignite.internal.raft.Loza;
+import org.apache.ignite.internal.raft.configuration.RaftConfiguration;
 import org.apache.ignite.internal.raft.storage.impl.VolatileLogStorageFactoryCreator;
 import org.apache.ignite.internal.recovery.ConfigurationCatchUpListener;
 import org.apache.ignite.internal.recovery.RecoveryCompletionFutureFactory;
@@ -264,7 +265,7 @@ public class IgniteImpl implements Ignite {
                 nodeCfgMgr.configurationRegistry().getConfiguration(ComputeConfiguration.KEY)
         );
 
-        raftMgr = new Loza(clusterSvc, workDir);
+        raftMgr = new Loza(clusterSvc, nodeCfgMgr.configurationRegistry().getConfiguration(RaftConfiguration.KEY), workDir);
 
         txManager = new TableTxManagerImpl(clusterSvc, new HeapLockManager());
 
diff --git a/modules/runner/src/main/resources/META-INF/services/org.apache.ignite.internal.configuration.ConfigurationModule b/modules/runner/src/main/resources/META-INF/services/org.apache.ignite.internal.configuration.ConfigurationModule
index cf110c9c66..334eaa2221 100644
--- a/modules/runner/src/main/resources/META-INF/services/org.apache.ignite.internal.configuration.ConfigurationModule
+++ b/modules/runner/src/main/resources/META-INF/services/org.apache.ignite.internal.configuration.ConfigurationModule
@@ -1,10 +1,10 @@
 #
 # Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
+# contributor license agreements. See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
 # The ASF licenses this file to You under the Apache License, Version 2.0
 # (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
+# the License. You may obtain a copy of the License at
 #
 #      http://www.apache.org/licenses/LICENSE-2.0
 #
@@ -14,5 +14,3 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 #
-org.apache.ignite.internal.configuration.CoreLocalConfigurationModule
-org.apache.ignite.internal.configuration.CoreDistributedConfigurationModule
diff --git a/modules/runner/src/test/java/org/apache/ignite/internal/configuration/CoreDistributedConfigurationModuleTest.java b/modules/runner/src/test/java/org/apache/ignite/internal/configuration/CoreDistributedConfigurationModuleTest.java
deleted file mode 100644
index 24cb1fc8ca..0000000000
--- a/modules/runner/src/test/java/org/apache/ignite/internal/configuration/CoreDistributedConfigurationModuleTest.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.configuration;
-
-import static com.github.npathai.hamcrestopt.OptionalMatchers.isPresent;
-import static org.apache.ignite.configuration.annotation.ConfigurationType.DISTRIBUTED;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.anEmptyMap;
-import static org.hamcrest.Matchers.empty;
-import static org.hamcrest.Matchers.hasItem;
-import static org.hamcrest.Matchers.is;
-import static org.hamcrest.Matchers.not;
-
-import java.util.Optional;
-import java.util.ServiceLoader;
-import java.util.ServiceLoader.Provider;
-import org.apache.ignite.configuration.schemas.table.HashIndexConfigurationSchema;
-import org.apache.ignite.configuration.schemas.table.SortedIndexConfigurationSchema;
-import org.apache.ignite.configuration.schemas.table.TablesConfiguration;
-import org.junit.jupiter.api.Test;
-
-/**
- * Tests for {@link CoreDistributedConfigurationModule}.
- */
-class CoreDistributedConfigurationModuleTest {
-    private final CoreDistributedConfigurationModule module = new CoreDistributedConfigurationModule();
-
-    @Test
-    void typeIsDistributed() {
-        assertThat(module.type(), is(DISTRIBUTED));
-    }
-
-    @Test
-    void hasTablesConfigurationRoot() {
-        assertThat(module.rootKeys(), hasItem(TablesConfiguration.KEY));
-    }
-
-    @Test
-    void providesNoValidators() {
-        assertThat(module.validators(), not(anEmptyMap()));
-    }
-
-    @Test
-    void providesNoInternalSchemaExtensions() {
-        assertThat(module.internalSchemaExtensions(), is(empty()));
-    }
-
-    @Test
-    void providesHashIndexConfigurationSchemaAsPolymorphicExtension() {
-        assertThat(module.polymorphicSchemaExtensions(), hasItem(HashIndexConfigurationSchema.class));
-    }
-
-    @Test
-    void providesSortedIndexConfigurationSchemaAsPolymorphicExtension() {
-        assertThat(module.polymorphicSchemaExtensions(), hasItem(SortedIndexConfigurationSchema.class));
-    }
-
-    @Test
-    void isLoadedByServiceLoader() {
-        Optional<ConfigurationModule> maybeModule = ServiceLoader.load(ConfigurationModule.class).stream()
-                .map(Provider::get)
-                .filter(module -> module instanceof CoreDistributedConfigurationModule)
-                .findAny();
-
-        assertThat(maybeModule, isPresent());
-    }
-}
diff --git a/modules/runner/src/test/java/org/apache/ignite/internal/configuration/CoreLocalConfigurationModuleTest.java b/modules/runner/src/test/java/org/apache/ignite/internal/configuration/CoreLocalConfigurationModuleTest.java
deleted file mode 100644
index c7d97356ea..0000000000
--- a/modules/runner/src/test/java/org/apache/ignite/internal/configuration/CoreLocalConfigurationModuleTest.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.configuration;
-
-import static com.github.npathai.hamcrestopt.OptionalMatchers.isPresent;
-import static org.apache.ignite.configuration.annotation.ConfigurationType.LOCAL;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.anEmptyMap;
-import static org.hamcrest.Matchers.empty;
-import static org.hamcrest.Matchers.hasItem;
-import static org.hamcrest.Matchers.is;
-
-import java.util.Optional;
-import java.util.ServiceLoader;
-import java.util.ServiceLoader.Provider;
-import org.apache.ignite.configuration.schemas.clientconnector.ClientConnectorConfiguration;
-import org.apache.ignite.configuration.schemas.compute.ComputeConfiguration;
-import org.apache.ignite.configuration.schemas.network.NetworkConfiguration;
-import org.apache.ignite.configuration.schemas.rest.RestConfiguration;
-import org.junit.jupiter.api.Test;
-
-/**
- * Tests for {@link CoreLocalConfigurationModule}.
- */
-class CoreLocalConfigurationModuleTest {
-    private final CoreLocalConfigurationModule module = new CoreLocalConfigurationModule();
-
-    @Test
-    void typeIsLocal() {
-        assertThat(module.type(), is(LOCAL));
-    }
-
-    @Test
-    void hasNetworkConfigurationRoot() {
-        assertThat(module.rootKeys(), hasItem(NetworkConfiguration.KEY));
-    }
-
-    @Test
-    void hasRestConfigurationRoot() {
-        assertThat(module.rootKeys(), hasItem(RestConfiguration.KEY));
-    }
-
-    @Test
-    void hasClientConnectorConfigurationRoot() {
-        assertThat(module.rootKeys(), hasItem(ClientConnectorConfiguration.KEY));
-    }
-
-    @Test
-    void hasComputeConfigurationRoot() {
-        assertThat(module.rootKeys(), hasItem(ComputeConfiguration.KEY));
-    }
-
-    @Test
-    void providesNoValidators() {
-        assertThat(module.validators(), is(anEmptyMap()));
-    }
-
-    @Test
-    void providesNoInternalSchemaExtensions() {
-        assertThat(module.internalSchemaExtensions(), is(empty()));
-    }
-
-    @Test
-    void providesNoPolymorphicSchemaExtensions() {
-        assertThat(module.polymorphicSchemaExtensions(), is(empty()));
-    }
-
-    @Test
-    void isLoadedByServiceLoader() {
-        Optional<ConfigurationModule> maybeModule = ServiceLoader.load(ConfigurationModule.class).stream()
-                .map(Provider::get)
-                .filter(module -> module instanceof CoreLocalConfigurationModule)
-                .findAny();
-
-        assertThat(maybeModule, isPresent());
-    }
-}
diff --git a/modules/runner/src/test/resources/META-INF/services/org.apache.ignite.internal.configuration.ConfigurationModule b/modules/runner/src/test/resources/META-INF/services/org.apache.ignite.internal.configuration.ConfigurationModule
index 685b7b2a06..282191e292 100644
--- a/modules/runner/src/test/resources/META-INF/services/org.apache.ignite.internal.configuration.ConfigurationModule
+++ b/modules/runner/src/test/resources/META-INF/services/org.apache.ignite.internal.configuration.ConfigurationModule
@@ -1,10 +1,10 @@
 #
 # Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
+# contributor license agreements. See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
 # The ASF licenses this file to You under the Apache License, Version 2.0
 # (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
+# the License. You may obtain a copy of the License at
 #
 #      http://www.apache.org/licenses/LICENSE-2.0
 #
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 68d42420f1..06c2f23044 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
@@ -22,13 +22,17 @@ import java.util.Collection;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import org.apache.ignite.configuration.RootKey;
 import org.apache.ignite.configuration.annotation.ConfigurationType;
+import org.apache.ignite.configuration.schemas.store.KnownDataStorage;
+import org.apache.ignite.configuration.schemas.store.UnknownDataStorageConfigurationSchema;
 import org.apache.ignite.configuration.schemas.table.ColumnTypeValidator;
 import org.apache.ignite.configuration.schemas.table.ConstantValueDefaultConfigurationSchema;
 import org.apache.ignite.configuration.schemas.table.FunctionCallDefaultConfigurationSchema;
 import org.apache.ignite.configuration.schemas.table.IndexValidator;
 import org.apache.ignite.configuration.schemas.table.NullValueDefaultConfigurationSchema;
 import org.apache.ignite.configuration.schemas.table.TableValidator;
+import org.apache.ignite.configuration.schemas.table.TablesConfiguration;
 import org.apache.ignite.configuration.validation.Validator;
 import org.apache.ignite.internal.configuration.ConfigurationModule;
 
@@ -42,10 +46,16 @@ public class SchemaDistributedConfigurationModule implements ConfigurationModule
         return ConfigurationType.DISTRIBUTED;
     }
 
+    @Override
+    public Collection<RootKey<?, ?>> rootKeys() {
+        return List.of(TablesConfiguration.KEY);
+    }
+
     /** {@inheritDoc} */
     @Override
     public Map<Class<? extends Annotation>, Set<Validator<? extends Annotation, ?>>> validators() {
         return Map.of(
+                KnownDataStorage.class, Set.of(new KnownDataStorageValidator()),
                 TableValidator.class, Set.of(TableValidatorImpl.INSTANCE),
                 ColumnTypeValidator.class, Set.of(ColumnTypeValidatorImpl.INSTANCE),
                 IndexValidator.class, Set.of(IndexValidatorImpl.INSTANCE)
@@ -56,6 +66,7 @@ public class SchemaDistributedConfigurationModule implements ConfigurationModule
     @Override
     public Collection<Class<?>> polymorphicSchemaExtensions() {
         return List.of(
+                UnknownDataStorageConfigurationSchema.class,
                 ConstantValueDefaultConfigurationSchema.class,
                 FunctionCallDefaultConfigurationSchema.class,
                 NullValueDefaultConfigurationSchema.class
diff --git a/modules/schema/src/main/resources/META-INF/services/org.apache.ignite.internal.configuration.ConfigurationModule b/modules/schema/src/main/resources/META-INF/services/org.apache.ignite.internal.configuration.ConfigurationModule
index 86abc557f9..fa2496bd14 100644
--- a/modules/schema/src/main/resources/META-INF/services/org.apache.ignite.internal.configuration.ConfigurationModule
+++ b/modules/schema/src/main/resources/META-INF/services/org.apache.ignite.internal.configuration.ConfigurationModule
@@ -1,10 +1,10 @@
 #
 # Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
+# contributor license agreements. See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
 # The ASF licenses this file to You under the Apache License, Version 2.0
 # (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
+# the License. You may obtain a copy of the License at
 #
 #      http://www.apache.org/licenses/LICENSE-2.0
 #
diff --git a/modules/schema/src/test/java/org/apache/ignite/internal/schema/configuration/AbstractTableIndexValidatorTest.java b/modules/schema/src/test/java/org/apache/ignite/internal/schema/configuration/AbstractTableIndexValidatorTest.java
index 9aa0096a05..b518669983 100644
--- a/modules/schema/src/test/java/org/apache/ignite/internal/schema/configuration/AbstractTableIndexValidatorTest.java
+++ b/modules/schema/src/test/java/org/apache/ignite/internal/schema/configuration/AbstractTableIndexValidatorTest.java
@@ -17,18 +17,11 @@
 
 package org.apache.ignite.internal.schema.configuration;
 
-import org.apache.ignite.configuration.schemas.store.UnknownDataStorageConfigurationSchema;
-import org.apache.ignite.configuration.schemas.table.ConstantValueDefaultConfigurationSchema;
-import org.apache.ignite.configuration.schemas.table.EntryCountBudgetConfigurationSchema;
-import org.apache.ignite.configuration.schemas.table.FunctionCallDefaultConfigurationSchema;
 import org.apache.ignite.configuration.schemas.table.HashIndexConfigurationSchema;
-import org.apache.ignite.configuration.schemas.table.NullValueDefaultConfigurationSchema;
 import org.apache.ignite.configuration.schemas.table.SortedIndexConfigurationSchema;
 import org.apache.ignite.configuration.schemas.table.TablesConfiguration;
-import org.apache.ignite.configuration.schemas.table.UnlimitedBudgetConfigurationSchema;
 import org.apache.ignite.internal.configuration.testframework.ConfigurationExtension;
 import org.apache.ignite.internal.configuration.testframework.InjectConfiguration;
-import org.apache.ignite.internal.schema.configuration.schema.TestDataStorageConfigurationSchema;
 import org.apache.ignite.internal.schema.testutils.SchemaConfigurationConverter;
 import org.apache.ignite.internal.schema.testutils.builder.SchemaBuilders;
 import org.apache.ignite.internal.schema.testutils.builder.TableDefinitionBuilder;
@@ -47,13 +40,6 @@ public class AbstractTableIndexValidatorTest {
             polymorphicExtensions = {
                     HashIndexConfigurationSchema.class,
                     SortedIndexConfigurationSchema.class,
-                    UnknownDataStorageConfigurationSchema.class,
-                    TestDataStorageConfigurationSchema.class,
-                    ConstantValueDefaultConfigurationSchema.class,
-                    FunctionCallDefaultConfigurationSchema.class,
-                    NullValueDefaultConfigurationSchema.class,
-                    UnlimitedBudgetConfigurationSchema.class,
-                    EntryCountBudgetConfigurationSchema.class
             }
     )
     protected TablesConfiguration tablesCfg;
diff --git a/modules/schema/src/test/java/org/apache/ignite/internal/schema/configuration/ConfigurationToSchemaDescriptorConverterTest.java b/modules/schema/src/test/java/org/apache/ignite/internal/schema/configuration/ConfigurationToSchemaDescriptorConverterTest.java
index a1c1bbc11f..778d3c50e0 100644
--- a/modules/schema/src/test/java/org/apache/ignite/internal/schema/configuration/ConfigurationToSchemaDescriptorConverterTest.java
+++ b/modules/schema/src/test/java/org/apache/ignite/internal/schema/configuration/ConfigurationToSchemaDescriptorConverterTest.java
@@ -21,17 +21,14 @@ import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.Matchers.equalTo;
 
 import java.util.ArrayList;
-import org.apache.ignite.configuration.schemas.store.UnknownDataStorageConfigurationSchema;
 import org.apache.ignite.configuration.schemas.table.ColumnDefaultConfigurationSchema;
 import org.apache.ignite.configuration.schemas.table.ColumnDefaultView;
 import org.apache.ignite.configuration.schemas.table.ColumnTypeView;
 import org.apache.ignite.configuration.schemas.table.ColumnView;
 import org.apache.ignite.configuration.schemas.table.ConstantValueDefaultView;
 import org.apache.ignite.configuration.schemas.table.FunctionCallDefaultView;
-import org.apache.ignite.configuration.schemas.table.NullValueDefaultConfigurationSchema;
 import org.apache.ignite.configuration.schemas.table.NullValueDefaultView;
 import org.apache.ignite.configuration.schemas.table.TableConfiguration;
-import org.apache.ignite.configuration.schemas.table.UnlimitedBudgetConfigurationSchema;
 import org.apache.ignite.internal.configuration.testframework.ConfigurationExtension;
 import org.apache.ignite.internal.configuration.testframework.InjectConfiguration;
 import org.apache.ignite.internal.schema.BitmaskNativeType;
@@ -125,11 +122,6 @@ public class ConfigurationToSchemaDescriptorConverterTest extends AbstractSchema
 
     @Test
     public void convertTableView(@InjectConfiguration(
-            polymorphicExtensions = {
-                    UnknownDataStorageConfigurationSchema.class,
-                    NullValueDefaultConfigurationSchema.class,
-                    UnlimitedBudgetConfigurationSchema.class
-            },
             value = "mock {"
                     + "primaryKey {columns=[K1, K2], colocationColumns=[K2]},"
                     + "columns: ["
diff --git a/modules/schema/src/test/java/org/apache/ignite/internal/schema/configuration/KnownDataStorageValidatorTest.java b/modules/schema/src/test/java/org/apache/ignite/internal/schema/configuration/KnownDataStorageValidatorTest.java
index d4f93736cf..351bbabf59 100644
--- a/modules/schema/src/test/java/org/apache/ignite/internal/schema/configuration/KnownDataStorageValidatorTest.java
+++ b/modules/schema/src/test/java/org/apache/ignite/internal/schema/configuration/KnownDataStorageValidatorTest.java
@@ -25,7 +25,6 @@ import static org.mockito.Mockito.mock;
 import org.apache.ignite.configuration.schemas.store.DataStorageConfiguration;
 import org.apache.ignite.configuration.schemas.store.DataStorageView;
 import org.apache.ignite.configuration.schemas.store.KnownDataStorage;
-import org.apache.ignite.configuration.schemas.store.UnknownDataStorageConfigurationSchema;
 import org.apache.ignite.internal.configuration.testframework.ConfigurationExtension;
 import org.apache.ignite.internal.configuration.testframework.InjectConfiguration;
 import org.apache.ignite.internal.schema.configuration.schema.TestDataStorageChange;
@@ -39,7 +38,9 @@ import org.junit.jupiter.api.extension.ExtendWith;
 @ExtendWith(ConfigurationExtension.class)
 public class KnownDataStorageValidatorTest {
     @InjectConfiguration(
-            polymorphicExtensions = {UnknownDataStorageConfigurationSchema.class, TestDataStorageConfigurationSchema.class}
+            polymorphicExtensions = {
+                TestDataStorageConfigurationSchema.class
+            }
     )
     private DataStorageConfiguration dataStorageConfig;
 
diff --git a/modules/schema/src/test/java/org/apache/ignite/internal/schema/configuration/SchemaDistributedConfigurationModuleTest.java b/modules/schema/src/test/java/org/apache/ignite/internal/schema/configuration/SchemaDistributedConfigurationModuleTest.java
index 073f68e86b..c95e6a0048 100644
--- a/modules/schema/src/test/java/org/apache/ignite/internal/schema/configuration/SchemaDistributedConfigurationModuleTest.java
+++ b/modules/schema/src/test/java/org/apache/ignite/internal/schema/configuration/SchemaDistributedConfigurationModuleTest.java
@@ -47,11 +47,6 @@ class SchemaDistributedConfigurationModuleTest {
         assertThat(module.type(), is(DISTRIBUTED));
     }
 
-    @Test
-    void hasNoConfigurationRoots() {
-        assertThat(module.rootKeys(), is(empty()));
-    }
-
     @Test
     void providesTableValidator() {
         assertThat(module.validators(), hasEntry(is(TableValidator.class), hasItem(instanceOf(TableValidatorImpl.class))));
diff --git a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/StopCalciteModuleTest.java b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/StopCalciteModuleTest.java
index fd61fd3a13..1a6f511b8d 100644
--- a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/StopCalciteModuleTest.java
+++ b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/StopCalciteModuleTest.java
@@ -45,15 +45,8 @@ import java.util.concurrent.Flow;
 import java.util.function.Consumer;
 import java.util.function.Function;
 import org.apache.ignite.configuration.ConfigurationValue;
-import org.apache.ignite.configuration.schemas.store.UnknownDataStorageConfigurationSchema;
-import org.apache.ignite.configuration.schemas.table.ConstantValueDefaultConfigurationSchema;
-import org.apache.ignite.configuration.schemas.table.EntryCountBudgetConfigurationSchema;
-import org.apache.ignite.configuration.schemas.table.FunctionCallDefaultConfigurationSchema;
-import org.apache.ignite.configuration.schemas.table.HashIndexConfigurationSchema;
-import org.apache.ignite.configuration.schemas.table.NullValueDefaultConfigurationSchema;
 import org.apache.ignite.configuration.schemas.table.TableConfiguration;
 import org.apache.ignite.configuration.schemas.table.TablesConfiguration;
-import org.apache.ignite.configuration.schemas.table.UnlimitedBudgetConfigurationSchema;
 import org.apache.ignite.internal.configuration.testframework.ConfigurationExtension;
 import org.apache.ignite.internal.configuration.testframework.InjectConfiguration;
 import org.apache.ignite.internal.index.IndexManager;
@@ -136,15 +129,7 @@ public class StopCalciteModuleTest {
 
     TestRevisionRegister testRevisionRegister = new TestRevisionRegister();
 
-    @InjectConfiguration(polymorphicExtensions = {
-            HashIndexConfigurationSchema.class,
-            UnknownDataStorageConfigurationSchema.class,
-            ConstantValueDefaultConfigurationSchema.class,
-            FunctionCallDefaultConfigurationSchema.class,
-            NullValueDefaultConfigurationSchema.class,
-            UnlimitedBudgetConfigurationSchema.class,
-            EntryCountBudgetConfigurationSchema.class
-    })
+    @InjectConfiguration
     TablesConfiguration tablesConfig;
 
     /**
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 953cf545f1..6989459296 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
@@ -49,20 +49,11 @@ import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.TimeUnit;
 import java.util.function.Consumer;
 import java.util.function.Function;
-import org.apache.ignite.configuration.schemas.store.UnknownDataStorageConfigurationSchema;
-import org.apache.ignite.configuration.schemas.table.ConstantValueDefaultConfigurationSchema;
-import org.apache.ignite.configuration.schemas.table.EntryCountBudgetConfigurationSchema;
-import org.apache.ignite.configuration.schemas.table.FunctionCallDefaultConfigurationSchema;
-import org.apache.ignite.configuration.schemas.table.HashIndexConfigurationSchema;
-import org.apache.ignite.configuration.schemas.table.NullValueDefaultConfigurationSchema;
-import org.apache.ignite.configuration.schemas.table.SortedIndexConfigurationSchema;
 import org.apache.ignite.configuration.schemas.table.TableView;
 import org.apache.ignite.configuration.schemas.table.TablesConfiguration;
-import org.apache.ignite.configuration.schemas.table.UnlimitedBudgetConfigurationSchema;
 import org.apache.ignite.internal.baseline.BaselineManager;
 import org.apache.ignite.internal.configuration.ConfigurationRegistry;
 import org.apache.ignite.internal.configuration.notifications.ConfigurationStorageRevisionListenerHolder;
-import org.apache.ignite.internal.configuration.schema.ExtendedTableConfigurationSchema;
 import org.apache.ignite.internal.configuration.testframework.ConfigurationExtension;
 import org.apache.ignite.internal.configuration.testframework.InjectConfiguration;
 import org.apache.ignite.internal.configuration.testframework.InjectRevisionListenerHolder;
@@ -168,21 +159,7 @@ public class MockedStructuresTest extends IgniteAbstractTest {
     private Consumer<Function<Long, CompletableFuture<?>>> revisionUpdater;
 
     /** Tables configuration. */
-    @InjectConfiguration(
-            internalExtensions = ExtendedTableConfigurationSchema.class,
-            polymorphicExtensions = {
-                    HashIndexConfigurationSchema.class,
-                    SortedIndexConfigurationSchema.class,
-                    UnknownDataStorageConfigurationSchema.class,
-                    RocksDbDataStorageConfigurationSchema.class,
-                    TestDataStorageConfigurationSchema.class,
-                    ConstantValueDefaultConfigurationSchema.class,
-                    FunctionCallDefaultConfigurationSchema.class,
-                    NullValueDefaultConfigurationSchema.class,
-                    UnlimitedBudgetConfigurationSchema.class,
-                    EntryCountBudgetConfigurationSchema.class
-            }
-    )
+    @InjectConfiguration
     private TablesConfiguration tblsCfg;
 
     TableManager tblManager;
diff --git a/modules/storage-api/build.gradle b/modules/storage-api/build.gradle
index 4c6d89f45a..0e8bfb7ffd 100644
--- a/modules/storage-api/build.gradle
+++ b/modules/storage-api/build.gradle
@@ -31,6 +31,7 @@ dependencies {
     testAnnotationProcessor project(":ignite-configuration-annotation-processor")
     testImplementation project(':ignite-core')
     testImplementation project(':ignite-configuration')
+    testImplementation project(':ignite-index')
     testImplementation project(':ignite-schema')
     testImplementation(testFixtures(project(':ignite-schema')))
     testImplementation(testFixtures(project(':ignite-core')))
diff --git a/modules/storage-api/pom.xml b/modules/storage-api/pom.xml
index 8dcd25bde7..c51defcc35 100644
--- a/modules/storage-api/pom.xml
+++ b/modules/storage-api/pom.xml
@@ -87,6 +87,12 @@
             <scope>test</scope>
         </dependency>
 
+        <dependency>
+            <groupId>org.apache.ignite</groupId>
+            <artifactId>ignite-index</artifactId>
+            <scope>test</scope>
+        </dependency>
+
         <dependency>
             <groupId>org.apache.ignite</groupId>
             <artifactId>ignite-schema</artifactId>
diff --git a/modules/storage-api/src/main/resources/META-INF/services/org.apache.ignite.internal.configuration.ConfigurationModule b/modules/storage-api/src/main/resources/META-INF/services/org.apache.ignite.internal.configuration.ConfigurationModule
index fad3807f86..203038b927 100644
--- a/modules/storage-api/src/main/resources/META-INF/services/org.apache.ignite.internal.configuration.ConfigurationModule
+++ b/modules/storage-api/src/main/resources/META-INF/services/org.apache.ignite.internal.configuration.ConfigurationModule
@@ -1,10 +1,10 @@
 #
 # Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
+# contributor license agreements. See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
 # The ASF licenses this file to You under the Apache License, Version 2.0
 # (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
+# the License. You may obtain a copy of the License at
 #
 #      http://www.apache.org/licenses/LICENSE-2.0
 #
diff --git a/modules/storage-api/src/test/java/org/apache/ignite/internal/storage/DataStorageManagerTest.java b/modules/storage-api/src/test/java/org/apache/ignite/internal/storage/DataStorageManagerTest.java
index 2f3c8a207a..a74575f73e 100644
--- a/modules/storage-api/src/test/java/org/apache/ignite/internal/storage/DataStorageManagerTest.java
+++ b/modules/storage-api/src/test/java/org/apache/ignite/internal/storage/DataStorageManagerTest.java
@@ -38,15 +38,8 @@ import org.apache.ignite.configuration.ConfigurationWrongPolymorphicTypeIdExcept
 import org.apache.ignite.configuration.schemas.store.DataStorageConfiguration;
 import org.apache.ignite.configuration.schemas.store.DataStorageView;
 import org.apache.ignite.configuration.schemas.store.UnknownDataStorageChange;
-import org.apache.ignite.configuration.schemas.store.UnknownDataStorageConfigurationSchema;
 import org.apache.ignite.configuration.schemas.store.UnknownDataStorageView;
-import org.apache.ignite.configuration.schemas.table.ConstantValueDefaultConfigurationSchema;
-import org.apache.ignite.configuration.schemas.table.EntryCountBudgetConfigurationSchema;
-import org.apache.ignite.configuration.schemas.table.FunctionCallDefaultConfigurationSchema;
-import org.apache.ignite.configuration.schemas.table.HashIndexConfigurationSchema;
-import org.apache.ignite.configuration.schemas.table.NullValueDefaultConfigurationSchema;
 import org.apache.ignite.configuration.schemas.table.TablesConfiguration;
-import org.apache.ignite.configuration.schemas.table.UnlimitedBudgetConfigurationSchema;
 import org.apache.ignite.internal.configuration.ConfigurationRegistry;
 import org.apache.ignite.internal.configuration.testframework.ConfigurationExtension;
 import org.apache.ignite.internal.configuration.testframework.InjectConfiguration;
@@ -68,24 +61,13 @@ public class DataStorageManagerTest {
 
     @InjectConfiguration(
             polymorphicExtensions = {
-                    UnknownDataStorageConfigurationSchema.class,
                     FirstDataStorageConfigurationSchema.class,
                     SecondDataStorageConfigurationSchema.class
             }
     )
     private DataStorageConfiguration dataStorageConfig;
 
-    @InjectConfiguration(polymorphicExtensions = {
-            HashIndexConfigurationSchema.class,
-            UnknownDataStorageConfigurationSchema.class,
-            FirstDataStorageConfigurationSchema.class,
-            SecondDataStorageConfigurationSchema.class,
-            ConstantValueDefaultConfigurationSchema.class,
-            FunctionCallDefaultConfigurationSchema.class,
-            NullValueDefaultConfigurationSchema.class,
-            UnlimitedBudgetConfigurationSchema.class,
-            EntryCountBudgetConfigurationSchema.class
-    })
+    @InjectConfiguration
     private TablesConfiguration tablesConfig;
 
     @Test
diff --git a/modules/storage-api/src/test/java/org/apache/ignite/internal/storage/TestMvTableStorageTest.java b/modules/storage-api/src/test/java/org/apache/ignite/internal/storage/TestMvTableStorageTest.java
index 5290b8e172..a5051ff658 100644
--- a/modules/storage-api/src/test/java/org/apache/ignite/internal/storage/TestMvTableStorageTest.java
+++ b/modules/storage-api/src/test/java/org/apache/ignite/internal/storage/TestMvTableStorageTest.java
@@ -17,17 +17,11 @@
 
 package org.apache.ignite.internal.storage;
 
-import org.apache.ignite.configuration.schemas.store.UnknownDataStorageConfigurationSchema;
-import org.apache.ignite.configuration.schemas.table.HashIndexConfigurationSchema;
-import org.apache.ignite.configuration.schemas.table.NullValueDefaultConfigurationSchema;
-import org.apache.ignite.configuration.schemas.table.SortedIndexConfigurationSchema;
 import org.apache.ignite.configuration.schemas.table.TablesConfiguration;
-import org.apache.ignite.configuration.schemas.table.UnlimitedBudgetConfigurationSchema;
 import org.apache.ignite.internal.configuration.testframework.ConfigurationExtension;
 import org.apache.ignite.internal.configuration.testframework.InjectConfiguration;
 import org.apache.ignite.internal.storage.impl.TestMvTableStorage;
 import org.apache.ignite.internal.storage.impl.TestStorageEngine;
-import org.apache.ignite.internal.storage.impl.schema.TestDataStorageConfigurationSchema;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.extension.ExtendWith;
@@ -42,14 +36,6 @@ public class TestMvTableStorageTest extends AbstractMvTableStorageTest {
     @BeforeEach
     void setUp(
             @InjectConfiguration(
-                    polymorphicExtensions = {
-                            TestDataStorageConfigurationSchema.class,
-                            UnknownDataStorageConfigurationSchema.class,
-                            HashIndexConfigurationSchema.class,
-                            SortedIndexConfigurationSchema.class,
-                            NullValueDefaultConfigurationSchema.class,
-                            UnlimitedBudgetConfigurationSchema.class
-                    },
                     value = "mock.tables.foo.dataStorage.name = " + TestStorageEngine.ENGINE_NAME
             )
             TablesConfiguration tablesConfig
diff --git a/modules/storage-api/src/test/java/org/apache/ignite/internal/storage/index/TestHashIndexStorageTest.java b/modules/storage-api/src/test/java/org/apache/ignite/internal/storage/index/TestHashIndexStorageTest.java
index b8bd599601..caae28335a 100644
--- a/modules/storage-api/src/test/java/org/apache/ignite/internal/storage/index/TestHashIndexStorageTest.java
+++ b/modules/storage-api/src/test/java/org/apache/ignite/internal/storage/index/TestHashIndexStorageTest.java
@@ -17,17 +17,12 @@
 
 package org.apache.ignite.internal.storage.index;
 
-import org.apache.ignite.configuration.schemas.store.UnknownDataStorageConfigurationSchema;
-import org.apache.ignite.configuration.schemas.table.HashIndexConfigurationSchema;
-import org.apache.ignite.configuration.schemas.table.NullValueDefaultConfigurationSchema;
 import org.apache.ignite.configuration.schemas.table.TableConfiguration;
 import org.apache.ignite.configuration.schemas.table.TablesConfiguration;
-import org.apache.ignite.configuration.schemas.table.UnlimitedBudgetConfigurationSchema;
 import org.apache.ignite.internal.configuration.testframework.ConfigurationExtension;
 import org.apache.ignite.internal.configuration.testframework.InjectConfiguration;
 import org.apache.ignite.internal.storage.impl.TestMvTableStorage;
 import org.apache.ignite.internal.storage.impl.TestStorageEngine;
-import org.apache.ignite.internal.storage.impl.schema.TestDataStorageConfigurationSchema;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.extension.ExtendWith;
 
@@ -39,13 +34,6 @@ public class TestHashIndexStorageTest extends AbstractHashIndexStorageTest {
     @BeforeEach
     void setUp(
             @InjectConfiguration(
-                    polymorphicExtensions = {
-                            TestDataStorageConfigurationSchema.class,
-                            UnknownDataStorageConfigurationSchema.class,
-                            HashIndexConfigurationSchema.class,
-                            NullValueDefaultConfigurationSchema.class,
-                            UnlimitedBudgetConfigurationSchema.class
-                    },
                     value = "mock.tables.foo.dataStorage.name = " + TestStorageEngine.ENGINE_NAME
             )
             TablesConfiguration tablesConfig
diff --git a/modules/storage-api/src/test/java/org/apache/ignite/internal/storage/index/TestSortedIndexStorageTest.java b/modules/storage-api/src/test/java/org/apache/ignite/internal/storage/index/TestSortedIndexStorageTest.java
index d6fb22b1b0..9ad9e0fc95 100644
--- a/modules/storage-api/src/test/java/org/apache/ignite/internal/storage/index/TestSortedIndexStorageTest.java
+++ b/modules/storage-api/src/test/java/org/apache/ignite/internal/storage/index/TestSortedIndexStorageTest.java
@@ -17,17 +17,12 @@
 
 package org.apache.ignite.internal.storage.index;
 
-import org.apache.ignite.configuration.schemas.store.UnknownDataStorageConfigurationSchema;
-import org.apache.ignite.configuration.schemas.table.NullValueDefaultConfigurationSchema;
-import org.apache.ignite.configuration.schemas.table.SortedIndexConfigurationSchema;
 import org.apache.ignite.configuration.schemas.table.TableConfiguration;
 import org.apache.ignite.configuration.schemas.table.TablesConfiguration;
-import org.apache.ignite.configuration.schemas.table.UnlimitedBudgetConfigurationSchema;
 import org.apache.ignite.internal.configuration.testframework.ConfigurationExtension;
 import org.apache.ignite.internal.configuration.testframework.InjectConfiguration;
 import org.apache.ignite.internal.storage.impl.TestMvTableStorage;
 import org.apache.ignite.internal.storage.impl.TestStorageEngine;
-import org.apache.ignite.internal.storage.impl.schema.TestDataStorageConfigurationSchema;
 import org.apache.ignite.internal.storage.index.impl.TestSortedIndexStorage;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.extension.ExtendWith;
@@ -40,13 +35,6 @@ public class TestSortedIndexStorageTest extends AbstractSortedIndexStorageTest {
     @BeforeEach
     void setUp(
             @InjectConfiguration(
-                    polymorphicExtensions = {
-                            TestDataStorageConfigurationSchema.class,
-                            UnknownDataStorageConfigurationSchema.class,
-                            SortedIndexConfigurationSchema.class,
-                            NullValueDefaultConfigurationSchema.class,
-                            UnlimitedBudgetConfigurationSchema.class
-                    },
                     value = "mock.tables.foo.dataStorage.name = " + TestStorageEngine.ENGINE_NAME
             )
             TablesConfiguration tablesConfig
diff --git a/modules/storage-api/src/test/resources/META-INF/services/org.apache.ignite.internal.configuration.ConfigurationModule b/modules/storage-api/src/test/resources/META-INF/services/org.apache.ignite.internal.configuration.ConfigurationModule
index 130a51d4f3..6fd84a13ab 100644
--- a/modules/storage-api/src/test/resources/META-INF/services/org.apache.ignite.internal.configuration.ConfigurationModule
+++ b/modules/storage-api/src/test/resources/META-INF/services/org.apache.ignite.internal.configuration.ConfigurationModule
@@ -1,10 +1,10 @@
 #
 # Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
+# contributor license agreements. See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
 # The ASF licenses this file to You under the Apache License, Version 2.0
 # (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
+# the License. You may obtain a copy of the License at
 #
 #      http://www.apache.org/licenses/LICENSE-2.0
 #
diff --git a/modules/storage-page-memory/build.gradle b/modules/storage-page-memory/build.gradle
index 552f18061c..2505de1037 100644
--- a/modules/storage-page-memory/build.gradle
+++ b/modules/storage-page-memory/build.gradle
@@ -31,6 +31,7 @@ dependencies {
     annotationProcessor project(':ignite-configuration-annotation-processor')
 
     testImplementation project(':ignite-core')
+    testImplementation project(':ignite-index')
     testImplementation project(':ignite-storage-api')
     testImplementation project(':ignite-configuration')
     testImplementation project(':ignite-transactions')
diff --git a/modules/storage-page-memory/pom.xml b/modules/storage-page-memory/pom.xml
index 3927fcca57..bd30d25324 100644
--- a/modules/storage-page-memory/pom.xml
+++ b/modules/storage-page-memory/pom.xml
@@ -73,6 +73,12 @@
             <scope>test</scope>
         </dependency>
 
+        <dependency>
+            <groupId>org.apache.ignite</groupId>
+            <artifactId>ignite-index</artifactId>
+            <scope>test</scope>
+        </dependency>
+
         <dependency>
             <groupId>org.apache.ignite</groupId>
             <artifactId>ignite-core</artifactId>
diff --git a/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/configuration/PageMemoryStorageEngineDistributedConfigurationModule.java b/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/configuration/PageMemoryStorageEngineDistributedConfigurationModule.java
index d9b678455a..e09fb41d9c 100644
--- a/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/configuration/PageMemoryStorageEngineDistributedConfigurationModule.java
+++ b/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/configuration/PageMemoryStorageEngineDistributedConfigurationModule.java
@@ -26,7 +26,6 @@ import org.apache.ignite.configuration.RootKey;
 import org.apache.ignite.configuration.annotation.ConfigurationType;
 import org.apache.ignite.configuration.validation.Validator;
 import org.apache.ignite.internal.configuration.ConfigurationModule;
-import org.apache.ignite.internal.pagememory.configuration.schema.UnsafeMemoryAllocatorConfigurationSchema;
 import org.apache.ignite.internal.storage.pagememory.configuration.schema.PersistentPageMemoryDataStorageConfigurationSchema;
 import org.apache.ignite.internal.storage.pagememory.configuration.schema.PersistentPageMemoryStorageEngineConfiguration;
 import org.apache.ignite.internal.storage.pagememory.configuration.schema.VolatilePageMemoryDataStorageConfigurationSchema;
@@ -53,8 +52,7 @@ public class PageMemoryStorageEngineDistributedConfigurationModule implements Co
     public Collection<Class<?>> polymorphicSchemaExtensions() {
         return List.of(
                 VolatilePageMemoryDataStorageConfigurationSchema.class,
-                PersistentPageMemoryDataStorageConfigurationSchema.class,
-                UnsafeMemoryAllocatorConfigurationSchema.class
+                PersistentPageMemoryDataStorageConfigurationSchema.class
         );
     }
 
diff --git a/modules/storage-page-memory/src/main/resources/META-INF/services/org.apache.ignite.internal.configuration.ConfigurationModule b/modules/storage-page-memory/src/main/resources/META-INF/services/org.apache.ignite.internal.configuration.ConfigurationModule
index f8b745f933..12b47ef533 100644
--- a/modules/storage-page-memory/src/main/resources/META-INF/services/org.apache.ignite.internal.configuration.ConfigurationModule
+++ b/modules/storage-page-memory/src/main/resources/META-INF/services/org.apache.ignite.internal.configuration.ConfigurationModule
@@ -1,10 +1,10 @@
 #
 # Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
+# contributor license agreements. See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
 # The ASF licenses this file to You under the Apache License, Version 2.0
 # (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
+# the License. You may obtain a copy of the License at
 #
 #      http://www.apache.org/licenses/LICENSE-2.0
 #
diff --git a/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/PersistentPageMemoryDataRegionTest.java b/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/PersistentPageMemoryDataRegionTest.java
index 5aab3f64d8..c10f742692 100644
--- a/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/PersistentPageMemoryDataRegionTest.java
+++ b/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/PersistentPageMemoryDataRegionTest.java
@@ -30,7 +30,6 @@ import org.apache.ignite.internal.configuration.testframework.ConfigurationExten
 import org.apache.ignite.internal.configuration.testframework.InjectConfiguration;
 import org.apache.ignite.internal.pagememory.configuration.schema.PersistentPageMemoryDataRegionConfiguration;
 import org.apache.ignite.internal.pagememory.configuration.schema.PersistentPageMemoryDataRegionView;
-import org.apache.ignite.internal.pagememory.configuration.schema.UnsafeMemoryAllocatorConfigurationSchema;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
 
@@ -39,7 +38,7 @@ import org.junit.jupiter.api.extension.ExtendWith;
  */
 @ExtendWith(ConfigurationExtension.class)
 public class PersistentPageMemoryDataRegionTest {
-    @InjectConfiguration(polymorphicExtensions = UnsafeMemoryAllocatorConfigurationSchema.class)
+    @InjectConfiguration
     private PersistentPageMemoryDataRegionConfiguration dataRegionConfig;
 
     @Test
diff --git a/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/PersistentPageMemoryMvTableStorageTest.java b/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/PersistentPageMemoryMvTableStorageTest.java
index 2cc4634e4b..5df15ee0fc 100644
--- a/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/PersistentPageMemoryMvTableStorageTest.java
+++ b/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/PersistentPageMemoryMvTableStorageTest.java
@@ -18,19 +18,12 @@
 package org.apache.ignite.internal.storage.pagememory;
 
 import java.nio.file.Path;
-import org.apache.ignite.configuration.schemas.store.UnknownDataStorageConfigurationSchema;
-import org.apache.ignite.configuration.schemas.table.HashIndexConfigurationSchema;
-import org.apache.ignite.configuration.schemas.table.NullValueDefaultConfigurationSchema;
-import org.apache.ignite.configuration.schemas.table.SortedIndexConfigurationSchema;
 import org.apache.ignite.configuration.schemas.table.TablesConfiguration;
-import org.apache.ignite.configuration.schemas.table.UnlimitedBudgetConfigurationSchema;
 import org.apache.ignite.internal.configuration.testframework.ConfigurationExtension;
 import org.apache.ignite.internal.configuration.testframework.InjectConfiguration;
-import org.apache.ignite.internal.pagememory.configuration.schema.UnsafeMemoryAllocatorConfigurationSchema;
 import org.apache.ignite.internal.pagememory.io.PageIoRegistry;
 import org.apache.ignite.internal.storage.AbstractMvTableStorageTest;
 import org.apache.ignite.internal.storage.engine.MvTableStorage;
-import org.apache.ignite.internal.storage.pagememory.configuration.schema.PersistentPageMemoryDataStorageConfigurationSchema;
 import org.apache.ignite.internal.storage.pagememory.configuration.schema.PersistentPageMemoryStorageEngineConfiguration;
 import org.apache.ignite.internal.testframework.WorkDirectory;
 import org.apache.ignite.internal.testframework.WorkDirectoryExtension;
@@ -54,17 +47,9 @@ public class PersistentPageMemoryMvTableStorageTest extends AbstractMvTableStora
     void setUp(
             @WorkDirectory
             Path workDir,
-            @InjectConfiguration(polymorphicExtensions = UnsafeMemoryAllocatorConfigurationSchema.class)
+            @InjectConfiguration
             PersistentPageMemoryStorageEngineConfiguration engineConfig,
             @InjectConfiguration(
-                    polymorphicExtensions = {
-                            PersistentPageMemoryDataStorageConfigurationSchema.class,
-                            UnknownDataStorageConfigurationSchema.class,
-                            HashIndexConfigurationSchema.class,
-                            SortedIndexConfigurationSchema.class,
-                            NullValueDefaultConfigurationSchema.class,
-                            UnlimitedBudgetConfigurationSchema.class
-                    },
                     value = "mock.tables.foo{ partitions = 512, dataStorage.name = " + PersistentPageMemoryStorageEngine.ENGINE_NAME + "}"
             )
             TablesConfiguration tablesConfig
diff --git a/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/VolatilePageMemoryMvTableStorageTest.java b/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/VolatilePageMemoryMvTableStorageTest.java
index be25cc7fd4..109b4aaed6 100644
--- a/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/VolatilePageMemoryMvTableStorageTest.java
+++ b/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/VolatilePageMemoryMvTableStorageTest.java
@@ -17,19 +17,12 @@
 
 package org.apache.ignite.internal.storage.pagememory;
 
-import org.apache.ignite.configuration.schemas.store.UnknownDataStorageConfigurationSchema;
-import org.apache.ignite.configuration.schemas.table.HashIndexConfigurationSchema;
-import org.apache.ignite.configuration.schemas.table.NullValueDefaultConfigurationSchema;
-import org.apache.ignite.configuration.schemas.table.SortedIndexConfigurationSchema;
 import org.apache.ignite.configuration.schemas.table.TablesConfiguration;
-import org.apache.ignite.configuration.schemas.table.UnlimitedBudgetConfigurationSchema;
 import org.apache.ignite.internal.configuration.testframework.ConfigurationExtension;
 import org.apache.ignite.internal.configuration.testframework.InjectConfiguration;
-import org.apache.ignite.internal.pagememory.configuration.schema.UnsafeMemoryAllocatorConfigurationSchema;
 import org.apache.ignite.internal.pagememory.io.PageIoRegistry;
 import org.apache.ignite.internal.storage.AbstractMvTableStorageTest;
 import org.apache.ignite.internal.storage.engine.MvTableStorage;
-import org.apache.ignite.internal.storage.pagememory.configuration.schema.VolatilePageMemoryDataStorageConfigurationSchema;
 import org.apache.ignite.internal.storage.pagememory.configuration.schema.VolatilePageMemoryStorageEngineConfiguration;
 import org.apache.ignite.internal.util.IgniteUtils;
 import org.junit.jupiter.api.AfterEach;
@@ -48,17 +41,9 @@ public class VolatilePageMemoryMvTableStorageTest extends AbstractMvTableStorage
 
     @BeforeEach
     void setUp(
-            @InjectConfiguration(polymorphicExtensions = UnsafeMemoryAllocatorConfigurationSchema.class)
+            @InjectConfiguration
             VolatilePageMemoryStorageEngineConfiguration engineConfig,
             @InjectConfiguration(
-                    polymorphicExtensions = {
-                            VolatilePageMemoryDataStorageConfigurationSchema.class,
-                            UnknownDataStorageConfigurationSchema.class,
-                            HashIndexConfigurationSchema.class,
-                            SortedIndexConfigurationSchema.class,
-                            NullValueDefaultConfigurationSchema.class,
-                            UnlimitedBudgetConfigurationSchema.class
-                    },
                     value = "mock.tables.foo{ partitions = 512, dataStorage.name = " + VolatilePageMemoryStorageEngine.ENGINE_NAME + "}"
             )
             TablesConfiguration tablesConfig
diff --git a/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/configuration/PageMemoryDataRegionValidatorImplTest.java b/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/configuration/PageMemoryDataRegionValidatorImplTest.java
index 5077a4f6a1..c1cb9e6eb6 100644
--- a/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/configuration/PageMemoryDataRegionValidatorImplTest.java
+++ b/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/configuration/PageMemoryDataRegionValidatorImplTest.java
@@ -34,7 +34,6 @@ import org.apache.ignite.configuration.validation.ValidationContext;
 import org.apache.ignite.configuration.validation.ValidationIssue;
 import org.apache.ignite.internal.configuration.testframework.ConfigurationExtension;
 import org.apache.ignite.internal.configuration.testframework.InjectConfiguration;
-import org.apache.ignite.internal.pagememory.configuration.schema.UnsafeMemoryAllocatorConfigurationSchema;
 import org.apache.ignite.internal.storage.pagememory.configuration.schema.BasePageMemoryStorageEngineView;
 import org.apache.ignite.internal.storage.pagememory.configuration.schema.PersistentPageMemoryDataStorageView;
 import org.apache.ignite.internal.storage.pagememory.configuration.schema.PersistentPageMemoryStorageEngineConfiguration;
@@ -49,10 +48,10 @@ import org.mockito.ArgumentCaptor;
  */
 @ExtendWith(ConfigurationExtension.class)
 public class PageMemoryDataRegionValidatorImplTest {
-    @InjectConfiguration(polymorphicExtensions = UnsafeMemoryAllocatorConfigurationSchema.class)
+    @InjectConfiguration
     private VolatilePageMemoryStorageEngineConfiguration volatileEngineConfig;
 
-    @InjectConfiguration(polymorphicExtensions = UnsafeMemoryAllocatorConfigurationSchema.class)
+    @InjectConfiguration
     private PersistentPageMemoryStorageEngineConfiguration persistentEngineConfig;
 
     @Test
diff --git a/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/index/PersistentPageMemoryHashIndexStorageTest.java b/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/index/PersistentPageMemoryHashIndexStorageTest.java
index 06d1e98e4c..697cd137ba 100644
--- a/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/index/PersistentPageMemoryHashIndexStorageTest.java
+++ b/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/index/PersistentPageMemoryHashIndexStorageTest.java
@@ -18,19 +18,13 @@
 package org.apache.ignite.internal.storage.pagememory.index;
 
 import java.nio.file.Path;
-import org.apache.ignite.configuration.schemas.store.UnknownDataStorageConfigurationSchema;
-import org.apache.ignite.configuration.schemas.table.HashIndexConfigurationSchema;
-import org.apache.ignite.configuration.schemas.table.NullValueDefaultConfigurationSchema;
 import org.apache.ignite.configuration.schemas.table.TablesConfiguration;
-import org.apache.ignite.configuration.schemas.table.UnlimitedBudgetConfigurationSchema;
 import org.apache.ignite.internal.configuration.testframework.ConfigurationExtension;
 import org.apache.ignite.internal.configuration.testframework.InjectConfiguration;
-import org.apache.ignite.internal.pagememory.configuration.schema.UnsafeMemoryAllocatorConfigurationSchema;
 import org.apache.ignite.internal.pagememory.io.PageIoRegistry;
 import org.apache.ignite.internal.storage.index.AbstractHashIndexStorageTest;
 import org.apache.ignite.internal.storage.pagememory.PersistentPageMemoryStorageEngine;
 import org.apache.ignite.internal.storage.pagememory.PersistentPageMemoryTableStorage;
-import org.apache.ignite.internal.storage.pagememory.configuration.schema.PersistentPageMemoryDataStorageConfigurationSchema;
 import org.apache.ignite.internal.storage.pagememory.configuration.schema.PersistentPageMemoryStorageEngineConfiguration;
 import org.apache.ignite.internal.testframework.WorkDirectory;
 import org.apache.ignite.internal.testframework.WorkDirectoryExtension;
@@ -53,16 +47,9 @@ class PersistentPageMemoryHashIndexStorageTest extends AbstractHashIndexStorageT
     void setUp(
             @WorkDirectory
             Path workDir,
-            @InjectConfiguration(polymorphicExtensions = UnsafeMemoryAllocatorConfigurationSchema.class)
+            @InjectConfiguration
             PersistentPageMemoryStorageEngineConfiguration engineConfig,
             @InjectConfiguration(
-                    polymorphicExtensions = {
-                            PersistentPageMemoryDataStorageConfigurationSchema.class,
-                            UnknownDataStorageConfigurationSchema.class,
-                            HashIndexConfigurationSchema.class,
-                            NullValueDefaultConfigurationSchema.class,
-                            UnlimitedBudgetConfigurationSchema.class
-                    },
                     value = "mock.tables.foo.dataStorage.name = " + PersistentPageMemoryStorageEngine.ENGINE_NAME
             )
             TablesConfiguration tablesConfig
diff --git a/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/index/PersistentPageMemorySortedIndexStorageTest.java b/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/index/PersistentPageMemorySortedIndexStorageTest.java
index 6ef5178ff6..a092462a9c 100644
--- a/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/index/PersistentPageMemorySortedIndexStorageTest.java
+++ b/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/index/PersistentPageMemorySortedIndexStorageTest.java
@@ -18,19 +18,13 @@
 package org.apache.ignite.internal.storage.pagememory.index;
 
 import java.nio.file.Path;
-import org.apache.ignite.configuration.schemas.store.UnknownDataStorageConfigurationSchema;
-import org.apache.ignite.configuration.schemas.table.NullValueDefaultConfigurationSchema;
-import org.apache.ignite.configuration.schemas.table.SortedIndexConfigurationSchema;
 import org.apache.ignite.configuration.schemas.table.TablesConfiguration;
-import org.apache.ignite.configuration.schemas.table.UnlimitedBudgetConfigurationSchema;
 import org.apache.ignite.internal.configuration.testframework.ConfigurationExtension;
 import org.apache.ignite.internal.configuration.testframework.InjectConfiguration;
-import org.apache.ignite.internal.pagememory.configuration.schema.UnsafeMemoryAllocatorConfigurationSchema;
 import org.apache.ignite.internal.pagememory.io.PageIoRegistry;
 import org.apache.ignite.internal.storage.index.AbstractSortedIndexStorageTest;
 import org.apache.ignite.internal.storage.pagememory.PersistentPageMemoryStorageEngine;
 import org.apache.ignite.internal.storage.pagememory.PersistentPageMemoryTableStorage;
-import org.apache.ignite.internal.storage.pagememory.configuration.schema.PersistentPageMemoryDataStorageConfigurationSchema;
 import org.apache.ignite.internal.storage.pagememory.configuration.schema.PersistentPageMemoryStorageEngineConfiguration;
 import org.apache.ignite.internal.testframework.WorkDirectory;
 import org.apache.ignite.internal.testframework.WorkDirectoryExtension;
@@ -51,16 +45,9 @@ class PersistentPageMemorySortedIndexStorageTest extends AbstractSortedIndexStor
     @BeforeEach
     void setUp(
             @WorkDirectory Path workDir,
-            @InjectConfiguration(polymorphicExtensions = UnsafeMemoryAllocatorConfigurationSchema.class)
+            @InjectConfiguration
             PersistentPageMemoryStorageEngineConfiguration engineConfig,
             @InjectConfiguration(
-                    polymorphicExtensions = {
-                            PersistentPageMemoryDataStorageConfigurationSchema.class,
-                            UnknownDataStorageConfigurationSchema.class,
-                            SortedIndexConfigurationSchema.class,
-                            NullValueDefaultConfigurationSchema.class,
-                            UnlimitedBudgetConfigurationSchema.class
-                    },
                     value = "mock.tables.foo.dataStorage.name = " + PersistentPageMemoryStorageEngine.ENGINE_NAME
             )
             TablesConfiguration tablesConfig
diff --git a/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/index/VolatilePageMemoryHashIndexStorageTest.java b/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/index/VolatilePageMemoryHashIndexStorageTest.java
index 61c71a02ab..dee97cb0a5 100644
--- a/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/index/VolatilePageMemoryHashIndexStorageTest.java
+++ b/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/index/VolatilePageMemoryHashIndexStorageTest.java
@@ -17,19 +17,13 @@
 
 package org.apache.ignite.internal.storage.pagememory.index;
 
-import org.apache.ignite.configuration.schemas.store.UnknownDataStorageConfigurationSchema;
-import org.apache.ignite.configuration.schemas.table.HashIndexConfigurationSchema;
-import org.apache.ignite.configuration.schemas.table.NullValueDefaultConfigurationSchema;
 import org.apache.ignite.configuration.schemas.table.TablesConfiguration;
-import org.apache.ignite.configuration.schemas.table.UnlimitedBudgetConfigurationSchema;
 import org.apache.ignite.internal.configuration.testframework.ConfigurationExtension;
 import org.apache.ignite.internal.configuration.testframework.InjectConfiguration;
-import org.apache.ignite.internal.pagememory.configuration.schema.UnsafeMemoryAllocatorConfigurationSchema;
 import org.apache.ignite.internal.pagememory.io.PageIoRegistry;
 import org.apache.ignite.internal.storage.index.AbstractHashIndexStorageTest;
 import org.apache.ignite.internal.storage.pagememory.VolatilePageMemoryStorageEngine;
 import org.apache.ignite.internal.storage.pagememory.VolatilePageMemoryTableStorage;
-import org.apache.ignite.internal.storage.pagememory.configuration.schema.VolatilePageMemoryDataStorageConfigurationSchema;
 import org.apache.ignite.internal.storage.pagememory.configuration.schema.VolatilePageMemoryStorageEngineConfiguration;
 import org.apache.ignite.internal.util.IgniteUtils;
 import org.junit.jupiter.api.AfterEach;
@@ -48,16 +42,9 @@ class VolatilePageMemoryHashIndexStorageTest extends AbstractHashIndexStorageTes
 
     @BeforeEach
     void setUp(
-            @InjectConfiguration(polymorphicExtensions = UnsafeMemoryAllocatorConfigurationSchema.class)
+            @InjectConfiguration
             VolatilePageMemoryStorageEngineConfiguration engineConfig,
             @InjectConfiguration(
-                    polymorphicExtensions = {
-                            VolatilePageMemoryDataStorageConfigurationSchema.class,
-                            UnknownDataStorageConfigurationSchema.class,
-                            HashIndexConfigurationSchema.class,
-                            NullValueDefaultConfigurationSchema.class,
-                            UnlimitedBudgetConfigurationSchema.class
-                    },
                     value = "mock.tables.foo.dataStorage.name = " + VolatilePageMemoryStorageEngine.ENGINE_NAME
             )
             TablesConfiguration tablesConfig
diff --git a/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/index/VolatilePageMemorySortedIndexStorageTest.java b/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/index/VolatilePageMemorySortedIndexStorageTest.java
index b8765d2976..920293ff1c 100644
--- a/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/index/VolatilePageMemorySortedIndexStorageTest.java
+++ b/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/index/VolatilePageMemorySortedIndexStorageTest.java
@@ -17,19 +17,13 @@
 
 package org.apache.ignite.internal.storage.pagememory.index;
 
-import org.apache.ignite.configuration.schemas.store.UnknownDataStorageConfigurationSchema;
-import org.apache.ignite.configuration.schemas.table.NullValueDefaultConfigurationSchema;
-import org.apache.ignite.configuration.schemas.table.SortedIndexConfigurationSchema;
 import org.apache.ignite.configuration.schemas.table.TablesConfiguration;
-import org.apache.ignite.configuration.schemas.table.UnlimitedBudgetConfigurationSchema;
 import org.apache.ignite.internal.configuration.testframework.ConfigurationExtension;
 import org.apache.ignite.internal.configuration.testframework.InjectConfiguration;
-import org.apache.ignite.internal.pagememory.configuration.schema.UnsafeMemoryAllocatorConfigurationSchema;
 import org.apache.ignite.internal.pagememory.io.PageIoRegistry;
 import org.apache.ignite.internal.storage.index.AbstractSortedIndexStorageTest;
 import org.apache.ignite.internal.storage.pagememory.VolatilePageMemoryStorageEngine;
 import org.apache.ignite.internal.storage.pagememory.VolatilePageMemoryTableStorage;
-import org.apache.ignite.internal.storage.pagememory.configuration.schema.VolatilePageMemoryDataStorageConfigurationSchema;
 import org.apache.ignite.internal.storage.pagememory.configuration.schema.VolatilePageMemoryStorageEngineConfiguration;
 import org.apache.ignite.internal.util.IgniteUtils;
 import org.junit.jupiter.api.AfterEach;
@@ -47,16 +41,9 @@ class VolatilePageMemorySortedIndexStorageTest extends AbstractSortedIndexStorag
 
     @BeforeEach
     void setUp(
-            @InjectConfiguration(polymorphicExtensions = UnsafeMemoryAllocatorConfigurationSchema.class)
+            @InjectConfiguration
             VolatilePageMemoryStorageEngineConfiguration engineConfig,
             @InjectConfiguration(
-                    polymorphicExtensions = {
-                            VolatilePageMemoryDataStorageConfigurationSchema.class,
-                            UnknownDataStorageConfigurationSchema.class,
-                            SortedIndexConfigurationSchema.class,
-                            NullValueDefaultConfigurationSchema.class,
-                            UnlimitedBudgetConfigurationSchema.class
-                    },
                     value = "mock.tables.foo.dataStorage.name = " + VolatilePageMemoryStorageEngine.ENGINE_NAME
             )
             TablesConfiguration tablesConfig
diff --git a/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/mv/PersistentPageMemoryMvPartitionStorageTest.java b/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/mv/PersistentPageMemoryMvPartitionStorageTest.java
index edeec6689b..5828510b87 100644
--- a/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/mv/PersistentPageMemoryMvPartitionStorageTest.java
+++ b/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/mv/PersistentPageMemoryMvPartitionStorageTest.java
@@ -21,20 +21,14 @@ import static org.apache.ignite.internal.pagememory.persistence.checkpoint.Check
 
 import java.nio.file.Path;
 import java.util.concurrent.TimeUnit;
-import org.apache.ignite.configuration.schemas.store.UnknownDataStorageConfigurationSchema;
-import org.apache.ignite.configuration.schemas.table.HashIndexConfigurationSchema;
-import org.apache.ignite.configuration.schemas.table.NullValueDefaultConfigurationSchema;
 import org.apache.ignite.configuration.schemas.table.TablesConfiguration;
-import org.apache.ignite.configuration.schemas.table.UnlimitedBudgetConfigurationSchema;
 import org.apache.ignite.internal.components.LongJvmPauseDetector;
 import org.apache.ignite.internal.configuration.testframework.ConfigurationExtension;
 import org.apache.ignite.internal.configuration.testframework.InjectConfiguration;
 import org.apache.ignite.internal.logger.Loggers;
-import org.apache.ignite.internal.pagememory.configuration.schema.UnsafeMemoryAllocatorConfigurationSchema;
 import org.apache.ignite.internal.storage.RowId;
 import org.apache.ignite.internal.storage.pagememory.PersistentPageMemoryStorageEngine;
 import org.apache.ignite.internal.storage.pagememory.PersistentPageMemoryTableStorage;
-import org.apache.ignite.internal.storage.pagememory.configuration.schema.PersistentPageMemoryDataStorageConfigurationSchema;
 import org.apache.ignite.internal.storage.pagememory.configuration.schema.PersistentPageMemoryStorageEngineConfiguration;
 import org.apache.ignite.internal.testframework.WorkDirectory;
 import org.apache.ignite.internal.testframework.WorkDirectoryExtension;
@@ -49,20 +43,10 @@ class PersistentPageMemoryMvPartitionStorageTest extends AbstractPageMemoryMvPar
     @WorkDirectory
     private Path workDir;
 
-    @InjectConfiguration(
-            value = "mock.checkpoint.checkpointDelayMillis = 0",
-            polymorphicExtensions = UnsafeMemoryAllocatorConfigurationSchema.class
-    )
+    @InjectConfiguration(value = "mock.checkpoint.checkpointDelayMillis = 0")
     private PersistentPageMemoryStorageEngineConfiguration engineConfig;
 
     @InjectConfiguration(
-            polymorphicExtensions = {
-                    PersistentPageMemoryDataStorageConfigurationSchema.class,
-                    UnknownDataStorageConfigurationSchema.class,
-                    HashIndexConfigurationSchema.class,
-                    NullValueDefaultConfigurationSchema.class,
-                    UnlimitedBudgetConfigurationSchema.class
-            },
             value = "mock.tables.foo.dataStorage.name = " + PersistentPageMemoryStorageEngine.ENGINE_NAME
     )
     private TablesConfiguration tablesConfig;
diff --git a/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/mv/VolatilePageMemoryMvPartitionStorageTest.java b/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/mv/VolatilePageMemoryMvPartitionStorageTest.java
index bab8f61365..9a9aba58a0 100644
--- a/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/mv/VolatilePageMemoryMvPartitionStorageTest.java
+++ b/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/mv/VolatilePageMemoryMvPartitionStorageTest.java
@@ -17,17 +17,11 @@
 
 package org.apache.ignite.internal.storage.pagememory.mv;
 
-import org.apache.ignite.configuration.schemas.store.UnknownDataStorageConfigurationSchema;
-import org.apache.ignite.configuration.schemas.table.HashIndexConfigurationSchema;
-import org.apache.ignite.configuration.schemas.table.NullValueDefaultConfigurationSchema;
 import org.apache.ignite.configuration.schemas.table.TablesConfiguration;
-import org.apache.ignite.configuration.schemas.table.UnlimitedBudgetConfigurationSchema;
 import org.apache.ignite.internal.configuration.testframework.ConfigurationExtension;
 import org.apache.ignite.internal.configuration.testframework.InjectConfiguration;
-import org.apache.ignite.internal.pagememory.configuration.schema.UnsafeMemoryAllocatorConfigurationSchema;
 import org.apache.ignite.internal.storage.pagememory.VolatilePageMemoryStorageEngine;
 import org.apache.ignite.internal.storage.pagememory.VolatilePageMemoryTableStorage;
-import org.apache.ignite.internal.storage.pagememory.configuration.schema.VolatilePageMemoryDataStorageConfigurationSchema;
 import org.apache.ignite.internal.storage.pagememory.configuration.schema.VolatilePageMemoryStorageEngineConfiguration;
 import org.apache.ignite.internal.util.IgniteUtils;
 import org.junit.jupiter.api.AfterEach;
@@ -36,7 +30,7 @@ import org.junit.jupiter.api.extension.ExtendWith;
 
 @ExtendWith(ConfigurationExtension.class)
 class VolatilePageMemoryMvPartitionStorageTest extends AbstractPageMemoryMvPartitionStorageTest {
-    @InjectConfiguration(polymorphicExtensions = UnsafeMemoryAllocatorConfigurationSchema.class)
+    @InjectConfiguration
     private VolatilePageMemoryStorageEngineConfiguration engineConfig;
 
     private VolatilePageMemoryStorageEngine engine;
@@ -46,13 +40,6 @@ class VolatilePageMemoryMvPartitionStorageTest extends AbstractPageMemoryMvParti
     @BeforeEach
     void setUp(
             @InjectConfiguration(
-                    polymorphicExtensions = {
-                            VolatilePageMemoryDataStorageConfigurationSchema.class,
-                            UnknownDataStorageConfigurationSchema.class,
-                            HashIndexConfigurationSchema.class,
-                            NullValueDefaultConfigurationSchema.class,
-                            UnlimitedBudgetConfigurationSchema.class
-                    },
                     value = "mock.tables.foo.dataStorage.name = " + VolatilePageMemoryStorageEngine.ENGINE_NAME
             )
             TablesConfiguration tablesConfig
diff --git a/modules/storage-rocksdb/build.gradle b/modules/storage-rocksdb/build.gradle
index 13598345fc..1165a82790 100644
--- a/modules/storage-rocksdb/build.gradle
+++ b/modules/storage-rocksdb/build.gradle
@@ -32,6 +32,7 @@ dependencies {
 
     testAnnotationProcessor project(':ignite-configuration-annotation-processor')
     testImplementation project(':ignite-core')
+    testImplementation project(':ignite-index')
     testImplementation(testFixtures(project(':ignite-core')))
     testImplementation project(':ignite-configuration')
     testImplementation(testFixtures(project(':ignite-configuration')))
diff --git a/modules/storage-rocksdb/pom.xml b/modules/storage-rocksdb/pom.xml
index ad6ee1a38e..e5b08b84e0 100644
--- a/modules/storage-rocksdb/pom.xml
+++ b/modules/storage-rocksdb/pom.xml
@@ -73,6 +73,12 @@
             <scope>test</scope>
         </dependency>
 
+        <dependency>
+            <groupId>org.apache.ignite</groupId>
+            <artifactId>ignite-index</artifactId>
+            <scope>test</scope>
+        </dependency>
+
         <dependency>
             <groupId>org.apache.ignite</groupId>
             <artifactId>ignite-core</artifactId>
diff --git a/modules/storage-rocksdb/src/main/resources/META-INF/services/org.apache.ignite.internal.configuration.ConfigurationModule b/modules/storage-rocksdb/src/main/resources/META-INF/services/org.apache.ignite.internal.configuration.ConfigurationModule
index da430a3cf3..44eda3b66d 100644
--- a/modules/storage-rocksdb/src/main/resources/META-INF/services/org.apache.ignite.internal.configuration.ConfigurationModule
+++ b/modules/storage-rocksdb/src/main/resources/META-INF/services/org.apache.ignite.internal.configuration.ConfigurationModule
@@ -1,10 +1,10 @@
 #
 # Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
+# contributor license agreements. See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
 # The ASF licenses this file to You under the Apache License, Version 2.0
 # (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
+# the License. You may obtain a copy of the License at
 #
 #      http://www.apache.org/licenses/LICENSE-2.0
 #
diff --git a/modules/storage-rocksdb/src/test/java/org/apache/ignite/internal/storage/rocksdb/RocksDbMvPartitionStorageTest.java b/modules/storage-rocksdb/src/test/java/org/apache/ignite/internal/storage/rocksdb/RocksDbMvPartitionStorageTest.java
index c312a3fd96..2d9addd3b1 100644
--- a/modules/storage-rocksdb/src/test/java/org/apache/ignite/internal/storage/rocksdb/RocksDbMvPartitionStorageTest.java
+++ b/modules/storage-rocksdb/src/test/java/org/apache/ignite/internal/storage/rocksdb/RocksDbMvPartitionStorageTest.java
@@ -22,16 +22,11 @@ import static org.hamcrest.CoreMatchers.equalTo;
 import static org.hamcrest.MatcherAssert.assertThat;
 
 import java.nio.file.Path;
-import org.apache.ignite.configuration.schemas.store.UnknownDataStorageConfigurationSchema;
-import org.apache.ignite.configuration.schemas.table.HashIndexConfigurationSchema;
-import org.apache.ignite.configuration.schemas.table.NullValueDefaultConfigurationSchema;
 import org.apache.ignite.configuration.schemas.table.TableConfiguration;
 import org.apache.ignite.configuration.schemas.table.TablesConfiguration;
-import org.apache.ignite.configuration.schemas.table.UnlimitedBudgetConfigurationSchema;
 import org.apache.ignite.internal.configuration.testframework.ConfigurationExtension;
 import org.apache.ignite.internal.configuration.testframework.InjectConfiguration;
 import org.apache.ignite.internal.storage.AbstractMvPartitionStorageTest;
-import org.apache.ignite.internal.storage.rocksdb.configuration.schema.RocksDbDataStorageConfigurationSchema;
 import org.apache.ignite.internal.storage.rocksdb.configuration.schema.RocksDbDataStorageView;
 import org.apache.ignite.internal.storage.rocksdb.configuration.schema.RocksDbStorageEngineConfiguration;
 import org.apache.ignite.internal.testframework.WorkDirectory;
@@ -57,13 +52,6 @@ public class RocksDbMvPartitionStorageTest extends AbstractMvPartitionStorageTes
             @InjectConfiguration("mock {flushDelayMillis = 0, defaultRegion {size = 16536, writeBufferSize = 16536}}")
             RocksDbStorageEngineConfiguration engineConfig,
             @InjectConfiguration(
-                    polymorphicExtensions = {
-                            RocksDbDataStorageConfigurationSchema.class,
-                            UnknownDataStorageConfigurationSchema.class,
-                            HashIndexConfigurationSchema.class,
-                            NullValueDefaultConfigurationSchema.class,
-                            UnlimitedBudgetConfigurationSchema.class
-                    },
                     value = "mock.tables.foo.dataStorage.name = " + RocksDbStorageEngine.ENGINE_NAME
             ) TablesConfiguration tablesCfg
     ) throws Exception {
diff --git a/modules/storage-rocksdb/src/test/java/org/apache/ignite/internal/storage/rocksdb/RocksDbMvTableStorageTest.java b/modules/storage-rocksdb/src/test/java/org/apache/ignite/internal/storage/rocksdb/RocksDbMvTableStorageTest.java
index 12da6cafc3..3cfb548db3 100644
--- a/modules/storage-rocksdb/src/test/java/org/apache/ignite/internal/storage/rocksdb/RocksDbMvTableStorageTest.java
+++ b/modules/storage-rocksdb/src/test/java/org/apache/ignite/internal/storage/rocksdb/RocksDbMvTableStorageTest.java
@@ -28,19 +28,13 @@ import static org.hamcrest.MatcherAssert.assertThat;
 import java.nio.file.Path;
 import java.util.UUID;
 import java.util.concurrent.CompletableFuture;
-import org.apache.ignite.configuration.schemas.store.UnknownDataStorageConfigurationSchema;
-import org.apache.ignite.configuration.schemas.table.HashIndexConfigurationSchema;
-import org.apache.ignite.configuration.schemas.table.NullValueDefaultConfigurationSchema;
-import org.apache.ignite.configuration.schemas.table.SortedIndexConfigurationSchema;
 import org.apache.ignite.configuration.schemas.table.TablesConfiguration;
-import org.apache.ignite.configuration.schemas.table.UnlimitedBudgetConfigurationSchema;
 import org.apache.ignite.internal.configuration.testframework.ConfigurationExtension;
 import org.apache.ignite.internal.configuration.testframework.InjectConfiguration;
 import org.apache.ignite.internal.storage.AbstractMvTableStorageTest;
 import org.apache.ignite.internal.storage.MvPartitionStorage;
 import org.apache.ignite.internal.storage.RowId;
 import org.apache.ignite.internal.storage.engine.MvTableStorage;
-import org.apache.ignite.internal.storage.rocksdb.configuration.schema.RocksDbDataStorageConfigurationSchema;
 import org.apache.ignite.internal.storage.rocksdb.configuration.schema.RocksDbStorageEngineConfiguration;
 import org.apache.ignite.internal.testframework.WorkDirectory;
 import org.apache.ignite.internal.testframework.WorkDirectoryExtension;
@@ -57,14 +51,6 @@ import org.junit.jupiter.api.extension.ExtendWith;
 @ExtendWith(ConfigurationExtension.class)
 public class RocksDbMvTableStorageTest extends AbstractMvTableStorageTest {
     @InjectConfiguration(
-            polymorphicExtensions = {
-                    RocksDbDataStorageConfigurationSchema.class,
-                    UnknownDataStorageConfigurationSchema.class,
-                    HashIndexConfigurationSchema.class,
-                    SortedIndexConfigurationSchema.class,
-                    NullValueDefaultConfigurationSchema.class,
-                    UnlimitedBudgetConfigurationSchema.class
-            },
             value = "mock.tables.foo{ partitions = 512, dataStorage.name = " + RocksDbStorageEngine.ENGINE_NAME + "}"
     )
     private TablesConfiguration tablesConfig;
diff --git a/modules/storage-rocksdb/src/test/java/org/apache/ignite/internal/storage/rocksdb/RocksDbStorageEngineTest.java b/modules/storage-rocksdb/src/test/java/org/apache/ignite/internal/storage/rocksdb/RocksDbStorageEngineTest.java
index 76cf7d3219..0b9a98160e 100644
--- a/modules/storage-rocksdb/src/test/java/org/apache/ignite/internal/storage/rocksdb/RocksDbStorageEngineTest.java
+++ b/modules/storage-rocksdb/src/test/java/org/apache/ignite/internal/storage/rocksdb/RocksDbStorageEngineTest.java
@@ -24,16 +24,11 @@ import static org.hamcrest.Matchers.is;
 
 import java.nio.file.Path;
 import java.util.concurrent.CompletableFuture;
-import org.apache.ignite.configuration.schemas.store.UnknownDataStorageConfigurationSchema;
-import org.apache.ignite.configuration.schemas.table.HashIndexConfigurationSchema;
-import org.apache.ignite.configuration.schemas.table.NullValueDefaultConfigurationSchema;
 import org.apache.ignite.configuration.schemas.table.TablesConfiguration;
-import org.apache.ignite.configuration.schemas.table.UnlimitedBudgetConfigurationSchema;
 import org.apache.ignite.internal.configuration.testframework.ConfigurationExtension;
 import org.apache.ignite.internal.configuration.testframework.InjectConfiguration;
 import org.apache.ignite.internal.storage.engine.MvTableStorage;
 import org.apache.ignite.internal.storage.rocksdb.configuration.schema.RocksDbDataStorageConfiguration;
-import org.apache.ignite.internal.storage.rocksdb.configuration.schema.RocksDbDataStorageConfigurationSchema;
 import org.apache.ignite.internal.storage.rocksdb.configuration.schema.RocksDbStorageEngineConfiguration;
 import org.apache.ignite.internal.testframework.WorkDirectory;
 import org.apache.ignite.internal.testframework.WorkDirectoryExtension;
@@ -68,13 +63,6 @@ public class RocksDbStorageEngineTest {
     @Test
     void testCreateTableWithDefaultDataRegion(
             @InjectConfiguration(
-                    polymorphicExtensions = {
-                            RocksDbDataStorageConfigurationSchema.class,
-                            UnknownDataStorageConfigurationSchema.class,
-                            HashIndexConfigurationSchema.class,
-                            NullValueDefaultConfigurationSchema.class,
-                            UnlimitedBudgetConfigurationSchema.class
-                    },
                     value = "mock.tables.foo.dataStorage.name=" + RocksDbStorageEngine.ENGINE_NAME
             )
             TablesConfiguration tablesConfig
@@ -97,13 +85,6 @@ public class RocksDbStorageEngineTest {
     @Test
     void testCreateTableWithDynamicCustomDataRegion(
             @InjectConfiguration(
-                    polymorphicExtensions = {
-                            RocksDbDataStorageConfigurationSchema.class,
-                            UnknownDataStorageConfigurationSchema.class,
-                            HashIndexConfigurationSchema.class,
-                            NullValueDefaultConfigurationSchema.class,
-                            UnlimitedBudgetConfigurationSchema.class
-                    },
                     value = "mock.tables.foo.dataStorage{name=" + RocksDbStorageEngine.ENGINE_NAME + ", dataRegion=foobar}"
             )
             TablesConfiguration tablesConfig
diff --git a/modules/storage-rocksdb/src/test/java/org/apache/ignite/internal/storage/rocksdb/index/RocksDbHashIndexStorageTest.java b/modules/storage-rocksdb/src/test/java/org/apache/ignite/internal/storage/rocksdb/index/RocksDbHashIndexStorageTest.java
index 44918fa1a0..956c2d859d 100644
--- a/modules/storage-rocksdb/src/test/java/org/apache/ignite/internal/storage/rocksdb/index/RocksDbHashIndexStorageTest.java
+++ b/modules/storage-rocksdb/src/test/java/org/apache/ignite/internal/storage/rocksdb/index/RocksDbHashIndexStorageTest.java
@@ -18,17 +18,12 @@
 package org.apache.ignite.internal.storage.rocksdb.index;
 
 import java.nio.file.Path;
-import org.apache.ignite.configuration.schemas.store.UnknownDataStorageConfigurationSchema;
-import org.apache.ignite.configuration.schemas.table.HashIndexConfigurationSchema;
-import org.apache.ignite.configuration.schemas.table.NullValueDefaultConfigurationSchema;
 import org.apache.ignite.configuration.schemas.table.TablesConfiguration;
-import org.apache.ignite.configuration.schemas.table.UnlimitedBudgetConfigurationSchema;
 import org.apache.ignite.internal.configuration.testframework.ConfigurationExtension;
 import org.apache.ignite.internal.configuration.testframework.InjectConfiguration;
 import org.apache.ignite.internal.storage.index.AbstractHashIndexStorageTest;
 import org.apache.ignite.internal.storage.rocksdb.RocksDbStorageEngine;
 import org.apache.ignite.internal.storage.rocksdb.RocksDbTableStorage;
-import org.apache.ignite.internal.storage.rocksdb.configuration.schema.RocksDbDataStorageConfigurationSchema;
 import org.apache.ignite.internal.storage.rocksdb.configuration.schema.RocksDbStorageEngineConfiguration;
 import org.apache.ignite.internal.testframework.WorkDirectory;
 import org.apache.ignite.internal.testframework.WorkDirectoryExtension;
@@ -53,13 +48,6 @@ public class RocksDbHashIndexStorageTest extends AbstractHashIndexStorageTest {
             @InjectConfiguration("mock {flushDelayMillis = 0, defaultRegion {size = 16536, writeBufferSize = 16536}}")
             RocksDbStorageEngineConfiguration rocksDbEngineConfig,
             @InjectConfiguration(
-                    polymorphicExtensions = {
-                            RocksDbDataStorageConfigurationSchema.class,
-                            UnknownDataStorageConfigurationSchema.class,
-                            HashIndexConfigurationSchema.class,
-                            NullValueDefaultConfigurationSchema.class,
-                            UnlimitedBudgetConfigurationSchema.class
-                    },
                     value = "mock.tables.foo.dataStorage.name = " + RocksDbStorageEngine.ENGINE_NAME
             )
             TablesConfiguration tablesConfig
diff --git a/modules/storage-rocksdb/src/test/java/org/apache/ignite/internal/storage/rocksdb/index/RocksDbSortedIndexStorageTest.java b/modules/storage-rocksdb/src/test/java/org/apache/ignite/internal/storage/rocksdb/index/RocksDbSortedIndexStorageTest.java
index 8e33efc3bb..ab65e58d2b 100644
--- a/modules/storage-rocksdb/src/test/java/org/apache/ignite/internal/storage/rocksdb/index/RocksDbSortedIndexStorageTest.java
+++ b/modules/storage-rocksdb/src/test/java/org/apache/ignite/internal/storage/rocksdb/index/RocksDbSortedIndexStorageTest.java
@@ -18,17 +18,12 @@
 package org.apache.ignite.internal.storage.rocksdb.index;
 
 import java.nio.file.Path;
-import org.apache.ignite.configuration.schemas.store.UnknownDataStorageConfigurationSchema;
-import org.apache.ignite.configuration.schemas.table.NullValueDefaultConfigurationSchema;
-import org.apache.ignite.configuration.schemas.table.SortedIndexConfigurationSchema;
 import org.apache.ignite.configuration.schemas.table.TablesConfiguration;
-import org.apache.ignite.configuration.schemas.table.UnlimitedBudgetConfigurationSchema;
 import org.apache.ignite.internal.configuration.testframework.ConfigurationExtension;
 import org.apache.ignite.internal.configuration.testframework.InjectConfiguration;
 import org.apache.ignite.internal.storage.index.AbstractSortedIndexStorageTest;
 import org.apache.ignite.internal.storage.rocksdb.RocksDbStorageEngine;
 import org.apache.ignite.internal.storage.rocksdb.RocksDbTableStorage;
-import org.apache.ignite.internal.storage.rocksdb.configuration.schema.RocksDbDataStorageConfigurationSchema;
 import org.apache.ignite.internal.storage.rocksdb.configuration.schema.RocksDbStorageEngineConfiguration;
 import org.apache.ignite.internal.testframework.WorkDirectory;
 import org.apache.ignite.internal.testframework.WorkDirectoryExtension;
@@ -53,13 +48,6 @@ public class RocksDbSortedIndexStorageTest extends AbstractSortedIndexStorageTes
             @InjectConfiguration("mock {flushDelayMillis = 0, defaultRegion {size = 16536, writeBufferSize = 16536}}")
             RocksDbStorageEngineConfiguration rocksDbEngineConfig,
             @InjectConfiguration(
-                    polymorphicExtensions = {
-                            RocksDbDataStorageConfigurationSchema.class,
-                            UnknownDataStorageConfigurationSchema.class,
-                            SortedIndexConfigurationSchema.class,
-                            NullValueDefaultConfigurationSchema.class,
-                            UnlimitedBudgetConfigurationSchema.class
-                    },
                     value = "mock.tables.foo.dataStorage.name = " + RocksDbStorageEngine.ENGINE_NAME
             )
             TablesConfiguration tablesConfig
diff --git a/modules/table/build.gradle b/modules/table/build.gradle
index 30b96dbdbd..2124fd252f 100644
--- a/modules/table/build.gradle
+++ b/modules/table/build.gradle
@@ -43,6 +43,7 @@ dependencies {
     testImplementation project(':ignite-storage-api')
     testImplementation project(':ignite-storage-page-memory')
     testImplementation project(':ignite-storage-rocksdb')
+    testImplementation project(':ignite-index')
     testImplementation project(':ignite-network')
     testImplementation project(':ignite-core')
     testImplementation project(':ignite-raft')
@@ -64,6 +65,7 @@ dependencies {
     testImplementation libs.javax.annotations
 
     integrationTestImplementation(testFixtures(project(':ignite-core')))
+    integrationTestImplementation(testFixtures(project(':ignite-configuration')))
     integrationTestImplementation(testFixtures(project(':ignite-network')))
     integrationTestImplementation(testFixtures(project(':ignite-raft')))
     integrationTestImplementation(testFixtures(project(':ignite-storage-api')))
diff --git a/modules/table/pom.xml b/modules/table/pom.xml
index 46ce848876..4b364aae2f 100644
--- a/modules/table/pom.xml
+++ b/modules/table/pom.xml
@@ -163,6 +163,12 @@
             <scope>test</scope>
         </dependency>
 
+        <dependency>
+            <groupId>org.apache.ignite</groupId>
+            <artifactId>ignite-index</artifactId>
+            <scope>test</scope>
+        </dependency>
+
         <dependency>
             <groupId>org.apache.ignite</groupId>
             <artifactId>ignite-network</artifactId>
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 46d1629ca3..3e7ea9344d 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
@@ -35,9 +35,12 @@ import java.util.concurrent.TimeUnit;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 import org.apache.ignite.internal.affinity.RendezvousAffinityFunction;
+import org.apache.ignite.internal.configuration.testframework.ConfigurationExtension;
+import org.apache.ignite.internal.configuration.testframework.InjectConfiguration;
 import org.apache.ignite.internal.logger.IgniteLogger;
 import org.apache.ignite.internal.logger.Loggers;
 import org.apache.ignite.internal.raft.Loza;
+import org.apache.ignite.internal.raft.configuration.RaftConfiguration;
 import org.apache.ignite.internal.raft.server.RaftGroupOptions;
 import org.apache.ignite.internal.raft.server.impl.JraftServerImpl;
 import org.apache.ignite.internal.storage.engine.MvTableStorage;
@@ -69,12 +72,17 @@ import org.apache.ignite.utils.ClusterServiceTestUtils;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.TestInfo;
+import org.junit.jupiter.api.extension.ExtendWith;
 import org.mockito.Mockito;
 
 /**
  * Distributed transaction test using a single partition table.
  */
+@ExtendWith(ConfigurationExtension.class)
 public class ItTxDistributedTestSingleNode extends TxAbstractTest {
+    @InjectConfiguration
+    private static RaftConfiguration raftConfiguration;
+
     private static final IgniteLogger LOG = Loggers.forClass(ItTxDistributedTestSingleNode.class);
 
     public static final int NODE_PORT_BASE = 20_000;
@@ -180,7 +188,7 @@ public class ItTxDistributedTestSingleNode extends TxAbstractTest {
                 new NamedThreadFactory(Loza.CLIENT_POOL_NAME, LOG));
 
         for (int i = 0; i < nodes; i++) {
-            var raftSrv = new Loza(cluster.get(i), workDir.resolve("node" + i));
+            var raftSrv = new Loza(cluster.get(i), raftConfiguration, workDir.resolve("node" + i));
 
             raftSrv.start();
 
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 18e192e474..37c2c0590e 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
@@ -755,7 +755,7 @@ public class TableManager extends Producer<TableEvent, TableEventParameters> imp
 
         if (internalTbl.storage().isVolatile()) {
             raftGroupOptions = RaftGroupOptions.forVolatileStores()
-                    .setLogStorageFactory(volatileLogStorageFactoryCreator.factory(tableConfig.volatileRaft().logStorage().value()))
+                    .setLogStorageFactory(volatileLogStorageFactoryCreator.factory(raftMgr.volatileRaft().logStorage().value()))
                     .raftMetaStorageFactory((groupId, raftOptions) -> new VolatileRaftMetaStorage());
         } else {
             raftGroupOptions = RaftGroupOptions.forPersistentStores();
diff --git a/modules/table/src/main/resources/META-INF/services/org.apache.ignite.internal.configuration.ConfigurationModule b/modules/table/src/main/resources/META-INF/services/org.apache.ignite.internal.configuration.ConfigurationModule
index 4e6012e16c..4dbd0ee5c2 100644
--- a/modules/table/src/main/resources/META-INF/services/org.apache.ignite.internal.configuration.ConfigurationModule
+++ b/modules/table/src/main/resources/META-INF/services/org.apache.ignite.internal.configuration.ConfigurationModule
@@ -1,10 +1,10 @@
 #
 # Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
+# contributor license agreements. See the NOTICE file distributed with
 # this work for additional information regarding copyright ownership.
 # The ASF licenses this file to You under the Apache License, Version 2.0
 # (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
+# the License. You may obtain a copy of the License at
 #
 #      http://www.apache.org/licenses/LICENSE-2.0
 #
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 0294b92005..6f9473c7cd 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
@@ -65,23 +65,14 @@ import java.util.function.Function;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 import org.apache.ignite.configuration.NamedListView;
-import org.apache.ignite.configuration.schemas.store.UnknownDataStorageConfigurationSchema;
-import org.apache.ignite.configuration.schemas.table.ConstantValueDefaultConfigurationSchema;
-import org.apache.ignite.configuration.schemas.table.EntryCountBudgetConfigurationSchema;
-import org.apache.ignite.configuration.schemas.table.FunctionCallDefaultConfigurationSchema;
-import org.apache.ignite.configuration.schemas.table.HashIndexConfigurationSchema;
-import org.apache.ignite.configuration.schemas.table.NullValueDefaultConfigurationSchema;
-import org.apache.ignite.configuration.schemas.table.SortedIndexConfigurationSchema;
 import org.apache.ignite.configuration.schemas.table.TableChange;
 import org.apache.ignite.configuration.schemas.table.TableView;
 import org.apache.ignite.configuration.schemas.table.TablesConfiguration;
-import org.apache.ignite.configuration.schemas.table.UnlimitedBudgetConfigurationSchema;
 import org.apache.ignite.internal.affinity.AffinityUtils;
 import org.apache.ignite.internal.baseline.BaselineManager;
 import org.apache.ignite.internal.configuration.ConfigurationRegistry;
 import org.apache.ignite.internal.configuration.notifications.ConfigurationStorageRevisionListenerHolder;
 import org.apache.ignite.internal.configuration.schema.ExtendedTableChange;
-import org.apache.ignite.internal.configuration.schema.ExtendedTableConfigurationSchema;
 import org.apache.ignite.internal.configuration.schema.ExtendedTableView;
 import org.apache.ignite.internal.configuration.testframework.ConfigurationExtension;
 import org.apache.ignite.internal.configuration.testframework.InjectConfiguration;
@@ -89,7 +80,6 @@ import org.apache.ignite.internal.configuration.testframework.InjectRevisionList
 import org.apache.ignite.internal.logger.IgniteLogger;
 import org.apache.ignite.internal.logger.Loggers;
 import org.apache.ignite.internal.metastorage.MetaStorageManager;
-import org.apache.ignite.internal.pagememory.configuration.schema.UnsafeMemoryAllocatorConfigurationSchema;
 import org.apache.ignite.internal.raft.Loza;
 import org.apache.ignite.internal.raft.storage.impl.LocalLogStorageFactory;
 import org.apache.ignite.internal.schema.SchemaDescriptor;
@@ -105,7 +95,6 @@ import org.apache.ignite.internal.storage.DataStorageModules;
 import org.apache.ignite.internal.storage.rocksdb.RocksDbDataStorageModule;
 import org.apache.ignite.internal.storage.rocksdb.RocksDbStorageEngine;
 import org.apache.ignite.internal.storage.rocksdb.configuration.schema.RocksDbDataStorageChange;
-import org.apache.ignite.internal.storage.rocksdb.configuration.schema.RocksDbDataStorageConfigurationSchema;
 import org.apache.ignite.internal.storage.rocksdb.configuration.schema.RocksDbStorageEngineConfiguration;
 import org.apache.ignite.internal.table.TableImpl;
 import org.apache.ignite.internal.table.event.TableEvent;
@@ -212,23 +201,10 @@ public class TableManagerTest extends IgniteAbstractTest {
     private Consumer<Function<Long, CompletableFuture<?>>> revisionUpdater;
 
     /** Tables configuration. */
-    @InjectConfiguration(
-            internalExtensions = ExtendedTableConfigurationSchema.class,
-            polymorphicExtensions = {
-                    HashIndexConfigurationSchema.class,
-                    SortedIndexConfigurationSchema.class,
-                    UnknownDataStorageConfigurationSchema.class,
-                    RocksDbDataStorageConfigurationSchema.class,
-                    ConstantValueDefaultConfigurationSchema.class,
-                    FunctionCallDefaultConfigurationSchema.class,
-                    NullValueDefaultConfigurationSchema.class,
-                    UnlimitedBudgetConfigurationSchema.class,
-                    EntryCountBudgetConfigurationSchema.class
-            }
-    )
+    @InjectConfiguration
     private TablesConfiguration tblsCfg;
 
-    @InjectConfiguration(polymorphicExtensions = UnsafeMemoryAllocatorConfigurationSchema.class)
+    @InjectConfiguration
     private RocksDbStorageEngineConfiguration rocksDbEngineConfig;
 
     @Mock