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

nizhikov pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ignite.git


The following commit(s) were added to refs/heads/master by this push:
     new c2c733b82fb IGNITE-24454 Cache partition files calculation in 
NodeFileTree (#11867)
c2c733b82fb is described below

commit c2c733b82fb56b96591f21238f49a1c939f641e5
Author: Nikolay <[email protected]>
AuthorDate: Wed Feb 12 20:57:31 2025 +0300

    IGNITE-24454 Cache partition files calculation in NodeFileTree (#11867)
---
 .../commandline/indexreader/IgniteIndexReader.java |   7 +-
 .../indexreader/IgniteIndexReaderTest.java         |   4 +-
 .../util/GridCommandHandlerIndexingTest.java       |   2 +-
 .../internal/MarshallerMappingFileStore.java       |   2 +-
 .../apache/ignite/internal/binary/BinaryUtils.java |   2 +-
 .../ignite/internal/cdc/CdcConsumerState.java      |   4 +-
 .../processors/cache/GridLocalConfigManager.java   |  38 ++----
 .../cache/binary/BinaryMetadataFileStore.java      |   2 +-
 .../CheckCorruptedCacheStoresCleanAction.java      |   6 +-
 .../CleanCacheStoresMaintenanceAction.java         |   6 +-
 .../CorruptedPdsMaintenanceCallback.java           |   2 +-
 .../GridCacheDatabaseSharedManager.java            |   3 +-
 .../checkpoint/CheckpointMarkersStorage.java       |   6 +-
 .../defragmentation/DefragmentationFileUtils.java  |  12 +-
 .../persistence/file/FilePageStoreManager.java     | 109 +++---------------
 .../cache/persistence/filename/NodeFileTree.java   | 128 ++++++++++++++++++++-
 .../snapshot/IgniteSnapshotManager.java            |  14 +--
 .../persistence/snapshot/SnapshotFutureTask.java   |  27 ++++-
 .../snapshot/SnapshotPartitionsVerifyHandler.java  |  16 +--
 .../snapshot/SnapshotResponseRemoteFutureTask.java |   4 +-
 .../snapshot/SnapshotRestoreProcess.java           |  10 +-
 .../snapshot/dump/CreateDumpFutureTask.java        |   2 +-
 .../cache/persistence/snapshot/dump/Dump.java      |   8 +-
 .../snapshot/dump/WriteOnlyZipFileIOFactory.java   |   2 +-
 .../cache/persistence/wal/FileDescriptor.java      |   4 +-
 .../persistence/wal/FileWriteAheadLogManager.java  |   2 +-
 .../ignite/cache/NodeWithFilterRestartTest.java    |   4 +-
 .../GridIoManagerFileTransmissionSelfTest.java     |   2 +-
 .../cache/WalModeChangeAdvancedSelfTest.java       |  17 +--
 ...CacheConfigurationFileConsistencyCheckTest.java |   4 +-
 .../persistence/IgnitePdsCorruptedStoreTest.java   |   3 +-
 .../persistence/IgnitePdsDefragmentationTest.java  |   7 +-
 .../PagesPossibleCorruptionDiagnosticTest.java     |   2 +-
 .../db/IgnitePdsCheckpointRecoveryTest.java        |   2 +-
 .../db/IgnitePdsDataRegionMetricsTest.java         |   4 +-
 .../db/checkpoint/CheckpointFreeListTest.java      |   6 +-
 .../db/file/IgnitePdsDiskErrorsRecoveringTest.java |   4 +-
 .../persistence/db/wal/IgniteLocalWalSizeTest.java |   2 +-
 .../wal/IgniteNodeStoppedDuringDisableWALTest.java |   9 +-
 .../snapshot/AbstractSnapshotSelfTest.java         |  11 +-
 .../snapshot/IgniteClusterSnapshotCheckTest.java   |  10 +-
 .../IgniteClusterSnapshotRestoreSelfTest.java      |   8 +-
 .../snapshot/IgniteSnapshotRemoteRequestTest.java  |   8 +-
 .../IgniteSnapshotRestoreFromRemoteTest.java       |   4 +-
 .../snapshot/IncrementalSnapshotTest.java          |   2 +-
 .../snapshot/dump/IgniteCacheDumpSelf2Test.java    |  17 +--
 .../IgnitePdsIndexingDefragmentationTest.java      |   6 +-
 .../persistence/db/wal/IgniteWalRecoveryTest.java  |   8 +-
 .../snapshot/IgniteClusterSnapshotMetricsTest.java |   4 +-
 .../processors/database/RebuildIndexTest.java      |  19 +--
 .../RebuildIndexWithHistoricalRebalanceTest.java   |  19 +--
 .../WalDisabledDuringIndexRecreateTest.java        |   2 +-
 .../query/h2/GridIndexRebuildSelfTest.java         |   2 +-
 53 files changed, 308 insertions(+), 300 deletions(-)

diff --git 
a/modules/control-utility/src/main/java/org/apache/ignite/internal/commandline/indexreader/IgniteIndexReader.java
 
b/modules/control-utility/src/main/java/org/apache/ignite/internal/commandline/indexreader/IgniteIndexReader.java
index 4ffd28a6c6d..7ec4b4441f7 100644
--- 
a/modules/control-utility/src/main/java/org/apache/ignite/internal/commandline/indexreader/IgniteIndexReader.java
+++ 
b/modules/control-utility/src/main/java/org/apache/ignite/internal/commandline/indexreader/IgniteIndexReader.java
@@ -66,6 +66,7 @@ import 
org.apache.ignite.internal.processors.cache.persistence.file.AsyncFileIOF
 import 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStore;
 import 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager;
 import 
org.apache.ignite.internal.processors.cache.persistence.file.FileVersionCheckingFactory;
+import 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree;
 import 
org.apache.ignite.internal.processors.cache.persistence.freelist.io.PagesListMetaIO;
 import 
org.apache.ignite.internal.processors.cache.persistence.freelist.io.PagesListNodeIO;
 import 
org.apache.ignite.internal.processors.cache.persistence.tree.io.AbstractDataPageIO;
@@ -115,9 +116,9 @@ import static 
org.apache.ignite.internal.pagemem.PageIdUtils.itemId;
 import static org.apache.ignite.internal.pagemem.PageIdUtils.pageId;
 import static org.apache.ignite.internal.pagemem.PageIdUtils.pageIndex;
 import static org.apache.ignite.internal.pagemem.PageIdUtils.partId;
-import static 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager.INDEX_FILE_NAME;
-import static 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager.PART_FILE_TEMPLATE;
 import static 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreV2.VERSION;
+import static 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree.INDEX_FILE_NAME;
+import static 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree.PART_FILE_TEMPLATE;
 import static org.apache.ignite.internal.util.GridUnsafe.allocateBuffer;
 import static org.apache.ignite.internal.util.GridUnsafe.bufferAddress;
 import static org.apache.ignite.internal.util.GridUnsafe.freeBuffer;
@@ -199,7 +200,7 @@ public class IgniteIndexReader implements AutoCloseable {
     /** Logger. */
     private final IgniteLogger log;
 
-    /** Page store of {@link FilePageStoreManager#INDEX_FILE_NAME}. */
+    /** Page store of {@link NodeFileTree#INDEX_FILE_NAME}. */
     private final FilePageStore idxStore;
 
     /** Partitions page stores, may contains {@code null}. */
diff --git 
a/modules/control-utility/src/test/java/org/apache/ignite/internal/commandline/indexreader/IgniteIndexReaderTest.java
 
b/modules/control-utility/src/test/java/org/apache/ignite/internal/commandline/indexreader/IgniteIndexReaderTest.java
index fe66b0c0ff0..d2a583063b1 100644
--- 
a/modules/control-utility/src/test/java/org/apache/ignite/internal/commandline/indexreader/IgniteIndexReaderTest.java
+++ 
b/modules/control-utility/src/test/java/org/apache/ignite/internal/commandline/indexreader/IgniteIndexReaderTest.java
@@ -86,8 +86,8 @@ import static 
org.apache.ignite.internal.commandline.indexreader.IgniteIndexRead
 import static 
org.apache.ignite.internal.pagemem.PageIdAllocator.INDEX_PARTITION;
 import static org.apache.ignite.internal.pagemem.PageIdUtils.pageIndex;
 import static org.apache.ignite.internal.pagemem.PageIdUtils.partId;
-import static 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager.INDEX_FILE_NAME;
-import static 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager.PART_FILE_TEMPLATE;
+import static 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree.INDEX_FILE_NAME;
+import static 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree.PART_FILE_TEMPLATE;
 import static org.apache.ignite.testframework.GridTestUtils.assertContains;
 import static org.apache.ignite.testframework.GridTestUtils.assertNotContains;
 import static org.apache.ignite.testframework.GridTestUtils.assertThrows;
diff --git 
a/modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerIndexingTest.java
 
b/modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerIndexingTest.java
index ebbda978bf2..d95a37a3cfa 100644
--- 
a/modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerIndexingTest.java
+++ 
b/modules/control-utility/src/test/java/org/apache/ignite/util/GridCommandHandlerIndexingTest.java
@@ -39,7 +39,7 @@ import org.junit.Test;
 
 import static 
org.apache.ignite.internal.IgniteNodeAttributes.ATTR_IGNITE_INSTANCE_NAME;
 import static 
org.apache.ignite.internal.commandline.CommandHandler.EXIT_CODE_OK;
-import static 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager.INDEX_FILE_NAME;
+import static 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree.INDEX_FILE_NAME;
 import static 
org.apache.ignite.internal.processors.cache.verify.IdleVerifyUtility.GRID_NOT_IDLE_MSG;
 import static org.apache.ignite.testframework.GridTestUtils.assertContains;
 import static org.apache.ignite.testframework.GridTestUtils.assertNotContains;
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/MarshallerMappingFileStore.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/MarshallerMappingFileStore.java
index 3b6c5963c1e..ddc40c37c79 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/MarshallerMappingFileStore.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/MarshallerMappingFileStore.java
@@ -39,7 +39,7 @@ import static java.nio.file.StandardCopyOption.ATOMIC_MOVE;
 import static java.nio.file.StandardCopyOption.REPLACE_EXISTING;
 import static org.apache.ignite.internal.MarshallerPlatformIds.otherPlatforms;
 import static 
org.apache.ignite.internal.binary.BinaryUtils.MAPPING_FILE_EXTENSION;
-import static 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager.TMP_SUFFIX;
+import static 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree.TMP_SUFFIX;
 
 /**
  * File-based persistence provider for {@link MarshallerContextImpl}.
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryUtils.java 
b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryUtils.java
index c4d925de429..2f5ed83df9a 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryUtils.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryUtils.java
@@ -78,7 +78,7 @@ import org.jetbrains.annotations.Nullable;
 
 import static java.nio.charset.StandardCharsets.UTF_8;
 import static 
org.apache.ignite.IgniteSystemProperties.IGNITE_BINARY_MARSHALLER_USE_STRING_SERIALIZATION_VER_2;
-import static 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager.TMP_SUFFIX;
+import static 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree.TMP_SUFFIX;
 
 /**
  * Binary utils.
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/cdc/CdcConsumerState.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/cdc/CdcConsumerState.java
index 942fd248da6..29ac25caf4c 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/cdc/CdcConsumerState.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/cdc/CdcConsumerState.java
@@ -43,8 +43,8 @@ import org.apache.ignite.internal.util.typedef.T2;
 
 import static java.nio.file.StandardCopyOption.ATOMIC_MOVE;
 import static java.nio.file.StandardCopyOption.REPLACE_EXISTING;
-import static 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager.FILE_SUFFIX;
-import static 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager.TMP_SUFFIX;
+import static 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree.FILE_SUFFIX;
+import static 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree.TMP_SUFFIX;
 import static 
org.apache.ignite.internal.processors.cache.persistence.wal.WALPointer.POINTER_SIZE;
 
 /**
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridLocalConfigManager.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridLocalConfigManager.java
index 8d074372114..87b01442e60 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridLocalConfigManager.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridLocalConfigManager.java
@@ -69,8 +69,8 @@ import org.jetbrains.annotations.Nullable;
 
 import static java.nio.file.Files.newDirectoryStream;
 import static 
org.apache.ignite.internal.processors.cache.GridCacheUtils.UTILITY_CACHE_NAME;
-import static 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager.CACHE_DATA_FILENAME;
-import static 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager.TMP_SUFFIX;
+import static 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree.CACHE_DATA_FILENAME;
+import static 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree.TMP_SUFFIX;
 import static 
org.apache.ignite.internal.processors.query.QueryUtils.normalizeObjectName;
 import static 
org.apache.ignite.internal.processors.query.QueryUtils.normalizeSchemaName;
 
@@ -145,7 +145,7 @@ public class GridLocalConfigManager {
                 if (!cacheDir.exists())
                     continue;
 
-                File[] ccfgFiles = cacheDir.listFiles((dir, name) -> 
name.endsWith(CACHE_DATA_FILENAME));
+                File[] ccfgFiles = 
cacheDir.listFiles(NodeFileTree::cacheOrCacheGroupConfigFile);
 
                 if (ccfgFiles == null)
                     continue;
@@ -167,18 +167,17 @@ public class GridLocalConfigManager {
         if (ctx.clientNode())
             return Collections.emptyMap();
 
-        File[] files = ft.nodeStorage().listFiles();
+        File[] dirs = ft.nodeStorage().listFiles(File::isDirectory);
 
-        if (files == null)
+        if (dirs == null)
             return Collections.emptyMap();
 
         Map<String, StoredCacheData> ccfgs = new HashMap<>();
 
-        Arrays.sort(files);
+        Arrays.sort(dirs);
 
-        for (File file : files) {
-            if (file.isDirectory())
-                readCacheConfigurations(file, ccfgs);
+        for (File file : dirs) {
+            readCacheConfigurations(file, ccfgs);
         }
 
         return ccfgs;
@@ -293,7 +292,7 @@ public class GridLocalConfigManager {
 
         assert cacheWorkDir.exists() : "Work directory does not exist: " + 
cacheWorkDir;
 
-        File file = cacheConfigurationFile(ccfg);
+        File file = ft.cacheConfigurationFile(ccfg);
         Path filePath = file.toPath();
 
         chgLock.readLock().lock();
@@ -337,7 +336,7 @@ public class GridLocalConfigManager {
 
         try {
             CacheConfiguration<?, ?> ccfg = cacheData.config();
-            File file = cacheConfigurationFile(ccfg);
+            File file = ft.cacheConfigurationFile(ccfg);
 
             if (file.exists()) {
                 for (BiConsumer<String, File> lsnr : lsnrs)
@@ -425,7 +424,7 @@ public class GridLocalConfigManager {
         if (cacheGrpDir != null && cacheGrpDir.exists()) {
             DirectoryStream.Filter<Path> cacheCfgFileFilter = new 
DirectoryStream.Filter<Path>() {
                 @Override public boolean accept(Path path) {
-                    return Files.isRegularFile(path) && 
path.getFileName().toString().endsWith(CACHE_DATA_FILENAME);
+                    return Files.isRegularFile(path) && 
NodeFileTree.cacheOrCacheGroupConfigFile(path.toFile());
                 }
             };
 
@@ -451,7 +450,7 @@ public class GridLocalConfigManager {
             return;
 
         for (File file : files) {
-            if (!file.isDirectory() && 
file.getName().endsWith(CACHE_DATA_FILENAME) && file.length() > 0)
+            if (!file.isDirectory() && 
NodeFileTree.cacheOrCacheGroupConfigFile(file) && file.length() > 0)
                 readAndAdd(
                     ccfgs,
                     file,
@@ -526,19 +525,6 @@ public class GridLocalConfigManager {
         return drCfg != null && !drCfg.isPersistenceEnabled() && 
drCfg.isCdcEnabled();
     }
 
-    /**
-     * @param ccfg Cache configuration.
-     * @return Cache configuration file with respect to {@link 
CacheConfiguration#getGroupName} value.
-     */
-    public File cacheConfigurationFile(CacheConfiguration<?, ?> ccfg) {
-        return new File(ft.cacheStorage(ccfg), cacheDataFilename(ccfg));
-    }
-
-    /** @return Name of cache data filename. */
-    public static String cacheDataFilename(CacheConfiguration<?, ?> ccfg) {
-        return ccfg.getGroupName() == null ? CACHE_DATA_FILENAME : 
(ccfg.getName() + CACHE_DATA_FILENAME);
-    }
-
     /**
      * @return {@code True} if need locally start all existing caches on 
client node start.
      */
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/binary/BinaryMetadataFileStore.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/binary/BinaryMetadataFileStore.java
index d2fbc8c8041..75de1d67028 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/binary/BinaryMetadataFileStore.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/binary/BinaryMetadataFileStore.java
@@ -49,7 +49,7 @@ import org.apache.ignite.thread.IgniteThread;
 
 import static java.nio.file.StandardCopyOption.ATOMIC_MOVE;
 import static java.nio.file.StandardCopyOption.REPLACE_EXISTING;
-import static 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager.TMP_SUFFIX;
+import static 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree.TMP_SUFFIX;
 
 /**
  * Class handles saving/restoring binary metadata to/from disk.
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/CheckCorruptedCacheStoresCleanAction.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/CheckCorruptedCacheStoresCleanAction.java
index 2073b9bc3eb..ffb7035941a 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/CheckCorruptedCacheStoresCleanAction.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/CheckCorruptedCacheStoresCleanAction.java
@@ -18,13 +18,11 @@
 package org.apache.ignite.internal.processors.cache.persistence;
 
 import java.io.File;
-
+import 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree;
 import org.apache.ignite.maintenance.MaintenanceAction;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 
-import static 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager.CACHE_DATA_FILENAME;
-
 /** */
 public class CheckCorruptedCacheStoresCleanAction implements 
MaintenanceAction<Boolean> {
     /** */
@@ -49,7 +47,7 @@ public class CheckCorruptedCacheStoresCleanAction implements 
MaintenanceAction<B
 
             if (cacheStoreDir.exists() && cacheStoreDir.isDirectory()) {
                 for (File f : cacheStoreDir.listFiles()) {
-                    if (!f.getName().equals(CACHE_DATA_FILENAME))
+                    if (!NodeFileTree.cacheConfigFile(f))
                         return Boolean.FALSE;
                 }
             }
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/CleanCacheStoresMaintenanceAction.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/CleanCacheStoresMaintenanceAction.java
index de94e6e6fe1..53693b64bd9 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/CleanCacheStoresMaintenanceAction.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/CleanCacheStoresMaintenanceAction.java
@@ -18,13 +18,11 @@
 package org.apache.ignite.internal.processors.cache.persistence;
 
 import java.io.File;
-
+import 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree;
 import org.apache.ignite.maintenance.MaintenanceAction;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 
-import static 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager.CACHE_DATA_FILENAME;
-
 /**
  *
  */
@@ -54,7 +52,7 @@ public class CleanCacheStoresMaintenanceAction implements 
MaintenanceAction<Void
 
             if (cacheStoreDir.exists() && cacheStoreDir.isDirectory()) {
                 for (File file : cacheStoreDir.listFiles()) {
-                    if (!file.getName().equals(CACHE_DATA_FILENAME))
+                    if (!NodeFileTree.cacheConfigFile(file))
                         file.delete();
                 }
             }
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/CorruptedPdsMaintenanceCallback.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/CorruptedPdsMaintenanceCallback.java
index f596a8b8ad6..c21e30f2c91 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/CorruptedPdsMaintenanceCallback.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/CorruptedPdsMaintenanceCallback.java
@@ -24,7 +24,7 @@ import org.apache.ignite.maintenance.MaintenanceAction;
 import org.apache.ignite.maintenance.MaintenanceWorkflowCallback;
 import org.jetbrains.annotations.NotNull;
 
-import static 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager.CACHE_DATA_FILENAME;
+import static 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree.CACHE_DATA_FILENAME;
 
 /**
  *
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheDatabaseSharedManager.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheDatabaseSharedManager.java
index 9fb89cc5c2c..35356be370a 100755
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheDatabaseSharedManager.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/GridCacheDatabaseSharedManager.java
@@ -118,6 +118,7 @@ import 
org.apache.ignite.internal.processors.cache.persistence.file.FileIO;
 import 
org.apache.ignite.internal.processors.cache.persistence.file.FileIOFactory;
 import 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStore;
 import 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager;
+import 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree;
 import 
org.apache.ignite.internal.processors.cache.persistence.metastorage.MetaStorage;
 import 
org.apache.ignite.internal.processors.cache.persistence.metastorage.MetastorageLifecycleListener;
 import 
org.apache.ignite.internal.processors.cache.persistence.pagemem.PageMemoryEx;
@@ -1320,7 +1321,7 @@ public class GridCacheDatabaseSharedManager extends 
IgniteCacheDatabaseSharedMan
 
                 Path anyIdxPartFile = IgniteUtils.searchFileRecursively(
                     
cctx.kernalContext().pdsFolderResolver().fileTree().nodeStorage().toPath(),
-                    FilePageStoreManager.INDEX_FILE_NAME
+                    NodeFileTree.INDEX_FILE_NAME
                 );
 
                 if (anyIdxPartFile != null) {
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/checkpoint/CheckpointMarkersStorage.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/checkpoint/CheckpointMarkersStorage.java
index 8c33ac28349..d4a9a65425a 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/checkpoint/CheckpointMarkersStorage.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/checkpoint/CheckpointMarkersStorage.java
@@ -47,7 +47,6 @@ import 
org.apache.ignite.internal.pagemem.wal.record.CheckpointRecord;
 import 
org.apache.ignite.internal.processors.cache.persistence.StorageException;
 import org.apache.ignite.internal.processors.cache.persistence.file.FileIO;
 import 
org.apache.ignite.internal.processors.cache.persistence.file.FileIOFactory;
-import 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager;
 import 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree;
 import org.apache.ignite.internal.processors.cache.persistence.wal.WALPointer;
 import org.apache.ignite.internal.util.IgniteUtils;
@@ -57,6 +56,7 @@ import org.jetbrains.annotations.Nullable;
 import static java.nio.file.StandardOpenOption.READ;
 import static 
org.apache.ignite.IgniteSystemProperties.IGNITE_CHECKPOINT_MAP_SNAPSHOT_THRESHOLD;
 import static 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager.TMP_FILE_MATCHER;
+import static 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree.TMP_SUFFIX;
 
 /**
  * Abstraction responsible for managing checkpoint markers storage.
@@ -79,7 +79,7 @@ public class CheckpointMarkersStorage {
 
     /** Earliest checkpoint map snapshot temporary file name. */
     private static final String EARLIEST_CP_SNAPSHOT_TMP_FILE =
-        EARLIEST_CP_SNAPSHOT_FILE + FilePageStoreManager.TMP_SUFFIX;
+        EARLIEST_CP_SNAPSHOT_FILE + TMP_SUFFIX;
 
     /** Checkpoint map snapshot executor. */
     private final Executor checkpointMapSnapshotExecutor;
@@ -464,7 +464,7 @@ public class CheckpointMarkersStorage {
         boolean skipSync
     ) throws StorageException {
         String fileName = checkpointFileName(cp, type);
-        String tmpFileName = fileName + FilePageStoreManager.TMP_SUFFIX;
+        String tmpFileName = fileName + NodeFileTree.TMP_SUFFIX;
 
         try {
             try (FileIO io = 
ioFactory.create(Paths.get(ft.checkpoint().getAbsolutePath(), skipSync ? 
fileName : tmpFileName).toFile(),
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/defragmentation/DefragmentationFileUtils.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/defragmentation/DefragmentationFileUtils.java
index b0e801927f1..1c329cee6f6 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/defragmentation/DefragmentationFileUtils.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/defragmentation/DefragmentationFileUtils.java
@@ -32,12 +32,12 @@ import static java.nio.file.StandardCopyOption.ATOMIC_MOVE;
 import static java.nio.file.StandardCopyOption.REPLACE_EXISTING;
 import static java.nio.file.StandardOpenOption.CREATE_NEW;
 import static java.nio.file.StandardOpenOption.WRITE;
-import static 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager.FILE_SUFFIX;
-import static 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager.INDEX_FILE_NAME;
-import static 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager.INDEX_FILE_PREFIX;
-import static 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager.PART_FILE_PREFIX;
-import static 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager.PART_FILE_TEMPLATE;
-import static 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager.TMP_SUFFIX;
+import static 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree.FILE_SUFFIX;
+import static 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree.INDEX_FILE_NAME;
+import static 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree.INDEX_FILE_PREFIX;
+import static 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree.PART_FILE_PREFIX;
+import static 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree.PART_FILE_TEMPLATE;
+import static 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree.TMP_SUFFIX;
 
 /**
  * Everything related to file management during defragmentation process.
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/file/FilePageStoreManager.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/file/FilePageStoreManager.java
index ff69f3251ef..d58aa066e7e 100755
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/file/FilePageStoreManager.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/file/FilePageStoreManager.java
@@ -52,7 +52,6 @@ import org.apache.ignite.failure.FailureType;
 import org.apache.ignite.internal.GridKernalContext;
 import org.apache.ignite.internal.client.util.GridConcurrentHashSet;
 import 
org.apache.ignite.internal.managers.encryption.EncryptionCacheKeyProvider;
-import org.apache.ignite.internal.pagemem.PageIdAllocator;
 import org.apache.ignite.internal.pagemem.PageIdUtils;
 import org.apache.ignite.internal.pagemem.store.IgnitePageStoreManager;
 import org.apache.ignite.internal.pagemem.store.PageStore;
@@ -82,46 +81,24 @@ import org.apache.ignite.thread.IgniteThread;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 
-import static java.lang.String.format;
 import static java.nio.file.Files.delete;
 import static java.nio.file.Files.newDirectoryStream;
 import static java.util.Objects.requireNonNull;
 import static 
org.apache.ignite.internal.pagemem.PageIdAllocator.INDEX_PARTITION;
 import static 
org.apache.ignite.internal.pagemem.PageIdAllocator.MAX_PARTITION_ID;
+import static 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree.CACHE_DATA_TMP_FILENAME;
 import static 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree.CACHE_DIR_WITH_META_FILTER;
+import static 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree.FILE_SUFFIX;
+import static 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree.INDEX_FILE_NAME;
+import static 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree.TMP_SUFFIX;
+import static 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree.partitionFileName;
+import static 
org.apache.ignite.internal.processors.cache.persistence.metastorage.MetaStorage.METASTORAGE_DIR_NAME;
 
 /**
  * File page store manager.
  */
 public class FilePageStoreManager extends GridCacheSharedManagerAdapter 
implements IgnitePageStoreManager,
     PageStoreCollection {
-    /** File suffix. */
-    public static final String FILE_SUFFIX = ".bin";
-
-    /** Suffix for zip files */
-    public static final String ZIP_SUFFIX = ".zip";
-
-    /** Suffix for tmp files */
-    public static final String TMP_SUFFIX = ".tmp";
-
-    /** Partition file prefix. */
-    public static final String PART_FILE_PREFIX = "part-";
-
-    /** */
-    public static final String INDEX_FILE_PREFIX = "index";
-
-    /** */
-    public static final String INDEX_FILE_NAME = INDEX_FILE_PREFIX + 
FILE_SUFFIX;
-
-    /** */
-    public static final String PART_FILE_TEMPLATE = PART_FILE_PREFIX + "%d" + 
FILE_SUFFIX;
-
-    /** */
-    public static final String CACHE_DATA_FILENAME = "cache_data.dat";
-
-    /** */
-    public static final String CACHE_DATA_TMP_FILENAME = CACHE_DATA_FILENAME + 
TMP_SUFFIX;
-
     /** */
     public static final String DFLT_STORE_DIR = "db";
 
@@ -389,10 +366,8 @@ public class FilePageStoreManager extends 
GridCacheSharedManagerAdapter implemen
                 if (!locEnabled || !globalEnabled) {
                     File dir = ft.cacheStorage(desc.config());
 
-                    if (Arrays.stream(
-                        dir.listFiles()).anyMatch(f -> 
!f.getName().equals(CACHE_DATA_FILENAME))) {
+                    if (Arrays.stream(dir.listFiles()).anyMatch(f -> 
!NodeFileTree.cacheConfigFile(f)))
                         corruptedCacheGrps.add(desc.config());
-                    }
                 }
             }
         }
@@ -443,7 +418,7 @@ public class FilePageStoreManager extends 
GridCacheSharedManagerAdapter implemen
             PageMetrics pageMetrics = 
dataRegion.metrics().cacheGrpPageMetrics(grpId);
 
             CacheStoreHolder holder = initDir(
-                new File(ft.nodeStorage(), MetaStorage.METASTORAGE_DIR_NAME),
+                METASTORAGE_DIR_NAME,
                 grpId,
                 MetaStorage.METASTORAGE_CACHE_NAME,
                 MetaStorage.METASTORAGE_PARTITIONS.size(),
@@ -533,14 +508,12 @@ public class FilePageStoreManager extends 
GridCacheSharedManagerAdapter implemen
     private CacheStoreHolder initForCache(CacheGroupDescriptor grpDesc, 
CacheConfiguration ccfg) throws IgniteCheckedException {
         assert !grpDesc.sharedGroup() || ccfg.getGroupName() != null : 
ccfg.getName();
 
-        File cacheWorkDir = ft.cacheStorage(ccfg);
-
         String dataRegionName = grpDesc.config().getDataRegionName();
         DataRegion dataRegion = cctx.database().dataRegion(dataRegionName);
         PageMetrics pageMetrics = 
dataRegion.metrics().cacheGrpPageMetrics(grpDesc.groupId());
 
         return initDir(
-            cacheWorkDir,
+            ft.cacheDirName(ccfg),
             grpDesc.groupId(),
             ccfg.getName(),
             grpDesc.config().getAffinity().partitions(),
@@ -613,7 +586,7 @@ public class FilePageStoreManager extends 
GridCacheSharedManagerAdapter implemen
     }
 
     /**
-     * @param cacheWorkDir Work directory.
+     * @param cacheDir Cache dir name.
      * @param grpId Group ID.
      * @param cacheName Cache name.
      * @param partitions Number of partitions.
@@ -622,7 +595,8 @@ public class FilePageStoreManager extends 
GridCacheSharedManagerAdapter implemen
      * @return Cache store holder.
      * @throws IgniteCheckedException If failed.
      */
-    private CacheStoreHolder initDir(File cacheWorkDir,
+    private CacheStoreHolder initDir(
+        String cacheDir,
         int grpId,
         String cacheName,
         int partitions,
@@ -630,6 +604,8 @@ public class FilePageStoreManager extends 
GridCacheSharedManagerAdapter implemen
         boolean encrypted,
         Collection<String> grpCaches) throws IgniteCheckedException {
         try {
+            File cacheWorkDir = ft.cacheStorage(cacheDir);
+
             boolean dirExisted = checkAndInitCacheWorkDir(cacheWorkDir, log);
 
             if (dirExisted) {
@@ -679,7 +655,7 @@ public class FilePageStoreManager extends 
GridCacheSharedManagerAdapter implemen
                 PageStore partStore =
                     pageStoreFactory.createPageStore(
                         PageStore.TYPE_DATA,
-                        () -> getPartitionFilePath(cacheWorkDir, p),
+                        () -> ft.partitionFile(cacheDir, p).toPath(),
                         pageMetrics.totalPages()::add);
 
                 partStores[partId] = partStore;
@@ -700,27 +676,7 @@ public class FilePageStoreManager extends 
GridCacheSharedManagerAdapter implemen
      * @param partId Partition id.
      */
     @NotNull private Path getPartitionFilePath(File cacheWorkDir, int partId) {
-        return new File(cacheWorkDir, getPartitionFileName(partId)).toPath();
-    }
-
-    /**
-     * @param workDir Cache work directory.
-     * @param cacheDirName Cache directory name.
-     * @param partId Partition id.
-     * @return Partition file.
-     */
-    @NotNull public static File getPartitionFile(File workDir, String 
cacheDirName, int partId) {
-        return new File(NodeFileTree.cacheStorage(workDir, cacheDirName), 
getPartitionFileName(partId));
-    }
-
-    /**
-     * @param partId Partition id.
-     * @return File name.
-     */
-    public static String getPartitionFileName(int partId) {
-        assert partId <= MAX_PARTITION_ID || partId == INDEX_PARTITION;
-
-        return partId == INDEX_PARTITION ? INDEX_FILE_NAME : 
format(PART_FILE_TEMPLATE, partId);
+        return new File(cacheWorkDir, partitionFileName(partId)).toPath();
     }
 
     /**
@@ -845,20 +801,6 @@ public class FilePageStoreManager extends 
GridCacheSharedManagerAdapter implemen
             .orElse(null);
     }
 
-    /**
-     * @param partFileName Partition file name.
-     * @return Partition id.
-     */
-    public static int partId(String partFileName) {
-        if (partFileName.equals(INDEX_FILE_NAME))
-            return PageIdAllocator.INDEX_PARTITION;
-
-        if (partFileName.startsWith(PART_FILE_PREFIX))
-            return 
Integer.parseInt(partFileName.substring(PART_FILE_PREFIX.length(), 
partFileName.indexOf('.')));
-
-        throw new IllegalStateException("Illegal partition file name: " + 
partFileName);
-    }
-
     /**
      * @param cacheDir Cache directory to check.
      * @return List of cache partitions in given directory.
@@ -889,7 +831,7 @@ public class FilePageStoreManager extends 
GridCacheSharedManagerAdapter implemen
      * @return Array of cache data files.
      */
     public static File[] cacheDataFiles(File root) {
-        return root.listFiles(f -> f.getName().endsWith(CACHE_DATA_FILENAME));
+        return root.listFiles(NodeFileTree::cacheOrCacheGroupConfigFile);
     }
 
     /** {@inheritDoc} */
@@ -912,23 +854,6 @@ public class FilePageStoreManager extends 
GridCacheSharedManagerAdapter implemen
         return pageCnt;
     }
 
-    /**
-     * @param grpId Group id.
-     * @return Name of cache group directory.
-     * @throws IgniteCheckedException If cache group doesn't exist.
-     */
-    public String cacheDirName(int grpId) throws IgniteCheckedException {
-        if (grpId == MetaStorage.METASTORAGE_CACHE_ID)
-            return MetaStorage.METASTORAGE_DIR_NAME;
-
-        CacheGroupContext gctx = cctx.cache().cacheGroup(grpId);
-
-        if (gctx == null)
-            throw new IgniteCheckedException("Cache group context has not 
found due to the cache group is stopped.");
-
-        return ft.cacheDirName(gctx.config());
-    }
-
     /**
      * @param cleanFiles {@code True} if the stores should delete it's files 
upon close.
      */
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/filename/NodeFileTree.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/filename/NodeFileTree.java
index 2a1bb7546e1..65761f857e9 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/filename/NodeFileTree.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/filename/NodeFileTree.java
@@ -31,14 +31,18 @@ import org.apache.ignite.internal.util.typedef.internal.CU;
 import org.apache.ignite.internal.util.typedef.internal.S;
 import org.apache.ignite.internal.util.typedef.internal.U;
 import org.apache.ignite.spi.checkpoint.sharedfs.SharedFsCheckpointSpi;
+import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 
+import static java.lang.String.format;
 import static 
org.apache.ignite.configuration.DataStorageConfiguration.DFLT_WAL_ARCHIVE_PATH;
 import static 
org.apache.ignite.configuration.DataStorageConfiguration.DFLT_WAL_CDC_PATH;
 import static 
org.apache.ignite.configuration.DataStorageConfiguration.DFLT_WAL_PATH;
-import static 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager.TMP_SUFFIX;
-import static 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager.ZIP_SUFFIX;
+import static 
org.apache.ignite.internal.pagemem.PageIdAllocator.INDEX_PARTITION;
+import static 
org.apache.ignite.internal.pagemem.PageIdAllocator.MAX_PARTITION_ID;
 import static 
org.apache.ignite.internal.processors.cache.persistence.filename.PdsFolderResolver.DB_DEFAULT_FOLDER;
+import static 
org.apache.ignite.internal.processors.cache.persistence.metastorage.MetaStorage.METASTORAGE_CACHE_NAME;
+import static 
org.apache.ignite.internal.processors.cache.persistence.metastorage.MetaStorage.METASTORAGE_DIR_NAME;
 
 /**
  * Provides access to Ignite node file tree.
@@ -78,17 +82,18 @@ import static 
org.apache.ignite.internal.processors.cache.persistence.filename.P
  * │  │  └── 1645778359.classname0
  * │  ├── node00-e57e62a9-2ccf-4e1b-a11e-c24c21b9ed4c                          
 ← nodeStorage (node 0).
  * │  │  ├── cache-default                                                     
 ← cacheStorage (cache name "default").
- * │  │  │  ├── cache_data.dat
+ * │  │  │  ├── cache_data.dat                                                 
 ← cache("default") configuration file.
  * │  │  │  ├── index.bin
  * │  │  │  ├── part-0.bin
  * │  │  │  ├── part-1.bin
  * ...
  * │  │  │  └── part-9.bin
  * │  │  ├── cache-ignite-sys-cache                                            
 ← cacheStorage (cache name "ignite-sys-cache").
- * │  │  │  ├── cache_data.dat
+ * │  │  │  ├── cache_data.dat                                                 
 ← cache("ignite-sys-cache") configuration file.
  * │  │  │  └── index.bin
  * │  │  ├── cacheGroup-tx-cache                                               
 ← cacheStorage (cache group "tx-cache").
- * │  │  │  ├── cache_data.dat
+ * │  │  │  ├── tx-cachecache_data.dat                                         
 ← cache("tx-cache") configuration file inside group.
+ * │  │  │  ├── othercache_data.dat                                            
 ← cache("other") configuration file inside group.
  * │  │  │  ├── index.bin
  * │  │  │  ├── part-0.bin
  * │  │  │  ├── part-1.bin
@@ -163,6 +168,15 @@ public class NodeFileTree extends SharedFileTree {
     /** File extension of WAL segment. */
     public static final String WAL_SEGMENT_FILE_EXT = ".wal";
 
+    /** File suffix. */
+    public static final String FILE_SUFFIX = ".bin";
+
+    /** Suffix for tmp files */
+    public static final String TMP_SUFFIX = ".tmp";
+
+    /** Suffix for zip files */
+    public static final String ZIP_SUFFIX = ".zip";
+
     /** File extension of temp WAL segment. */
     public static final String TMP_WAL_SEG_FILE_EXT = WAL_SEGMENT_FILE_EXT + 
TMP_SUFFIX;
 
@@ -186,6 +200,24 @@ public class NodeFileTree extends SharedFileTree {
         CACHE_DIR_FILTER.test(dir) ||
             dir.getName().equals(MetaStorage.METASTORAGE_DIR_NAME);
 
+    /** Partition file prefix. */
+    public static final String PART_FILE_PREFIX = "part-";
+
+    /** Index file prefix. */
+    public static final String INDEX_FILE_PREFIX = "index";
+
+    /** Index file name. */
+    public static final String INDEX_FILE_NAME = INDEX_FILE_PREFIX + 
FILE_SUFFIX;
+
+    /** Partition file template. */
+    public static final String PART_FILE_TEMPLATE = PART_FILE_PREFIX + "%d" + 
FILE_SUFFIX;
+
+    /** */
+    public static final String CACHE_DATA_FILENAME = "cache_data.dat";
+
+    /** */
+    public static final String CACHE_DATA_TMP_FILENAME = CACHE_DATA_FILENAME + 
TMP_SUFFIX;
+
     /** Folder name for consistent id. */
     private final String folderName;
 
@@ -450,6 +482,48 @@ public class NodeFileTree extends SharedFileTree {
         return cacheDirName(isSharedGrp, CU.cacheOrGroupName(ccfg));
     }
 
+    /**
+     * @param ccfg Cache configuration.
+     * @return Cache configuration file with respect to {@link 
CacheConfiguration#getGroupName} value.
+     */
+    public File cacheConfigurationFile(CacheConfiguration<?, ?> ccfg) {
+        return new File(cacheStorage(ccfg), cacheDataFilename(ccfg));
+    }
+
+    /** @return Name of cache data filename. */
+    public static String cacheDataFilename(CacheConfiguration<?, ?> ccfg) {
+        return ccfg.getGroupName() == null ? CACHE_DATA_FILENAME : 
(ccfg.getName() + CACHE_DATA_FILENAME);
+    }
+
+    /**
+     * @param cacheDirName Cache directory name.
+     * @param part Partition id.
+     * @return Partition file.
+     */
+    public File partitionFile(String cacheDirName, int part) {
+        return new File(cacheStorage(cacheDirName), partitionFileName(part));
+    }
+
+    /**
+     * @param workDir Cache work directory.
+     * @param cacheDirName Cache directory name.
+     * @param part Partition id.
+     * @return Partition file.
+     */
+    @NotNull public static File partitionFile(File workDir, String 
cacheDirName, int part) {
+        return new File(cacheStorage(workDir, cacheDirName), 
partitionFileName(part));
+    }
+
+    /**
+     * @param part Partition id.
+     * @return File name.
+     */
+    public static String partitionFileName(int part) {
+        assert part <= MAX_PARTITION_ID || part == INDEX_PARTITION;
+
+        return part == INDEX_PARTITION ? INDEX_FILE_NAME : 
format(PART_FILE_TEMPLATE, part);
+    }
+
     /**
      * @param cacheDirName Cache directory name.
      * @return Store directory for given cache.
@@ -475,6 +549,30 @@ public class NodeFileTree extends SharedFileTree {
         return dir.getName().startsWith(CACHE_GRP_DIR_PREFIX);
     }
 
+    /**
+     * @param f File.
+     * @return {@code True} if file conforms partition file name pattern.
+     */
+    public static boolean partitionFile(File f) {
+        return f.getName().startsWith(PART_FILE_PREFIX);
+    }
+
+    /**
+     * @param f File.
+     * @return {@code True} if file conforms cache(including cache group 
caches) config file name pattern.
+     */
+    public static boolean cacheOrCacheGroupConfigFile(File f) {
+        return f.getName().endsWith(CACHE_DATA_FILENAME);
+    }
+
+    /**
+     * @param f File.
+     * @return {@code True} if file conforms cache config file name pattern.
+     */
+    public static boolean cacheConfigFile(File f) {
+        return f.getName().equals(CACHE_DATA_FILENAME);
+    }
+
     /**
      * @param cacheDirName Cache directory name.
      * @return Store directory for given cache.
@@ -489,6 +587,9 @@ public class NodeFileTree extends SharedFileTree {
      * @return The full cache directory name.
      */
     public static String cacheDirName(boolean isSharedGroup, String 
cacheOrGroupName) {
+        if (cacheOrGroupName.equals(METASTORAGE_CACHE_NAME))
+            return METASTORAGE_DIR_NAME;
+
         return isSharedGroup
             ? CACHE_GRP_DIR_PREFIX + cacheOrGroupName
             : CACHE_DIR_PREFIX + cacheOrGroupName;
@@ -506,7 +607,7 @@ public class NodeFileTree extends SharedFileTree {
         else if (name.startsWith(CACHE_DIR_PREFIX))
             return name.substring(CACHE_DIR_PREFIX.length());
         else if (name.equals(MetaStorage.METASTORAGE_DIR_NAME))
-            return MetaStorage.METASTORAGE_CACHE_NAME;
+            return METASTORAGE_CACHE_NAME;
         else
             throw new IgniteException("Directory doesn't match the cache or 
cache group prefix: " + dir);
     }
@@ -521,6 +622,21 @@ public class NodeFileTree extends SharedFileTree {
         return Long.parseLong(fn.substring(0, fn.indexOf('.')));
     }
 
+    /**
+     * @param part Partition file name.
+     * @return Partition id.
+     */
+    public static int partId(File part) {
+        String name = part.getName();
+        if (name.equals(INDEX_FILE_NAME))
+            return INDEX_PARTITION;
+
+        if (name.startsWith(PART_FILE_PREFIX))
+            return Integer.parseInt(name.substring(PART_FILE_PREFIX.length(), 
name.indexOf('.')));
+
+        throw new IllegalStateException("Illegal partition file name: " + 
name);
+    }
+
     /**
      * Resolves directory specified by the given arguments.
      *
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/IgniteSnapshotManager.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/IgniteSnapshotManager.java
index 946aa5fb8c9..efe7570e9e2 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/IgniteSnapshotManager.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/IgniteSnapshotManager.java
@@ -211,12 +211,12 @@ import static 
org.apache.ignite.internal.pagemem.PageIdUtils.pageIndex;
 import static org.apache.ignite.internal.pagemem.PageIdUtils.toDetailString;
 import static 
org.apache.ignite.internal.processors.cache.GridCacheUtils.baselineNode;
 import static 
org.apache.ignite.internal.processors.cache.GridCacheUtils.isPersistenceEnabled;
-import static 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager.INDEX_FILE_NAME;
-import static 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager.PART_FILE_TEMPLATE;
 import static 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager.cacheDirectories;
-import static 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager.getPartitionFile;
-import static 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager.getPartitionFileName;
+import static 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree.INDEX_FILE_NAME;
+import static 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree.PART_FILE_TEMPLATE;
 import static 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree.cacheName;
+import static 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree.partitionFile;
+import static 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree.partitionFileName;
 import static 
org.apache.ignite.internal.processors.cache.persistence.filename.PdsFolderResolver.DB_DEFAULT_FOLDER;
 import static 
org.apache.ignite.internal.processors.cache.persistence.metastorage.MetaStorage.METASTORAGE_CACHE_ID;
 import static 
org.apache.ignite.internal.processors.cache.persistence.metastorage.MetaStorage.METASTORAGE_CACHE_NAME;
@@ -2587,7 +2587,7 @@ public class IgniteSnapshotManager extends 
GridCacheSharedManagerAdapter
             );
         }
 
-        File snpPart = getPartitionFile(new File(snapshotLocalDir(snpName, 
null), databaseRelativePath(folderName)),
+        File snpPart = partitionFile(new File(snapshotLocalDir(snpName, null), 
databaseRelativePath(folderName)),
             grps.get(0).getName(), partId);
 
         int grpId = CU.cacheId(grpName);
@@ -3898,7 +3898,7 @@ public class IgniteSnapshotManager extends 
GridCacheSharedManagerAdapter
                 File tmpCacheDir = 
U.resolveWorkDirectory(ft.nodeStorage().getAbsolutePath(),
                     formatTmpDirName(cacheDir).getName(), false);
 
-                return Paths.get(tmpCacheDir.getAbsolutePath(), 
getPartitionFileName(partId)).toString();
+                return Paths.get(tmpCacheDir.getAbsolutePath(), 
partitionFileName(partId)).toString();
             }
             catch (IgniteCheckedException e) {
                 throw new IgniteException(e);
@@ -4178,7 +4178,7 @@ public class IgniteSnapshotManager extends 
GridCacheSharedManagerAdapter
 
         /** {@inheritDoc} */
         @Override public void sendDelta0(File delta, String cacheDirName, 
GroupPartitionId pair) {
-            File snpPart = getPartitionFile(dbDir, cacheDirName, 
pair.getPartitionId());
+            File snpPart = partitionFile(dbDir, cacheDirName, 
pair.getPartitionId());
 
             if (log.isDebugEnabled()) {
                 log.debug("Start partition snapshot recovery with the given 
delta page file [part=" + snpPart +
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/SnapshotFutureTask.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/SnapshotFutureTask.java
index 27e66490be3..d964087501c 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/SnapshotFutureTask.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/SnapshotFutureTask.java
@@ -73,8 +73,8 @@ import org.apache.ignite.internal.util.typedef.internal.S;
 import org.apache.ignite.internal.util.typedef.internal.U;
 import org.jetbrains.annotations.Nullable;
 
-import static 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager.getPartitionFile;
 import static 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree.cacheStorage;
+import static 
org.apache.ignite.internal.processors.cache.persistence.metastorage.MetaStorage.METASTORAGE_DIR_NAME;
 import static 
org.apache.ignite.internal.processors.cache.persistence.snapshot.IgniteSnapshotManager.copy;
 import static 
org.apache.ignite.internal.processors.cache.persistence.snapshot.IgniteSnapshotManager.databaseRelativePath;
 import static 
org.apache.ignite.internal.processors.cache.persistence.snapshot.IgniteSnapshotManager.partDeltaFile;
@@ -271,7 +271,7 @@ class SnapshotFutureTask extends 
AbstractCreateSnapshotFutureTask implements Che
             }
 
             if (withMetaStorage) {
-                U.ensureDirectory(cacheStorage(tmpConsIdDir, 
MetaStorage.METASTORAGE_DIR_NAME),
+                U.ensureDirectory(cacheStorage(tmpConsIdDir, 
METASTORAGE_DIR_NAME),
                     "directory for snapshotting metastorage",
                     log);
             }
@@ -362,7 +362,7 @@ class SnapshotFutureTask extends 
AbstractCreateSnapshotFutureTask implements Che
                 processed.put(MetaStorage.METASTORAGE_CACHE_ID, 
MetaStorage.METASTORAGE_PARTITIONS);
 
                 addPartitionWriters(MetaStorage.METASTORAGE_CACHE_ID, 
MetaStorage.METASTORAGE_PARTITIONS,
-                    MetaStorage.METASTORAGE_DIR_NAME);
+                    METASTORAGE_DIR_NAME);
             }
 
             cctx.cache().configManager().readConfigurationFiles(ccfgs,
@@ -400,7 +400,7 @@ class SnapshotFutureTask extends 
AbstractCreateSnapshotFutureTask implements Che
 
     /** {@inheritDoc} */
     @Override protected List<CompletableFuture<Void>> saveGroup(int grpId, 
Set<Integer> grpParts) throws IgniteCheckedException {
-        String cacheDirName = pageStore.cacheDirName(grpId);
+        String cacheDirName = cacheDirName(grpId);
 
         // Process partitions for a particular cache group.
         return grpParts.stream().map(partId -> {
@@ -412,7 +412,7 @@ class SnapshotFutureTask extends 
AbstractCreateSnapshotFutureTask implements Che
 
             return runAsync(() -> {
                 snpSndr.sendPart(
-                    getPartitionFile(ft.nodeStorage(), cacheDirName, partId),
+                    ft.partitionFile(cacheDirName, partId),
                     cacheDirName,
                     pair,
                     partLen);
@@ -530,6 +530,23 @@ class SnapshotFutureTask extends 
AbstractCreateSnapshotFutureTask implements Che
             .collect(Collectors.toMap(Map.Entry::getKey, e -> 
S.toStringSortedDistinct(e.getValue())));
     }
 
+    /**
+     * @param grpId Group id.
+     * @return Name of cache group directory.
+     * @throws IgniteCheckedException If cache group doesn't exist.
+     */
+    private String cacheDirName(int grpId) throws IgniteCheckedException {
+        if (grpId == MetaStorage.METASTORAGE_CACHE_ID)
+            return METASTORAGE_DIR_NAME;
+
+        CacheGroupContext gctx = cctx.cache().cacheGroup(grpId);
+
+        if (gctx == null)
+            throw new IgniteCheckedException("Cache group context has not 
found due to the cache group is stopped.");
+
+        return ft.cacheDirName(gctx.config());
+    }
+
     /** {@inheritDoc} */
     @Override public boolean equals(Object o) {
         if (this == o)
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/SnapshotPartitionsVerifyHandler.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/SnapshotPartitionsVerifyHandler.java
index 8020151a315..c834954ddf2 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/SnapshotPartitionsVerifyHandler.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/SnapshotPartitionsVerifyHandler.java
@@ -53,6 +53,7 @@ import 
org.apache.ignite.internal.processors.cache.StoredCacheData;
 import 
org.apache.ignite.internal.processors.cache.distributed.dht.topology.GridDhtPartitionState;
 import 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStore;
 import 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager;
+import 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree;
 import 
org.apache.ignite.internal.processors.cache.persistence.metastorage.MetaStorage;
 import 
org.apache.ignite.internal.processors.cache.persistence.snapshot.dump.Dump;
 import org.apache.ignite.internal.processors.cache.persistence.tree.io.BPlusIO;
@@ -75,13 +76,12 @@ import static 
org.apache.ignite.internal.pagemem.PageIdAllocator.FLAG_IDX;
 import static 
org.apache.ignite.internal.pagemem.PageIdAllocator.INDEX_PARTITION;
 import static 
org.apache.ignite.internal.processors.cache.distributed.dht.topology.GridDhtPartitionState.OWNING;
 import static 
org.apache.ignite.internal.processors.cache.distributed.dht.topology.GridDhtPartitionState.fromOrdinal;
-import static 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager.CACHE_DATA_FILENAME;
-import static 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager.FILE_SUFFIX;
-import static 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager.ZIP_SUFFIX;
 import static 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager.cacheDirectories;
 import static 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager.cachePartitionFiles;
-import static 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager.partId;
+import static 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree.FILE_SUFFIX;
+import static 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree.ZIP_SUFFIX;
 import static 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree.cacheName;
+import static 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree.partId;
 import static 
org.apache.ignite.internal.processors.cache.persistence.partstate.GroupPartitionId.getTypeByPartId;
 import static 
org.apache.ignite.internal.processors.cache.persistence.snapshot.IgniteSnapshotManager.databaseRelativePath;
 import static 
org.apache.ignite.internal.processors.cache.persistence.snapshot.dump.CreateDumpFutureTask.DUMP_FILE_EXT;
@@ -148,7 +148,7 @@ public class SnapshotPartitionsVerifyHandler implements 
SnapshotHandler<Map<Part
             for (File part : cachePartitionFiles(dir,
                 (meta.dump() ? DUMP_FILE_EXT : FILE_SUFFIX) + 
(meta.compressPartitions() ? ZIP_SUFFIX : "")
             )) {
-                int partId = partId(part.getName());
+                int partId = partId(part);
 
                 if (!parts.remove(partId))
                     continue;
@@ -212,7 +212,7 @@ public class SnapshotPartitionsVerifyHandler implements 
SnapshotHandler<Map<Part
                 part -> {
                     String grpName = cacheName(part.getParentFile());
                     int grpId = CU.cacheId(grpName);
-                    int partId = partId(part.getName());
+                    int partId = partId(part);
 
                     try (FilePageStore pageStore =
                              
(FilePageStore)storeMgr.getPageStoreFactory(grpId, 
snpEncrKeyProvider.getActiveKey(grpId) != null ?
@@ -372,7 +372,7 @@ public class SnapshotPartitionsVerifyHandler implements 
SnapshotHandler<Map<Part
                 Collection<PartitionHashRecord> partitionHashRecords = 
U.doInParallel(
                     cctx.snapshotMgr().snapshotExecutorService(),
                     partFiles,
-                    part -> calculateDumpedPartitionHash(dump, 
cacheName(part.getParentFile()), partId(part.getName()))
+                    part -> calculateDumpedPartitionHash(dump, 
cacheName(part.getParentFile()), partId(part))
                 );
 
                 return 
partitionHashRecords.stream().collect(Collectors.toMap(PartitionHashRecord::partitionKey,
 r -> r));
@@ -526,7 +526,7 @@ public class SnapshotPartitionsVerifyHandler implements 
SnapshotHandler<Map<Part
                 GroupKey grpKey = null;
 
                 try (DirectoryStream<Path> ds = 
Files.newDirectoryStream(grpDirs.get(grpId).toPath(),
-                    p -> Files.isRegularFile(p) && 
p.toString().endsWith(CACHE_DATA_FILENAME))) {
+                    p -> Files.isRegularFile(p) && 
NodeFileTree.cacheOrCacheGroupConfigFile(p.toFile()))) {
                     for (Path p : ds) {
                         StoredCacheData cacheData = 
ctx.cache().configManager().readCacheData(p.toFile());
 
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/SnapshotResponseRemoteFutureTask.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/SnapshotResponseRemoteFutureTask.java
index ddb8332e2f4..8e4ff56e6ba 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/SnapshotResponseRemoteFutureTask.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/SnapshotResponseRemoteFutureTask.java
@@ -33,7 +33,7 @@ import org.apache.ignite.internal.util.typedef.F;
 import org.jetbrains.annotations.Nullable;
 
 import static 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager.cacheDirectory;
-import static 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager.getPartitionFile;
+import static 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree.partitionFile;
 import static 
org.apache.ignite.internal.processors.cache.persistence.snapshot.IgniteSnapshotManager.databaseRelativePath;
 
 /** */
@@ -117,7 +117,7 @@ public class SnapshotResponseRemoteFutureTask extends 
AbstractSnapshotFutureTask
                         ", pair=" + gp + ']');
                 }
 
-                File snpPart = getPartitionFile(cacheDir.getParentFile(), 
cacheDir.getName(), gp.getPartitionId());
+                File snpPart = partitionFile(cacheDir.getParentFile(), 
cacheDir.getName(), gp.getPartitionId());
 
                 if (!snpPart.exists()) {
                     throw new IgniteException("Snapshot partition file not 
found [cacheDir=" + cacheDir +
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/SnapshotRestoreProcess.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/SnapshotRestoreProcess.java
index fff94c4644a..bdd4990aaa3 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/SnapshotRestoreProcess.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/SnapshotRestoreProcess.java
@@ -100,8 +100,8 @@ import org.jetbrains.annotations.Nullable;
 
 import static java.util.Optional.ofNullable;
 import static 
org.apache.ignite.internal.pagemem.PageIdAllocator.INDEX_PARTITION;
-import static 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager.partId;
 import static 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree.cacheName;
+import static 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree.partId;
 import static 
org.apache.ignite.internal.processors.cache.persistence.metastorage.MetaStorage.METASTORAGE_CACHE_NAME;
 import static 
org.apache.ignite.internal.processors.cache.persistence.partstate.GroupPartitionId.getTypeByPartId;
 import static 
org.apache.ignite.internal.processors.cache.persistence.snapshot.IgniteSnapshotManager.databaseRelativePath;
@@ -1057,7 +1057,7 @@ public class SnapshotRestoreProcess {
                                 ", dir=" + dir.getName() + ']');
                         }
 
-                        File idxFile = new File(snpCacheDir, 
FilePageStoreManager.getPartitionFileName(INDEX_PARTITION));
+                        File idxFile = new File(snpCacheDir, 
NodeFileTree.partitionFileName(INDEX_PARTITION));
 
                         if (idxFile.exists()) {
                             PartitionRestoreFuture idxFut;
@@ -1120,7 +1120,7 @@ public class SnapshotRestoreProcess {
                                 }
 
                                 int grpId = 
groupIdFromTmpDir(snpFile.getParentFile());
-                                int partId = partId(snpFile.getName());
+                                int partId = partId(snpFile);
 
                                 PartitionRestoreFuture partFut = 
F.find(allParts.get(grpId), null,
                                     fut -> fut.partId == partId);
@@ -1723,8 +1723,8 @@ public class SnapshotRestoreProcess {
         File targetDir,
         PartitionRestoreFuture partFut
     ) {
-        File snpFile = new File(srcDir, 
FilePageStoreManager.getPartitionFileName(partFut.partId));
-        Path partFile = Paths.get(targetDir.getAbsolutePath(), 
FilePageStoreManager.getPartitionFileName(partFut.partId));
+        File snpFile = new File(srcDir, 
NodeFileTree.partitionFileName(partFut.partId));
+        Path partFile = Paths.get(targetDir.getAbsolutePath(), 
NodeFileTree.partitionFileName(partFut.partId));
         int grpId = groupIdFromTmpDir(targetDir);
 
         IgniteSnapshotManager snapMgr = ctx.cache().context().snapshotMgr();
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/dump/CreateDumpFutureTask.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/dump/CreateDumpFutureTask.java
index 34e2ed01d4d..f2f6f3ea96b 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/dump/CreateDumpFutureTask.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/dump/CreateDumpFutureTask.java
@@ -75,7 +75,7 @@ import 
org.apache.ignite.internal.util.lang.GridCloseableIterator;
 import org.jetbrains.annotations.Nullable;
 
 import static 
org.apache.ignite.internal.pagemem.PageIdAllocator.INDEX_PARTITION;
-import static 
org.apache.ignite.internal.processors.cache.GridLocalConfigManager.cacheDataFilename;
+import static 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree.cacheDataFilename;
 import static 
org.apache.ignite.internal.processors.cache.persistence.snapshot.IgniteSnapshotManager.DUMP_LOCK;
 import static 
org.apache.ignite.internal.processors.cache.persistence.snapshot.dump.Dump.dumpPartFileName;
 import static org.apache.ignite.internal.util.IgniteUtils.toLong;
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/dump/Dump.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/dump/Dump.java
index 0afb5819112..e65f12969ae 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/dump/Dump.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/dump/Dump.java
@@ -65,8 +65,8 @@ import org.jetbrains.annotations.Nullable;
 import static java.nio.file.StandardOpenOption.READ;
 import static 
org.apache.ignite.internal.processors.cache.GridLocalConfigManager.readCacheData;
 import static 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager.DFLT_STORE_DIR;
-import static 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager.PART_FILE_PREFIX;
-import static 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager.ZIP_SUFFIX;
+import static 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree.PART_FILE_PREFIX;
+import static 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree.ZIP_SUFFIX;
 import static 
org.apache.ignite.internal.processors.cache.persistence.snapshot.IgniteSnapshotManager.SNAPSHOT_METAFILE_EXT;
 import static 
org.apache.ignite.internal.processors.cache.persistence.snapshot.dump.CreateDumpFutureTask.DUMP_FILE_EXT;
 import static 
org.apache.ignite.internal.processors.cache.persistence.wal.reader.StandaloneGridKernalContext.closeAllComponents;
@@ -250,13 +250,13 @@ public class Dump implements AutoCloseable {
         String suffix = comprParts ? DUMP_FILE_EXT + ZIP_SUFFIX : 
DUMP_FILE_EXT;
 
         File[] parts = dumpGroupDirectory(node, grp)
-            .listFiles(f -> f.getName().startsWith(PART_FILE_PREFIX) && 
f.getName().endsWith(suffix));
+            .listFiles(f -> NodeFileTree.partitionFile(f) && 
f.getName().endsWith(suffix));
 
         if (parts == null)
             return Collections.emptyList();
 
         return Arrays.stream(parts)
-            .map(partFile -> 
Integer.parseInt(partFile.getName().replace(PART_FILE_PREFIX, 
"").replace(suffix, "")))
+            .map(NodeFileTree::partId)
             .collect(Collectors.toList());
     }
 
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/dump/WriteOnlyZipFileIOFactory.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/dump/WriteOnlyZipFileIOFactory.java
index 4842ab8cbf1..c98f77f07de 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/dump/WriteOnlyZipFileIOFactory.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/dump/WriteOnlyZipFileIOFactory.java
@@ -23,7 +23,7 @@ import java.nio.file.OpenOption;
 import 
org.apache.ignite.internal.processors.cache.persistence.file.FileIOFactory;
 import org.apache.ignite.internal.util.typedef.internal.A;
 
-import static 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager.ZIP_SUFFIX;
+import static 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree.ZIP_SUFFIX;
 
 /**
  * File I/O factory which provides {@link WriteOnlyZipFileIO} implementation 
of FileIO.
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/FileDescriptor.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/FileDescriptor.java
index 22cc7b0098f..e074fe29b05 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/FileDescriptor.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/FileDescriptor.java
@@ -21,8 +21,8 @@ import java.io.File;
 import java.io.IOException;
 import org.apache.ignite.internal.processors.cache.persistence.file.FileIO;
 import 
org.apache.ignite.internal.processors.cache.persistence.file.FileIOFactory;
-import 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager;
 import 
org.apache.ignite.internal.processors.cache.persistence.file.UnzipFileIO;
+import 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree;
 import 
org.apache.ignite.internal.processors.cache.persistence.wal.io.SegmentIO;
 import org.apache.ignite.internal.util.typedef.internal.U;
 import org.jetbrains.annotations.Nullable;
@@ -108,7 +108,7 @@ public class FileDescriptor implements 
Comparable<FileDescriptor>, AbstractWalRe
 
     /** {@inheritDoc} */
     @Override public boolean isCompressed() {
-        return file.getName().endsWith(FilePageStoreManager.ZIP_SUFFIX);
+        return file.getName().endsWith(NodeFileTree.ZIP_SUFFIX);
     }
 
     /** {@inheritDoc} */
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/FileWriteAheadLogManager.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/FileWriteAheadLogManager.java
index b2799c0c2ab..fe209878fa0 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/FileWriteAheadLogManager.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/FileWriteAheadLogManager.java
@@ -153,7 +153,7 @@ import static 
org.apache.ignite.failure.FailureType.CRITICAL_ERROR;
 import static org.apache.ignite.failure.FailureType.SYSTEM_WORKER_TERMINATION;
 import static 
org.apache.ignite.internal.pagemem.wal.record.WALRecord.RecordType.CDC_DATA_RECORD;
 import static 
org.apache.ignite.internal.pagemem.wal.record.WALRecord.RecordType.DATA_RECORD_V2;
-import static 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager.TMP_SUFFIX;
+import static 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree.TMP_SUFFIX;
 import static 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree.TMP_WAL_SEG_FILE_EXT;
 import static 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree.TMP_ZIP_WAL_SEG_FILE_EXT;
 import static 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree.WAL_SEGMENT_FILE_EXT;
diff --git 
a/modules/core/src/test/java/org/apache/ignite/cache/NodeWithFilterRestartTest.java
 
b/modules/core/src/test/java/org/apache/ignite/cache/NodeWithFilterRestartTest.java
index 9ff7fcd78ae..71e2487c672 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/cache/NodeWithFilterRestartTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/cache/NodeWithFilterRestartTest.java
@@ -203,8 +203,8 @@ public class NodeWithFilterRestartTest extends 
GridCommonAbstractTest {
 
         CacheConfiguration cacheCfg = createAndFillCache();
 
-        File cacheMetaPath1 = 
grid(filteredGridIdx).context().cache().configManager().cacheConfigurationFile(cacheCfg);
-        File cacheMetaPath2 = 
grid(nonBaselineIdx).context().cache().configManager().cacheConfigurationFile(cacheCfg);
+        File cacheMetaPath1 = 
grid(filteredGridIdx).context().pdsFolderResolver().fileTree().cacheConfigurationFile(cacheCfg);
+        File cacheMetaPath2 = 
grid(nonBaselineIdx).context().pdsFolderResolver().fileTree().cacheConfigurationFile(cacheCfg);
 
         assertTrue(cacheMetaPath1.exists() && cacheMetaPath1.isFile());
         assertTrue(cacheMetaPath2.exists() && cacheMetaPath2.isFile());
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/managers/communication/GridIoManagerFileTransmissionSelfTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/managers/communication/GridIoManagerFileTransmissionSelfTest.java
index 79d6dc63ccd..b5e522dce1f 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/managers/communication/GridIoManagerFileTransmissionSelfTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/managers/communication/GridIoManagerFileTransmissionSelfTest.java
@@ -71,7 +71,7 @@ import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.Test;
 
-import static 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager.FILE_SUFFIX;
+import static 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree.FILE_SUFFIX;
 import static org.apache.ignite.internal.util.IgniteUtils.fileCount;
 import static org.apache.ignite.testframework.GridTestUtils.setFieldValue;
 
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/WalModeChangeAdvancedSelfTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/WalModeChangeAdvancedSelfTest.java
index 4e683042bfb..d853a37f2dc 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/WalModeChangeAdvancedSelfTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/WalModeChangeAdvancedSelfTest.java
@@ -41,8 +41,8 @@ import org.junit.Test;
 import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL;
 import static org.apache.ignite.cache.CacheMode.PARTITIONED;
 import static org.apache.ignite.cluster.ClusterState.ACTIVE;
-import static 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager.CACHE_DATA_FILENAME;
 import static 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager.CORRUPTED_DATA_FILES_MNTC_TASK_NAME;
+import static 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree.CACHE_DATA_FILENAME;
 
 /**
  * Concurrent and advanced tests for WAL state change.
@@ -156,7 +156,7 @@ public class WalModeChangeAdvancedSelfTest extends 
WalModeChangeCommonAbstractSe
     public void testMaintenanceIsSkippedIfWasFixedManuallyOnDowntime() throws 
Exception {
         IgniteEx srv = startGrid(config(SRV_1, false, false));
 
-        File cacheToClean = cacheDir(srv, CACHE_NAME);
+        File cacheToClean = 
srv.context().pdsFolderResolver().fileTree().cacheStorage(false, CACHE_NAME);
 
         NodeFileTree ft0 = srv.context().pdsFolderResolver().fileTree();
 
@@ -218,9 +218,9 @@ public class WalModeChangeAdvancedSelfTest extends 
WalModeChangeCommonAbstractSe
      */
     @Test
     public void testCacheCleanup() throws Exception {
-        Ignite srv = startGrid(config(SRV_1, false, false));
+        IgniteEx srv = startGrid(config(SRV_1, false, false));
 
-        File cacheToClean = cacheDir(srv, CACHE_NAME_2);
+        File cacheToClean = 
srv.context().pdsFolderResolver().fileTree().cacheStorage(false, CACHE_NAME_2);
 
         srv.cluster().state(ACTIVE);
 
@@ -284,11 +284,6 @@ public class WalModeChangeAdvancedSelfTest extends 
WalModeChangeCommonAbstractSe
         assertEquals(0, cache2.size());
     }
 
-    /** */
-    private File cacheDir(Ignite ig, String cacheName) {
-        return new 
File(((IgniteEx)ig).context().pdsFolderResolver().fileTree().nodeStorage(), 
"cache-" + cacheName);
-    }
-
     /** */
     private void cleanCacheDir(File cacheDir) {
         for (File f : cacheDir.listFiles()) {
@@ -340,7 +335,7 @@ public class WalModeChangeAdvancedSelfTest extends 
WalModeChangeCommonAbstractSe
         // Start other nodes.
         IgniteEx ig2 = startGrid(config(SRV_2, false, false));
 
-        File ig2CacheDir = cacheDir(ig2, CACHE_NAME);
+        File ig2CacheDir = 
ig2.context().pdsFolderResolver().fileTree().cacheStorage(false, CACHE_NAME);
 
         if (crdFiltered)
             srv.cluster().disableWal(CACHE_NAME);
@@ -437,7 +432,7 @@ public class WalModeChangeAdvancedSelfTest extends 
WalModeChangeCommonAbstractSe
                         victimName = SRV_2;
 
                     try {
-                        File cacheDir = cacheDir(grid(victimName), CACHE_NAME);
+                        File cacheDir = 
grid(victimName).context().pdsFolderResolver().fileTree().cacheStorage(false, 
CACHE_NAME);
 
                         stopGrid(victimName);
 
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/IgnitePdsCacheConfigurationFileConsistencyCheckTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/IgnitePdsCacheConfigurationFileConsistencyCheckTest.java
index 230f8bf7a78..85fea51bcc8 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/IgnitePdsCacheConfigurationFileConsistencyCheckTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/IgnitePdsCacheConfigurationFileConsistencyCheckTest.java
@@ -44,8 +44,8 @@ import org.apache.ignite.testframework.GridTestUtils;
 import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
 import org.junit.Test;
 
-import static 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager.CACHE_DATA_FILENAME;
-import static 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager.CACHE_DATA_TMP_FILENAME;
+import static 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree.CACHE_DATA_FILENAME;
+import static 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree.CACHE_DATA_TMP_FILENAME;
 
 /**
  * Tests that ignite can start when caches' configurations with same name in 
different groups stored.
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/IgnitePdsCorruptedStoreTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/IgnitePdsCorruptedStoreTest.java
index 32aea80bf61..bbf96e11253 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/IgnitePdsCorruptedStoreTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/IgnitePdsCorruptedStoreTest.java
@@ -51,7 +51,6 @@ import 
org.apache.ignite.internal.processors.cache.IgniteInternalCache;
 import org.apache.ignite.internal.processors.cache.persistence.file.FileIO;
 import 
org.apache.ignite.internal.processors.cache.persistence.file.FileIODecorator;
 import 
org.apache.ignite.internal.processors.cache.persistence.file.FileIOFactory;
-import 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager;
 import 
org.apache.ignite.internal.processors.cache.persistence.file.RandomAccessFileIOFactory;
 import 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree;
 import 
org.apache.ignite.internal.processors.cache.persistence.metastorage.MetaStorage;
@@ -319,7 +318,7 @@ public class IgnitePdsCorruptedStoreTest extends 
GridCommonAbstractTest {
 
         File workDir = 
ignite0.context().pdsFolderResolver().fileTree().nodeStorage();
         File metaStoreDir = new File(workDir, 
MetaStorage.METASTORAGE_CACHE_NAME.toLowerCase());
-        File metaStoreFile = new File(metaStoreDir, 
String.format(FilePageStoreManager.PART_FILE_TEMPLATE, 0));
+        File metaStoreFile = new File(metaStoreDir, 
String.format(NodeFileTree.PART_FILE_TEMPLATE, 0));
 
         readOnlyFile.set(metaStoreFile);
 
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/IgnitePdsDefragmentationTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/IgnitePdsDefragmentationTest.java
index 4200a71ab09..16173f35b19 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/IgnitePdsDefragmentationTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/IgnitePdsDefragmentationTest.java
@@ -61,7 +61,6 @@ import 
org.apache.ignite.internal.processors.cache.CacheGroupContext;
 import 
org.apache.ignite.internal.processors.cache.persistence.defragmentation.DefragmentationFileUtils;
 import 
org.apache.ignite.internal.processors.cache.persistence.file.FileIOFactory;
 import 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStore;
-import 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager;
 import 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree;
 import org.apache.ignite.internal.util.lang.IgniteThrowableConsumer;
 import org.apache.ignite.internal.util.typedef.internal.U;
@@ -236,7 +235,7 @@ public class IgnitePdsDefragmentationTest extends 
GridCommonAbstractTest {
 
         long[] oldPartLen = partitionSizes(workDir);
 
-        long oldIdxFileLen = new File(workDir, 
FilePageStoreManager.INDEX_FILE_NAME).length();
+        long oldIdxFileLen = new File(workDir, 
NodeFileTree.INDEX_FILE_NAME).length();
 
         startGrid(0);
 
@@ -260,7 +259,7 @@ public class IgnitePdsDefragmentationTest extends 
GridCommonAbstractTest {
         for (int p = 0; p < PARTS; p++)
             assertTrue(newPartLen[p] < oldPartLen[p]);
 
-        long newIdxFileLen = new File(workDir, 
FilePageStoreManager.INDEX_FILE_NAME).length();
+        long newIdxFileLen = new File(workDir, 
NodeFileTree.INDEX_FILE_NAME).length();
 
         assertTrue(newIdxFileLen <= oldIdxFileLen);
 
@@ -348,7 +347,7 @@ public class IgnitePdsDefragmentationTest extends 
GridCommonAbstractTest {
      */
     protected long[] partitionSizes(File workDir) {
         return IntStream.range(0, PARTS)
-            .mapToObj(p -> new File(workDir, 
String.format(FilePageStoreManager.PART_FILE_TEMPLATE, p)))
+            .mapToObj(p -> new File(workDir, 
String.format(NodeFileTree.PART_FILE_TEMPLATE, p)))
             .mapToLong(File::length)
             .toArray();
     }
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/PagesPossibleCorruptionDiagnosticTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/PagesPossibleCorruptionDiagnosticTest.java
index 08554227c4f..169606e3950 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/PagesPossibleCorruptionDiagnosticTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/PagesPossibleCorruptionDiagnosticTest.java
@@ -50,7 +50,7 @@ import static 
org.apache.ignite.IgniteSystemProperties.IGNITE_PDS_SKIP_CRC;
 import static org.apache.ignite.internal.pagemem.PageIdAllocator.FLAG_DATA;
 import static org.apache.ignite.internal.pagemem.PageIdUtils.pageId;
 import static 
org.apache.ignite.internal.processors.cache.GridCacheUtils.cacheGroupId;
-import static 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager.PART_FILE_TEMPLATE;
+import static 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree.PART_FILE_TEMPLATE;
 import static 
org.apache.ignite.internal.processors.cache.persistence.tree.io.PagePartitionMetaIOV2.PART_META_REUSE_LIST_ROOT_OFF;
 
 /**
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/IgnitePdsCheckpointRecoveryTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/IgnitePdsCheckpointRecoveryTest.java
index f6f269cdd4b..a5af9249f3d 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/IgnitePdsCheckpointRecoveryTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/IgnitePdsCheckpointRecoveryTest.java
@@ -57,7 +57,7 @@ import org.junit.runners.Parameterized;
 
 import static 
org.apache.ignite.configuration.DataStorageConfiguration.DFLT_CP_RECOVERY_DATA_COMRESSION;
 import static 
org.apache.ignite.internal.processors.cache.persistence.checkpoint.CheckpointRecoveryFileStorage.FILE_NAME_PATTERN;
-import static 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager.PART_FILE_PREFIX;
+import static 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree.PART_FILE_PREFIX;
 
 /**
  * Class containing tests for applying checkpoint recovery data.
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/IgnitePdsDataRegionMetricsTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/IgnitePdsDataRegionMetricsTest.java
index f95681d9ef1..c065d42d6cf 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/IgnitePdsDataRegionMetricsTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/IgnitePdsDataRegionMetricsTest.java
@@ -57,7 +57,7 @@ import static 
org.apache.ignite.configuration.DataStorageConfiguration.DFLT_DATA
 import static org.apache.ignite.events.EventType.EVT_PAGE_REPLACEMENT_STARTED;
 import static 
org.apache.ignite.internal.processors.cache.GridCacheUtils.UTILITY_CACHE_NAME;
 import static 
org.apache.ignite.internal.processors.cache.persistence.DataRegionMetricsImpl.DATAREGION_METRICS_PREFIX;
-import static 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager.partId;
+import static 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree.partId;
 import static 
org.apache.ignite.internal.processors.cache.persistence.metastorage.MetaStorage.METASTORAGE_CACHE_ID;
 import static 
org.apache.ignite.internal.processors.cache.persistence.metastorage.MetaStorage.METASTORAGE_CACHE_NAME;
 import static 
org.apache.ignite.internal.processors.cache.persistence.metastorage.MetaStorage.METASTORAGE_DIR_NAME;
@@ -419,7 +419,7 @@ public class IgnitePdsDataRegionMetricsTest extends 
GridCommonAbstractTest {
                 File file = path.toFile();
 
                 FilePageStore store = 
(FilePageStore)pageStoreMgr.getStore(metaStore ?
-                    METASTORAGE_CACHE_ID : CU.cacheId(cacheName), 
partId(file.getName()));
+                    METASTORAGE_CACHE_ID : CU.cacheId(cacheName), 
partId(file));
 
                 int pageSize = store.getPageSize();
                 long storeSize = path.toFile().length() - store.headerSize();
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/checkpoint/CheckpointFreeListTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/checkpoint/CheckpointFreeListTest.java
index 084efc3ba1e..ad112e78dd1 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/checkpoint/CheckpointFreeListTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/checkpoint/CheckpointFreeListTest.java
@@ -56,6 +56,7 @@ import 
org.apache.ignite.internal.processors.cache.GridCacheAdapter;
 import 
org.apache.ignite.internal.processors.cache.persistence.GridCacheDatabaseSharedManager;
 import 
org.apache.ignite.internal.processors.cache.persistence.GridCacheOffheapManager;
 import 
org.apache.ignite.internal.processors.cache.persistence.checkpoint.CheckpointListener;
+import 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree;
 import 
org.apache.ignite.internal.processors.cache.persistence.freelist.PagesList;
 import org.apache.ignite.internal.util.typedef.T2;
 import org.apache.ignite.internal.util.typedef.internal.U;
@@ -69,7 +70,6 @@ import 
org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
 import org.junit.Test;
 
 import static java.util.Objects.requireNonNull;
-import static 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager.PART_FILE_PREFIX;
 import static org.apache.ignite.testframework.GridTestUtils.waitForCondition;
 
 /**
@@ -444,9 +444,7 @@ public class CheckpointFreeListTest extends 
GridCommonAbstractTest {
      * @return Total partitinos size.
      */
     private Optional<Long> totalPartitionsSize(Path cacheFolder) {
-        return Stream.of(
-            requireNonNull(cacheFolder.toFile().listFiles((dir, name) -> 
name.startsWith(PART_FILE_PREFIX)))
-        )
+        return 
Stream.of(requireNonNull(cacheFolder.toFile().listFiles(NodeFileTree::partitionFile)))
             .map(File::length)
             .reduce(Long::sum);
     }
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/file/IgnitePdsDiskErrorsRecoveringTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/file/IgnitePdsDiskErrorsRecoveringTest.java
index 9083455d831..e88eaa8d8b6 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/file/IgnitePdsDiskErrorsRecoveringTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/file/IgnitePdsDiskErrorsRecoveringTest.java
@@ -44,9 +44,9 @@ import 
org.apache.ignite.internal.IgniteInterruptedCheckedException;
 import org.apache.ignite.internal.processors.cache.persistence.file.FileIO;
 import 
org.apache.ignite.internal.processors.cache.persistence.file.FileIODecorator;
 import 
org.apache.ignite.internal.processors.cache.persistence.file.FileIOFactory;
-import 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager;
 import 
org.apache.ignite.internal.processors.cache.persistence.file.RandomAccessFileIO;
 import 
org.apache.ignite.internal.processors.cache.persistence.file.RandomAccessFileIOFactory;
+import 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree;
 import 
org.apache.ignite.internal.processors.cache.persistence.wal.FileWriteAheadLogManager;
 import org.apache.ignite.testframework.GridTestUtils;
 import org.apache.ignite.testframework.junits.WithSystemProperty;
@@ -174,7 +174,7 @@ public class IgnitePdsDiskErrorsRecoveringTest extends 
GridCommonAbstractTest {
     public void testRecoveringOnCheckpointBeginFail() throws Exception {
         // Fail to write checkpoint start marker tmp file at the second 
checkpoint. Pass only initial checkpoint.
         ioFactory = new FilteringFileIOFactory(
-            "START.bin" + FilePageStoreManager.TMP_SUFFIX,
+            "START.bin" + NodeFileTree.TMP_SUFFIX,
             new LimitedSizeFileIOFactory(new RandomAccessFileIOFactory(), 20)
         );
 
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/IgniteLocalWalSizeTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/IgniteLocalWalSizeTest.java
index 0dc086eb31e..d709326eca7 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/IgniteLocalWalSizeTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/IgniteLocalWalSizeTest.java
@@ -39,8 +39,8 @@ import org.jetbrains.annotations.Nullable;
 import org.junit.Test;
 
 import static 
org.apache.ignite.configuration.DataStorageConfiguration.UNLIMITED_WAL_ARCHIVE;
-import static 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager.ZIP_SUFFIX;
 import static 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree.WAL_SEGMENT_FILE_EXT;
+import static 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree.ZIP_SUFFIX;
 import static 
org.apache.ignite.internal.processors.cache.persistence.wal.FileWriteAheadLogManager.WAL_SEGMENT_COMPACTED_OR_RAW_FILE_FILTER;
 import static 
org.apache.ignite.internal.processors.cache.persistence.wal.FileWriteAheadLogManager.isSegmentFileName;
 import static org.apache.ignite.testframework.GridTestUtils.getFieldValue;
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/IgniteNodeStoppedDuringDisableWALTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/IgniteNodeStoppedDuringDisableWALTest.java
index 9f3bf0ba339..1bcf34207be 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/IgniteNodeStoppedDuringDisableWALTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/IgniteNodeStoppedDuringDisableWALTest.java
@@ -38,7 +38,7 @@ import org.apache.ignite.internal.pagemem.wal.WALIterator;
 import org.apache.ignite.internal.processors.cache.GridCacheSharedContext;
 import 
org.apache.ignite.internal.processors.cache.WalStateManager.WALDisableContext;
 import 
org.apache.ignite.internal.processors.cache.persistence.GridCacheDatabaseSharedManager;
-import 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager;
+import 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree;
 import 
org.apache.ignite.internal.processors.cache.persistence.filename.PdsFoldersResolver;
 import org.apache.ignite.testframework.GridTestUtils;
 import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
@@ -50,8 +50,7 @@ import org.junit.runners.Parameterized;
 import static java.nio.file.FileVisitResult.CONTINUE;
 import static java.nio.file.Files.walkFileTree;
 import static 
org.apache.ignite.internal.processors.cache.persistence.checkpoint.CheckpointMarkersStorage.CP_FILE_NAME_PATTERN;
-import static 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager.INDEX_FILE_NAME;
-import static 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager.PART_FILE_PREFIX;
+import static 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree.INDEX_FILE_NAME;
 import static 
org.apache.ignite.internal.processors.cache.persistence.metastorage.MetaStorage.METASTORAGE_DIR_NAME;
 import static 
org.apache.ignite.internal.processors.cache.persistence.wal.FileWriteAheadLogManager.WAL_NAME_PATTERN;
 import static 
org.apache.ignite.internal.processors.cache.persistence.wal.FileWriteAheadLogManager.WAL_TEMP_NAME_PATTERN;
@@ -227,13 +226,13 @@ public class IgniteNodeStoppedDuringDisableWALTest 
extends GridCommonAbstractTes
 
                     boolean failed = false;
 
-                    if (name.endsWith(FilePageStoreManager.TMP_SUFFIX))
+                    if (name.endsWith(NodeFileTree.TMP_SUFFIX))
                         failed = true;
 
                     if (CP_FILE_NAME_PATTERN.matcher(name).matches())
                         failed = true;
 
-                    if (name.startsWith(PART_FILE_PREFIX) && 
path.toFile().length() > pageSize)
+                    if (NodeFileTree.partitionFile(path.toFile()) && 
path.toFile().length() > pageSize)
                         failed = true;
 
                     if (name.startsWith(INDEX_FILE_NAME) && 
path.toFile().length() > pageSize)
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/AbstractSnapshotSelfTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/AbstractSnapshotSelfTest.java
index a4640d93112..60a2c8fa834 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/AbstractSnapshotSelfTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/AbstractSnapshotSelfTest.java
@@ -114,8 +114,7 @@ import static org.apache.ignite.cluster.ClusterState.ACTIVE;
 import static org.apache.ignite.cluster.ClusterState.INACTIVE;
 import static 
org.apache.ignite.configuration.DataStorageConfiguration.DFLT_PAGE_SIZE;
 import static org.apache.ignite.events.EventType.EVTS_CLUSTER_SNAPSHOT;
-import static 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager.FILE_SUFFIX;
-import static 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager.PART_FILE_PREFIX;
+import static 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree.FILE_SUFFIX;
 import static 
org.apache.ignite.internal.processors.cache.persistence.metastorage.MetaStorage.METASTORAGE_DIR_NAME;
 import static 
org.apache.ignite.internal.processors.cache.persistence.snapshot.IgniteSnapshotManager.CP_SNAPSHOT_REASON;
 import static 
org.apache.ignite.internal.processors.cache.persistence.snapshot.IgniteSnapshotManager.databaseRelativePath;
@@ -348,7 +347,7 @@ public abstract class AbstractSnapshotSelfTest extends 
GridCommonAbstractTest {
 
         try {
             try (DirectoryStream<Path> partFiles = 
newDirectoryStream(cacheDir.toPath(),
-                p -> p.toFile().getName().startsWith(PART_FILE_PREFIX) && 
p.toFile().getName().endsWith(FILE_SUFFIX))
+                p -> NodeFileTree.partitionFile(p.toFile()) && 
p.toFile().getName().endsWith(FILE_SUFFIX))
             ) {
                 for (Path path : partFiles)
                     result.put(path.toFile().getName(), 
FastCrc.calcCrc(path.toFile()));
@@ -645,13 +644,11 @@ public abstract class AbstractSnapshotSelfTest extends 
GridCommonAbstractTest {
                 Map<Integer, Integer> cacheParts = 
cachesParts.computeIfAbsent(name, k -> new HashMap<>());
 
                 File[] parts = cacheDir.listFiles(f ->
-                    f.getName().startsWith(PART_FILE_PREFIX)
+                    NodeFileTree.partitionFile(f)
                         && f.getName().endsWith(FILE_SUFFIX));
 
                 for (File partFile : parts) {
-                    int part = Integer.parseInt(partFile.getName()
-                        .substring(PART_FILE_PREFIX.length())
-                        .replace(FILE_SUFFIX, ""));
+                    int part = NodeFileTree.partId(partFile);
 
                     cacheParts.compute(part, (part0, cnt) -> (cnt == null ? 0 
: cnt) + 1);
                 }
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/IgniteClusterSnapshotCheckTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/IgniteClusterSnapshotCheckTest.java
index 09f20378f51..49fa45dd4fb 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/IgniteClusterSnapshotCheckTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/IgniteClusterSnapshotCheckTest.java
@@ -89,7 +89,7 @@ import org.junit.Test;
 import static org.apache.ignite.cluster.ClusterState.ACTIVE;
 import static 
org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion.NONE;
 import static 
org.apache.ignite.internal.processors.cache.GridCacheUtils.TTL_ETERNAL;
-import static 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager.getPartitionFileName;
+import static 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree.partitionFileName;
 import static 
org.apache.ignite.internal.processors.cache.persistence.partstate.GroupPartitionId.getTypeByPartId;
 import static 
org.apache.ignite.internal.processors.cache.persistence.snapshot.IgniteSnapshotManager.SNAPSHOT_METAFILE_EXT;
 import static 
org.apache.ignite.internal.processors.cache.persistence.snapshot.IgniteSnapshotManager.databaseRelativePath;
@@ -145,7 +145,7 @@ public class IgniteClusterSnapshotCheckTest extends 
AbstractSnapshotSelfTest {
         createAndCheckSnapshot(ignite, SNAPSHOT_NAME);
 
         Path part0 = 
U.searchFileRecursively(snp(ignite).snapshotLocalDir(SNAPSHOT_NAME).toPath(),
-            getPartitionFileName(0));
+            partitionFileName(0));
 
         assertNotNull(part0);
         assertTrue(part0.toString(), part0.toFile().exists());
@@ -241,7 +241,7 @@ public class IgniteClusterSnapshotCheckTest extends 
AbstractSnapshotSelfTest {
         createAndCheckSnapshot(ignite, SNAPSHOT_NAME);
 
         Path part0 = 
U.searchFileRecursively(snp(ignite).snapshotLocalDir(SNAPSHOT_NAME).toPath(),
-            getPartitionFileName(PART_ID));
+            partitionFileName(PART_ID));
 
         assertNotNull(part0);
         assertTrue(part0.toString(), part0.toFile().exists());
@@ -471,7 +471,7 @@ public class IgniteClusterSnapshotCheckTest extends 
AbstractSnapshotSelfTest {
         createAndCheckSnapshot(ignite, SNAPSHOT_NAME);
 
         Path part0 = 
U.searchFileRecursively(snp(ignite).snapshotLocalDir(SNAPSHOT_NAME).toPath(),
-            getPartitionFileName(PART_ID));
+            partitionFileName(PART_ID));
 
         assertNotNull(part0);
         assertTrue(part0.toString(), part0.toFile().exists());
@@ -685,7 +685,7 @@ public class IgniteClusterSnapshotCheckTest extends 
AbstractSnapshotSelfTest {
             
databaseRelativePath(ignite.context().pdsFolderResolver().resolveFolders().folderName()),
             
ignite.context().pdsFolderResolver().fileTree().cacheDirName(ccfg));
 
-        Path part0 = U.searchFileRecursively(cachePath, 
getPartitionFileName(partId));
+        Path part0 = U.searchFileRecursively(cachePath, 
partitionFileName(partId));
 
         int grpId = CU.cacheId(ccfg.getName());
 
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/IgniteClusterSnapshotRestoreSelfTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/IgniteClusterSnapshotRestoreSelfTest.java
index abb374e1818..bbd0bd00c43 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/IgniteClusterSnapshotRestoreSelfTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/IgniteClusterSnapshotRestoreSelfTest.java
@@ -74,9 +74,9 @@ import static org.apache.ignite.cluster.ClusterState.ACTIVE;
 import static 
org.apache.ignite.events.EventType.EVT_CLUSTER_SNAPSHOT_RESTORE_FAILED;
 import static 
org.apache.ignite.events.EventType.EVT_CLUSTER_SNAPSHOT_RESTORE_FINISHED;
 import static 
org.apache.ignite.events.EventType.EVT_CLUSTER_SNAPSHOT_RESTORE_STARTED;
-import static 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager.FILE_SUFFIX;
-import static 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager.PART_FILE_PREFIX;
-import static 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager.getPartitionFileName;
+import static 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree.FILE_SUFFIX;
+import static 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree.PART_FILE_PREFIX;
+import static 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree.partitionFileName;
 import static 
org.apache.ignite.internal.processors.cache.persistence.snapshot.SnapshotRestoreProcess.TMP_CACHE_DIR_PREFIX;
 import static 
org.apache.ignite.internal.util.distributed.DistributedProcess.DistributedProcessType.RESTORE_CACHE_GROUP_SNAPSHOT_PRELOAD;
 import static 
org.apache.ignite.internal.util.distributed.DistributedProcess.DistributedProcessType.RESTORE_CACHE_GROUP_SNAPSHOT_PREPARE;
@@ -180,7 +180,7 @@ public class IgniteClusterSnapshotRestoreSelfTest extends 
IgniteClusterSnapshotR
         IgniteEx ignite = startGridsWithSnapshot(2, CACHE_KEYS_RANGE);
 
         Path part0 = 
U.searchFileRecursively(snp(ignite).snapshotLocalDir(SNAPSHOT_NAME).toPath(),
-            getPartitionFileName(0));
+            partitionFileName(0));
 
         assertNotNull(part0);
         assertTrue(part0.toString(), part0.toFile().exists());
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/IgniteSnapshotRemoteRequestTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/IgniteSnapshotRemoteRequestTest.java
index fcde905bc8b..6f66cfadcca 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/IgniteSnapshotRemoteRequestTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/IgniteSnapshotRemoteRequestTest.java
@@ -55,7 +55,7 @@ import org.apache.ignite.testframework.GridTestUtils;
 import org.junit.Test;
 
 import static 
org.apache.ignite.configuration.IgniteConfiguration.DFLT_SNAPSHOT_THREAD_POOL_SIZE;
-import static 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager.partId;
+import static 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree.partId;
 import static 
org.apache.ignite.internal.processors.cache.persistence.snapshot.SnapshotRestoreProcess.groupIdFromTmpDir;
 import static 
org.apache.ignite.testframework.GridTestUtils.assertThrowsAnyCause;
 import static org.apache.ignite.testframework.GridTestUtils.waitForCondition;
@@ -177,7 +177,7 @@ public class IgniteSnapshotRemoteRequestTest extends 
IgniteClusterSnapshotRestor
             @Override public SnapshotSender apply(String s, UUID uuid) {
                 return new DelegateSnapshotSender(log, 
mgr1.snapshotExecutorService(), mgr1.remoteSnapshotSenderFactory(s, uuid)) {
                     @Override public void sendPart0(File part, String 
cacheDirName, GroupPartitionId pair, Long length) {
-                        if (partId(part.getName()) > 0) {
+                        if (partId(part) > 0) {
                             try {
                                 sndLatch.await(TIMEOUT, TimeUnit.MILLISECONDS);
                             }
@@ -247,7 +247,7 @@ public class IgniteSnapshotRemoteRequestTest extends 
IgniteClusterSnapshotRestor
 
                     assertTrue("Received cache group has not been requested", 
parts.containsKey(grpId));
                     assertTrue("Received partition has not been requested",
-                        parts.get(grpId).contains(partId(part.getName())));
+                        parts.get(grpId).contains(partId(part)));
 
                     try {
                         U.await(latch, TIMEOUT, TimeUnit.MILLISECONDS);
@@ -382,7 +382,7 @@ public class IgniteSnapshotRemoteRequestTest extends 
IgniteClusterSnapshotRestor
 
             assertTrue("Received cache group has not been requested", 
parts.containsKey(grpId));
             assertTrue("Received partition has not been requested",
-                parts.get(grpId).remove(partId(part.getName())));
+                parts.get(grpId).remove(partId(part)));
 
             if (latch != null)
                 latch.countDown();
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/IgniteSnapshotRestoreFromRemoteTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/IgniteSnapshotRestoreFromRemoteTest.java
index bc2f8913626..143f0e50db7 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/IgniteSnapshotRestoreFromRemoteTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/IgniteSnapshotRestoreFromRemoteTest.java
@@ -63,7 +63,7 @@ import org.junit.Test;
 import static org.apache.ignite.events.EventType.EVTS_CLUSTER_SNAPSHOT;
 import static 
org.apache.ignite.events.EventType.EVT_CLUSTER_SNAPSHOT_RESTORE_FINISHED;
 import static 
org.apache.ignite.events.EventType.EVT_CLUSTER_SNAPSHOT_RESTORE_STARTED;
-import static 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager.partId;
+import static 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree.partId;
 import static org.apache.ignite.testframework.GridTestUtils.assertContains;
 import static 
org.apache.ignite.testframework.GridTestUtils.assertThrowsWithCause;
 
@@ -306,7 +306,7 @@ public class IgniteSnapshotRestoreFromRemoteTest extends 
IgniteClusterSnapshotRe
             @Override public SnapshotSender apply(String s, UUID uuid) {
                 return new DelegateSnapshotSender(log, 
mgr.snapshotExecutorService(), mgr.remoteSnapshotSenderFactory(s, uuid)) {
                     @Override public void sendPart0(File part, String 
cacheDirName, GroupPartitionId pair, Long length) {
-                        if (partId(part.getName()) > 0)
+                        if (partId(part) > 0)
                             throw new IgniteException("Test exception. 
Uploading partition file failed: " + pair);
 
                         super.sendPart0(part, cacheDirName, pair, length);
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/IncrementalSnapshotTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/IncrementalSnapshotTest.java
index bed27b3b124..1f2eeee4502 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/IncrementalSnapshotTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/IncrementalSnapshotTest.java
@@ -309,7 +309,7 @@ public class IncrementalSnapshotTest extends 
AbstractSnapshotSelfTest {
 
         GridLocalConfigManager locCfgMgr = 
srv.context().cache().configManager();
 
-        File ccfgFile = locCfgMgr.cacheConfigurationFile(ccfg);
+        File ccfgFile = 
srv.context().pdsFolderResolver().fileTree().cacheConfigurationFile(ccfg);
 
         StoredCacheData cacheData = locCfgMgr.readCacheData(ccfgFile);
 
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/dump/IgniteCacheDumpSelf2Test.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/dump/IgniteCacheDumpSelf2Test.java
index b90aa7ee89e..571b69a1173 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/dump/IgniteCacheDumpSelf2Test.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/dump/IgniteCacheDumpSelf2Test.java
@@ -114,9 +114,9 @@ import static 
org.apache.ignite.events.EventType.EVTS_CLUSTER_SNAPSHOT;
 import static org.apache.ignite.events.EventType.EVT_CLUSTER_SNAPSHOT_FAILED;
 import static org.apache.ignite.events.EventType.EVT_CLUSTER_SNAPSHOT_STARTED;
 import static 
org.apache.ignite.internal.encryption.AbstractEncryptionTest.MASTER_KEY_NAME_2;
-import static 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager.CACHE_DATA_FILENAME;
-import static 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager.PART_FILE_PREFIX;
-import static 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager.ZIP_SUFFIX;
+import static 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree.CACHE_DATA_FILENAME;
+import static 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree.PART_FILE_PREFIX;
+import static 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree.ZIP_SUFFIX;
 import static 
org.apache.ignite.internal.processors.cache.persistence.filename.PdsFolderResolver.DB_DEFAULT_FOLDER;
 import static 
org.apache.ignite.internal.processors.cache.persistence.snapshot.AbstractSnapshotSelfTest.doSnapshotCancellationTest;
 import static 
org.apache.ignite.internal.processors.cache.persistence.snapshot.IgniteSnapshotManager.DUMP_LOCK;
@@ -734,7 +734,7 @@ public class IgniteCacheDumpSelf2Test extends 
GridCommonAbstractTest {
         Map<Integer, Long> rawSizes = Arrays
             .stream(new File(dumpDirectory(ign, rawDump) + "/db/" + id + 
"/cache-" + CACHE_0).listFiles())
             .filter(f -> !f.getName().equals("cache_data.dat"))
-            .peek(f -> assertTrue(f.getName().startsWith(PART_FILE_PREFIX) && 
f.getName().endsWith(DUMP_FILE_EXT)))
+            .peek(f -> assertTrue(NodeFileTree.partitionFile(f) && 
f.getName().endsWith(DUMP_FILE_EXT)))
             .collect(Collectors.toMap(
                 f -> 
Integer.parseInt(f.getName().substring(PART_FILE_PREFIX.length(), 
f.getName().length() - DUMP_FILE_EXT.length())),
                 File::length
@@ -743,7 +743,7 @@ public class IgniteCacheDumpSelf2Test extends 
GridCommonAbstractTest {
         Map<Integer, Long> zipSizes = Arrays
             .stream(new File(dumpDirectory(ign, zipDump) + "/db/" + id + 
"/cache-" + CACHE_0).listFiles())
             .filter(f -> !f.getName().equals("cache_data.dat"))
-            .peek(f -> assertTrue(f.getName().startsWith(PART_FILE_PREFIX) && 
f.getName().endsWith(DUMP_FILE_EXT + ZIP_SUFFIX)))
+            .peek(f -> assertTrue(NodeFileTree.partitionFile(f) && 
f.getName().endsWith(DUMP_FILE_EXT + ZIP_SUFFIX)))
             .collect(Collectors.toMap(
                 f -> 
Integer.parseInt(f.getName().substring(PART_FILE_PREFIX.length(),
                     f.getName().length() - (DUMP_FILE_EXT + 
ZIP_SUFFIX).length())
@@ -767,8 +767,11 @@ public class IgniteCacheDumpSelf2Test extends 
GridCommonAbstractTest {
             try {
                 String entryName = PART_FILE_PREFIX + i + DUMP_FILE_EXT;
 
-                File rawFile = new File(dumpDirectory(ign, rawDump) + "/db/" + 
id + "/cache-" + CACHE_0 + "/" + entryName);
-                File zipFile = new File(dumpDirectory(ign, zipDump) + "/db/" + 
id + "/cache-" + CACHE_0 + "/" + entryName + ZIP_SUFFIX);
+                NodeFileTree rawFt = new NodeFileTree(dumpDirectory(ign, 
rawDump), id);
+                NodeFileTree zipFt = new NodeFileTree(dumpDirectory(ign, 
zipDump), id);
+
+                File rawFile = new File(rawFt.cacheStorage(false, CACHE_0), 
entryName);
+                File zipFile = new File(zipFt.cacheStorage(false, CACHE_0), 
entryName + ZIP_SUFFIX);
 
                 byte[] rawFileContent = Files.readAllBytes(rawFile.toPath());
 
diff --git 
a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/persistence/IgnitePdsIndexingDefragmentationTest.java
 
b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/persistence/IgnitePdsIndexingDefragmentationTest.java
index 0eccdb63963..81332ba0cdf 100644
--- 
a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/persistence/IgnitePdsIndexingDefragmentationTest.java
+++ 
b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/persistence/IgnitePdsIndexingDefragmentationTest.java
@@ -41,7 +41,6 @@ import 
org.apache.ignite.internal.processors.cache.CacheGroupContext;
 import org.apache.ignite.internal.processors.cache.GridCacheContext;
 import 
org.apache.ignite.internal.processors.cache.IgniteCacheUpdateSqlQuerySelfTest;
 import 
org.apache.ignite.internal.processors.cache.persistence.defragmentation.DefragmentationFileUtils;
-import 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager;
 import 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree;
 import 
org.apache.ignite.internal.processors.query.schema.IndexRebuildCancelToken;
 import org.apache.ignite.internal.util.typedef.internal.CU;
@@ -49,6 +48,7 @@ import org.jetbrains.annotations.Nullable;
 import org.junit.Test;
 
 import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL;
+import static 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree.INDEX_FILE_NAME;
 
 /**
  * Defragmentation tests with enabled ignite-indexing.
@@ -129,13 +129,13 @@ public class IgnitePdsIndexingDefragmentationTest extends 
IgnitePdsDefragmentati
 
         File cacheStorage = ft.cacheStorage(true, GRP_NAME);
 
-        long oldIdxFileLen = new File(cacheStorage, 
FilePageStoreManager.INDEX_FILE_NAME).length();
+        long oldIdxFileLen = new File(cacheStorage, INDEX_FILE_NAME).length();
 
         startGrid(0);
 
         waitForDefragmentation(0);
 
-        long newIdxFileLen = new File(cacheStorage, 
FilePageStoreManager.INDEX_FILE_NAME).length();
+        long newIdxFileLen = new File(cacheStorage, INDEX_FILE_NAME).length();
 
         assertTrue(
             "newIdxFileLen=" + newIdxFileLen + ", oldIdxFileLen=" + 
oldIdxFileLen,
diff --git 
a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/IgniteWalRecoveryTest.java
 
b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/IgniteWalRecoveryTest.java
index 3922635c984..110eb532564 100644
--- 
a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/IgniteWalRecoveryTest.java
+++ 
b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/IgniteWalRecoveryTest.java
@@ -18,7 +18,6 @@
 package org.apache.ignite.internal.processors.cache.persistence.db.wal;
 
 import java.io.File;
-import java.io.FilenameFilter;
 import java.io.IOException;
 import java.nio.ByteBuffer;
 import java.nio.ByteOrder;
@@ -134,7 +133,6 @@ import static 
org.apache.ignite.IgniteSystemProperties.IGNITE_DISABLE_WAL_DURING
 import static 
org.apache.ignite.configuration.DataStorageConfiguration.DFLT_CHECKPOINT_FREQ;
 import static 
org.apache.ignite.internal.IgniteNodeAttributes.ATTR_IGNITE_INSTANCE_NAME;
 import static 
org.apache.ignite.internal.processors.cache.persistence.CheckpointState.FINISHED;
-import static 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager.CACHE_DATA_FILENAME;
 
 /**
  *
@@ -584,11 +582,7 @@ public class IgniteWalRecoveryTest extends 
GridCommonAbstractTest {
         stopAllGrids();
 
         // Delete cache_data.bin file for this cache. Binary recovery should 
complete successfully after it.
-        final File[] files = destroyCacheWorkDir.listFiles(new 
FilenameFilter() {
-            @Override public boolean accept(final File dir, final String name) 
{
-                return name.endsWith(CACHE_DATA_FILENAME);
-            }
-        });
+        final File[] files = 
destroyCacheWorkDir.listFiles(NodeFileTree::cacheOrCacheGroupConfigFile);
 
         assertTrue(files.length > 0);
 
diff --git 
a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/IgniteClusterSnapshotMetricsTest.java
 
b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/IgniteClusterSnapshotMetricsTest.java
index 41d45e07a8e..709d9c6c1cd 100644
--- 
a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/IgniteClusterSnapshotMetricsTest.java
+++ 
b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/IgniteClusterSnapshotMetricsTest.java
@@ -58,8 +58,8 @@ import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 
-import static 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager.FILE_SUFFIX;
-import static 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager.PART_FILE_PREFIX;
+import static 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree.FILE_SUFFIX;
+import static 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree.PART_FILE_PREFIX;
 import static 
org.apache.ignite.internal.processors.cache.persistence.snapshot.IgniteSnapshotManager.SNAPSHOT_METRICS;
 import static 
org.apache.ignite.internal.processors.cache.persistence.snapshot.IgniteSnapshotManager.SNAPSHOT_TRANSFER_RATE_DMS_KEY;
 import static 
org.apache.ignite.internal.processors.cache.persistence.snapshot.SnapshotRestoreProcess.SNAPSHOT_RESTORE_METRICS;
diff --git 
a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/database/RebuildIndexTest.java
 
b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/database/RebuildIndexTest.java
index a6f2aeecd84..9dee2364b6e 100644
--- 
a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/database/RebuildIndexTest.java
+++ 
b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/database/RebuildIndexTest.java
@@ -17,13 +17,13 @@
 
 package org.apache.ignite.internal.processors.database;
 
+import java.io.File;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.LinkedHashMap;
 import java.util.regex.Pattern;
 import org.apache.ignite.IgniteCache;
-import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.cache.CacheAtomicityMode;
 import org.apache.ignite.cache.QueryEntity;
 import org.apache.ignite.cache.QueryIndex;
@@ -47,7 +47,7 @@ import org.junit.Test;
 import static 
org.apache.ignite.IgniteSystemProperties.IGNITE_ENABLE_EXTRA_INDEX_REBUILD_LOGGING;
 import static org.apache.ignite.cache.CacheMode.REPLICATED;
 import static org.apache.ignite.cache.CacheWriteSynchronizationMode.FULL_SYNC;
-import static 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager.INDEX_FILE_NAME;
+import static 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree.INDEX_FILE_NAME;
 
 /**
  *
@@ -176,7 +176,9 @@ public class RebuildIndexTest extends 
GridCommonAbstractTest {
 
         stopGrid(0);
 
-        removeIndexBin(0);
+        U.delete(
+            new 
File(nodeFileTree(U.maskForFileName(getTestIgniteInstanceName(0))).cacheStorage(false,
 CACHE_NAME), INDEX_FILE_NAME)
+        );
 
         node = startGrid(0);
 
@@ -196,17 +198,6 @@ public class RebuildIndexTest extends 
GridCommonAbstractTest {
         assertEquals(msgFound, idxRebuildLsnr.check());
     }
 
-    /** */
-    private void removeIndexBin(int nodeId) throws IgniteCheckedException {
-        U.delete(
-            U.resolveWorkDirectory(
-                U.defaultWorkDirectory(),
-                "db/" + U.maskForFileName(getTestIgniteInstanceName(nodeId)) + 
"/cache-" + CACHE_NAME + "/" + INDEX_FILE_NAME,
-                false
-            )
-        );
-    }
-
     /**
      * User key.
      */
diff --git 
a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/database/RebuildIndexWithHistoricalRebalanceTest.java
 
b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/database/RebuildIndexWithHistoricalRebalanceTest.java
index cc5a54b338e..26fe57bfed8 100644
--- 
a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/database/RebuildIndexWithHistoricalRebalanceTest.java
+++ 
b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/database/RebuildIndexWithHistoricalRebalanceTest.java
@@ -17,6 +17,7 @@
 
 package org.apache.ignite.internal.processors.database;
 
+import java.io.File;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashSet;
@@ -24,7 +25,6 @@ import java.util.LinkedHashMap;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.atomic.AtomicReference;
 import org.apache.ignite.IgniteCache;
-import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.IgniteException;
 import org.apache.ignite.cache.CacheAtomicityMode;
 import org.apache.ignite.cache.QueryEntity;
@@ -60,7 +60,7 @@ import org.junit.Test;
 import static 
org.apache.ignite.IgniteSystemProperties.IGNITE_PDS_WAL_REBALANCE_THRESHOLD;
 import static org.apache.ignite.cache.CacheMode.REPLICATED;
 import static org.apache.ignite.cache.CacheWriteSynchronizationMode.FULL_SYNC;
-import static 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager.INDEX_FILE_NAME;
+import static 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree.INDEX_FILE_NAME;
 
 /**
  * Rebuild index after index.bin remove, when partition is moving.
@@ -218,7 +218,9 @@ public class RebuildIndexWithHistoricalRebalanceTest 
extends GridCommonAbstractT
 
         SUPPLY_MESSAGE_LATCH.set(new CountDownLatch(1));
 
-        removeIndexBin(1);
+        U.delete(
+            new 
File(nodeFileTree(U.maskForFileName(getTestIgniteInstanceName(1))).cacheStorage(false,
 CACHE_NAME), INDEX_FILE_NAME)
+        );
 
         LogListener rebuildLsnr = finishIndexRebuildLsnr(CACHE_NAME);
 
@@ -247,17 +249,6 @@ public class RebuildIndexWithHistoricalRebalanceTest 
extends GridCommonAbstractT
         return lsnr;
     }
 
-    /** */
-    private void removeIndexBin(int nodeId) throws IgniteCheckedException {
-        U.delete(
-            U.resolveWorkDirectory(
-                U.defaultWorkDirectory(),
-                "db/" + U.maskForFileName(getTestIgniteInstanceName(nodeId)) + 
"/cache-" + CACHE_NAME + "/" + INDEX_FILE_NAME,
-                false
-            )
-        );
-    }
-
     /** */
     private static class RebalanceBlockingSPI extends TcpCommunicationSpi {
         /** {@inheritDoc} */
diff --git 
a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/database/WalDisabledDuringIndexRecreateTest.java
 
b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/database/WalDisabledDuringIndexRecreateTest.java
index c81b3a262e0..5064b6e1d1e 100644
--- 
a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/database/WalDisabledDuringIndexRecreateTest.java
+++ 
b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/database/WalDisabledDuringIndexRecreateTest.java
@@ -65,7 +65,7 @@ import static 
org.apache.ignite.configuration.DataStorageConfiguration.UNLIMITED
 import static 
org.apache.ignite.internal.pagemem.PageIdAllocator.INDEX_PARTITION;
 import static 
org.apache.ignite.internal.processors.cache.GridCacheUtils.cacheGroupId;
 import static 
org.apache.ignite.internal.processors.cache.GridCacheUtils.cacheId;
-import static 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager.INDEX_FILE_NAME;
+import static 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree.INDEX_FILE_NAME;
 import static 
org.apache.ignite.internal.processors.query.schema.management.SortedIndexDescriptorFactory.H2_TREE;
 
 /** */
diff --git 
a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/GridIndexRebuildSelfTest.java
 
b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/GridIndexRebuildSelfTest.java
index 342e6f99d07..adef89003b0 100644
--- 
a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/GridIndexRebuildSelfTest.java
+++ 
b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/GridIndexRebuildSelfTest.java
@@ -47,7 +47,7 @@ import org.junit.Test;
 
 import static java.util.Objects.nonNull;
 import static java.util.Objects.requireNonNull;
-import static 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager.INDEX_FILE_NAME;
+import static 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree.INDEX_FILE_NAME;
 import static 
org.apache.ignite.internal.processors.query.QueryUtils.DFLT_SCHEMA;
 import static org.apache.ignite.internal.util.IgniteUtils.delete;
 

Reply via email to