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 29f24fc6f16 IGNITE-24425 WAL files move to NodeFileTree (#11865)
29f24fc6f16 is described below

commit 29f24fc6f16a9260fb6f7098b3e5972d5ce5ab12
Author: Nikolay <[email protected]>
AuthorDate: Wed Feb 12 14:59:50 2025 +0300

    IGNITE-24425 WAL files move to NodeFileTree (#11865)
---
 ...gratingToWalV2SerializerWithCompactionTest.java |   8 +-
 .../org/apache/ignite/util/CdcCommandTest.java     |   7 +-
 .../org/apache/ignite/internal/cdc/CdcMain.java    |  12 +--
 .../management/cdc/CdcDeleteLostSegmentsTask.java  |  16 +--
 .../ignite/internal/management/wal/WalTask.java    |  34 ++----
 .../pagemem/wal/IgniteWriteAheadLogManager.java    |   7 --
 .../cache/persistence/filename/NodeFileTree.java   |  85 +++++++++++++--
 .../snapshot/IncrementalSnapshotFutureTask.java    |   2 +-
 .../snapshot/IncrementalSnapshotProcessor.java     |   6 +-
 .../cache/persistence/wal/FileDescriptor.java      |  14 +--
 .../persistence/wal/FileWriteAheadLogManager.java  | 120 ++++++++-------------
 .../cache/persistence/wal/SegmentRouter.java       |   9 +-
 .../wal/SingleSegmentLogicalRecordsIterator.java   |  15 ++-
 .../ignite/cdc/CdcIgniteNodeActiveModeTest.java    |   8 +-
 .../java/org/apache/ignite/cdc/WalForCdcTest.java  |  17 +--
 .../encryption/CacheGroupKeyChangeTest.java        |  10 +-
 .../wal/record/WALRecordSerializationTest.java     |   9 +-
 .../IgniteDataStorageMetricsSelfTest.java          |   4 +-
 .../persistence/IgnitePdsCorruptedStoreTest.java   |   3 +-
 .../WALPreloadingWithCompactionTest.java           |   5 +-
 .../db/file/IgnitePdsDiskErrorsRecoveringTest.java |   8 +-
 .../persistence/db/wal/IgniteLocalWalSizeTest.java |  19 ++--
 ...eWalFlushMultiNodeFailoverAbstractSelfTest.java |   5 +-
 .../db/wal/IgniteWalIteratorSwitchSegmentTest.java |  10 +-
 .../persistence/db/wal/IgniteWalRebalanceTest.java |   3 +-
 .../db/wal/WalCompactionSwitchOnTest.java          |  37 ++-----
 .../persistence/db/wal/WalCompactionTest.java      |  29 ++---
 .../cache/persistence/pagemem/NoOpWALManager.java  |   6 --
 .../snapshot/IncrementalSnapshotTest.java          |   2 +-
 .../IncrementalSnapshotRestoreTest.java            |   5 +-
 .../development/utils/IgniteWalConverterTest.java  |   4 +-
 31 files changed, 250 insertions(+), 269 deletions(-)

diff --git 
a/modules/compatibility/src/test/java/org/apache/ignite/compatibility/persistence/MigratingToWalV2SerializerWithCompactionTest.java
 
b/modules/compatibility/src/test/java/org/apache/ignite/compatibility/persistence/MigratingToWalV2SerializerWithCompactionTest.java
index e505e58679e..6fb69a4982a 100644
--- 
a/modules/compatibility/src/test/java/org/apache/ignite/compatibility/persistence/MigratingToWalV2SerializerWithCompactionTest.java
+++ 
b/modules/compatibility/src/test/java/org/apache/ignite/compatibility/persistence/MigratingToWalV2SerializerWithCompactionTest.java
@@ -37,6 +37,8 @@ import org.apache.ignite.lang.IgniteInClosure;
 import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;
 import org.junit.Test;
 
+import static 
org.apache.ignite.internal.processors.cache.persistence.wal.FileWriteAheadLogManager.WAL_SEGMENT_FILE_COMPACTED_FILTER;
+
 /**
  * Saves data using previous version of ignite and then load this data using 
actual version
  */
@@ -124,11 +126,7 @@ public class MigratingToWalV2SerializerWithCompactionTest 
extends IgnitePersiste
 
             NodeFileTree ft = ignite.context().pdsFolderResolver().fileTree();
 
-            File[] compressedSegments = ft.walArchive().listFiles(new 
FilenameFilter() {
-                @Override public boolean accept(File dir, String name) {
-                    return name.endsWith(".wal.zip");
-                }
-            });
+            File[] compressedSegments = 
ft.walArchive().listFiles(WAL_SEGMENT_FILE_COMPACTED_FILTER);
 
             final int actualCompressedWalSegments = compressedSegments == null 
? 0 : compressedSegments.length;
 
diff --git 
a/modules/control-utility/src/test/java/org/apache/ignite/util/CdcCommandTest.java
 
b/modules/control-utility/src/test/java/org/apache/ignite/util/CdcCommandTest.java
index 2b3f8f5a0e6..00dd86dff5e 100644
--- 
a/modules/control-utility/src/test/java/org/apache/ignite/util/CdcCommandTest.java
+++ 
b/modules/control-utility/src/test/java/org/apache/ignite/util/CdcCommandTest.java
@@ -43,6 +43,7 @@ import 
org.apache.ignite.internal.pagemem.wal.IgniteWriteAheadLogManager;
 import org.apache.ignite.internal.pagemem.wal.record.CdcDataRecord;
 import org.apache.ignite.internal.pagemem.wal.record.WALRecord;
 import 
org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionSupplyMessage;
+import 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree;
 import 
org.apache.ignite.internal.processors.cache.persistence.wal.FileWriteAheadLogManager;
 import org.apache.ignite.internal.processors.cache.persistence.wal.WALPointer;
 import 
org.apache.ignite.internal.processors.configuration.distributed.DistributedChangeableProperty;
@@ -250,10 +251,12 @@ public class CdcCommandTest extends 
GridCommandHandlerAbstractTest {
 
     /** */
     private void checkLinks(IgniteEx srv, List<Long> expLinks) {
-        File[] links = 
srv.context().pdsFolderResolver().fileTree().walCdc().listFiles(WAL_SEGMENT_FILE_FILTER);
+        NodeFileTree ft = srv.context().pdsFolderResolver().fileTree();
+
+        File[] links = ft.walCdc().listFiles(WAL_SEGMENT_FILE_FILTER);
 
         assertEquals(expLinks.size(), links.length);
-        
Arrays.stream(links).map(File::toPath).map(FileWriteAheadLogManager::segmentIndex)
+        Arrays.stream(links).map(File::toPath).map(ft::walSegmentIndex)
             .allMatch(expLinks::contains);
     }
 
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/cdc/CdcMain.java 
b/modules/core/src/main/java/org/apache/ignite/internal/cdc/CdcMain.java
index d6c31b42538..c2d572ca7c8 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/cdc/CdcMain.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/cdc/CdcMain.java
@@ -56,7 +56,6 @@ import 
org.apache.ignite.internal.processors.cache.GridLocalConfigManager;
 import 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree;
 import 
org.apache.ignite.internal.processors.cache.persistence.filename.PdsFolderResolver;
 import 
org.apache.ignite.internal.processors.cache.persistence.filename.PdsFolderSettings;
-import 
org.apache.ignite.internal.processors.cache.persistence.wal.FileWriteAheadLogManager;
 import org.apache.ignite.internal.processors.cache.persistence.wal.WALPointer;
 import 
org.apache.ignite.internal.processors.cache.persistence.wal.reader.IgniteWalIteratorFactory;
 import 
org.apache.ignite.internal.processors.cache.persistence.wal.reader.StandaloneGridKernalContext;
@@ -88,7 +87,6 @@ import static 
org.apache.ignite.internal.pagemem.wal.record.WALRecord.RecordType
 import static 
org.apache.ignite.internal.pagemem.wal.record.WALRecord.RecordType.CDC_MANAGER_STOP_RECORD;
 import static 
org.apache.ignite.internal.pagemem.wal.record.WALRecord.RecordType.DATA_RECORD_V2;
 import static 
org.apache.ignite.internal.processors.cache.persistence.wal.FileWriteAheadLogManager.WAL_SEGMENT_FILE_FILTER;
-import static 
org.apache.ignite.internal.processors.cache.persistence.wal.FileWriteAheadLogManager.segmentIndex;
 import static 
org.apache.ignite.internal.processors.cache.persistence.wal.reader.StandaloneGridKernalContext.closeAllComponents;
 import static 
org.apache.ignite.internal.processors.cache.persistence.wal.reader.StandaloneGridKernalContext.startAllComponents;
 import static 
org.apache.ignite.internal.processors.metric.impl.MetricUtils.metricName;
@@ -489,9 +487,9 @@ public class CdcMain implements Runnable {
                         // Need unseen WAL segments only.
                         .filter(p -> 
WAL_SEGMENT_FILE_FILTER.accept(p.toFile()) && !seen.contains(p))
                         .peek(seen::add) // Adds to seen.
-                        
.sorted(Comparator.comparingLong(FileWriteAheadLogManager::segmentIndex)) // 
Sort by segment index.
+                        .sorted(Comparator.comparingLong(ft::walSegmentIndex)) 
// Sort by segment index.
                         .peek(p -> {
-                            long nextSgmnt = segmentIndex(p);
+                            long nextSgmnt = ft.walSegmentIndex(p);
 
                             if (lastSgmnt.get() != -1 && nextSgmnt - 
lastSgmnt.get() != 1) {
                                 throw new IgniteException("Found missed 
segments. Some events are missed. Exiting! " +
@@ -561,7 +559,7 @@ public class CdcMain implements Runnable {
         if (walState != null)
             builder.from(walState.get1());
 
-        long segmentIdx = segmentIndex(segment);
+        long segmentIdx = ft.walSegmentIndex(segment);
 
         lastSegmentConsumptionTs.value(System.currentTimeMillis());
 
@@ -807,7 +805,7 @@ public class CdcMain implements Runnable {
      * @return {@code True} if segment file was deleted, {@code false} 
otherwise.
      */
     private boolean removeProcessedOnFailover(Path segment) {
-        long segmentIdx = segmentIndex(segment);
+        long segmentIdx = ft.walSegmentIndex(segment);
 
         if (segmentIdx > walState.get1().index()) {
             throw new IgniteException("Found segment greater then saved state. 
Some events are missed. Exiting! " +
@@ -854,7 +852,7 @@ public class CdcMain implements Runnable {
             Path processedSegment = rmvIter.next();
 
             // Can't delete current segment, because state points to it.
-            if (segmentIndex(processedSegment) >= curState.get1().index())
+            if (ft.walSegmentIndex(processedSegment) >= 
curState.get1().index())
                 continue;
 
             // WAL segment is a hard link to a segment file in a specifal 
Change Data Capture folder.
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/management/cdc/CdcDeleteLostSegmentsTask.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/management/cdc/CdcDeleteLostSegmentsTask.java
index d5d9a631ffa..b30302885e3 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/management/cdc/CdcDeleteLostSegmentsTask.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/management/cdc/CdcDeleteLostSegmentsTask.java
@@ -32,7 +32,7 @@ import org.apache.ignite.IgniteException;
 import org.apache.ignite.IgniteLogger;
 import org.apache.ignite.compute.ComputeJobResult;
 import org.apache.ignite.internal.cdc.CdcFileLockHolder;
-import 
org.apache.ignite.internal.processors.cache.persistence.wal.FileWriteAheadLogManager;
+import 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree;
 import org.apache.ignite.internal.processors.task.GridInternal;
 import org.apache.ignite.internal.util.typedef.internal.CU;
 import org.apache.ignite.internal.util.typedef.internal.U;
@@ -94,24 +94,24 @@ public class CdcDeleteLostSegmentsTask extends 
VisorMultiNodeTask<CdcDeleteLostS
             if (!CU.isCdcEnabled(ignite.configuration()))
                 throw new IgniteException("CDC is not configured.");
 
-            File walCdcDir = 
ignite.context().pdsFolderResolver().fileTree().walCdc();
+            NodeFileTree ft = ignite.context().pdsFolderResolver().fileTree();
 
-            CdcFileLockHolder lock = new 
CdcFileLockHolder(walCdcDir.getAbsolutePath(), "Delete lost segments job", log);
+            CdcFileLockHolder lock = new 
CdcFileLockHolder(ft.walCdc().getAbsolutePath(), "Delete lost segments job", 
log);
 
             try {
                 lock.tryLock(1);
 
-                try (Stream<Path> cdcFiles = Files.list(walCdcDir.toPath())) {
+                try (Stream<Path> cdcFiles = Files.list(ft.walCdc().toPath())) 
{
                     Set<File> delete = new HashSet<>();
 
                     AtomicLong lastSgmnt = new AtomicLong(-1);
 
                     cdcFiles
                         .filter(p -> 
WAL_SEGMENT_FILE_FILTER.accept(p.toFile()))
-                        
.sorted(Comparator.comparingLong(FileWriteAheadLogManager::segmentIndex)
+                        .sorted(Comparator.comparingLong(ft::walSegmentIndex)
                             .reversed()) // Sort by segment index.
                         .forEach(path -> {
-                            long idx = 
FileWriteAheadLogManager.segmentIndex(path);
+                            long idx = ft.walSegmentIndex(path);
 
                             if (lastSgmnt.get() == -1 || lastSgmnt.get() - idx 
== 1) {
                                 lastSgmnt.set(idx);
@@ -139,7 +139,7 @@ public class CdcDeleteLostSegmentsTask extends 
VisorMultiNodeTask<CdcDeleteLostS
                         log.info("Segment CDC link deleted [file=" + 
file.getAbsolutePath() + ']');
                     });
 
-                    Path stateDir = walCdcDir.toPath().resolve(STATE_DIR);
+                    Path stateDir = ft.walCdc().toPath().resolve(STATE_DIR);
 
                     if (stateDir.toFile().exists()) {
                         File walState = 
stateDir.resolve(WAL_STATE_FILE_NAME).toFile();
@@ -157,7 +157,7 @@ public class CdcDeleteLostSegmentsTask extends 
VisorMultiNodeTask<CdcDeleteLostS
             catch (IgniteCheckedException e) {
                 throw new RuntimeException("Failed to delete lost segment CDC 
links. " +
                     "Unable to acquire lock to lock CDC folder. Make sure a 
CDC app is shut down " +
-                    "[dir=" + walCdcDir.getAbsolutePath() + ", reason=" + 
e.getMessage() + ']');
+                    "[dir=" + ft.walCdc().getAbsolutePath() + ", reason=" + 
e.getMessage() + ']');
             }
             finally {
                 U.closeQuiet(lock);
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/management/wal/WalTask.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/management/wal/WalTask.java
index 6f9e4297cc0..933dc9c3a73 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/management/wal/WalTask.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/management/wal/WalTask.java
@@ -29,7 +29,6 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.util.UUID;
-import java.util.regex.Pattern;
 import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.IgniteException;
 import org.apache.ignite.IgniteLogger;
@@ -48,6 +47,9 @@ import org.apache.ignite.internal.visor.VisorTaskArgument;
 import org.apache.ignite.resources.LoggerResource;
 import org.jetbrains.annotations.Nullable;
 
+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_SEGMENT_FILE_COMPACTED_PATTERN;
+
 /**
  * Performs WAL cleanup clusterwide.
  */
@@ -56,12 +58,6 @@ public class WalTask extends 
VisorMultiNodeTask<WalDeleteCommandArg, WalTaskResu
     /** */
     private static final long serialVersionUID = 0L;
 
-    /** Pattern for segment file names. */
-    private static final Pattern WAL_NAME_PATTERN = 
Pattern.compile("\\d{16}\\.wal");
-
-    /** Pattern for compacted segment file names. */
-    private static final Pattern WAL_SEGMENT_FILE_COMPACTED_PATTERN = 
Pattern.compile("\\d{16}\\.wal\\.zip");
-
     /** WAL archive file filter. */
     private static final FileFilter WAL_ARCHIVE_FILE_FILTER = new FileFilter() 
{
         @Override public boolean accept(File file) {
@@ -137,6 +133,9 @@ public class WalTask extends 
VisorMultiNodeTask<WalDeleteCommandArg, WalTaskResu
         @LoggerResource
         private transient IgniteLogger log;
 
+        /** Node file tree. */
+        private transient NodeFileTree ft;
+
         /**
          *  @param arg WAL task argument.
          *  @param debug Debug flag.
@@ -149,6 +148,7 @@ public class WalTask extends 
VisorMultiNodeTask<WalDeleteCommandArg, WalTaskResu
         @Nullable @Override protected Collection<String> run(@Nullable 
WalDeleteCommandArg arg) throws IgniteException {
             try {
                 GridKernalContext cctx = ignite.context();
+                ft = ignite.context().pdsFolderResolver().fileTree();
 
                 GridCacheDatabaseSharedManager dbMgr = 
(GridCacheDatabaseSharedManager)cctx.cache().context().database();
                 FileWriteAheadLogManager wal = 
(FileWriteAheadLogManager)cctx.cache().context().wal();
@@ -194,10 +194,10 @@ public class WalTask extends 
VisorMultiNodeTask<WalDeleteCommandArg, WalTaskResu
                 sortWalFiles(walFiles);
 
                 // Obtain index of last archived WAL segment, it will not be 
deleted.
-                long lastArchIdx = getIndex(walFiles[walFiles.length - 1]);
+                long lastArchIdx = ft.walSegmentIndex(walFiles[walFiles.length 
- 1].toPath());
 
                 for (File f : walFiles) {
-                    long fileIdx = getIndex(f);
+                    long fileIdx = ft.walSegmentIndex(f.toPath());
 
                     if (fileIdx < maxIdx && fileIdx < lastArchIdx)
                         res.add(f.getAbsolutePath());
@@ -239,7 +239,7 @@ public class WalTask extends 
VisorMultiNodeTask<WalDeleteCommandArg, WalTaskResu
                 Collection<String> res = new ArrayList<>(num);
 
                 for (File walFile: walFiles) {
-                    if (getIndex(walFile) < maxIdx && num > 0)
+                    if (ft.walSegmentIndex(walFile.toPath()) < maxIdx && num > 
0)
                         res.add(walFile.getAbsolutePath());
                     else
                         break;
@@ -272,8 +272,6 @@ public class WalTask extends 
VisorMultiNodeTask<WalDeleteCommandArg, WalTaskResu
          * @throws IgniteCheckedException if failed.
          */
         private File getWalArchiveDir() throws IgniteCheckedException {
-            NodeFileTree ft = ignite.context().pdsFolderResolver().fileTree();
-
             if (!ft.walArchive().exists())
                 throw new IgniteCheckedException("WAL archive directory does 
not exists" + ft.walArchive().getAbsolutePath());
 
@@ -288,19 +286,9 @@ public class WalTask extends 
VisorMultiNodeTask<WalDeleteCommandArg, WalTaskResu
         private void sortWalFiles(File[] files) {
             Arrays.sort(files, new Comparator<File>() {
                 @Override public int compare(File o1, File o2) {
-                    return Long.compare(getIndex(o1), getIndex(o2));
+                    return Long.compare(ft.walSegmentIndex(o1.toPath()), 
ft.walSegmentIndex(o2.toPath()));
                 }
             });
         }
     }
-
-    /**
-     * Get index from WAL segment file.
-     *
-     * @param file WAL segment file.
-     * @return Index of WAL segment file.
-     */
-    private static long getIndex(File file) {
-        return Long.parseLong(file.getName().substring(0, 16));
-    }
 }
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/IgniteWriteAheadLogManager.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/IgniteWriteAheadLogManager.java
index bb1cbd80fe4..df32fbcfe8c 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/IgniteWriteAheadLogManager.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/pagemem/wal/IgniteWriteAheadLogManager.java
@@ -17,7 +17,6 @@
 
 package org.apache.ignite.internal.pagemem.wal;
 
-import java.io.File;
 import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.IgniteException;
 import org.apache.ignite.configuration.DataStorageConfiguration;
@@ -235,12 +234,6 @@ public interface IgniteWriteAheadLogManager extends 
GridCacheSharedManager, Igni
      */
     void startAutoReleaseSegments();
 
-    /**
-     * @param idx Segment index.
-     * @return Compressed archive segment.
-     */
-    @Nullable File compactedSegment(long idx);
-
     /**
      * Blocks current thread while segment with the {@code idx} not compressed.
      * If segment compressed, already, returns immediately.
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 46d3c9189a1..2a1bb7546e1 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
@@ -18,6 +18,7 @@
 package org.apache.ignite.internal.processors.cache.persistence.filename;
 
 import java.io.File;
+import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.util.function.Predicate;
 import org.apache.ignite.IgniteException;
@@ -35,6 +36,8 @@ import org.jetbrains.annotations.Nullable;
 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.processors.cache.persistence.filename.PdsFolderResolver.DB_DEFAULT_FOLDER;
 
 /**
@@ -131,10 +134,10 @@ import static 
org.apache.ignite.internal.processors.cache.persistence.filename.P
  * ...
  * │      │  └── node01-e57e62a9-2ccf-4e1b-a11e-d35d32c0fe5d                   
 ← walCdc (node 1)
  * │      └── node00-e57e62a9-2ccf-4e1b-a11e-c24c21b9ed4c                      
 ← wal (node 0)
- * │          ├── 0000000000000000.wal
- * │          ├── 0000000000000001.wal
+ * │          ├── 0000000000000000.wal                                         
 ← wal segment (index = 0)
+ * │          ├── 0000000000000001.wal                                         
 ← wal segment (index = 1)
  * ...
- * │          └── 0000000000000009.wal
+ * │          └── 0000000000000009.wal                                         
 ← wal segment (index = 9)
  * │      └── node01-e57e62a9-2ccf-4e1b-a11e-d35d32c0fe5d                      
 ← wal (node 1)
  * ...
  * ├── diagnostic
@@ -157,15 +160,27 @@ public class NodeFileTree extends SharedFileTree {
     /** Checkpoint directory name. */
     public static final String CHECKPOINT_DIR = "cp";
 
+    /** File extension of WAL segment. */
+    public static final String WAL_SEGMENT_FILE_EXT = ".wal";
+
+    /** File extension of temp WAL segment. */
+    public static final String TMP_WAL_SEG_FILE_EXT = WAL_SEGMENT_FILE_EXT + 
TMP_SUFFIX;
+
+    /** File extension of zipped WAL segment. */
+    public static final String ZIP_WAL_SEG_FILE_EXT = WAL_SEGMENT_FILE_EXT + 
ZIP_SUFFIX;
+
+    /** File extension of temp zipped WAL segment. */
+    public static final String TMP_ZIP_WAL_SEG_FILE_EXT = ZIP_WAL_SEG_FILE_EXT 
+ TMP_SUFFIX;
+
+    /** Filter out all cache directories. */
+    public static final Predicate<File> CACHE_DIR_FILTER = dir -> 
cacheDir(dir) || cacheGroupDir(dir);
+
     /** Prefix for {@link #cacheStorage(String)} directory in case of single 
cache. */
     private static final String CACHE_DIR_PREFIX = "cache-";
 
     /** Prefix for {@link #cacheStorage(String)} directory in case of cache 
group. */
     private static final String CACHE_GRP_DIR_PREFIX = "cacheGroup-";
 
-    /** Filter out all cache directories. */
-    public static final Predicate<File> CACHE_DIR_FILTER = dir -> 
cacheDir(dir) || cacheGroupDir(dir);
-
     /** Filter out all cache directories including {@link MetaStorage}. */
     public static final Predicate<File> CACHE_DIR_WITH_META_FILTER = dir ->
         CACHE_DIR_FILTER.test(dir) ||
@@ -308,6 +323,54 @@ public class NodeFileTree extends SharedFileTree {
         return wal;
     }
 
+    /**
+     * @param idx Segment number.
+     * @return Segment file.
+     */
+    public File walSegment(long idx) {
+        return new File(wal, U.fixedLengthNumberName(idx, 
WAL_SEGMENT_FILE_EXT));
+    }
+
+    /**
+     * @param idx Segment number.
+     * @return Archive Segment file.
+     */
+    public File walArchiveSegment(long idx) {
+        return new File(walArchive, U.fixedLengthNumberName(idx, 
WAL_SEGMENT_FILE_EXT));
+    }
+
+    /**
+     * @param idx Segment number.
+     * @return Temp segment file.
+     */
+    public File tempWalSegment(long idx) {
+        return new File(wal, U.fixedLengthNumberName(idx, 
TMP_WAL_SEG_FILE_EXT));
+    }
+
+    /**
+     * @param idx Segment number.
+     * @return Temp archive Segment file.
+     */
+    public File tempWalArchiveSegment(long idx) {
+        return new File(walArchive, U.fixedLengthNumberName(idx, 
TMP_WAL_SEG_FILE_EXT));
+    }
+
+    /**
+     * @param idx Segment number.
+     * @return Zipped archive Segment file.
+     */
+    public File zipWalArchiveSegment(long idx) {
+        return new File(walArchive, U.fixedLengthNumberName(idx, 
ZIP_WAL_SEG_FILE_EXT));
+    }
+
+    /**
+     * @param idx Segment number.
+     * @return Zipped archive Segment file.
+     */
+    public File zipTempWalArchiveSegment(long idx) {
+        return new File(walArchive, U.fixedLengthNumberName(idx, 
TMP_ZIP_WAL_SEG_FILE_EXT));
+    }
+
     /** @return Path to the directory containing archive WAL segments. */
     public @Nullable File walArchive() {
         return walArchive;
@@ -448,6 +511,16 @@ public class NodeFileTree extends SharedFileTree {
             throw new IgniteException("Directory doesn't match the cache or 
cache group prefix: " + dir);
     }
 
+    /**
+     * @param segment WAL segment file.
+     * @return Segment index.
+     */
+    public long walSegmentIndex(Path segment) {
+        String fn = segment.getFileName().toString();
+
+        return Long.parseLong(fn.substring(0, fn.indexOf('.')));
+    }
+
     /**
      * Resolves directory specified by the given arguments.
      *
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/IncrementalSnapshotFutureTask.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/IncrementalSnapshotFutureTask.java
index 0c7824af0eb..d368957432b 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/IncrementalSnapshotFutureTask.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/IncrementalSnapshotFutureTask.java
@@ -196,7 +196,7 @@ class IncrementalSnapshotFutureTask extends 
AbstractSnapshotFutureTask<Void> imp
             throw new IgniteException("Failed to create snapshot WAL directory 
[idx=" + incSnpWalDir + ']');
 
         for (; lowIdx <= highIdx; lowIdx++) {
-            File seg = cctx.wal().compactedSegment(lowIdx);
+            File seg = 
cctx.kernalContext().pdsFolderResolver().fileTree().zipWalArchiveSegment(lowIdx);
 
             if (!seg.exists())
                 throw new IgniteException("WAL segment not found in archive 
[idx=" + lowIdx + ']');
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/IncrementalSnapshotProcessor.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/IncrementalSnapshotProcessor.java
index 998d5130a76..0cb0f3da1d4 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/IncrementalSnapshotProcessor.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/IncrementalSnapshotProcessor.java
@@ -38,7 +38,7 @@ import org.apache.ignite.internal.pagemem.wal.record.TxRecord;
 import org.apache.ignite.internal.pagemem.wal.record.WALRecord;
 import 
org.apache.ignite.internal.pagemem.wal.record.delta.ClusterSnapshotRecord;
 import org.apache.ignite.internal.processors.cache.GridCacheSharedContext;
-import 
org.apache.ignite.internal.processors.cache.persistence.wal.FileWriteAheadLogManager;
+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.processors.cache.persistence.wal.reader.IgniteWalIteratorFactory;
 import org.apache.ignite.internal.processors.cache.version.GridCacheVersion;
@@ -105,9 +105,11 @@ abstract class IncrementalSnapshotProcessor {
 
         UUID incSnpId = meta.requestId();
 
+        NodeFileTree ft = cctx.kernalContext().pdsFolderResolver().fileTree();
+
         File lastSeg = Arrays.stream(segments)
             .map(File::toPath)
-            
.max(Comparator.comparingLong(FileWriteAheadLogManager::segmentIndex))
+            .max(Comparator.comparingLong(ft::walSegmentIndex))
             .orElseThrow(() -> new IgniteCheckedException("Last WAL segment 
wasn't found [snpName=" + snpName + ']'))
             .toFile();
 
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 2f34b575bbf..22cc7b0098f 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
@@ -28,14 +28,12 @@ import org.apache.ignite.internal.util.typedef.internal.U;
 import org.jetbrains.annotations.Nullable;
 
 import static java.nio.file.StandardOpenOption.READ;
+import static 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree.WAL_SEGMENT_FILE_EXT;
 
 /**
  * WAL file descriptor.
  */
 public class FileDescriptor implements Comparable<FileDescriptor>, 
AbstractWalRecordsIterator.AbstractFileDescriptor {
-    /** file extension of WAL segment. */
-    private static final String WAL_SEGMENT_FILE_EXT = ".wal";
-
     /** File represented by this class. */
     protected final File file;
 
@@ -67,16 +65,6 @@ public class FileDescriptor implements 
Comparable<FileDescriptor>, AbstractWalRe
         this.idx = idx == null ? U.fixedLengthFileNumber(fileName) : idx;
     }
 
-    /**
-     * Getting segment file name.
-     *
-     * @param idx Segment index.
-     * @return Segment file name.
-     */
-    public static String fileName(long idx) {
-        return U.fixedLengthNumberName(idx, WAL_SEGMENT_FILE_EXT);
-    }
-
     /** {@inheritDoc} */
     @Override public int compareTo(FileDescriptor o) {
         return Long.compare(idx, o.idx);
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 dec6ee92bd3..b2799c0c2ab 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
@@ -32,7 +32,6 @@ import java.nio.ByteOrder;
 import java.nio.channels.ClosedByInterruptException;
 import java.nio.file.FileAlreadyExistsException;
 import java.nio.file.Files;
-import java.nio.file.Path;
 import java.sql.Time;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -155,8 +154,10 @@ 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.file.FilePageStoreManager.ZIP_SUFFIX;
-import static 
org.apache.ignite.internal.processors.cache.persistence.wal.FileDescriptor.fileName;
+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;
+import static 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree.ZIP_WAL_SEG_FILE_EXT;
 import static 
org.apache.ignite.internal.processors.cache.persistence.wal.serializer.RecordSerializerFactory.LATEST_SERIALIZER_VERSION;
 import static 
org.apache.ignite.internal.processors.cache.persistence.wal.serializer.RecordV1Serializer.HEADER_RECORD_SIZE;
 import static 
org.apache.ignite.internal.processors.cache.persistence.wal.serializer.RecordV1Serializer.readPosition;
@@ -177,10 +178,10 @@ public class FileWriteAheadLogManager extends 
GridCacheSharedManagerAdapter impl
     private static final byte[] FILL_BUF = new byte[1024 * 1024];
 
     /** Pattern for segment file names. */
-    public static final Pattern WAL_NAME_PATTERN = 
U.fixedLengthNumberNamePattern(".wal");
+    public static final Pattern WAL_NAME_PATTERN = 
U.fixedLengthNumberNamePattern(WAL_SEGMENT_FILE_EXT);
 
     /** Pattern for WAL temp files - these files will be cleared at startup. */
-    public static final Pattern WAL_TEMP_NAME_PATTERN = 
U.fixedLengthNumberNamePattern(".wal.tmp");
+    public static final Pattern WAL_TEMP_NAME_PATTERN = 
U.fixedLengthNumberNamePattern(TMP_WAL_SEG_FILE_EXT);
 
     /** WAL segment file filter, see {@link #WAL_NAME_PATTERN} */
     public static final FileFilter WAL_SEGMENT_FILE_FILTER = file -> 
!file.isDirectory() &&
@@ -191,7 +192,7 @@ public class FileWriteAheadLogManager extends 
GridCacheSharedManagerAdapter impl
         WAL_TEMP_NAME_PATTERN.matcher(file.getName()).matches();
 
     /** */
-    public static final Pattern WAL_SEGMENT_FILE_COMPACTED_PATTERN = 
U.fixedLengthNumberNamePattern(".wal.zip");
+    public static final Pattern WAL_SEGMENT_FILE_COMPACTED_PATTERN = 
U.fixedLengthNumberNamePattern(ZIP_WAL_SEG_FILE_EXT);
 
     /** WAL segment file filter, see {@link #WAL_NAME_PATTERN} */
     public static final FileFilter WAL_SEGMENT_COMPACTED_OR_RAW_FILE_FILTER = 
file -> !file.isDirectory() &&
@@ -199,14 +200,14 @@ public class FileWriteAheadLogManager extends 
GridCacheSharedManagerAdapter impl
             
WAL_SEGMENT_FILE_COMPACTED_PATTERN.matcher(file.getName()).matches());
 
     /** */
-    private static final Pattern WAL_SEGMENT_TEMP_FILE_COMPACTED_PATTERN = 
U.fixedLengthNumberNamePattern(".wal.zip.tmp");
+    private static final Pattern WAL_SEGMENT_TEMP_FILE_COMPACTED_PATTERN = 
U.fixedLengthNumberNamePattern(TMP_ZIP_WAL_SEG_FILE_EXT);
 
     /** */
-    private static final FileFilter WAL_SEGMENT_FILE_COMPACTED_FILTER = file 
-> !file.isDirectory() &&
+    public static final FileFilter WAL_SEGMENT_FILE_COMPACTED_FILTER = file -> 
!file.isDirectory() &&
         WAL_SEGMENT_FILE_COMPACTED_PATTERN.matcher(file.getName()).matches();
 
     /** */
-    private static final FileFilter WAL_SEGMENT_TEMP_FILE_COMPACTED_FILTER = 
file -> !file.isDirectory() &&
+    public static final FileFilter WAL_SEGMENT_TEMP_FILE_COMPACTED_FILTER = 
file -> !file.isDirectory() &&
         
WAL_SEGMENT_TEMP_FILE_COMPACTED_PATTERN.matcher(file.getName()).matches();
 
     /** Buffer size. */
@@ -666,8 +667,8 @@ public class FileWriteAheadLogManager extends 
GridCacheSharedManagerAdapter impl
         List<File> res = new ArrayList<>();
 
         for (long i = low.index(); i < high.index(); i++) {
-            File file = archiveSegment(i, null);
-            File fileZip = compactedSegment(i);
+            File file = ft.walArchiveSegment(i);
+            File fileZip = ft.zipWalArchiveSegment(i);
 
             if (file.exists())
                 res.add(file);
@@ -1107,8 +1108,8 @@ public class FileWriteAheadLogManager extends 
GridCacheSharedManagerAdapter impl
      * @return {@code True} exists.
      */
     private boolean hasIndex(long absIdx) {
-        boolean inArchive = archiveSegment(absIdx, null).exists() ||
-            compactedSegment(absIdx).exists();
+        boolean inArchive = ft.walArchiveSegment(absIdx).exists() ||
+            ft.zipWalArchiveSegment(absIdx).exists();
 
         if (inArchive)
             return true;
@@ -1253,7 +1254,7 @@ public class FileWriteAheadLogManager extends 
GridCacheSharedManagerAdapter impl
 
         for (File file : 
ft.walArchive().listFiles(WAL_SEGMENT_COMPACTED_OR_RAW_FILE_FILTER)) {
             try {
-                long idx = Long.parseLong(file.getName().substring(0, 16));
+                long idx = ft.walSegmentIndex(file.toPath());
 
                 lastIdx = Math.max(lastIdx, idx);
             }
@@ -1265,16 +1266,6 @@ public class FileWriteAheadLogManager extends 
GridCacheSharedManagerAdapter impl
         return lastIdx;
     }
 
-    /**
-     * @param segment WAL segment file.
-     * @return Segment index.
-     */
-    public static long segmentIndex(Path segment) {
-        String fn = segment.getFileName().toString();
-
-        return Long.parseLong(fn.substring(0, fn.indexOf('.')));
-    }
-
     /**
      * @param file File to read.
      * @param ioFactory IO factory.
@@ -1510,7 +1501,7 @@ public class FileWriteAheadLogManager extends 
GridCacheSharedManagerAdapter impl
     private File segmentFile(long absIdx) {
         long segNo = archiver == null ? absIdx : absIdx % 
dsCfg.getWalSegments();
 
-        return new File(ft.wal(), fileName(segNo));
+        return ft.walSegment(segNo);
     }
 
     /** @return {@code True} if the given pointer is the last in a segment and 
a next segment has been initialized. */
@@ -1632,7 +1623,7 @@ public class FileWriteAheadLogManager extends 
GridCacheSharedManagerAdapter impl
         }
 
         if (F.isEmpty(ft.wal().listFiles(WAL_SEGMENT_FILE_FILTER)))
-            createFile(new File(ft.wal(), fileName(0)));
+            createFile(ft.walSegment(0));
 
         if (isArchiverEnabled()) {
             moveSegmentsToArchive();
@@ -1728,7 +1719,7 @@ public class FileWriteAheadLogManager extends 
GridCacheSharedManagerAdapter impl
             segmentAware.curAbsWalIdx(curIdx + 1);
             segmentAware.setLastArchivedAbsoluteIndex(curIdx);
 
-            return new File(ft.wal(), fileName(curIdx + 1));
+            return ft.walSegment(curIdx + 1);
         }
 
         long absNextIdxStartTime = System.nanoTime();
@@ -1753,7 +1744,7 @@ public class FileWriteAheadLogManager extends 
GridCacheSharedManagerAdapter impl
 
         long segmentIdx = absNextIdx % dsCfg.getWalSegments();
 
-        return new File(ft.wal(), fileName(segmentIdx));
+        return ft.walSegment(segmentIdx);
     }
 
     /**
@@ -2112,10 +2103,10 @@ public class FileWriteAheadLogManager extends 
GridCacheSharedManagerAdapter impl
         public SegmentArchiveResult archiveSegment(long absIdx) throws 
StorageException {
             long segIdx = absIdx % dsCfg.getWalSegments();
 
-            File origFile = new File(ft.wal(), fileName(segIdx));
+            File origFile = ft.walSegment(segIdx);
 
-            File dstTmpFile = 
FileWriteAheadLogManager.this.archiveSegment(absIdx, TMP_SUFFIX);
-            File dstFile = 
FileWriteAheadLogManager.this.archiveSegment(absIdx, null);
+            File dstTmpFile = ft.tempWalArchiveSegment(absIdx);
+            File dstFile = ft.walArchiveSegment(absIdx);
 
             if (log.isInfoEnabled()) {
                 log.info("Starting to copy WAL segment [absIdx=" + absIdx + ", 
segIdx=" + segIdx +
@@ -2395,9 +2386,9 @@ public class FileWriteAheadLogManager extends 
GridCacheSharedManagerAdapter impl
                     if ((segIdx = tryReserveNextSegmentOrWait()) == -1)
                         continue;
 
-                    File tmpZip = archiveSegment(segIdx, ZIP_SUFFIX + 
TMP_SUFFIX);
-                    File zip = compactedSegment(segIdx);
-                    File raw = archiveSegment(segIdx, null);
+                    File tmpZip = ft.zipTempWalArchiveSegment(segIdx);
+                    File zip = ft.zipWalArchiveSegment(segIdx);
+                    File raw = ft.walArchiveSegment(segIdx);
 
                     long currSize = 0;
                     long reservedSize = raw.length();
@@ -2474,7 +2465,7 @@ public class FileWriteAheadLogManager extends 
GridCacheSharedManagerAdapter impl
 
             try (ZipOutputStream zos = new ZipOutputStream(new 
BufferedOutputStream(new FileOutputStream(zip)))) {
                 zos.setLevel(dsCfg.getWalCompactionLevel());
-                zos.putNextEntry(new ZipEntry(idx + ".wal"));
+                zos.putNextEntry(new ZipEntry(idx + WAL_SEGMENT_FILE_EXT));
 
                 ByteBuffer buf = ByteBuffer.allocate(HEADER_RECORD_SIZE);
                 buf.order(ByteOrder.nativeOrder());
@@ -2495,7 +2486,7 @@ public class FileWriteAheadLogManager extends 
GridCacheSharedManagerAdapter impl
                 };
 
                 try (SingleSegmentLogicalRecordsIterator iter = new 
SingleSegmentLogicalRecordsIterator(
-                    log, cctx, ioFactory, BUF_SIZE, idx, ft.walArchive(), 
appendToZipC)) {
+                    log, cctx, ioFactory, BUF_SIZE, idx, ft, appendToZipC)) {
 
                     while (iter.hasNextX())
                         iter.nextX();
@@ -2561,36 +2552,11 @@ public class FileWriteAheadLogManager extends 
GridCacheSharedManagerAdapter impl
         }
     }
 
-    /** {@inheritDoc} */
-    @Override public File compactedSegment(long idx) {
-        return archiveSegment(idx, ZIP_SUFFIX);
-    }
-
     /** {@inheritDoc} */
     @Override public void awaitCompacted(long idx) throws 
IgniteInterruptedCheckedException {
         segmentAware.awaitSegmentCompressed(idx);
     }
 
-    /** */
-    private File archiveSegment(long idx, @Nullable String ext) {
-        return archiveSegment(ft.walArchive(), idx, ext);
-    }
-
-    /**
-     * @param walArchiveDir WAL archive directory.
-     * @param idx Segment index.
-     * @param ext Optional extension
-     * @return Path to archive segment.
-     */
-    public static File archiveSegment(File walArchiveDir, long idx, String 
ext) {
-        String fileName = fileName(idx);
-
-        if (ext != null)
-            fileName += ext;
-
-        return new File(walArchiveDir, fileName);
-    }
-
     /**
      * Responsible for decompressing previously compressed segments of WAL 
archive if they are needed for replay.
      */
@@ -2635,9 +2601,9 @@ public class FileWriteAheadLogManager extends 
GridCacheSharedManagerAdapter impl
                     if (segmentToDecompress == -1)
                         continue;
 
-                    File zip = compactedSegment(segmentToDecompress);
-                    File unzipTmp = archiveSegment(segmentToDecompress, 
TMP_SUFFIX);
-                    File unzip = archiveSegment(segmentToDecompress, null);
+                    File zip = ft.zipWalArchiveSegment(segmentToDecompress);
+                    File unzipTmp = 
ft.tempWalArchiveSegment(segmentToDecompress);
+                    File unzip = ft.walArchiveSegment(segmentToDecompress);
 
                     long currSize = 0;
                     long reservedSize = U.uncompressedSize(zip);
@@ -2714,7 +2680,7 @@ public class FileWriteAheadLogManager extends 
GridCacheSharedManagerAdapter impl
             if (decompressionFutures.containsKey(idx))
                 return decompressionFutures.get(idx);
 
-            File f = archiveSegment(idx, null);
+            File f = ft.walArchiveSegment(idx);
 
             if (f.exists())
                 return new GridFinishedFuture<>();
@@ -2767,7 +2733,7 @@ public class FileWriteAheadLogManager extends 
GridCacheSharedManagerAdapter impl
         @Nullable IgniteInClosure<Integer> completionCb
     ) throws StorageException {
         for (int i = startWith; i < dsCfg.getWalSegments() && (p == null || 
p.apply(i)); i++) {
-            File checkFile = new File(ft.wal(), fileName(i));
+            File checkFile = ft.walSegment(i);
 
             if (checkFile.exists()) {
                 if (checkFile.isDirectory()) {
@@ -2981,7 +2947,7 @@ public class FileWriteAheadLogManager extends 
GridCacheSharedManagerAdapter impl
             AbstractFileDescriptor currDesc = desc;
 
             if (!desc.file().exists()) {
-                FileDescriptor zipFile = new 
FileDescriptor(archiveSegment(ft.walArchive(), desc.idx(), ZIP_SUFFIX));
+                FileDescriptor zipFile = new 
FileDescriptor(ft.zipWalArchiveSegment(desc.idx()));
 
                 if (!zipFile.file.exists()) {
                     throw new FileNotFoundException("Both compressed and raw 
segment files are missing in archive " +
@@ -3096,8 +3062,8 @@ public class FileWriteAheadLogManager extends 
GridCacheSharedManagerAdapter impl
                     else {
                         // Log only when no segments were read. This will help 
us avoiding logging on the end of the WAL.
                         if (curRec == null && curWalSegment == null) {
-                            File workDirFile = new File(ft.wal(), 
fileName(curWalSegmIdx % dsCfg.getWalSegments()));
-                            File archiveDirFile = new File(ft.walArchive(), 
fileName(curWalSegmIdx));
+                            File workDirFile = ft.walSegment(curWalSegmIdx % 
dsCfg.getWalSegments());
+                            File archiveDirFile = 
ft.walArchiveSegment(curWalSegmIdx);
 
                             U.warn(
                                 log,
@@ -3200,7 +3166,7 @@ public class FileWriteAheadLogManager extends 
GridCacheSharedManagerAdapter impl
             Exception e,
             @Nullable WALPointer ptr
         ) {
-            FileDescriptor fd = new FileDescriptor(new File(ft.wal(), 
fileName(workIdx)), walSegmentIdx);
+            FileDescriptor fd = new FileDescriptor(ft.walSegment(workIdx), 
walSegmentIdx);
 
             try {
                 if (!fd.file().exists())
@@ -3532,16 +3498,16 @@ public class FileWriteAheadLogManager extends 
GridCacheSharedManagerAdapter impl
         if (workSegments.length == 1 && workSegments[0].idx() != 
workSegments[0].idx() % dsCfg.getWalSegments()) {
             FileDescriptor toRen = workSegments[0];
 
+            long idx = toRen.idx() % dsCfg.getWalSegments();
+
+            File tmpDst = ft.tempWalSegment(idx);
+            File dst = ft.walSegment(idx);
+
             if (log.isInfoEnabled()) {
                 log.info("Last WAL segment file has to be renamed from " + 
toRen.file().getName() + " to " +
-                    fileName(toRen.idx() % dsCfg.getWalSegments()) + '.');
+                    dst.getName() + '.');
             }
 
-            String toRenFileName = fileName(toRen.idx() % 
dsCfg.getWalSegments());
-
-            File tmpDst = new File(ft.wal(), toRenFileName + TMP_SUFFIX);
-            File dst = new File(ft.wal(), toRenFileName);
-
             try {
                 Files.copy(toRen.file().toPath(), tmpDst.toPath());
 
@@ -3613,7 +3579,7 @@ public class FileWriteAheadLogManager extends 
GridCacheSharedManagerAdapter impl
                         // Batch output.
                         if (log.isInfoEnabled() && (i == toFormat.size() - 1 
|| (i != 0 && i % 9 == 0))) {
                             log.info("WAL segments formatted: " + 
toFormat.get(j).file().getName() +
-                                (i == j ? "" : " - " + fileName(i)));
+                                (i == j ? "" : " - " + 
ft.walSegment(i).getName()));
 
                             j = i + 1;
                         }
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/SegmentRouter.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/SegmentRouter.java
index eab0b5dea4b..f41903345e2 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/SegmentRouter.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/SegmentRouter.java
@@ -17,14 +17,11 @@
 
 package org.apache.ignite.internal.processors.cache.persistence.wal;
 
-import java.io.File;
 import java.io.FileNotFoundException;
 import org.apache.ignite.configuration.DataStorageConfiguration;
 import 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree;
 import 
org.apache.ignite.internal.processors.cache.persistence.wal.aware.SegmentAware;
 
-import static 
org.apache.ignite.internal.processors.cache.persistence.wal.FileDescriptor.fileName;
-
 /**
  * Class for manage of segment file location.
  */
@@ -66,12 +63,12 @@ public class SegmentRouter {
         FileDescriptor fd;
 
         if (segmentAware.lastArchivedAbsoluteIndex() >= segmentId || 
!ft.walArchiveEnabled())
-            fd = new FileDescriptor(new File(ft.walArchive(), 
fileName(segmentId)));
+            fd = new FileDescriptor(ft.walArchiveSegment(segmentId));
         else
-            fd = new FileDescriptor(new File(ft.wal(), fileName(segmentId % 
dsCfg.getWalSegments())), segmentId);
+            fd = new FileDescriptor(ft.walSegment(segmentId % 
dsCfg.getWalSegments()), segmentId);
 
         if (!fd.file().exists()) {
-            FileDescriptor zipFile = new FileDescriptor(new 
File(ft.walArchive(), fileName(fd.idx()) + ZIP_SUFFIX));
+            FileDescriptor zipFile = new 
FileDescriptor(ft.zipWalArchiveSegment(fd.idx()));
 
             if (!zipFile.file().exists()) {
                 throw new FileNotFoundException("Both compressed and raw 
segment files are missing in archive " +
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/SingleSegmentLogicalRecordsIterator.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/SingleSegmentLogicalRecordsIterator.java
index d3df3236969..c4b2c69a2d1 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/SingleSegmentLogicalRecordsIterator.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/SingleSegmentLogicalRecordsIterator.java
@@ -16,7 +16,6 @@
 */
 package org.apache.ignite.internal.processors.cache.persistence.wal;
 
-import java.io.File;
 import java.io.FileNotFoundException;
 import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.IgniteLogger;
@@ -24,6 +23,7 @@ import 
org.apache.ignite.internal.pagemem.wal.record.MarshalledRecord;
 import org.apache.ignite.internal.pagemem.wal.record.WALRecord;
 import org.apache.ignite.internal.processors.cache.GridCacheSharedContext;
 import 
org.apache.ignite.internal.processors.cache.persistence.file.FileIOFactory;
+import 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree;
 import 
org.apache.ignite.internal.processors.cache.persistence.wal.io.FileInput;
 import 
org.apache.ignite.internal.processors.cache.persistence.wal.io.SegmentIO;
 import 
org.apache.ignite.internal.processors.cache.persistence.wal.io.SimpleSegmentFileInputFactory;
@@ -47,10 +47,10 @@ public class SingleSegmentLogicalRecordsIterator extends 
AbstractWalRecordsItera
     private boolean segmentInitialized;
 
     /** Archive directory. */
-    private File archiveDir;
+    private final NodeFileTree ft;
 
     /** Closure which is executed right after advance. */
-    private CIX1<WALRecord> advanceC;
+    private final CIX1<WALRecord> advanceC;
 
     /**
      * @param log Logger.
@@ -58,7 +58,7 @@ public class SingleSegmentLogicalRecordsIterator extends 
AbstractWalRecordsItera
      * @param ioFactory Io factory.
      * @param bufSize Buffer size.
      * @param archivedSegIdx Archived seg index.
-     * @param archiveDir Directory with segment.
+     * @param ft Node file tree.
      * @param advanceC Closure which is executed right after advance.
      */
     SingleSegmentLogicalRecordsIterator(
@@ -67,7 +67,7 @@ public class SingleSegmentLogicalRecordsIterator extends 
AbstractWalRecordsItera
         @NotNull FileIOFactory ioFactory,
         int bufSize,
         long archivedSegIdx,
-        File archiveDir,
+        NodeFileTree ft,
         CIX1<WALRecord> advanceC
     ) throws IgniteCheckedException {
         super(
@@ -80,7 +80,7 @@ public class SingleSegmentLogicalRecordsIterator extends 
AbstractWalRecordsItera
             new SimpleSegmentFileInputFactory());
 
         curWalSegmIdx = archivedSegIdx;
-        this.archiveDir = archiveDir;
+        this.ft = ft;
         this.advanceC = advanceC;
 
         advance();
@@ -106,8 +106,7 @@ public class SingleSegmentLogicalRecordsIterator extends 
AbstractWalRecordsItera
         else {
             segmentInitialized = true;
 
-            FileDescriptor fd = new FileDescriptor(
-                new File(archiveDir, FileDescriptor.fileName(curWalSegmIdx)));
+            FileDescriptor fd = new 
FileDescriptor(ft.walArchiveSegment(curWalSegmIdx));
 
             try {
                 return initReadHandle(fd, null);
diff --git 
a/modules/core/src/test/java/org/apache/ignite/cdc/CdcIgniteNodeActiveModeTest.java
 
b/modules/core/src/test/java/org/apache/ignite/cdc/CdcIgniteNodeActiveModeTest.java
index c5d3250ad07..33dc7ae5bf7 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/cdc/CdcIgniteNodeActiveModeTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/cdc/CdcIgniteNodeActiveModeTest.java
@@ -43,7 +43,7 @@ import 
org.apache.ignite.internal.pagemem.wal.record.CdcManagerRecord;
 import org.apache.ignite.internal.pagemem.wal.record.CdcManagerStopRecord;
 import org.apache.ignite.internal.pagemem.wal.record.RolloverType;
 import 
org.apache.ignite.internal.processors.cache.GridCacheSharedManagerAdapter;
-import 
org.apache.ignite.internal.processors.cache.persistence.wal.FileWriteAheadLogManager;
+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.processors.cache.persistence.wal.reader.StandaloneGridKernalContext;
 import org.apache.ignite.internal.util.lang.RunnableX;
@@ -349,9 +349,11 @@ public class CdcIgniteNodeActiveModeTest extends 
AbstractCdcTest {
 
         assertTrue(waitForCondition(() -> {
             try {
-                List<Long> actual = 
Files.list(ign.context().pdsFolderResolver().fileTree().walCdc().toPath())
+                NodeFileTree ft = ign.context().pdsFolderResolver().fileTree();
+
+                List<Long> actual = Files.list(ft.walCdc().toPath())
                     .filter(p -> WAL_SEGMENT_FILE_FILTER.accept(p.toFile()))
-                    .map(FileWriteAheadLogManager::segmentIndex)
+                    .map(ft::walSegmentIndex)
                     .sorted()
                     .collect(Collectors.toList());
 
diff --git 
a/modules/core/src/test/java/org/apache/ignite/cdc/WalForCdcTest.java 
b/modules/core/src/test/java/org/apache/ignite/cdc/WalForCdcTest.java
index 324afc77258..e7fb3c283f3 100644
--- a/modules/core/src/test/java/org/apache/ignite/cdc/WalForCdcTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/cdc/WalForCdcTest.java
@@ -42,7 +42,7 @@ import org.apache.ignite.internal.pagemem.wal.WALIterator;
 import org.apache.ignite.internal.pagemem.wal.record.DataRecord;
 import org.apache.ignite.internal.pagemem.wal.record.WALRecord;
 import 
org.apache.ignite.internal.processors.cache.persistence.file.RandomAccessFileIOFactory;
-import 
org.apache.ignite.internal.processors.cache.persistence.wal.FileDescriptor;
+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.processors.cache.persistence.wal.reader.IgniteWalIteratorFactory;
 import 
org.apache.ignite.internal.processors.cache.persistence.wal.reader.IgniteWalIteratorFactory.IteratorParametersBuilder;
@@ -250,7 +250,7 @@ public class WalForCdcTest extends GridCommonAbstractTest {
 
         long finishSgmnt = wal.currentSegment();
 
-        String archive = archive(ignite);
+        NodeFileTree ft = ignite.context().pdsFolderResolver().fileTree();
 
         assertTrue(finishSgmnt > startSgmnt);
         assertTrue(
@@ -258,7 +258,7 @@ public class WalForCdcTest extends GridCommonAbstractTest {
             waitForCondition(() -> startSgmnt <= wal.lastArchivedSegment(), 
getTestTimeout())
         );
 
-        File startSgmntArchived = new File(archive, 
FileDescriptor.fileName(startSgmnt));
+        File startSgmntArchived = ft.walArchiveSegment(startSgmnt);
 
         assertTrue("Check archived segment file exists", 
startSgmntArchived.exists());
 
@@ -346,7 +346,7 @@ public class WalForCdcTest extends GridCommonAbstractTest {
     private int checkDataRecords(IgniteEx ignite) throws 
IgniteCheckedException {
         WALIterator iter = new IgniteWalIteratorFactory(log).iterator(new 
IteratorParametersBuilder()
             .ioFactory(new RandomAccessFileIOFactory())
-            .filesOrDirs(archive(ignite)));
+            
.filesOrDirs(ignite.context().pdsFolderResolver().fileTree().walArchive().getAbsolutePath()));
 
         int walRecCnt = 0;
 
@@ -372,13 +372,4 @@ public class WalForCdcTest extends GridCommonAbstractTest {
 
         return walRecCnt;
     }
-
-    /**
-     * @param ignite Ignite.
-     * @return WAL archive patch
-     * @throws IgniteCheckedException If failed
-     */
-    private static String archive(IgniteEx ignite) {
-        return 
ignite.context().pdsFolderResolver().fileTree().walArchive().getAbsolutePath();
-    }
 }
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/encryption/CacheGroupKeyChangeTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/encryption/CacheGroupKeyChangeTest.java
index 8949a69a86d..0e08ddd281f 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/encryption/CacheGroupKeyChangeTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/encryption/CacheGroupKeyChangeTest.java
@@ -17,7 +17,6 @@
 
 package org.apache.ignite.internal.encryption;
 
-import java.io.File;
 import java.io.Serializable;
 import java.util.Arrays;
 import java.util.Collections;
@@ -45,6 +44,7 @@ import 
org.apache.ignite.internal.TestRecordingCommunicationSpi;
 import org.apache.ignite.internal.managers.discovery.DiscoveryCustomMessage;
 import org.apache.ignite.internal.managers.encryption.GridEncryptionManager;
 import org.apache.ignite.internal.pagemem.wal.IgniteWriteAheadLogManager;
+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.distributed.DistributedProcess.DistributedProcessType;
 import org.apache.ignite.internal.util.distributed.InitMessage;
@@ -761,14 +761,12 @@ public class CacheGroupKeyChangeTest extends 
AbstractEncryptionTest {
 
         assertEquals(2, node.context().encryption().groupKeyIds(grpId).size());
 
+        NodeFileTree ft = node.context().pdsFolderResolver().fileTree();
+
         stopAllGrids();
 
         // Cleanup WAL arcive folder.
-        File dbDir = U.resolveWorkDirectory(U.defaultWorkDirectory(), "db", 
false);
-
-        boolean rmvd = U.delete(new File(dbDir, "wal/archive"));
-
-        assertTrue(rmvd);
+        assertTrue(U.delete(ft.walArchive().getParentFile()));
 
         node = startGrid(GRID_0);
 
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/pagemem/wal/record/WALRecordSerializationTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/pagemem/wal/record/WALRecordSerializationTest.java
index b236135c6fc..f2312fdbf7e 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/pagemem/wal/record/WALRecordSerializationTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/pagemem/wal/record/WALRecordSerializationTest.java
@@ -29,7 +29,7 @@ import org.apache.ignite.internal.IgniteEx;
 import org.apache.ignite.internal.pagemem.FullPageId;
 import org.apache.ignite.internal.pagemem.wal.IgniteWriteAheadLogManager;
 import org.apache.ignite.internal.pagemem.wal.WALIterator;
-import 
org.apache.ignite.internal.processors.cache.persistence.wal.FileDescriptor;
+import 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree;
 import org.apache.ignite.internal.processors.cache.persistence.wal.WALPointer;
 import org.apache.ignite.testframework.GridTestUtils;
 import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
@@ -38,7 +38,6 @@ import org.junit.Test;
 import org.mockito.internal.matchers.apachecommons.ReflectionEquals;
 
 import static 
org.apache.ignite.configuration.DataStorageConfiguration.DFLT_PAGE_SIZE;
-import static 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager.ZIP_SUFFIX;
 
 /**
  * Tests of serialization and deserialization of all WAL record types
@@ -180,9 +179,9 @@ public class WALRecordSerializationTest extends 
GridCommonAbstractTest {
             
ignite.context().cache().context().database().checkpointReadUnlock();
         }
 
-        File nodeArchiveDir = 
ignite.context().pdsFolderResolver().fileTree().walArchive();
-        File walSegment = new File(nodeArchiveDir, 
FileDescriptor.fileName(lastPointer.index()));
-        File walZipSegment = new File(nodeArchiveDir, 
FileDescriptor.fileName(lastPointer.index()) + ZIP_SUFFIX);
+        NodeFileTree ft = ignite.context().pdsFolderResolver().fileTree();
+        File walSegment = ft.walArchiveSegment(lastPointer.index());
+        File walZipSegment = ft.zipWalArchiveSegment(lastPointer.index());
 
         // Spam WAL to move all data records to compressible WAL zone.
         for (int i = 0; i < WAL_SEGMENT_SIZE / DFLT_PAGE_SIZE * 2; i++)
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/IgniteDataStorageMetricsSelfTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/IgniteDataStorageMetricsSelfTest.java
index 8b92363822d..9cff28d9882 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/IgniteDataStorageMetricsSelfTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/IgniteDataStorageMetricsSelfTest.java
@@ -539,10 +539,10 @@ public class IgniteDataStorageMetricsSelfTest extends 
GridCommonAbstractTest {
             assertTrue(waitForCondition(() -> walMgr.lastArchivedSegment() == 
walMgr.currentSegment() - 1, 3000l));
         }
 
-        long totalSize = walMgr.totalSize(walFiles(ft.wal()));
+        long totalSize = 
FileWriteAheadLogManager.totalSize(walFiles(ft.wal()));
 
         if (ft.walArchiveEnabled())
-            totalSize += walMgr.totalSize(walFiles(ft.walArchive()));
+            totalSize += 
FileWriteAheadLogManager.totalSize(walFiles(ft.walArchive()));
 
         assertEquals(totalSize, 
dsMetricRegistry(igniteEx).<LongGauge>findMetric("WalTotalSize").value());
 
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 fdc55559520..32aea80bf61 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
@@ -66,6 +66,7 @@ import org.junit.Test;
 
 import static org.apache.ignite.IgniteSystemProperties.IGNITE_PDS_SKIP_CRC;
 import static 
org.apache.ignite.internal.processors.cache.persistence.metastorage.MetaStorage.METASTORAGE_CACHE_ID;
+import static 
org.apache.ignite.internal.processors.cache.persistence.wal.FileWriteAheadLogManager.WAL_NAME_PATTERN;
 
 /**
  *
@@ -414,7 +415,7 @@ public class IgnitePdsCorruptedStoreTest extends 
GridCommonAbstractTest {
         failingFileIOFactory.createClosure((file, options) -> {
             FileIO delegate = 
failingFileIOFactory.delegateFactory().create(file, options);
 
-            if (file.getName().endsWith(".wal")) {
+            if (WAL_NAME_PATTERN.matcher(file.getName()).matches()) {
                 return new FileIODecorator(delegate) {
                     @Override public int write(ByteBuffer srcBuf) throws 
IOException {
                         throw new IOException("No space left on device");
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/WALPreloadingWithCompactionTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/WALPreloadingWithCompactionTest.java
index 9bcfaa6f6a6..c043f6ba929 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/WALPreloadingWithCompactionTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/WALPreloadingWithCompactionTest.java
@@ -29,7 +29,6 @@ import org.apache.ignite.configuration.IgniteConfiguration;
 import org.apache.ignite.configuration.WALMode;
 import org.apache.ignite.internal.IgniteEx;
 import 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree;
-import 
org.apache.ignite.internal.processors.cache.persistence.wal.FileDescriptor;
 import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
 import org.junit.Test;
 
@@ -120,8 +119,8 @@ public class WALPreloadingWithCompactionTest extends 
GridCommonAbstractTest {
     private void checkThatOnlyZipSegmentExists(IgniteEx ignite, int segment) {
         NodeFileTree ft = ignite.context().pdsFolderResolver().fileTree();
 
-        File walZipSegment = new File(ft.walArchive(), 
FileDescriptor.fileName(segment) + ".zip");
-        File walRawSegment = new File(ft.walArchive(), 
FileDescriptor.fileName(segment));
+        File walZipSegment = ft.zipWalArchiveSegment(segment);
+        File walRawSegment = ft.walArchiveSegment(segment);
 
         assertTrue(walZipSegment.exists());
         assertFalse(walRawSegment.exists());
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 101c8e44dc8..9083455d831 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
@@ -55,6 +55,7 @@ import org.junit.Assert;
 import org.junit.Test;
 
 import static org.apache.ignite.IgniteSystemProperties.IGNITE_WAL_MMAP;
+import static 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree.WAL_SEGMENT_FILE_EXT;
 
 /**
  * Tests node recovering after disk errors during interaction with persistent 
storage.
@@ -276,7 +277,10 @@ public class IgnitePdsDiskErrorsRecoveringTest extends 
GridCommonAbstractTest {
     @Test
     public void testRecoveringOnWALWritingFail1() throws Exception {
         // Allow to allocate only 1 wal segment, fail on write to second.
-        ioFactory = new FilteringFileIOFactory(".wal", new 
LimitedSizeFileIOFactory(new RandomAccessFileIOFactory(), WAL_SEGMENT_SIZE));
+        ioFactory = new FilteringFileIOFactory(
+            WAL_SEGMENT_FILE_EXT,
+            new LimitedSizeFileIOFactory(new RandomAccessFileIOFactory(), 
WAL_SEGMENT_SIZE)
+        );
 
         System.setProperty(IGNITE_WAL_MMAP, "true");
 
@@ -290,7 +294,7 @@ public class IgnitePdsDiskErrorsRecoveringTest extends 
GridCommonAbstractTest {
     public void testRecoveringOnWALWritingFail2() throws Exception {
         // Fail somewhere on the second wal segment.
         ioFactory = new FilteringFileIOFactory(
-            ".wal",
+            WAL_SEGMENT_FILE_EXT,
             new LimitedSizeFileIOFactory(new RandomAccessFileIOFactory(), 
(long)(1.5 * WAL_SEGMENT_SIZE))
         );
 
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 15d1292e75c..0dc086eb31e 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
@@ -17,7 +17,6 @@
 
 package org.apache.ignite.internal.processors.cache.persistence.db.wal;
 
-import java.io.File;
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.Map;
@@ -41,7 +40,7 @@ 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.wal.FileDescriptor.fileName;
+import static 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree.WAL_SEGMENT_FILE_EXT;
 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;
@@ -133,11 +132,19 @@ public class IgniteLocalWalSizeTest extends 
GridCommonAbstractTest {
      */
     @Test
     public void testSegmentFileName() throws Exception {
-        Arrays.asList(null, "", "1", "wal", fileName(0) + "1", 
fileName(1).replace(".wal", ".wa"))
-            .forEach(s -> assertFalse(s, isSegmentFileName(s)));
+        NodeFileTree ft = nodeFileTree("unknown");
+
+        Arrays.asList(
+            null,
+            "",
+            "1",
+            "wal",
+            ft.walSegment(0).getName() + "1",
+            ft.walSegment(1).getName().replace(WAL_SEGMENT_FILE_EXT, ".wa")
+        ).forEach(s -> assertFalse(s, isSegmentFileName(s)));
 
         IntStream.range(0, 10)
-            .mapToObj(FileDescriptor::fileName)
+            .mapToObj(idx -> ft.walSegment(idx).getName())
             .forEach(fn -> assertTrue(fn, isSegmentFileName(fn) && 
isSegmentFileName(fn + ZIP_SUFFIX)));
     }
 
@@ -224,7 +231,7 @@ public class IgniteLocalWalSizeTest extends 
GridCommonAbstractTest {
             int segments = 
n.configuration().getDataStorageConfiguration().getWalSegments();
 
             for (long i = absIdx - (absIdx % segments); i <= absIdx; i++)
-                expSegmentSize.putIfAbsent(i, new File(ft.wal(), fileName(i % 
segments)).length());
+                expSegmentSize.putIfAbsent(i, ft.walSegment(i % 
segments).length());
         }
 
         assertEquals(currHnd.getSegmentId() + 1, expSegmentSize.size());
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/IgniteWalFlushMultiNodeFailoverAbstractSelfTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/IgniteWalFlushMultiNodeFailoverAbstractSelfTest.java
index 0e5c6de84e8..bd5389518b4 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/IgniteWalFlushMultiNodeFailoverAbstractSelfTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/IgniteWalFlushMultiNodeFailoverAbstractSelfTest.java
@@ -51,6 +51,7 @@ import org.junit.Test;
 
 import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL;
 import static org.apache.ignite.cache.CacheRebalanceMode.SYNC;
+import static 
org.apache.ignite.internal.processors.cache.persistence.wal.FileWriteAheadLogManager.WAL_NAME_PATTERN;
 
 /**
  * Tests error recovery while node flushing
@@ -274,7 +275,7 @@ public abstract class 
IgniteWalFlushMultiNodeFailoverAbstractSelfTest extends Gr
                 @Override public int write(ByteBuffer srcBuf) throws 
IOException {
                     System.out.println(">>>!!!! W " + file.getName());
 
-                    if (fail != null && file.getName().endsWith(".wal") && 
fail.get())
+                    if (fail != null && 
WAL_NAME_PATTERN.matcher(file.getName()).matches() && fail.get())
                         throw new IOException("No space left on device");
 
                     return super.write(srcBuf);
@@ -284,7 +285,7 @@ public abstract class 
IgniteWalFlushMultiNodeFailoverAbstractSelfTest extends Gr
                 @Override public MappedByteBuffer map(int sizeBytes) throws 
IOException {
                     System.out.println(">>>!!!! M " + file.getName());
 
-                    if (fail != null && file.getName().endsWith(".wal") && 
fail.get())
+                    if (fail != null && 
WAL_NAME_PATTERN.matcher(file.getName()).matches() && fail.get())
                         throw new IOException("No space left on deive");
 
                     return delegate.map(sizeBytes);
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/IgniteWalIteratorSwitchSegmentTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/IgniteWalIteratorSwitchSegmentTest.java
index b34919d697e..bc8941a4966 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/IgniteWalIteratorSwitchSegmentTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/IgniteWalIteratorSwitchSegmentTest.java
@@ -44,6 +44,7 @@ import 
org.apache.ignite.internal.processors.cache.persistence.IgniteCacheDataba
 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.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.internal.processors.cache.persistence.wal.WALPointer;
 import 
org.apache.ignite.internal.processors.cache.persistence.wal.aware.SegmentAware;
@@ -64,6 +65,7 @@ import org.junit.Test;
 
 import static 
org.apache.ignite.internal.pagemem.wal.record.WALRecord.RecordType.METASTORE_DATA_RECORD;
 import static 
org.apache.ignite.internal.processors.cache.persistence.wal.serializer.RecordV1Serializer.HEADER_RECORD_SIZE;
+import static org.apache.ignite.testframework.GridTestUtils.getFieldValue;
 import static 
org.apache.ignite.testframework.GridTestUtils.getFieldValueHierarchy;
 import static org.apache.ignite.testframework.GridTestUtils.waitForCondition;
 
@@ -258,7 +260,7 @@ public class IgniteWalIteratorSwitchSegmentTest extends 
GridCommonAbstractTest {
         // If switchSegmentRecordSize more that 1, it mean that invariant is 
broke.
         // Filling tail some garbage. Simulate tail garbage on rotate segment 
in WAL work directory.
         if (switchSegmentRecordSize > 1) {
-            File seg = new File(workDir + ARCHIVE_SUB_DIR + 
"/0000000000000000.wal");
+            File seg = GridTestUtils.<NodeFileTree>getFieldValue(walMgr, 
"ft").walArchiveSegment(0);
 
             FileIOFactory ioFactory = new RandomAccessFileIOFactory();
 
@@ -383,9 +385,11 @@ public class IgniteWalIteratorSwitchSegmentTest extends 
GridCommonAbstractTest {
 
         fut.get();
 
+        NodeFileTree ft = getFieldValue(walMgr, "ft");
+
         //should started iteration from work directory but finish from archive 
directory.
-        assertEquals(workDir + WORK_SUB_DIR + File.separator + 
"0000000000000000.wal", startedSegmentPath.get());
-        assertEquals(workDir + ARCHIVE_SUB_DIR + File.separator + 
"0000000000000000.wal", finishedSegmentPath.get());
+        assertEquals(ft.walSegment(0).getAbsolutePath(), 
startedSegmentPath.get());
+        assertEquals(ft.walArchiveSegment(0).getAbsolutePath(), 
finishedSegmentPath.get());
 
         Assert.assertEquals("Not all records read during iteration.", 
recordsToWrite, actualRecords.get());
     }
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/IgniteWalRebalanceTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/IgniteWalRebalanceTest.java
index 1e2c075f2fa..de15047a705 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/IgniteWalRebalanceTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/IgniteWalRebalanceTest.java
@@ -105,6 +105,7 @@ import static java.util.stream.Collectors.toList;
 import static 
org.apache.ignite.IgniteSystemProperties.IGNITE_PDS_WAL_REBALANCE_THRESHOLD;
 import static org.apache.ignite.cluster.ClusterState.ACTIVE;
 import static 
org.apache.ignite.internal.processors.cache.persistence.CheckpointState.FINISHED;
+import static 
org.apache.ignite.internal.processors.cache.persistence.wal.FileWriteAheadLogManager.WAL_NAME_PATTERN;
 
 /**
  * Historical WAL rebalance base test.
@@ -1509,7 +1510,7 @@ public class IgniteWalRebalanceTest extends 
GridCommonAbstractTest {
         @Override public FileIO create(File file, OpenOption... modes) throws 
IOException {
             FileIO delegateIO = delegate.create(file, modes);
 
-            if (file.getName().endsWith(".wal") && failRead)
+            if (WAL_NAME_PATTERN.matcher(file.getName()).matches() && failRead)
                 return new FileIODecorator(delegateIO) {
                     @Override public int read(ByteBuffer destBuf) throws 
IOException {
                         throw new IOException("Test exception."); // IO 
exception is required for correct cleanup.
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/WalCompactionSwitchOnTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/WalCompactionSwitchOnTest.java
index f24d75bc6ed..48f42360d4b 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/WalCompactionSwitchOnTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/WalCompactionSwitchOnTest.java
@@ -18,7 +18,6 @@
 package org.apache.ignite.internal.processors.cache.persistence.db.wal;
 
 import java.io.File;
-import java.io.FileFilter;
 import org.apache.ignite.IgniteCache;
 import org.apache.ignite.cache.CacheMode;
 import org.apache.ignite.cluster.ClusterState;
@@ -27,13 +26,15 @@ import 
org.apache.ignite.configuration.DataRegionConfiguration;
 import org.apache.ignite.configuration.DataStorageConfiguration;
 import org.apache.ignite.configuration.IgniteConfiguration;
 import org.apache.ignite.internal.IgniteEx;
-import 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager;
 import org.apache.ignite.internal.util.lang.GridAbsPredicate;
-import org.apache.ignite.internal.util.typedef.internal.U;
 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.wal.FileWriteAheadLogManager.WAL_SEGMENT_FILE_COMPACTED_FILTER;
+import static 
org.apache.ignite.internal.processors.cache.persistence.wal.FileWriteAheadLogManager.WAL_SEGMENT_FILE_FILTER;
+import static 
org.apache.ignite.internal.processors.cache.persistence.wal.FileWriteAheadLogManager.WAL_SEGMENT_TEMP_FILE_COMPACTED_FILTER;
+
 /**
  * Load without compaction -> Stop -> Enable WAL Compaction -> Start.
  */
@@ -83,21 +84,13 @@ public class WalCompactionSwitchOnTest extends 
GridCommonAbstractTest {
         for (int i = 0; i < 500; i++)
             cache.put(i, i);
 
-        File walDir = U.resolveWorkDirectory(
-                ex.configuration().getWorkDirectory(),
-                "db/wal/node00-" + ex.localNode().consistentId(),
-                false
-        );
+        File walDir = ex.context().pdsFolderResolver().fileTree().wal();
 
         forceCheckpoint();
 
         GridTestUtils.waitForCondition(new GridAbsPredicate() {
             @Override public boolean apply() {
-                File[] archivedFiles = walDir.listFiles(new FileFilter() {
-                    @Override public boolean accept(File pathname) {
-                        return pathname.getName().endsWith(".wal");
-                    }
-                });
+                File[] archivedFiles = 
walDir.listFiles(WAL_SEGMENT_FILE_FILTER);
 
                 return archivedFiles.length == 39;
             }
@@ -111,29 +104,17 @@ public class WalCompactionSwitchOnTest extends 
GridCommonAbstractTest {
 
         ex.cluster().state(ClusterState.ACTIVE);
 
-        File archiveDir = U.resolveWorkDirectory(
-                ex.configuration().getWorkDirectory(),
-                "db/wal/archive/node00-" + ex.localNode().consistentId(),
-                false
-        );
+        File archiveDir = 
ex.context().pdsFolderResolver().fileTree().walArchive();
 
         GridTestUtils.waitForCondition(new GridAbsPredicate() {
             @Override public boolean apply() {
-                File[] archivedFiles = archiveDir.listFiles(new FileFilter() {
-                    @Override public boolean accept(File pathname) {
-                        return 
pathname.getName().endsWith(FilePageStoreManager.ZIP_SUFFIX);
-                    }
-                });
+                File[] archivedFiles = 
archiveDir.listFiles(WAL_SEGMENT_FILE_COMPACTED_FILTER);
 
                 return archivedFiles.length == 20;
             }
         }, 5000);
 
-        File[] tmpFiles = archiveDir.listFiles(new FileFilter() {
-            @Override public boolean accept(File pathname) {
-                return 
pathname.getName().endsWith(FilePageStoreManager.TMP_SUFFIX);
-            }
-        });
+        File[] tmpFiles = 
archiveDir.listFiles(WAL_SEGMENT_TEMP_FILE_COMPACTED_FILTER);
 
         assertEquals(0, tmpFiles.length);
     }
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/WalCompactionTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/WalCompactionTest.java
index e9da8b75e4f..e52cd9de4a9 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/WalCompactionTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/WalCompactionTest.java
@@ -17,7 +17,6 @@
 package org.apache.ignite.internal.processors.cache.persistence.db.wal;
 
 import java.io.File;
-import java.io.FilenameFilter;
 import java.io.RandomAccessFile;
 import java.nio.ByteBuffer;
 import java.util.Arrays;
@@ -44,7 +43,6 @@ import 
org.apache.ignite.internal.pagemem.wal.record.RolloverType;
 import org.apache.ignite.internal.processors.cache.persistence.DummyPageIO;
 import 
org.apache.ignite.internal.processors.cache.persistence.IgniteCacheDatabaseSharedManager;
 import 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree;
-import 
org.apache.ignite.internal.processors.cache.persistence.wal.FileDescriptor;
 import org.apache.ignite.internal.util.GridUnsafe;
 import org.apache.ignite.internal.util.typedef.internal.U;
 import org.apache.ignite.testframework.GridTestUtils;
@@ -52,7 +50,7 @@ import 
org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
 import org.junit.Test;
 
 import static java.util.stream.Collectors.toSet;
-import static 
org.apache.ignite.internal.processors.cache.persistence.file.FilePageStoreManager.ZIP_SUFFIX;
+import static 
org.apache.ignite.internal.processors.cache.persistence.wal.FileWriteAheadLogManager.WAL_SEGMENT_FILE_COMPACTED_FILTER;
 
 /**
  *
@@ -192,7 +190,7 @@ public class WalCompactionTest extends 
GridCommonAbstractTest {
 
         NodeFileTree ft = ig.context().pdsFolderResolver().fileTree();
 
-        File walSegment = new File(ft.walArchive(), FileDescriptor.fileName(0) 
+ ZIP_SUFFIX);
+        File walSegment = ft.zipWalArchiveSegment(0);
 
         // Allow compressor to compress WAL segments.
         assertTrue(GridTestUtils.waitForCondition(walSegment::exists, 15_000));
@@ -337,7 +335,7 @@ public class WalCompactionTest extends 
GridCommonAbstractTest {
 
         stopAllGrids();
 
-        File walSegment = new File(ft.walArchive(), 
FileDescriptor.fileName(0));
+        File walSegment = ft.walArchiveSegment(0);
 
         assertTrue("" + walSegment.length(), walSegment.length() < 
200_000_000);
     }
@@ -372,8 +370,8 @@ public class WalCompactionTest extends 
GridCommonAbstractTest {
 
         int emptyIdx = 5;
 
-        File walSegment = new File(ft.walArchive(), 
FileDescriptor.fileName(emptyIdx));
-        File zippedWalSegment = new File(ft.walArchive(), 
FileDescriptor.fileName(emptyIdx + 1) + ZIP_SUFFIX);
+        File walSegment = ft.walArchiveSegment(emptyIdx);
+        File zippedWalSegment = ft.zipWalArchiveSegment(emptyIdx + 1);
 
         long start = U.currentTimeMillis();
         do {
@@ -399,18 +397,11 @@ public class WalCompactionTest extends 
GridCommonAbstractTest {
         // Allow compressor to compress WAL segments.
         assertTrue(GridTestUtils.waitForCondition(zippedWalSegment::exists, 
15_000));
 
-        File[] compressedSegments = ft.walArchive().listFiles(new 
FilenameFilter() {
-            @Override public boolean accept(File dir, String name) {
-                return name.endsWith(".wal.zip");
-            }
-        });
+        File[] compressedSegments = 
ft.walArchive().listFiles(WAL_SEGMENT_FILE_COMPACTED_FILTER);
 
         long maxIdx = -1;
-        for (File f : compressedSegments) {
-            String idxPart = f.getName().substring(0, f.getName().length() - 
".wal.zip".length());
-
-            maxIdx = Math.max(maxIdx, Long.parseLong(idxPart));
-        }
+        for (File f : compressedSegments)
+            maxIdx = Math.max(maxIdx, ft.walSegmentIndex(f.toPath()));
 
         System.out.println("Max compressed index: " + maxIdx);
         assertTrue(maxIdx > emptyIdx);
@@ -484,8 +475,8 @@ public class WalCompactionTest extends 
GridCommonAbstractTest {
         ig.context().cache().context().database().wakeupForCheckpoint("Forced 
checkpoint").get();
         ig.context().cache().context().database().wakeupForCheckpoint("Forced 
checkpoint").get();
 
-        File unzippedWalSegment = new File(ft.walArchive(), 
FileDescriptor.fileName(0));
-        File walSegment = new File(ft.walArchive(), FileDescriptor.fileName(0) 
+ ZIP_SUFFIX);
+        File unzippedWalSegment = ft.walArchiveSegment(0);
+        File walSegment = ft.zipWalArchiveSegment(0);
 
         // Allow compressor to compress WAL segments.
         assertTrue(GridTestUtils.waitForCondition(() -> 
!unzippedWalSegment.exists(), 15_000));
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/pagemem/NoOpWALManager.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/pagemem/NoOpWALManager.java
index 104ad128000..89ce9010518 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/pagemem/NoOpWALManager.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/pagemem/NoOpWALManager.java
@@ -17,7 +17,6 @@
 
 package org.apache.ignite.internal.processors.cache.persistence.pagemem;
 
-import java.io.File;
 import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.internal.GridKernalContext;
 import org.apache.ignite.internal.pagemem.wal.IgniteWriteAheadLogManager;
@@ -203,11 +202,6 @@ public class NoOpWALManager implements 
IgniteWriteAheadLogManager {
         // No-op.
     }
 
-    /** {@inheritDoc} */
-    @Override public @Nullable File compactedSegment(long idx) {
-        return null;
-    }
-
     /** {@inheritDoc} */
     @Override public void awaitCompacted(long idx) {
         // No-op.
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 415fc905890..bed27b3b124 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
@@ -240,7 +240,7 @@ public class IncrementalSnapshotTest extends 
AbstractSnapshotSelfTest {
 
         long segIdx = wal.lastCompactedSegment();
 
-        U.delete(wal.compactedSegment(segIdx));
+        
U.delete(srv.context().pdsFolderResolver().fileTree().zipWalArchiveSegment(segIdx));
 
         assertThrowsWithCause(
             () -> 
srv.snapshot().createIncrementalSnapshot(SNAPSHOT_NAME).get(TIMEOUT),
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/incremental/IncrementalSnapshotRestoreTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/incremental/IncrementalSnapshotRestoreTest.java
index 9ba95490aeb..47618fa7eed 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/incremental/IncrementalSnapshotRestoreTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/incremental/IncrementalSnapshotRestoreTest.java
@@ -64,6 +64,7 @@ import 
org.apache.ignite.internal.processors.cache.distributed.dht.topology.Grid
 import 
org.apache.ignite.internal.processors.cache.distributed.near.GridNearTxFinishRequest;
 import 
org.apache.ignite.internal.processors.cache.distributed.near.GridNearTxPrepareResponse;
 import 
org.apache.ignite.internal.processors.cache.persistence.db.wal.crc.WalTestUtils;
+import 
org.apache.ignite.internal.processors.cache.persistence.filename.NodeFileTree;
 import 
org.apache.ignite.internal.processors.cache.persistence.snapshot.IgniteSnapshotManager;
 import 
org.apache.ignite.internal.processors.cache.persistence.snapshot.IgniteSnapshotVerifyException;
 import 
org.apache.ignite.internal.processors.cache.persistence.snapshot.IncrementalSnapshotMetadata;
@@ -367,7 +368,9 @@ public class IncrementalSnapshotRestoreTest extends 
AbstractIncrementalSnapshotT
 
         restartWithCleanPersistence();
 
-        File rm = new File(incrementalSnapshotWalDir(grid(1), SNP, 1), 
"0000000000000000.wal.zip");
+        NodeFileTree ft = grid(1).context().pdsFolderResolver().fileTree();
+
+        File rm = new File(incrementalSnapshotWalDir(grid(1), SNP, 1), 
ft.zipWalArchiveSegment(0).getName());
 
         assertTrue(U.delete(rm));
 
diff --git 
a/modules/dev-utils/src/test/java/org/apache/ignite/development/utils/IgniteWalConverterTest.java
 
b/modules/dev-utils/src/test/java/org/apache/ignite/development/utils/IgniteWalConverterTest.java
index ab13835ef98..444e49ec7ab 100644
--- 
a/modules/dev-utils/src/test/java/org/apache/ignite/development/utils/IgniteWalConverterTest.java
+++ 
b/modules/dev-utils/src/test/java/org/apache/ignite/development/utils/IgniteWalConverterTest.java
@@ -295,7 +295,7 @@ public class IgniteWalConverterTest extends 
GridCommonAbstractTest {
 
         final NodeFileTree ft = createWal(list, null);
 
-        final File wal = new File(ft.wal(), "0000000000000000.wal");
+        final File wal = ft.walSegment(0);
 
         try (RandomAccessFile raf = new RandomAccessFile(wal, "rw")) {
             raf.seek(RecordV1Serializer.HEADER_RECORD_SIZE); // HeaderRecord
@@ -412,7 +412,7 @@ public class IgniteWalConverterTest extends 
GridCommonAbstractTest {
 
         final NodeFileTree ft = createWal(list, null);
 
-        final File wal = new File(ft.wal(), "0000000000000000.wal");
+        final File wal = ft.walSegment(0);
 
         try (RandomAccessFile raf = new RandomAccessFile(wal, "rw")) {
             raf.seek(RecordV1Serializer.HEADER_RECORD_SIZE); // HeaderRecord


Reply via email to