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

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


The following commit(s) were added to refs/heads/main by this push:
     new 1c3b44e617 IGNITE-17727 Improve storage code after Tables 
Configuration changes (#1111)
1c3b44e617 is described below

commit 1c3b44e617263c73191ac36ba280fd1afd335a65
Author: Alexander Polovtcev <[email protected]>
AuthorDate: Thu Sep 22 11:56:23 2022 +0300

    IGNITE-17727 Improve storage code after Tables Configuration changes (#1111)
---
 .../apache/ignite/configuration/NamedListView.java |   2 +
 .../configuration/util/ConfigurationUtil.java      |  16 ++-
 .../apache/ignite/internal/index/IndexManager.java |   2 +-
 .../internal/rocksdb/flush/RocksDbFlusher.java     |  31 ++++--
 .../storage/index/HashIndexDescriptor.java         |  10 +-
 .../storage/index/SortedIndexDescriptor.java       |  19 ++--
 .../ConcurrentHashMapMvTableStorageTest.java       |  49 +++++----
 .../index/AbstractSortedIndexStorageTest.java      |  16 ++-
 .../storage/index/TestHashIndexStorageTest.java    |  23 ++--
 .../storage/index/TestSortedIndexStorageTest.java  |  25 ++---
 .../storage/AbstractMvTableStorageTest.java        | 116 ++++++---------------
 .../chm/TestConcurrentHashMapMvTableStorage.java   |   8 +-
 .../chm/TestConcurrentHashMapStorageEngine.java    |   4 +-
 .../index/AbstractHashIndexStorageTest.java        |  18 ++--
 .../PersistentPageMemoryStorageEngine.java         |   7 +-
 .../VolatilePageMemoryStorageEngine.java           |   7 +-
 .../mv/AbstractPageMemoryMvPartitionStorage.java   |   9 +-
 .../PersistentPageMemoryHashIndexStorageTest.java  |  65 ++++--------
 .../VolatilePageMemoryHashIndexStorageTest.java    |  53 +++-------
 .../AbstractPageMemoryMvPartitionStorageTest.java  |   9 --
 ...PersistentPageMemoryMvPartitionStorageTest.java |  45 ++++----
 .../VolatilePageMemoryMvPartitionStorageTest.java  |  58 ++++-------
 .../storage/rocksdb/RocksDbStorageEngine.java      |  13 +--
 .../storage/rocksdb/RocksDbTableStorage.java       |  17 +--
 .../internal/storage/rocksdb/SortedIndex.java      |   7 ++
 .../rocksdb/RocksDbMvPartitionStorageTest.java     |  33 ++----
 .../storage/rocksdb/RocksDbMvTableStorageTest.java |  49 ++++-----
 .../storage/rocksdb/RocksDbStorageEngineTest.java  |  42 ++++----
 .../rocksdb/index/RocksDbHashIndexStorageTest.java |  15 +--
 .../index/RocksDbSortedIndexStorageTest.java       |  15 +--
 30 files changed, 320 insertions(+), 463 deletions(-)

diff --git 
a/modules/configuration-api/src/main/java/org/apache/ignite/configuration/NamedListView.java
 
b/modules/configuration-api/src/main/java/org/apache/ignite/configuration/NamedListView.java
index 4abdc50f08..ead8415df6 100644
--- 
a/modules/configuration-api/src/main/java/org/apache/ignite/configuration/NamedListView.java
+++ 
b/modules/configuration-api/src/main/java/org/apache/ignite/configuration/NamedListView.java
@@ -18,6 +18,7 @@
 package org.apache.ignite.configuration;
 
 import java.util.List;
+import org.jetbrains.annotations.Nullable;
 
 /**
  * View type for a {@link NamedConfigurationTree}. Represents an immutable 
snapshot of a named list configuration.
@@ -38,6 +39,7 @@ public interface NamedListView<VIEWT> {
      * @param key Key string.
      * @return Requested value or {@code null} if it's not found.
      */
+    @Nullable
     VIEWT get(String key);
 
     /**
diff --git 
a/modules/configuration/src/main/java/org/apache/ignite/internal/configuration/util/ConfigurationUtil.java
 
b/modules/configuration/src/main/java/org/apache/ignite/internal/configuration/util/ConfigurationUtil.java
index 557ef7fc2f..f050af139d 100644
--- 
a/modules/configuration/src/main/java/org/apache/ignite/internal/configuration/util/ConfigurationUtil.java
+++ 
b/modules/configuration/src/main/java/org/apache/ignite/internal/configuration/util/ConfigurationUtil.java
@@ -1157,16 +1157,26 @@ public class ConfigurationUtil {
     }
 
     /**
-     * Returns named list node element by its internal id rather than its name.
+     * Returns the element located in the given named list node under the 
given internal ID.
+     *
+     * @param node Named list node.
+     * @param internalId Internal ID of the element.
+     * @param <N> Type of the element.
+     * @return Element located in the named list node under the given internal 
ID.
      */
+    @Nullable
     public static <N> N getByInternalId(NamedListView<N> node, UUID 
internalId) {
         return node.get(((NamedListNode<?>) node).keyByInternalId(internalId));
     }
 
     /**
-     * Returns internal id for the value associated with the passed key.
+     * Extracts the internal ID of the element located in the given named list 
node under the given name.
+     *
+     * @param node Named list node.
+     * @param name Name of the element inside the named list node.
+     * @return Internal ID of the element.
      */
-    public static <N> UUID getInternalId(NamedListView<N> node, String name) {
+    public static UUID internalId(NamedListView<?> node, String name) {
         return ((NamedListNode<?>) node).internalId(name);
     }
 
diff --git 
a/modules/index/src/main/java/org/apache/ignite/internal/index/IndexManager.java
 
b/modules/index/src/main/java/org/apache/ignite/internal/index/IndexManager.java
index 216370bfa0..6359a38627 100644
--- 
a/modules/index/src/main/java/org/apache/ignite/internal/index/IndexManager.java
+++ 
b/modules/index/src/main/java/org/apache/ignite/internal/index/IndexManager.java
@@ -151,7 +151,7 @@ public class IndexManager extends Producer<IndexEvent, 
IndexEventParameters> imp
                 UUID tableId;
 
                 try {
-                    tableId = 
ConfigurationUtil.getInternalId(tablesCfg.tables().value(), canonicalName);
+                    tableId = 
ConfigurationUtil.internalId(tablesCfg.tables().value(), canonicalName);
                 } catch (IllegalArgumentException e) {
                     throw new TableNotFoundException(canonicalName);
                 }
diff --git 
a/modules/rocksdb-common/src/main/java/org/apache/ignite/internal/rocksdb/flush/RocksDbFlusher.java
 
b/modules/rocksdb-common/src/main/java/org/apache/ignite/internal/rocksdb/flush/RocksDbFlusher.java
index 63ea3ea4c3..77d69a2449 100644
--- 
a/modules/rocksdb-common/src/main/java/org/apache/ignite/internal/rocksdb/flush/RocksDbFlusher.java
+++ 
b/modules/rocksdb-common/src/main/java/org/apache/ignite/internal/rocksdb/flush/RocksDbFlusher.java
@@ -17,11 +17,11 @@
 
 package org.apache.ignite.internal.rocksdb.flush;
 
+import java.util.ArrayList;
 import java.util.List;
 import java.util.SortedMap;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.ConcurrentSkipListMap;
-import java.util.concurrent.CopyOnWriteArrayList;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.TimeUnit;
@@ -48,7 +48,10 @@ public class RocksDbFlusher {
     private volatile RocksDB db;
 
     /** List of all column families. */
-    private final List<ColumnFamilyHandle> columnFamilyHandles = new 
CopyOnWriteArrayList<>();
+    private final List<ColumnFamilyHandle> columnFamilyHandles = new 
ArrayList<>();
+
+    /** Mutex for {@link #columnFamilyHandles} access. */
+    private final Object columnFamilyHandlesMux = new Object();
 
     /** Scheduled pool to schedule flushes. */
     private final ScheduledExecutorService scheduledPool;
@@ -133,7 +136,10 @@ public class RocksDbFlusher {
     @SuppressWarnings("AssignmentOrReturnOfFieldWithMutableType")
     public void init(RocksDB db, List<ColumnFamilyHandle> columnFamilyHandles) 
{
         this.db = db;
-        this.columnFamilyHandles.addAll(columnFamilyHandles);
+
+        synchronized (columnFamilyHandlesMux) {
+            this.columnFamilyHandles.addAll(columnFamilyHandles);
+        }
 
         synchronized (latestPersistedSequenceNumberMux) {
             latestPersistedSequenceNumber = db.getLatestSequenceNumber();
@@ -144,12 +150,23 @@ public class RocksDbFlusher {
      * Adds the given handle to the list of CF handles.
      */
     public void addColumnFamily(ColumnFamilyHandle handle) {
-        columnFamilyHandles.add(handle);
+        synchronized (columnFamilyHandlesMux) {
+            columnFamilyHandles.add(handle);
+        }
+    }
+
+    /**
+     * Removes the given handle to the list of CF handles.
+     */
+    public void removeColumnFamily(ColumnFamilyHandle handle) {
+        synchronized (columnFamilyHandlesMux) {
+            columnFamilyHandles.remove(handle);
+        }
     }
 
     /**
      * Returns a future to wait next flush operation from the current point in 
time. Uses {@link RocksDB#getLatestSequenceNumber()} to
-     * achieve this, by fixing its value at the time of invokation. Storage is 
considered flushed when at least one persisted column
+     * achieve this, by fixing its value at the time of invocation. Storage is 
considered flushed when at least one persisted column
      * family has its latest sequence number greater or equal to the one that 
we fixed. This is enough to guarantee that all column families
      * have up-to-data state as well, because flusher expects its users to 
also have {@link Options#setAtomicFlush(boolean)} option
      * enabled.
@@ -198,7 +215,9 @@ public class RocksDbFlusher {
                 try {
                     // Explicit list of CF handles is mandatory!
                     // Default flush is buggy and only invokes listener 
methods for a single random CF.
-                    db.flush(flushOptions, columnFamilyHandles);
+                    synchronized (columnFamilyHandlesMux) {
+                        db.flush(flushOptions, columnFamilyHandles);
+                    }
                 } catch (RocksDBException e) {
                     LOG.error("Error occurred during the explicit flush", e);
                 } finally {
diff --git 
a/modules/storage-api/src/main/java/org/apache/ignite/internal/storage/index/HashIndexDescriptor.java
 
b/modules/storage-api/src/main/java/org/apache/ignite/internal/storage/index/HashIndexDescriptor.java
index d72f24406e..b1bc14a6a5 100644
--- 
a/modules/storage-api/src/main/java/org/apache/ignite/internal/storage/index/HashIndexDescriptor.java
+++ 
b/modules/storage-api/src/main/java/org/apache/ignite/internal/storage/index/HashIndexDescriptor.java
@@ -90,12 +90,10 @@ public class HashIndexDescriptor {
     /**
      * Creates an Index Descriptor from a given Table Configuration.
      *
-     * @param tableConfig Table configuration.
      * @param tablesConfig Tables and indexes configuration.
      * @param indexId Index id.
      */
-    // TODO: IGNITE-17727 Fix redundant param.
-    public HashIndexDescriptor(UUID indexId, TableView tableConfig, TablesView 
tablesConfig) {
+    public HashIndexDescriptor(UUID indexId, TablesView tablesConfig) {
         TableIndexView indexConfig = 
ConfigurationUtil.getByInternalId(tablesConfig.indexes(), indexId);
 
         if (indexConfig == null) {
@@ -109,6 +107,12 @@ public class HashIndexDescriptor {
             ));
         }
 
+        TableView tableConfig = 
ConfigurationUtil.getByInternalId(tablesConfig.tables(), indexConfig.tableId());
+
+        if (tableConfig == null) {
+            throw new StorageException(String.format("Table configuration for 
\"%s\" could not be found", indexConfig.tableId()));
+        }
+
         this.id = indexId;
 
         String[] indexColumns = ((HashIndexView) indexConfig).columnNames();
diff --git 
a/modules/storage-api/src/main/java/org/apache/ignite/internal/storage/index/SortedIndexDescriptor.java
 
b/modules/storage-api/src/main/java/org/apache/ignite/internal/storage/index/SortedIndexDescriptor.java
index 6e2361118b..d59cc1305f 100644
--- 
a/modules/storage-api/src/main/java/org/apache/ignite/internal/storage/index/SortedIndexDescriptor.java
+++ 
b/modules/storage-api/src/main/java/org/apache/ignite/internal/storage/index/SortedIndexDescriptor.java
@@ -127,11 +127,10 @@ public class SortedIndexDescriptor {
      * Creates an Index Descriptor from a given Table Configuration.
      *
      * @param indexId Index ID.
-     * @param tableConfig Table configuration.
+     * @param tablesConfig Tables configuration.
      */
-    // TODO: IGNITE-17727 Fix redundant param.
-    public SortedIndexDescriptor(UUID indexId, TableView tableConfig, 
TablesView tablesConfig) {
-        this(indexId, extractIndexColumnsConfiguration(indexId, tableConfig, 
tablesConfig));
+    public SortedIndexDescriptor(UUID indexId, TablesView tablesConfig) {
+        this(indexId, extractIndexColumnsConfiguration(indexId, tablesConfig));
     }
 
     /**
@@ -146,11 +145,7 @@ public class SortedIndexDescriptor {
         this.binaryTupleSchema = createSchema(columns);
     }
 
-    private static List<ColumnDescriptor> extractIndexColumnsConfiguration(
-            UUID indexId,
-            TableView tableConfig,
-            TablesView tablesConfig
-    ) {
+    private static List<ColumnDescriptor> 
extractIndexColumnsConfiguration(UUID indexId, TablesView tablesConfig) {
         TableIndexView indexConfig = 
ConfigurationUtil.getByInternalId(tablesConfig.indexes(), indexId);
 
         if (indexConfig == null) {
@@ -164,6 +159,12 @@ public class SortedIndexDescriptor {
             ));
         }
 
+        TableView tableConfig = 
ConfigurationUtil.getByInternalId(tablesConfig.tables(), indexConfig.tableId());
+
+        if (tableConfig == null) {
+            throw new StorageException(String.format("Table configuration for 
\"%s\" could not be found", indexConfig.tableId()));
+        }
+
         NamedListView<? extends IndexColumnView> indexColumns = 
((SortedIndexView) indexConfig).columns();
 
         return indexColumns.namedListKeys().stream()
diff --git 
a/modules/storage-api/src/test/java/org/apache/ignite/internal/storage/ConcurrentHashMapMvTableStorageTest.java
 
b/modules/storage-api/src/test/java/org/apache/ignite/internal/storage/ConcurrentHashMapMvTableStorageTest.java
index 459d4cff90..ba8db5dd0a 100644
--- 
a/modules/storage-api/src/test/java/org/apache/ignite/internal/storage/ConcurrentHashMapMvTableStorageTest.java
+++ 
b/modules/storage-api/src/test/java/org/apache/ignite/internal/storage/ConcurrentHashMapMvTableStorageTest.java
@@ -17,11 +17,10 @@
 
 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.TableConfiguration;
-import org.apache.ignite.configuration.schemas.table.TableIndexView;
 import org.apache.ignite.configuration.schemas.table.TablesConfiguration;
 import 
org.apache.ignite.configuration.schemas.table.UnlimitedBudgetConfigurationSchema;
 import 
org.apache.ignite.internal.configuration.testframework.ConfigurationExtension;
@@ -29,7 +28,8 @@ import 
org.apache.ignite.internal.configuration.testframework.InjectConfiguratio
 import 
org.apache.ignite.internal.storage.chm.TestConcurrentHashMapMvTableStorage;
 import 
org.apache.ignite.internal.storage.chm.TestConcurrentHashMapStorageEngine;
 import 
org.apache.ignite.internal.storage.chm.schema.TestConcurrentHashMapDataStorageConfigurationSchema;
-import org.apache.ignite.internal.storage.engine.MvTableStorage;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.extension.ExtendWith;
 
 /**
@@ -37,25 +37,34 @@ import org.junit.jupiter.api.extension.ExtendWith;
  */
 @ExtendWith(ConfigurationExtension.class)
 public class ConcurrentHashMapMvTableStorageTest extends 
AbstractMvTableStorageTest {
-    @InjectConfiguration(
-            polymorphicExtensions = {
-                    TestConcurrentHashMapDataStorageConfigurationSchema.class,
-                    SortedIndexConfigurationSchema.class,
-                    HashIndexConfigurationSchema.class,
-                    NullValueDefaultConfigurationSchema.class,
-                    UnlimitedBudgetConfigurationSchema.class
-            },
-            value = "mock.dataStorage.name = " + 
TestConcurrentHashMapStorageEngine.ENGINE_NAME
-    )
-    private TableConfiguration tableConfig0;
+    private TestConcurrentHashMapMvTableStorage storage;
 
-    @Override
-    protected void setUp() {
-        super.tableConfig = tableConfig0;
+    @BeforeEach
+    void setUp(
+            @InjectConfiguration(
+                    polymorphicExtensions = {
+                            
TestConcurrentHashMapDataStorageConfigurationSchema.class,
+                            UnknownDataStorageConfigurationSchema.class,
+                            HashIndexConfigurationSchema.class,
+                            SortedIndexConfigurationSchema.class,
+                            NullValueDefaultConfigurationSchema.class,
+                            UnlimitedBudgetConfigurationSchema.class
+                    },
+                    value = "mock.tables.foo.dataStorage.name = " + 
TestConcurrentHashMapStorageEngine.ENGINE_NAME
+            )
+            TablesConfiguration tablesConfig
+    ) {
+        storage = new 
TestConcurrentHashMapMvTableStorage(tablesConfig.tables().get("foo"), 
tablesConfig);
+
+        storage.start();
+
+        initialize(storage, tablesConfig);
     }
 
-    @Override
-    protected MvTableStorage tableStorage(TableIndexView sortedIdx, 
TableIndexView hashIdx, TablesConfiguration tablesCfg) {
-        return new TestConcurrentHashMapMvTableStorage(tableConfig, tablesCfg);
+    @AfterEach
+    void tearDown() {
+        if (storage != null) {
+            storage.stop();
+        }
     }
 }
diff --git 
a/modules/storage-api/src/test/java/org/apache/ignite/internal/storage/index/AbstractSortedIndexStorageTest.java
 
b/modules/storage-api/src/test/java/org/apache/ignite/internal/storage/index/AbstractSortedIndexStorageTest.java
index 70a1983bf5..d3eeec9657 100644
--- 
a/modules/storage-api/src/test/java/org/apache/ignite/internal/storage/index/AbstractSortedIndexStorageTest.java
+++ 
b/modules/storage-api/src/test/java/org/apache/ignite/internal/storage/index/AbstractSortedIndexStorageTest.java
@@ -19,6 +19,7 @@ package org.apache.ignite.internal.storage.index;
 
 import static java.util.stream.Collectors.toList;
 import static java.util.stream.Collectors.toUnmodifiableList;
+import static 
org.apache.ignite.internal.schema.configuration.SchemaConfigurationConverter.addIndex;
 import static 
org.apache.ignite.internal.schema.configuration.SchemaConfigurationConverter.convert;
 import static 
org.apache.ignite.internal.schema.testutils.builder.SchemaBuilders.column;
 import static 
org.apache.ignite.internal.schema.testutils.builder.SchemaBuilders.tableBuilder;
@@ -27,7 +28,6 @@ import static 
org.apache.ignite.internal.storage.index.SortedIndexStorage.GREATE
 import static org.apache.ignite.internal.storage.index.SortedIndexStorage.LESS;
 import static 
org.apache.ignite.internal.storage.index.SortedIndexStorage.LESS_OR_EQUAL;
 import static 
org.apache.ignite.internal.testframework.IgniteTestUtils.randomString;
-import static 
org.apache.ignite.internal.testframework.matchers.CompletableFutureMatcher.willBe;
 import static 
org.apache.ignite.internal.testframework.matchers.CompletableFutureMatcher.willCompleteSuccessfully;
 import static org.hamcrest.CoreMatchers.equalTo;
 import static org.hamcrest.CoreMatchers.is;
@@ -43,6 +43,7 @@ import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
 import java.util.Random;
+import java.util.UUID;
 import java.util.concurrent.CompletableFuture;
 import java.util.function.Predicate;
 import java.util.stream.IntStream;
@@ -50,6 +51,7 @@ import java.util.stream.Stream;
 import org.apache.ignite.configuration.schemas.table.TableConfiguration;
 import org.apache.ignite.configuration.schemas.table.TableIndexView;
 import org.apache.ignite.configuration.schemas.table.TablesConfiguration;
+import org.apache.ignite.internal.configuration.util.ConfigurationUtil;
 import org.apache.ignite.internal.logger.IgniteLogger;
 import org.apache.ignite.internal.logger.Loggers;
 import org.apache.ignite.internal.schema.BinaryTuplePrefix;
@@ -87,8 +89,6 @@ public abstract class AbstractSortedIndexStorageTest {
 
     private static final int TEST_PARTITION = 0;
 
-    private Random random;
-
     private static List<ColumnDefinition> allTypesColumnDefinitions() {
         Stream<ColumnType> allColumnTypes = Stream.of(
                 ColumnType.INT8,
@@ -114,6 +114,8 @@ public abstract class AbstractSortedIndexStorageTest {
                 .collect(toUnmodifiableList());
     }
 
+    private final Random random;
+
     private MvTableStorage tableStorage;
 
     private MvPartitionStorage partitionStorage;
@@ -188,9 +190,13 @@ public abstract class AbstractSortedIndexStorageTest {
      */
     private SortedIndexStorage createIndexStorage(ColumnarIndexDefinition 
indexDefinition) {
         CompletableFuture<Void> createIndexFuture =
-                tablesCfg.indexes().change(chg -> 
chg.create(indexDefinition.name(), idx -> convert(indexDefinition, idx)));
+                tablesCfg.indexes().change(chg -> 
chg.create(indexDefinition.name(), idx -> {
+                    UUID tableId = 
ConfigurationUtil.internalId(tablesCfg.tables().value(), "foo");
+
+                    addIndex(indexDefinition, tableId, idx);
+                }));
 
-        assertThat(createIndexFuture, willBe(nullValue(Void.class)));
+        assertThat(createIndexFuture, willCompleteSuccessfully());
 
         TableIndexView indexConfig = 
tablesCfg.indexes().get(indexDefinition.name()).value();
 
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 0d15c37249..63bf55d84a 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
@@ -18,9 +18,6 @@
 package org.apache.ignite.internal.storage.index;
 
 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;
@@ -44,25 +41,19 @@ public class TestHashIndexStorageTest extends 
AbstractHashIndexStorageTest {
             @InjectConfiguration(
                     polymorphicExtensions = {
                             
TestConcurrentHashMapDataStorageConfigurationSchema.class,
+                            UnknownDataStorageConfigurationSchema.class,
                             HashIndexConfigurationSchema.class,
                             NullValueDefaultConfigurationSchema.class,
                             UnlimitedBudgetConfigurationSchema.class
                     },
-                    value = "mock.dataStorage.name = " + 
TestConcurrentHashMapStorageEngine.ENGINE_NAME
+                    value = "mock.tables.foo.dataStorage.name = " + 
TestConcurrentHashMapStorageEngine.ENGINE_NAME
             )
-            TableConfiguration tableCfg,
-
-            @InjectConfiguration(polymorphicExtensions = {
-                    HashIndexConfigurationSchema.class,
-                    UnknownDataStorageConfigurationSchema.class,
-                    ConstantValueDefaultConfigurationSchema.class,
-                    FunctionCallDefaultConfigurationSchema.class,
-                    NullValueDefaultConfigurationSchema.class,
-                    UnlimitedBudgetConfigurationSchema.class,
-                    EntryCountBudgetConfigurationSchema.class
-            })
             TablesConfiguration tablesConfig
     ) {
-        initialize(new TestConcurrentHashMapMvTableStorage(tableCfg, 
tablesConfig), tablesConfig);
+        TableConfiguration tableConfig = tablesConfig.tables().get("foo");
+
+        var storage = new TestConcurrentHashMapMvTableStorage(tableConfig, 
tablesConfig);
+
+        initialize(storage, 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 fcb2b3a4bb..9ad702c8f0 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
@@ -18,10 +18,6 @@
 package org.apache.ignite.internal.storage.index;
 
 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.TableConfiguration;
@@ -46,27 +42,18 @@ public class TestSortedIndexStorageTest extends 
AbstractSortedIndexStorageTest {
             @InjectConfiguration(
                     polymorphicExtensions = {
                             
TestConcurrentHashMapDataStorageConfigurationSchema.class,
-                            HashIndexConfigurationSchema.class,
+                            UnknownDataStorageConfigurationSchema.class,
                             SortedIndexConfigurationSchema.class,
                             NullValueDefaultConfigurationSchema.class,
                             UnlimitedBudgetConfigurationSchema.class
                     },
-                    value = "mock.dataStorage.name = " + 
TestConcurrentHashMapStorageEngine.ENGINE_NAME
+                    value = "mock.tables.foo.dataStorage.name = " + 
TestConcurrentHashMapStorageEngine.ENGINE_NAME
             )
-            TableConfiguration tableCfg,
+            TablesConfiguration tablesConfig
+    ) {
+        TableConfiguration tableConfig = tablesConfig.tables().get("foo");
 
-            @InjectConfiguration(polymorphicExtensions = {
-                    HashIndexConfigurationSchema.class,
-                    SortedIndexConfigurationSchema.class,
-                    UnknownDataStorageConfigurationSchema.class,
-                    ConstantValueDefaultConfigurationSchema.class,
-                    FunctionCallDefaultConfigurationSchema.class,
-                    NullValueDefaultConfigurationSchema.class,
-                    UnlimitedBudgetConfigurationSchema.class,
-                    EntryCountBudgetConfigurationSchema.class
-            })
-            TablesConfiguration tablesConfig) {
-        var storage = new TestConcurrentHashMapMvTableStorage(tableCfg, 
tablesConfig);
+        var storage = new TestConcurrentHashMapMvTableStorage(tableConfig, 
tablesConfig);
 
         initialize(storage, tablesConfig);
     }
diff --git 
a/modules/storage-api/src/testFixtures/java/org/apache/ignite/internal/storage/AbstractMvTableStorageTest.java
 
b/modules/storage-api/src/testFixtures/java/org/apache/ignite/internal/storage/AbstractMvTableStorageTest.java
index 2642701dee..6b3fd3ddb4 100644
--- 
a/modules/storage-api/src/testFixtures/java/org/apache/ignite/internal/storage/AbstractMvTableStorageTest.java
+++ 
b/modules/storage-api/src/testFixtures/java/org/apache/ignite/internal/storage/AbstractMvTableStorageTest.java
@@ -17,7 +17,6 @@
 
 package org.apache.ignite.internal.storage;
 
-import static 
org.apache.ignite.configuration.annotation.ConfigurationType.DISTRIBUTED;
 import static 
org.apache.ignite.internal.testframework.matchers.CompletableFutureMatcher.willCompleteSuccessfully;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.Matchers.contains;
@@ -30,24 +29,14 @@ import static org.junit.jupiter.api.Assertions.assertThrows;
 
 import java.nio.ByteBuffer;
 import java.util.List;
-import java.util.Map;
 import java.util.UUID;
 import java.util.concurrent.CompletableFuture;
 import java.util.stream.Collectors;
-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.TableConfiguration;
 import org.apache.ignite.configuration.schemas.table.TableIndexView;
 import org.apache.ignite.configuration.schemas.table.TablesConfiguration;
-import 
org.apache.ignite.configuration.schemas.table.UnlimitedBudgetConfigurationSchema;
 import org.apache.ignite.internal.binarytuple.BinaryTupleBuilder;
-import org.apache.ignite.internal.configuration.ConfigurationRegistry;
-import 
org.apache.ignite.internal.configuration.storage.TestConfigurationStorage;
+import org.apache.ignite.internal.configuration.util.ConfigurationUtil;
 import org.apache.ignite.internal.schema.BinaryTuple;
 import org.apache.ignite.internal.schema.BinaryTupleSchema;
 import org.apache.ignite.internal.schema.BinaryTupleSchema.Element;
@@ -60,8 +49,7 @@ import org.apache.ignite.internal.storage.index.IndexRowImpl;
 import org.apache.ignite.internal.util.Cursor;
 import org.apache.ignite.schema.definition.ColumnType;
 import org.apache.ignite.schema.definition.TableDefinition;
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.BeforeEach;
+import org.apache.ignite.schema.definition.index.IndexDefinition;
 import org.junit.jupiter.api.Test;
 
 /**
@@ -75,44 +63,25 @@ public abstract class AbstractMvTableStorageTest extends 
BaseMvStoragesTest {
 
     private static final int PARTITION_ID = 0;
 
-    protected MvTableStorage tableStorage;
+    private MvTableStorage tableStorage;
 
-    protected TableIndexView sortedIdx;
+    private TableIndexView sortedIdx;
 
-    protected TableIndexView hashIdx;
+    private TableIndexView hashIdx;
 
-    protected TableConfiguration tableConfig;
-
-    protected abstract MvTableStorage tableStorage(TableIndexView sortedIdx, 
TableIndexView hashIdx, TablesConfiguration tablesCfg);
-
-    protected abstract void setUp();
-
-    /** Configuration registry with one table for each test. */
-    private ConfigurationRegistry confRegistry;
-
-    @BeforeEach
-    void setUpBase() {
-        startTestRegistry();
-
-        TablesConfiguration tablesCfg = 
confRegistry.getConfiguration(TablesConfiguration.KEY);
+    /**
+     * Initializes the internal structures needed for tests.
+     *
+     * <p>This method *MUST* always be called in either subclass' constructor 
or setUp method.
+     */
+    protected final void initialize(MvTableStorage tableStorage, 
TablesConfiguration tablesCfg) {
+        createTestTable(tableStorage.configuration());
+        createTestIndexes(tablesCfg);
 
-        createTestIndexes();
+        this.tableStorage = tableStorage;
 
         sortedIdx = tablesCfg.indexes().get(SORTED_INDEX_NAME).value();
         hashIdx = tablesCfg.indexes().get(HASH_INDEX_NAME).value();
-
-        setUp();
-
-        createTestTable();
-
-        tableStorage = tableStorage(sortedIdx, hashIdx, tablesCfg);
-
-        tableStorage.start();
-    }
-
-    @AfterEach
-    void tearDownBase() {
-        tableStorage.stop();
     }
 
     /**
@@ -222,7 +191,7 @@ public abstract class AbstractMvTableStorageTest extends 
BaseMvStoragesTest {
         var rowId1 = new RowId(PARTITION_ID);
         var rowId2 = new RowId(PARTITION_ID + 1);
 
-        BinaryTupleSchema schema = BinaryTupleSchema.create(new Element[] {
+        BinaryTupleSchema schema = BinaryTupleSchema.create(new Element[]{
                 new Element(NativeTypes.INT32, false),
                 new Element(NativeTypes.INT32, false)
         });
@@ -303,44 +272,29 @@ public abstract class AbstractMvTableStorageTest extends 
BaseMvStoragesTest {
         );
     }
 
-    private void startTestRegistry() {
-        confRegistry = new ConfigurationRegistry(
-                List.of(TablesConfiguration.KEY),
-                Map.of(),
-                new TestConfigurationStorage(DISTRIBUTED),
-                List.of(),
-                List.of(
-                        HashIndexConfigurationSchema.class,
-                        SortedIndexConfigurationSchema.class,
-                        UnknownDataStorageConfigurationSchema.class,
-                        ConstantValueDefaultConfigurationSchema.class,
-                        FunctionCallDefaultConfigurationSchema.class,
-                        NullValueDefaultConfigurationSchema.class,
-                        UnlimitedBudgetConfigurationSchema.class,
-                        EntryCountBudgetConfigurationSchema.class
-                )
+    private static void createTestIndexes(TablesConfiguration tablesConfig) {
+        List<IndexDefinition> indexDefinitions = List.of(
+                SchemaBuilders.sortedIndex(SORTED_INDEX_NAME)
+                        .addIndexColumn("COLUMN0").done()
+                        .build(),
+                SchemaBuilders.hashIndex(HASH_INDEX_NAME)
+                        .withColumns("COLUMN0")
+                        .build()
         );
 
-        confRegistry.start();
-    }
+        UUID tableId = 
ConfigurationUtil.internalId(tablesConfig.tables().value(), "foo");
 
-    private void createTestIndexes() {
-        CompletableFuture<Void> indexCreateFut = 
confRegistry.getConfiguration(TablesConfiguration.KEY).indexes().change(ch -> {
-            List.of(SchemaBuilders.sortedIndex(SORTED_INDEX_NAME)
-                            .addIndexColumn("COLUMN0").done()
-                            .build(),
-                    SchemaBuilders.hashIndex(HASH_INDEX_NAME)
-                            .withColumns("COLUMN0")
-                            .build()
-            ).forEach(idxDef -> ch.create(idxDef.name(), c ->
-                    SchemaConfigurationConverter.addIndex(idxDef, 
UUID.randomUUID(), c)));
-        });
+        CompletableFuture<Void> indexCreateFut = 
tablesConfig.indexes().change(ch ->
+                indexDefinitions.forEach(idxDef -> ch.create(idxDef.name(),
+                        c -> SchemaConfigurationConverter.addIndex(idxDef, 
tableId, c)
+                ))
+        );
 
         assertThat(indexCreateFut, willCompleteSuccessfully());
     }
 
-    private void createTestTable() {
-        TableDefinition tableDefinition = 
SchemaBuilders.tableBuilder("PUBLIC", "TEST")
+    private static void createTestTable(TableConfiguration tableConfig) {
+        TableDefinition tableDefinition = 
SchemaBuilders.tableBuilder("PUBLIC", "foo")
                 .columns(
                         SchemaBuilders.column("ID", ColumnType.INT32).build(),
                         SchemaBuilders.column("COLUMN0", 
ColumnType.INT32).build()
@@ -348,11 +302,9 @@ public abstract class AbstractMvTableStorageTest extends 
BaseMvStoragesTest {
                 .withPrimaryKey("ID")
                 .build();
 
-        tableConfig.change(tblChg -> 
SchemaConfigurationConverter.convert(tableDefinition, tblChg));
-
-        CompletableFuture<Void> createTableFuture = 
confRegistry.getConfiguration(TablesConfiguration.KEY).tables()
-                .change(chg -> chg.create(tableDefinition.canonicalName(),
-                        tblChg -> 
SchemaConfigurationConverter.convert(tableDefinition, tblChg)));
+        CompletableFuture<Void> createTableFuture = tableConfig.change(
+                tableChange -> 
SchemaConfigurationConverter.convert(tableDefinition, tableChange)
+        );
 
         assertThat(createTableFuture, willCompleteSuccessfully());
     }
diff --git 
a/modules/storage-api/src/testFixtures/java/org/apache/ignite/internal/storage/chm/TestConcurrentHashMapMvTableStorage.java
 
b/modules/storage-api/src/testFixtures/java/org/apache/ignite/internal/storage/chm/TestConcurrentHashMapMvTableStorage.java
index b4171d335a..1ff44ebf0a 100644
--- 
a/modules/storage-api/src/testFixtures/java/org/apache/ignite/internal/storage/chm/TestConcurrentHashMapMvTableStorage.java
+++ 
b/modules/storage-api/src/testFixtures/java/org/apache/ignite/internal/storage/chm/TestConcurrentHashMapMvTableStorage.java
@@ -38,14 +38,14 @@ import org.jetbrains.annotations.Nullable;
  * Test table storage implementation.
  */
 public class TestConcurrentHashMapMvTableStorage implements MvTableStorage {
-    private final TableConfiguration tableCfg;
-
     private final Map<Integer, MvPartitionStorage> partitions = new 
ConcurrentHashMap<>();
 
     private final Map<UUID, SortedIndices> sortedIndicesById = new 
ConcurrentHashMap<>();
 
     private final Map<UUID, HashIndices> hashIndicesById = new 
ConcurrentHashMap<>();
 
+    private final TableConfiguration tableCfg;
+
     private final TablesConfiguration tablesCfg;
 
     /**
@@ -119,7 +119,7 @@ public class TestConcurrentHashMapMvTableStorage implements 
MvTableStorage {
 
         SortedIndices sortedIndices = sortedIndicesById.computeIfAbsent(
                 indexId,
-                id -> new SortedIndices(new SortedIndexDescriptor(id, 
tableCfg.value(), tablesCfg.value()))
+                id -> new SortedIndices(new SortedIndexDescriptor(id, 
tablesCfg.value()))
         );
 
         return sortedIndices.getOrCreateStorage(partitionId);
@@ -133,7 +133,7 @@ public class TestConcurrentHashMapMvTableStorage implements 
MvTableStorage {
 
         HashIndices sortedIndices = hashIndicesById.computeIfAbsent(
                 indexId,
-                id -> new HashIndices(new HashIndexDescriptor(id, 
tableCfg.value(), tablesCfg.value()))
+                id -> new HashIndices(new HashIndexDescriptor(id, 
tablesCfg.value()))
         );
 
         return sortedIndices.getOrCreateStorage(partitionId);
diff --git 
a/modules/storage-api/src/testFixtures/java/org/apache/ignite/internal/storage/chm/TestConcurrentHashMapStorageEngine.java
 
b/modules/storage-api/src/testFixtures/java/org/apache/ignite/internal/storage/chm/TestConcurrentHashMapStorageEngine.java
index 4efe39e9c5..9e2aa172ed 100644
--- 
a/modules/storage-api/src/testFixtures/java/org/apache/ignite/internal/storage/chm/TestConcurrentHashMapStorageEngine.java
+++ 
b/modules/storage-api/src/testFixtures/java/org/apache/ignite/internal/storage/chm/TestConcurrentHashMapStorageEngine.java
@@ -46,7 +46,9 @@ public class TestConcurrentHashMapStorageEngine implements 
StorageEngine {
     /** {@inheritDoc} */
     @Override
     public MvTableStorage createMvTable(TableConfiguration tableCfg, 
TablesConfiguration tablesCfg) throws StorageException {
-        assert tableCfg.dataStorage().name().value().equals(ENGINE_NAME) : 
tableCfg.dataStorage().name().value();
+        String dataStorageName = tableCfg.dataStorage().name().value();
+
+        assert dataStorageName.equals(ENGINE_NAME) : dataStorageName;
 
         return new TestConcurrentHashMapMvTableStorage(tableCfg, tablesCfg);
     }
diff --git 
a/modules/storage-api/src/testFixtures/java/org/apache/ignite/internal/storage/index/AbstractHashIndexStorageTest.java
 
b/modules/storage-api/src/testFixtures/java/org/apache/ignite/internal/storage/index/AbstractHashIndexStorageTest.java
index 09d966abba..6c7996a851 100644
--- 
a/modules/storage-api/src/testFixtures/java/org/apache/ignite/internal/storage/index/AbstractHashIndexStorageTest.java
+++ 
b/modules/storage-api/src/testFixtures/java/org/apache/ignite/internal/storage/index/AbstractHashIndexStorageTest.java
@@ -18,6 +18,7 @@
 package org.apache.ignite.internal.storage.index;
 
 import static java.util.stream.Collectors.toList;
+import static 
org.apache.ignite.internal.schema.configuration.SchemaConfigurationConverter.addIndex;
 import static 
org.apache.ignite.internal.schema.configuration.SchemaConfigurationConverter.convert;
 import static 
org.apache.ignite.internal.schema.testutils.builder.SchemaBuilders.column;
 import static 
org.apache.ignite.internal.schema.testutils.builder.SchemaBuilders.tableBuilder;
@@ -30,10 +31,12 @@ import static org.hamcrest.Matchers.empty;
 import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
 
 import java.util.Collection;
+import java.util.UUID;
 import java.util.concurrent.CompletableFuture;
 import org.apache.ignite.configuration.schemas.table.TableConfiguration;
-import org.apache.ignite.configuration.schemas.table.TableIndexConfiguration;
+import org.apache.ignite.configuration.schemas.table.TableIndexView;
 import org.apache.ignite.configuration.schemas.table.TablesConfiguration;
+import org.apache.ignite.internal.configuration.util.ConfigurationUtil;
 import org.apache.ignite.internal.schema.testutils.builder.SchemaBuilders;
 import org.apache.ignite.internal.storage.MvPartitionStorage;
 import org.apache.ignite.internal.storage.RowId;
@@ -109,15 +112,18 @@ public abstract class AbstractHashIndexStorageTest {
                 .withColumns(INT_COLUMN_NAME, STR_COLUMN_NAME)
                 .build();
 
-        CompletableFuture<Void> createIndexFuture =
-                tablesConf.indexes().change(chg -> 
chg.create(indexDefinition.name(),
-                        idx -> convert(indexDefinition, idx)));
+        CompletableFuture<Void> createIndexFuture = tablesConf.indexes()
+                .change(chg -> chg.create(indexDefinition.name(), idx -> {
+                    UUID tableId = 
ConfigurationUtil.internalId(tablesConf.tables().value(), "foo");
+
+                    addIndex(indexDefinition, tableId, idx);
+                }));
 
         assertThat(createIndexFuture, willCompleteSuccessfully());
 
-        TableIndexConfiguration indexConfig = 
tablesConf.indexes().get(indexDefinition.name());
+        TableIndexView indexConfig = 
tablesConf.indexes().get(indexDefinition.name()).value();
 
-        return tableStorage.getOrCreateHashIndex(TEST_PARTITION, 
indexConfig.id().value());
+        return tableStorage.getOrCreateHashIndex(TEST_PARTITION, 
indexConfig.id());
     }
 
     /**
diff --git 
a/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/PersistentPageMemoryStorageEngine.java
 
b/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/PersistentPageMemoryStorageEngine.java
index d462fc58ce..a9b45cd248 100644
--- 
a/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/PersistentPageMemoryStorageEngine.java
+++ 
b/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/PersistentPageMemoryStorageEngine.java
@@ -28,7 +28,6 @@ import java.util.stream.Stream;
 import 
org.apache.ignite.configuration.notifications.ConfigurationNamedListListener;
 import 
org.apache.ignite.configuration.notifications.ConfigurationNotificationEvent;
 import org.apache.ignite.configuration.schemas.table.TableConfiguration;
-import org.apache.ignite.configuration.schemas.table.TableView;
 import org.apache.ignite.configuration.schemas.table.TablesConfiguration;
 import org.apache.ignite.internal.components.LongJvmPauseDetector;
 import org.apache.ignite.internal.fileio.AsyncFileIoFactory;
@@ -189,11 +188,7 @@ public class PersistentPageMemoryStorageEngine implements 
StorageEngine {
     @Override
     public PersistentPageMemoryTableStorage createMvTable(TableConfiguration 
tableCfg, TablesConfiguration tablesCfg)
             throws StorageException {
-        TableView tableView = tableCfg.value();
-
-        assert tableView.dataStorage().name().equals(ENGINE_NAME) : 
tableCfg.dataStorage().name();
-
-        PersistentPageMemoryDataStorageView dataStorageView = 
(PersistentPageMemoryDataStorageView) tableView.dataStorage();
+        PersistentPageMemoryDataStorageView dataStorageView = 
(PersistentPageMemoryDataStorageView) tableCfg.dataStorage().value();
 
         return new PersistentPageMemoryTableStorage(this, tableCfg, 
regions.get(dataStorageView.dataRegion()), tablesCfg);
     }
diff --git 
a/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/VolatilePageMemoryStorageEngine.java
 
b/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/VolatilePageMemoryStorageEngine.java
index ee37d900f7..defca6d532 100644
--- 
a/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/VolatilePageMemoryStorageEngine.java
+++ 
b/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/VolatilePageMemoryStorageEngine.java
@@ -26,7 +26,6 @@ import java.util.concurrent.ConcurrentHashMap;
 import 
org.apache.ignite.configuration.notifications.ConfigurationNamedListListener;
 import 
org.apache.ignite.configuration.notifications.ConfigurationNotificationEvent;
 import org.apache.ignite.configuration.schemas.table.TableConfiguration;
-import org.apache.ignite.configuration.schemas.table.TableView;
 import org.apache.ignite.configuration.schemas.table.TablesConfiguration;
 import org.apache.ignite.internal.pagememory.PageMemory;
 import 
org.apache.ignite.internal.pagememory.configuration.schema.VolatilePageMemoryDataRegionConfiguration;
@@ -95,11 +94,7 @@ public class VolatilePageMemoryStorageEngine implements 
StorageEngine {
     @Override
     public VolatilePageMemoryTableStorage createMvTable(TableConfiguration 
tableCfg, TablesConfiguration tablesCfg)
             throws StorageException {
-        TableView tableView = tableCfg.value();
-
-        assert tableView.dataStorage().name().equals(ENGINE_NAME) : 
tableView.dataStorage().name();
-
-        VolatilePageMemoryDataStorageView dataStorageView = 
(VolatilePageMemoryDataStorageView) tableView.dataStorage();
+        VolatilePageMemoryDataStorageView dataStorageView = 
(VolatilePageMemoryDataStorageView) tableCfg.dataStorage().value();
 
         return new VolatilePageMemoryTableStorage(tableCfg, tablesCfg, 
regions.get(dataStorageView.dataRegion()));
     }
diff --git 
a/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/mv/AbstractPageMemoryMvPartitionStorage.java
 
b/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/mv/AbstractPageMemoryMvPartitionStorage.java
index 62690b5242..87af015f28 100644
--- 
a/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/mv/AbstractPageMemoryMvPartitionStorage.java
+++ 
b/modules/storage-page-memory/src/main/java/org/apache/ignite/internal/storage/pagememory/mv/AbstractPageMemoryMvPartitionStorage.java
@@ -32,7 +32,6 @@ import org.apache.ignite.configuration.NamedListView;
 import org.apache.ignite.configuration.schemas.table.HashIndexView;
 import org.apache.ignite.configuration.schemas.table.SortedIndexView;
 import org.apache.ignite.configuration.schemas.table.TableIndexView;
-import org.apache.ignite.configuration.schemas.table.TableView;
 import org.apache.ignite.configuration.schemas.table.TablesConfiguration;
 import org.apache.ignite.hlc.HybridTimestamp;
 import org.apache.ignite.internal.pagememory.PageIdAllocator;
@@ -168,9 +167,7 @@ public abstract class AbstractPageMemoryMvPartitionStorage 
implements MvPartitio
     }
 
     private PageMemoryHashIndexStorage createOrRestoreHashIndex(IndexMeta 
indexMeta) {
-        TableView tableView = tableStorage.configuration().value();
-
-        var indexDescriptor = new HashIndexDescriptor(indexMeta.id(), 
tableView, tablesConfiguration.value());
+        var indexDescriptor = new HashIndexDescriptor(indexMeta.id(), 
tablesConfiguration.value());
 
         try {
             PageMemory pageMemory = tableStorage.dataRegion().pageMemory();
@@ -181,9 +178,11 @@ public abstract class AbstractPageMemoryMvPartitionStorage 
implements MvPartitio
                     ? pageMemory.allocatePage(groupId, partitionId, 
PageIdAllocator.FLAG_AUX)
                     : indexMeta.metaPageId();
 
+            String tableName = tableStorage.configuration().value().name();
+
             HashIndexTree hashIndexTree = new HashIndexTree(
                     groupId,
-                    tableView.name(),
+                    tableName,
                     partitionId,
                     pageMemory,
                     PageLockListenerNoOp.INSTANCE,
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 4291582ea9..06d1e98e4c 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
@@ -19,20 +19,14 @@ 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.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.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.pagememory.configuration.schema.UnsafeMemoryAllocatorConfigurationSchema;
 import org.apache.ignite.internal.pagememory.io.PageIoRegistry;
-import 
org.apache.ignite.internal.schema.configuration.schema.TestDataStorageConfigurationSchema;
 import org.apache.ignite.internal.storage.index.AbstractHashIndexStorageTest;
 import 
org.apache.ignite.internal.storage.pagememory.PersistentPageMemoryStorageEngine;
 import 
org.apache.ignite.internal.storage.pagememory.PersistentPageMemoryTableStorage;
@@ -51,51 +45,28 @@ import org.junit.jupiter.api.extension.ExtendWith;
  */
 @ExtendWith({ConfigurationExtension.class, WorkDirectoryExtension.class})
 class PersistentPageMemoryHashIndexStorageTest extends 
AbstractHashIndexStorageTest {
-    @WorkDirectory
-    private Path workDir;
-
-    @InjectConfiguration(polymorphicExtensions = 
UnsafeMemoryAllocatorConfigurationSchema.class)
-    private PersistentPageMemoryStorageEngineConfiguration engineConfig;
-
-    @InjectConfiguration(
-            name = "table",
-            value = "mock.dataStorage.name = " + 
PersistentPageMemoryStorageEngine.ENGINE_NAME,
-            polymorphicExtensions = {
-                    HashIndexConfigurationSchema.class,
-                    PersistentPageMemoryDataStorageConfigurationSchema.class,
-                    ConstantValueDefaultConfigurationSchema.class,
-                    FunctionCallDefaultConfigurationSchema.class,
-                    NullValueDefaultConfigurationSchema.class,
-                    UnlimitedBudgetConfigurationSchema.class,
-                    EntryCountBudgetConfigurationSchema.class
-            }
-    )
-    private TableConfiguration tableCfg;
-
-    @InjectConfiguration(
-            name = "tables",
-            polymorphicExtensions = {
-                    HashIndexConfigurationSchema.class,
-                    PersistentPageMemoryDataStorageConfigurationSchema.class,
-                    HashIndexConfigurationSchema.class,
-                    SortedIndexConfigurationSchema.class,
-                    UnknownDataStorageConfigurationSchema.class,
-                    TestDataStorageConfigurationSchema.class,
-                    ConstantValueDefaultConfigurationSchema.class,
-                    FunctionCallDefaultConfigurationSchema.class,
-                    NullValueDefaultConfigurationSchema.class,
-                    UnlimitedBudgetConfigurationSchema.class,
-                    EntryCountBudgetConfigurationSchema.class
-            }
-    )
-    TablesConfiguration tablesConfig;
-
     private PersistentPageMemoryStorageEngine engine;
 
     private PersistentPageMemoryTableStorage table;
 
     @BeforeEach
-    void setUp() {
+    void setUp(
+            @WorkDirectory
+            Path workDir,
+            @InjectConfiguration(polymorphicExtensions = 
UnsafeMemoryAllocatorConfigurationSchema.class)
+            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
+    ) {
         PageIoRegistry ioRegistry = new PageIoRegistry();
 
         ioRegistry.loadFromServiceLoader();
@@ -104,7 +75,7 @@ class PersistentPageMemoryHashIndexStorageTest extends 
AbstractHashIndexStorageT
 
         engine.start();
 
-        table = engine.createMvTable(tableCfg, tablesConfig);
+        table = engine.createMvTable(tablesConfig.tables().get("foo"), 
tablesConfig);
 
         table.start();
 
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 b45cb21917..61c71a02ab 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
@@ -18,13 +18,8 @@
 package org.apache.ignite.internal.storage.pagememory.index;
 
 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.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;
@@ -47,42 +42,26 @@ import org.junit.jupiter.api.extension.ExtendWith;
  */
 @ExtendWith(ConfigurationExtension.class)
 class VolatilePageMemoryHashIndexStorageTest extends 
AbstractHashIndexStorageTest {
-    @InjectConfiguration(polymorphicExtensions = 
UnsafeMemoryAllocatorConfigurationSchema.class)
-    private VolatilePageMemoryStorageEngineConfiguration engineConfig;
-
-    @InjectConfiguration(
-            name = "table",
-            value = "mock.dataStorage.name = " + 
VolatilePageMemoryStorageEngine.ENGINE_NAME,
-            polymorphicExtensions = {
-                    HashIndexConfigurationSchema.class,
-                    VolatilePageMemoryDataStorageConfigurationSchema.class,
-                    ConstantValueDefaultConfigurationSchema.class,
-                    FunctionCallDefaultConfigurationSchema.class,
-                    NullValueDefaultConfigurationSchema.class,
-                    UnlimitedBudgetConfigurationSchema.class,
-                    EntryCountBudgetConfigurationSchema.class
-            }
-    )
-    private TableConfiguration tableCfg;
-
-    @InjectConfiguration(polymorphicExtensions = {
-            HashIndexConfigurationSchema.class,
-            SortedIndexConfigurationSchema.class,
-            UnknownDataStorageConfigurationSchema.class,
-            ConstantValueDefaultConfigurationSchema.class,
-            FunctionCallDefaultConfigurationSchema.class,
-            NullValueDefaultConfigurationSchema.class,
-            UnlimitedBudgetConfigurationSchema.class,
-            EntryCountBudgetConfigurationSchema.class
-    })
-    TablesConfiguration tablesConfig;
-
     private VolatilePageMemoryStorageEngine engine;
 
     private VolatilePageMemoryTableStorage table;
 
     @BeforeEach
-    void setUp() {
+    void setUp(
+            @InjectConfiguration(polymorphicExtensions = 
UnsafeMemoryAllocatorConfigurationSchema.class)
+            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
+    ) {
         PageIoRegistry ioRegistry = new PageIoRegistry();
 
         ioRegistry.loadFromServiceLoader();
@@ -91,7 +70,7 @@ class VolatilePageMemoryHashIndexStorageTest extends 
AbstractHashIndexStorageTes
 
         engine.start();
 
-        table = engine.createMvTable(tableCfg, tablesConfig);
+        table = engine.createMvTable(tablesConfig.tables().get("foo"), 
tablesConfig);
 
         table.start();
 
diff --git 
a/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/mv/AbstractPageMemoryMvPartitionStorageTest.java
 
b/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/mv/AbstractPageMemoryMvPartitionStorageTest.java
index dec668c4c6..dd54ec2c71 100644
--- 
a/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/mv/AbstractPageMemoryMvPartitionStorageTest.java
+++ 
b/modules/storage-page-memory/src/test/java/org/apache/ignite/internal/storage/pagememory/mv/AbstractPageMemoryMvPartitionStorageTest.java
@@ -19,23 +19,17 @@ package org.apache.ignite.internal.storage.pagememory.mv;
 
 import static java.util.stream.Collectors.joining;
 
-import java.nio.file.Path;
 import java.util.stream.IntStream;
-import 
org.apache.ignite.internal.configuration.testframework.ConfigurationExtension;
 import org.apache.ignite.internal.pagememory.io.PageIoRegistry;
 import org.apache.ignite.internal.schema.BinaryRow;
 import org.apache.ignite.internal.storage.AbstractMvPartitionStorageTest;
 import org.apache.ignite.internal.storage.RowId;
-import org.apache.ignite.internal.testframework.WorkDirectory;
-import org.apache.ignite.internal.testframework.WorkDirectoryExtension;
 import org.apache.ignite.internal.util.Cursor;
 import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.ExtendWith;
 
 /**
  * Base test for MV partition storages based on PageMemory.
  */
-@ExtendWith({ConfigurationExtension.class, WorkDirectoryExtension.class})
 abstract class AbstractPageMemoryMvPartitionStorageTest extends 
AbstractMvPartitionStorageTest {
     protected final PageIoRegistry ioRegistry = new PageIoRegistry();
 
@@ -43,9 +37,6 @@ abstract class AbstractPageMemoryMvPartitionStorageTest 
extends AbstractMvPartit
         ioRegistry.loadFromServiceLoader();
     }
 
-    @WorkDirectory
-    protected Path workDir;
-
     /**
      * Returns page size in bytes.
      */
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 6da4872060..edeec6689b 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
@@ -18,35 +18,37 @@
 package org.apache.ignite.internal.storage.pagememory.mv;
 
 import static 
org.apache.ignite.internal.pagememory.persistence.checkpoint.CheckpointState.FINISHED;
-import static org.junit.jupiter.api.Assertions.assertEquals;
 
+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.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.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.PersistentPageMemoryDataStorageChange;
 import 
org.apache.ignite.internal.storage.pagememory.configuration.schema.PersistentPageMemoryDataStorageConfigurationSchema;
-import 
org.apache.ignite.internal.storage.pagememory.configuration.schema.PersistentPageMemoryDataStorageView;
 import 
org.apache.ignite.internal.storage.pagememory.configuration.schema.PersistentPageMemoryStorageEngineConfiguration;
-import 
org.apache.ignite.internal.storage.pagememory.configuration.schema.PersistentPageMemoryStorageEngineConfigurationSchema;
+import org.apache.ignite.internal.testframework.WorkDirectory;
+import org.apache.ignite.internal.testframework.WorkDirectoryExtension;
 import org.apache.ignite.internal.util.IgniteUtils;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
 
+@ExtendWith({ConfigurationExtension.class, WorkDirectoryExtension.class})
 class PersistentPageMemoryMvPartitionStorageTest extends 
AbstractPageMemoryMvPartitionStorageTest {
+    @WorkDirectory
+    private Path workDir;
+
     @InjectConfiguration(
             value = "mock.checkpoint.checkpointDelayMillis = 0",
             polymorphicExtensions = 
UnsafeMemoryAllocatorConfigurationSchema.class
@@ -54,19 +56,16 @@ class PersistentPageMemoryMvPartitionStorageTest extends 
AbstractPageMemoryMvPar
     private PersistentPageMemoryStorageEngineConfiguration engineConfig;
 
     @InjectConfiguration(
-            name = "table",
             polymorphicExtensions = {
-                    HashIndexConfigurationSchema.class,
-                    UnknownDataStorageConfigurationSchema.class,
                     PersistentPageMemoryDataStorageConfigurationSchema.class,
-                    ConstantValueDefaultConfigurationSchema.class,
-                    FunctionCallDefaultConfigurationSchema.class,
+                    UnknownDataStorageConfigurationSchema.class,
+                    HashIndexConfigurationSchema.class,
                     NullValueDefaultConfigurationSchema.class,
-                    UnlimitedBudgetConfigurationSchema.class,
-                    EntryCountBudgetConfigurationSchema.class
-            }
+                    UnlimitedBudgetConfigurationSchema.class
+            },
+            value = "mock.tables.foo.dataStorage.name = " + 
PersistentPageMemoryStorageEngine.ENGINE_NAME
     )
-    private TableConfiguration tableCfg;
+    private TablesConfiguration tablesConfig;
 
     private LongJvmPauseDetector longJvmPauseDetector;
 
@@ -75,7 +74,7 @@ class PersistentPageMemoryMvPartitionStorageTest extends 
AbstractPageMemoryMvPar
     private PersistentPageMemoryTableStorage table;
 
     @BeforeEach
-    void setUp() throws Exception {
+    void setUp() {
         longJvmPauseDetector = new LongJvmPauseDetector("test", 
Loggers.forClass(LongJvmPauseDetector.class));
 
         longJvmPauseDetector.start();
@@ -84,16 +83,8 @@ class PersistentPageMemoryMvPartitionStorageTest extends 
AbstractPageMemoryMvPar
 
         engine.start();
 
-        tableCfg
-                .change(c -> c.changeDataStorage(dsc -> 
dsc.convert(PersistentPageMemoryDataStorageChange.class)))
-                .get(1, TimeUnit.SECONDS);
-
-        assertEquals(
-                
PersistentPageMemoryStorageEngineConfigurationSchema.DEFAULT_DATA_REGION_NAME,
-                ((PersistentPageMemoryDataStorageView) 
tableCfg.dataStorage().value()).dataRegion()
-        );
+        table = engine.createMvTable(tablesConfig.tables().get("foo"), 
tablesConfig);
 
-        table = engine.createMvTable(tableCfg, null);
         table.start();
 
         storage = table.createMvPartitionStorage(PARTITION_ID);
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 7d09497560..bab8f61365 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,74 +17,52 @@
 
 package org.apache.ignite.internal.storage.pagememory.mv;
 
-import static org.junit.jupiter.api.Assertions.assertEquals;
-
-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.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.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.VolatilePageMemoryDataStorageChange;
 import 
org.apache.ignite.internal.storage.pagememory.configuration.schema.VolatilePageMemoryDataStorageConfigurationSchema;
-import 
org.apache.ignite.internal.storage.pagememory.configuration.schema.VolatilePageMemoryDataStorageView;
 import 
org.apache.ignite.internal.storage.pagememory.configuration.schema.VolatilePageMemoryStorageEngineConfiguration;
-import 
org.apache.ignite.internal.storage.pagememory.configuration.schema.VolatilePageMemoryStorageEngineConfigurationSchema;
-import org.apache.ignite.internal.testframework.WorkDirectory;
 import org.apache.ignite.internal.util.IgniteUtils;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.extension.ExtendWith;
 
+@ExtendWith(ConfigurationExtension.class)
 class VolatilePageMemoryMvPartitionStorageTest extends 
AbstractPageMemoryMvPartitionStorageTest {
     @InjectConfiguration(polymorphicExtensions = 
UnsafeMemoryAllocatorConfigurationSchema.class)
     private VolatilePageMemoryStorageEngineConfiguration engineConfig;
 
-    @InjectConfiguration(
-            name = "table",
-            polymorphicExtensions = {
-                    HashIndexConfigurationSchema.class,
-                    UnknownDataStorageConfigurationSchema.class,
-                    VolatilePageMemoryDataStorageConfigurationSchema.class,
-                    ConstantValueDefaultConfigurationSchema.class,
-                    FunctionCallDefaultConfigurationSchema.class,
-                    NullValueDefaultConfigurationSchema.class,
-                    UnlimitedBudgetConfigurationSchema.class,
-                    EntryCountBudgetConfigurationSchema.class
-            }
-    )
-    private TableConfiguration tableCfg;
-
     private VolatilePageMemoryStorageEngine engine;
 
     private VolatilePageMemoryTableStorage table;
 
-    @WorkDirectory
-    private Path workDir;
-
     @BeforeEach
-    void setUp() throws Exception {
+    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
+    ) {
         engine = new VolatilePageMemoryStorageEngine(engineConfig, ioRegistry);
 
         engine.start();
 
-        tableCfg
-                .change(c -> c.changeDataStorage(dsc -> 
dsc.convert(VolatilePageMemoryDataStorageChange.class)))
-                .get(1, TimeUnit.SECONDS);
-
-        assertEquals(
-                
VolatilePageMemoryStorageEngineConfigurationSchema.DEFAULT_DATA_REGION_NAME,
-                ((VolatilePageMemoryDataStorageView) 
tableCfg.dataStorage().value()).dataRegion()
-        );
+        table = engine.createMvTable(tablesConfig.tables().get("foo"), 
tablesConfig);
 
-        table = engine.createMvTable(tableCfg, null);
         table.start();
 
         storage = table.createMvPartitionStorage(PARTITION_ID);
diff --git 
a/modules/storage-rocksdb/src/main/java/org/apache/ignite/internal/storage/rocksdb/RocksDbStorageEngine.java
 
b/modules/storage-rocksdb/src/main/java/org/apache/ignite/internal/storage/rocksdb/RocksDbStorageEngine.java
index 099d2d6402..e97074e8ce 100644
--- 
a/modules/storage-rocksdb/src/main/java/org/apache/ignite/internal/storage/rocksdb/RocksDbStorageEngine.java
+++ 
b/modules/storage-rocksdb/src/main/java/org/apache/ignite/internal/storage/rocksdb/RocksDbStorageEngine.java
@@ -30,7 +30,6 @@ import java.util.concurrent.TimeUnit;
 import 
org.apache.ignite.configuration.notifications.ConfigurationNamedListListener;
 import 
org.apache.ignite.configuration.notifications.ConfigurationNotificationEvent;
 import org.apache.ignite.configuration.schemas.table.TableConfiguration;
-import org.apache.ignite.configuration.schemas.table.TableView;
 import org.apache.ignite.configuration.schemas.table.TablesConfiguration;
 import org.apache.ignite.internal.logger.IgniteLogger;
 import org.apache.ignite.internal.logger.Loggers;
@@ -150,22 +149,20 @@ public class RocksDbStorageEngine implements 
StorageEngine {
     /** {@inheritDoc} */
     @Override
     public RocksDbTableStorage createMvTable(TableConfiguration tableCfg, 
TablesConfiguration tablesCfg) throws StorageException {
-        TableView tableView = tableCfg.value();
+        RocksDbDataStorageView dataStorageView = (RocksDbDataStorageView) 
tableCfg.dataStorage().value();
 
-        assert tableView.dataStorage().name().equals(ENGINE_NAME) : 
tableView.dataStorage().name();
-
-        RocksDbDataStorageView dataStorageView = (RocksDbDataStorageView) 
tableView.dataStorage();
+        assert dataStorageView.name().equals(ENGINE_NAME) : 
dataStorageView.name();
 
         RocksDbDataRegion dataRegion = 
regions.get(dataStorageView.dataRegion());
 
-        Path tablePath = storagePath.resolve(TABLE_DIR_PREFIX + 
tableView.tableId());
+        Path tablePath = storagePath.resolve(TABLE_DIR_PREFIX + 
tableCfg.tableId().value());
 
         try {
             Files.createDirectories(tablePath);
         } catch (IOException e) {
-            throw new StorageException("Failed to create table store directory 
for " + tableView.name() + ": " + e.getMessage(), e);
+            throw new StorageException("Failed to create table store directory 
for " + tableCfg.name().value(), e);
         }
 
-        return new RocksDbTableStorage(this, tablePath, tableCfg, dataRegion, 
tablesCfg);
+        return new RocksDbTableStorage(this, tablePath, dataRegion, tableCfg, 
tablesCfg);
     }
 }
diff --git 
a/modules/storage-rocksdb/src/main/java/org/apache/ignite/internal/storage/rocksdb/RocksDbTableStorage.java
 
b/modules/storage-rocksdb/src/main/java/org/apache/ignite/internal/storage/rocksdb/RocksDbTableStorage.java
index 65bae91ba3..2668d81708 100644
--- 
a/modules/storage-rocksdb/src/main/java/org/apache/ignite/internal/storage/rocksdb/RocksDbTableStorage.java
+++ 
b/modules/storage-rocksdb/src/main/java/org/apache/ignite/internal/storage/rocksdb/RocksDbTableStorage.java
@@ -134,8 +134,8 @@ public class RocksDbTableStorage implements MvTableStorage {
     RocksDbTableStorage(
             RocksDbStorageEngine engine,
             Path tablePath,
-            TableConfiguration tableCfg,
             RocksDbDataRegion dataRegion,
+            TableConfiguration tableCfg,
             TablesConfiguration tablesCfg
     ) {
         this.engine = engine;
@@ -234,7 +234,7 @@ public class RocksDbTableStorage implements MvTableStorage {
                     case SORTED_INDEX:
                         UUID indexId = sortedIndexId(cf.name());
 
-                        var indexDescriptor = new 
SortedIndexDescriptor(indexId, tableCfg.value(), tablesCfg.value());
+                        var indexDescriptor = new 
SortedIndexDescriptor(indexId, tablesCfg.value());
 
                         sortedIndices.put(indexId, new SortedIndex(cf, 
indexDescriptor));
 
@@ -414,7 +414,7 @@ public class RocksDbTableStorage implements MvTableStorage {
     }
 
     private SortedIndex createSortedIndex(UUID indexId) {
-        var indexDescriptor = new SortedIndexDescriptor(indexId, 
tableCfg.value(), tablesCfg.value());
+        var indexDescriptor = new SortedIndexDescriptor(indexId, 
tablesCfg.value());
 
         ColumnFamilyDescriptor cfDescriptor = 
sortedIndexCfDescriptor(sortedIndexCfName(indexId), indexDescriptor);
 
@@ -433,7 +433,7 @@ public class RocksDbTableStorage implements MvTableStorage {
     @Override
     public HashIndexStorage getOrCreateHashIndex(int partitionId, UUID 
indexId) {
         HashIndex storages = hashIndices.computeIfAbsent(indexId, id -> {
-            var indexDescriptor = new HashIndexDescriptor(indexId, 
tableCfg.value(), tablesCfg.value());
+            var indexDescriptor = new HashIndexDescriptor(indexId, 
tablesCfg.value());
 
             return new HashIndex(hashIndexCf, indexDescriptor);
         });
@@ -456,13 +456,18 @@ public class RocksDbTableStorage implements 
MvTableStorage {
             hashIdx.destroy();
         }
 
+        // Sorted Indexes have a separate Column Family per index, so we 
simply destroy it immediately after a flush completes
+        // in order to avoid concurrent access to the CF.
         SortedIndex sortedIdx = sortedIndices.remove(indexId);
 
         if (sortedIdx != null) {
+            // Remove the to-be destroyed CF from the flusher
+            flusher.removeColumnFamily(sortedIdx.indexCf().handle());
+
             sortedIdx.destroy();
         }
 
-        if (hashIdx == null && sortedIdx == null) {
+        if (hashIdx == null) {
             return CompletableFuture.completedFuture(null);
         } else {
             return awaitFlush(false);
@@ -546,7 +551,7 @@ public class RocksDbTableStorage implements MvTableStorage {
                 );
 
             case SORTED_INDEX:
-                var indexDescriptor = new 
SortedIndexDescriptor(sortedIndexId(cfName), tableCfg.value(), 
tablesCfg.value());
+                var indexDescriptor = new 
SortedIndexDescriptor(sortedIndexId(cfName), tablesCfg.value());
 
                 return sortedIndexCfDescriptor(cfName, indexDescriptor);
 
diff --git 
a/modules/storage-rocksdb/src/main/java/org/apache/ignite/internal/storage/rocksdb/SortedIndex.java
 
b/modules/storage-rocksdb/src/main/java/org/apache/ignite/internal/storage/rocksdb/SortedIndex.java
index f78447374e..b2343d05c6 100644
--- 
a/modules/storage-rocksdb/src/main/java/org/apache/ignite/internal/storage/rocksdb/SortedIndex.java
+++ 
b/modules/storage-rocksdb/src/main/java/org/apache/ignite/internal/storage/rocksdb/SortedIndex.java
@@ -51,6 +51,13 @@ class SortedIndex implements AutoCloseable {
         );
     }
 
+    /**
+     * Returns the Column Family associated with this index.
+     */
+    ColumnFamily indexCf() {
+        return indexCf;
+    }
+
     /**
      * Removes all data associated with the index.
      */
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 099685d083..c312a3fd96 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
@@ -17,24 +17,20 @@
 
 package org.apache.ignite.internal.storage.rocksdb;
 
-import static java.util.concurrent.TimeUnit.SECONDS;
 import static 
org.apache.ignite.internal.storage.rocksdb.configuration.schema.RocksDbStorageEngineConfigurationSchema.DEFAULT_DATA_REGION_NAME;
 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.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.storage.AbstractMvPartitionStorageTest;
-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.RocksDbDataStorageView;
 import 
org.apache.ignite.internal.storage.rocksdb.configuration.schema.RocksDbStorageEngineConfiguration;
@@ -58,35 +54,28 @@ public class RocksDbMvPartitionStorageTest extends 
AbstractMvPartitionStorageTes
     @BeforeEach
     public void setUp(
             @WorkDirectory Path workDir,
-            @InjectConfiguration RocksDbStorageEngineConfiguration 
engineConfig,
+            @InjectConfiguration("mock {flushDelayMillis = 0, defaultRegion 
{size = 16536, writeBufferSize = 16536}}")
+            RocksDbStorageEngineConfiguration engineConfig,
             @InjectConfiguration(
-                    name = "table",
                     polymorphicExtensions = {
-                            HashIndexConfigurationSchema.class,
-                            UnknownDataStorageConfigurationSchema.class,
                             RocksDbDataStorageConfigurationSchema.class,
-                            ConstantValueDefaultConfigurationSchema.class,
-                            FunctionCallDefaultConfigurationSchema.class,
+                            UnknownDataStorageConfigurationSchema.class,
+                            HashIndexConfigurationSchema.class,
                             NullValueDefaultConfigurationSchema.class,
-                            UnlimitedBudgetConfigurationSchema.class,
-                            EntryCountBudgetConfigurationSchema.class
-                    }
-            ) TableConfiguration tableCfg
+                            UnlimitedBudgetConfigurationSchema.class
+                    },
+                    value = "mock.tables.foo.dataStorage.name = " + 
RocksDbStorageEngine.ENGINE_NAME
+            ) TablesConfiguration tablesCfg
     ) throws Exception {
-        tableCfg.dataStorage().change(c -> 
c.convert(RocksDbDataStorageChange.class)).get(1, SECONDS);
+        TableConfiguration tableCfg = tablesCfg.tables().get("foo");
 
         assertThat(((RocksDbDataStorageView) 
tableCfg.dataStorage().value()).dataRegion(), 
equalTo(DEFAULT_DATA_REGION_NAME));
 
-        engineConfig.change(cfg -> cfg
-                .changeFlushDelayMillis(0)
-                .changeDefaultRegion(c -> c.changeSize(16 * 
1024).changeWriteBufferSize(16 * 1024))
-        ).get(1, SECONDS);
-
         engine = new RocksDbStorageEngine(engineConfig, workDir);
 
         engine.start();
 
-        table = engine.createMvTable(tableCfg, null);
+        table = engine.createMvTable(tableCfg, tablesCfg);
 
         table.start();
 
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 2d247e6afe..12da6cafc3 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,14 +28,12 @@ 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.TableConfiguration;
-import org.apache.ignite.configuration.schemas.table.TableIndexView;
 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;
 import org.apache.ignite.internal.storage.AbstractMvTableStorageTest;
@@ -48,6 +46,7 @@ import org.apache.ignite.internal.testframework.WorkDirectory;
 import org.apache.ignite.internal.testframework.WorkDirectoryExtension;
 import org.apache.ignite.internal.util.IgniteUtils;
 import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
 
@@ -57,50 +56,46 @@ import org.junit.jupiter.api.extension.ExtendWith;
 @ExtendWith(WorkDirectoryExtension.class)
 @ExtendWith(ConfigurationExtension.class)
 public class RocksDbMvTableStorageTest extends AbstractMvTableStorageTest {
-    private RocksDbStorageEngine engine;
-
-    @InjectConfiguration("mock {flushDelayMillis = 0, defaultRegion {size = 
16536, writeBufferSize = 16536}}")
-    private RocksDbStorageEngineConfiguration rocksDbEngineConfig;
-
     @InjectConfiguration(
-            name = "table",
-            value = "mock { partitions = 512, dataStorage.name = rocksdb }",
             polymorphicExtensions = {
                     RocksDbDataStorageConfigurationSchema.class,
-                    SortedIndexConfigurationSchema.class,
+                    UnknownDataStorageConfigurationSchema.class,
                     HashIndexConfigurationSchema.class,
+                    SortedIndexConfigurationSchema.class,
                     NullValueDefaultConfigurationSchema.class,
                     UnlimitedBudgetConfigurationSchema.class
-            }
+            },
+            value = "mock.tables.foo{ partitions = 512, dataStorage.name = " + 
RocksDbStorageEngine.ENGINE_NAME + "}"
     )
-    private TableConfiguration tableCfg0;
+    private TablesConfiguration tablesConfig;
 
-    @WorkDirectory
-    private Path workDir;
-
-    private ConfigurationRegistry confRegistry;
+    private RocksDbStorageEngine engine;
 
-    @Override
-    protected void setUp() {
-        super.tableConfig = tableCfg0;
-    }
+    private MvTableStorage tableStorage;
 
-    @Override
-    protected MvTableStorage tableStorage(TableIndexView sortedIdx, 
TableIndexView hashIdx, TablesConfiguration tablesCfg) {
+    @BeforeEach
+    void setUp(
+            @WorkDirectory Path workDir,
+            @InjectConfiguration("mock {flushDelayMillis = 0, defaultRegion 
{size = 16536, writeBufferSize = 16536}}")
+            RocksDbStorageEngineConfiguration rocksDbEngineConfig
+    ) {
         engine = new RocksDbStorageEngine(rocksDbEngineConfig, workDir);
 
         engine.start();
 
-        MvTableStorage storage = engine.createMvTable(tableConfig, tablesCfg);
+        tableStorage = engine.createMvTable(tablesConfig.tables().get("foo"), 
tablesConfig);
 
-        assertThat(storage, is(instanceOf(RocksDbTableStorage.class)));
+        assertThat(tableStorage, is(instanceOf(RocksDbTableStorage.class)));
+
+        tableStorage.start();
 
-        return storage;
+        initialize(tableStorage, tablesConfig);
     }
 
     @AfterEach
     void tearDown() throws Exception {
         IgniteUtils.closeAll(
+                tableStorage == null ? null : tableStorage::stop,
                 engine == null ? null : engine::stop
         );
     }
@@ -149,7 +144,7 @@ public class RocksDbMvTableStorageTest extends 
AbstractMvTableStorageTest {
 
         tableStorage.stop();
 
-        tableStorage = engine.createMvTable(tableConfig, null);
+        tableStorage = engine.createMvTable(tablesConfig.tables().get("foo"), 
tablesConfig);
 
         tableStorage.start();
 
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 ff6d527f27..76cf7d3219 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,12 +24,10 @@ import static org.hamcrest.Matchers.is;
 
 import java.nio.file.Path;
 import java.util.concurrent.CompletableFuture;
-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.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;
@@ -70,20 +68,18 @@ public class RocksDbStorageEngineTest {
     @Test
     void testCreateTableWithDefaultDataRegion(
             @InjectConfiguration(
-                    value = "mock.dataStorage.name=rocksdb",
-                    name = "table",
                     polymorphicExtensions = {
-                            HashIndexConfigurationSchema.class,
                             RocksDbDataStorageConfigurationSchema.class,
-                            ConstantValueDefaultConfigurationSchema.class,
-                            FunctionCallDefaultConfigurationSchema.class,
+                            UnknownDataStorageConfigurationSchema.class,
+                            HashIndexConfigurationSchema.class,
                             NullValueDefaultConfigurationSchema.class,
-                            UnlimitedBudgetConfigurationSchema.class,
-                            EntryCountBudgetConfigurationSchema.class
-                    }
-            ) TableConfiguration tableCfg
+                            UnlimitedBudgetConfigurationSchema.class
+                    },
+                    value = "mock.tables.foo.dataStorage.name=" + 
RocksDbStorageEngine.ENGINE_NAME
+            )
+            TablesConfiguration tablesConfig
     ) {
-        MvTableStorage table = engine.createMvTable(tableCfg, null);
+        MvTableStorage table = 
engine.createMvTable(tablesConfig.tables().get("foo"), tablesConfig);
 
         table.start();
 
@@ -101,18 +97,16 @@ public class RocksDbStorageEngineTest {
     @Test
     void testCreateTableWithDynamicCustomDataRegion(
             @InjectConfiguration(
-                    value = "mock.dataStorage{name=rocksdb, 
dataRegion=foobar}",
-                    name = "table",
                     polymorphicExtensions = {
-                            HashIndexConfigurationSchema.class,
                             RocksDbDataStorageConfigurationSchema.class,
-                            ConstantValueDefaultConfigurationSchema.class,
-                            FunctionCallDefaultConfigurationSchema.class,
+                            UnknownDataStorageConfigurationSchema.class,
+                            HashIndexConfigurationSchema.class,
                             NullValueDefaultConfigurationSchema.class,
-                            UnlimitedBudgetConfigurationSchema.class,
-                            EntryCountBudgetConfigurationSchema.class
-                    }
-            ) TableConfiguration tableCfg
+                            UnlimitedBudgetConfigurationSchema.class
+                    },
+                    value = "mock.tables.foo.dataStorage{name=" + 
RocksDbStorageEngine.ENGINE_NAME + ", dataRegion=foobar}"
+            )
+            TablesConfiguration tablesConfig
     ) {
         String customRegionName = "foobar";
 
@@ -121,7 +115,7 @@ public class RocksDbStorageEngineTest {
 
         assertThat(engineConfigChangeFuture, willCompleteSuccessfully());
 
-        MvTableStorage table = engine.createMvTable(tableCfg, null);
+        MvTableStorage table = 
engine.createMvTable(tablesConfig.tables().get("foo"), tablesConfig);
 
         table.start();
 
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 0db33a89b6..44918fa1a0 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
@@ -21,7 +21,6 @@ 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;
@@ -56,20 +55,12 @@ public class RocksDbHashIndexStorageTest extends 
AbstractHashIndexStorageTest {
             @InjectConfiguration(
                     polymorphicExtensions = {
                             RocksDbDataStorageConfigurationSchema.class,
+                            UnknownDataStorageConfigurationSchema.class,
                             HashIndexConfigurationSchema.class,
                             NullValueDefaultConfigurationSchema.class,
                             UnlimitedBudgetConfigurationSchema.class
                     },
-                    value = "mock.dataStorage.name = " + 
RocksDbStorageEngine.ENGINE_NAME
-            )
-            TableConfiguration tableCfg,
-            @InjectConfiguration(
-                    polymorphicExtensions = {
-                            HashIndexConfigurationSchema.class,
-                            UnknownDataStorageConfigurationSchema.class,
-                            NullValueDefaultConfigurationSchema.class,
-                            UnlimitedBudgetConfigurationSchema.class
-                    }
+                    value = "mock.tables.foo.dataStorage.name = " + 
RocksDbStorageEngine.ENGINE_NAME
             )
             TablesConfiguration tablesConfig
     ) {
@@ -77,7 +68,7 @@ public class RocksDbHashIndexStorageTest extends 
AbstractHashIndexStorageTest {
 
         engine.start();
 
-        tableStorage = engine.createMvTable(tableCfg, tablesConfig);
+        tableStorage = engine.createMvTable(tablesConfig.tables().get("foo"), 
tablesConfig);
 
         tableStorage.start();
 
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 f46c29e5e4..8e33efc3bb 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
@@ -21,7 +21,6 @@ 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.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;
@@ -56,20 +55,12 @@ public class RocksDbSortedIndexStorageTest extends 
AbstractSortedIndexStorageTes
             @InjectConfiguration(
                     polymorphicExtensions = {
                             RocksDbDataStorageConfigurationSchema.class,
+                            UnknownDataStorageConfigurationSchema.class,
                             SortedIndexConfigurationSchema.class,
                             NullValueDefaultConfigurationSchema.class,
                             UnlimitedBudgetConfigurationSchema.class
                     },
-                    value = "mock.dataStorage.name = " + 
RocksDbStorageEngine.ENGINE_NAME
-            )
-            TableConfiguration tableCfg,
-            @InjectConfiguration(
-                    polymorphicExtensions = {
-                            SortedIndexConfigurationSchema.class,
-                            UnknownDataStorageConfigurationSchema.class,
-                            NullValueDefaultConfigurationSchema.class,
-                            UnlimitedBudgetConfigurationSchema.class
-                    }
+                    value = "mock.tables.foo.dataStorage.name = " + 
RocksDbStorageEngine.ENGINE_NAME
             )
             TablesConfiguration tablesConfig
     ) {
@@ -77,7 +68,7 @@ public class RocksDbSortedIndexStorageTest extends 
AbstractSortedIndexStorageTes
 
         engine.start();
 
-        tableStorage = engine.createMvTable(tableCfg, tablesConfig);
+        tableStorage = engine.createMvTable(tablesConfig.tables().get("foo"), 
tablesConfig);
 
         tableStorage.start();
 

Reply via email to