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

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


The following commit(s) were added to refs/heads/master by this push:
     new 679878566c [core] Manifest read pool in expiration use 
scanManifestParallelism (#9395)
679878566c is described below

commit 679878566c615ddf0f212b19ec8ff6c3832f4f74
Author: yuzelin <[email protected]>
AuthorDate: Wed Aug 26 15:02:29 2026 +0800

    [core] Manifest read pool in expiration use scanManifestParallelism (#9395)
---
 .../src/main/java/org/apache/paimon/AbstractFileStore.java |  9 ++++++---
 .../org/apache/paimon/operation/ChangelogDeletion.java     |  8 ++++++--
 .../java/org/apache/paimon/operation/FileDeletionBase.java | 13 +++++++++----
 .../java/org/apache/paimon/operation/SnapshotDeletion.java |  8 ++++++--
 .../main/java/org/apache/paimon/operation/TagDeletion.java |  8 ++++++--
 .../org/apache/paimon/operation/ExpireSnapshotsTest.java   |  6 ++++--
 .../java/org/apache/paimon/operation/FileDeletionTest.java | 14 ++++++++++----
 7 files changed, 47 insertions(+), 19 deletions(-)

diff --git a/paimon-core/src/main/java/org/apache/paimon/AbstractFileStore.java 
b/paimon-core/src/main/java/org/apache/paimon/AbstractFileStore.java
index 1bf2a59e3f..25c64029ad 100644
--- a/paimon-core/src/main/java/org/apache/paimon/AbstractFileStore.java
+++ b/paimon-core/src/main/java/org/apache/paimon/AbstractFileStore.java
@@ -344,7 +344,8 @@ abstract class AbstractFileStore<T> implements FileStore<T> 
{
                 newStatsFileHandler(),
                 options.changelogProducer() != 
CoreOptions.ChangelogProducer.NONE,
                 options.cleanEmptyDirectories(),
-                options.fileOperationThreadNum());
+                options.fileOperationThreadNum(),
+                options.scanManifestParallelism());
     }
 
     @Override
@@ -357,7 +358,8 @@ abstract class AbstractFileStore<T> implements FileStore<T> 
{
                 newIndexFileHandler(),
                 newStatsFileHandler(),
                 options.cleanEmptyDirectories(),
-                options.fileOperationThreadNum());
+                options.fileOperationThreadNum(),
+                options.scanManifestParallelism());
     }
 
     @Override
@@ -375,7 +377,8 @@ abstract class AbstractFileStore<T> implements FileStore<T> 
{
                 newIndexFileHandler(),
                 newStatsFileHandler(),
                 options.cleanEmptyDirectories(),
-                options.fileOperationThreadNum());
+                options.fileOperationThreadNum(),
+                options.scanManifestParallelism());
     }
 
     public abstract Comparator<InternalRow> newKeyComparator();
diff --git 
a/paimon-core/src/main/java/org/apache/paimon/operation/ChangelogDeletion.java 
b/paimon-core/src/main/java/org/apache/paimon/operation/ChangelogDeletion.java
index ba64eeecab..9689f272e2 100644
--- 
a/paimon-core/src/main/java/org/apache/paimon/operation/ChangelogDeletion.java
+++ 
b/paimon-core/src/main/java/org/apache/paimon/operation/ChangelogDeletion.java
@@ -31,6 +31,8 @@ import org.apache.paimon.manifest.ManifestList;
 import org.apache.paimon.stats.StatsFileHandler;
 import org.apache.paimon.utils.FileStorePathFactory;
 
+import javax.annotation.Nullable;
+
 import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.LinkedHashSet;
@@ -49,7 +51,8 @@ public class ChangelogDeletion extends 
FileDeletionBase<Changelog> {
             IndexFileHandler indexFileHandler,
             StatsFileHandler statsFileHandler,
             boolean cleanEmptyDirectories,
-            int fileOperationThreadNum) {
+            int fileOperationThreadNum,
+            @Nullable Integer manifestReadParallelism) {
         super(
                 fileIO,
                 pathFactory,
@@ -58,7 +61,8 @@ public class ChangelogDeletion extends 
FileDeletionBase<Changelog> {
                 indexFileHandler,
                 statsFileHandler,
                 cleanEmptyDirectories,
-                fileOperationThreadNum);
+                fileOperationThreadNum,
+                manifestReadParallelism);
     }
 
     @Override
diff --git 
a/paimon-core/src/main/java/org/apache/paimon/operation/FileDeletionBase.java 
b/paimon-core/src/main/java/org/apache/paimon/operation/FileDeletionBase.java
index 50222d2c16..724c0354cd 100644
--- 
a/paimon-core/src/main/java/org/apache/paimon/operation/FileDeletionBase.java
+++ 
b/paimon-core/src/main/java/org/apache/paimon/operation/FileDeletionBase.java
@@ -44,6 +44,8 @@ import org.apache.paimon.utils.SnapshotManager;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import javax.annotation.Nullable;
+
 import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.util.ArrayList;
@@ -81,6 +83,7 @@ public abstract class FileDeletionBase<T extends Snapshot> {
 
     private final Executor fileExecutor;
     private final int fileOperationParallelism;
+    @Nullable private final Integer manifestReadParallelism;
 
     protected boolean changelogDecoupled;
 
@@ -98,7 +101,8 @@ public abstract class FileDeletionBase<T extends Snapshot> {
             IndexFileHandler indexFileHandler,
             StatsFileHandler statsFileHandler,
             boolean cleanEmptyDirectories,
-            int fileOperationThreadNum) {
+            int fileOperationThreadNum,
+            @Nullable Integer manifestReadParallelism) {
         this.fileIO = fileIO;
         this.pathFactory = pathFactory;
         this.manifestFile = manifestFile;
@@ -112,6 +116,7 @@ public abstract class FileDeletionBase<T extends Snapshot> {
                 fileOperationThreadNum > 0
                         ? fileOperationThreadNum
                         : Runtime.getRuntime().availableProcessors();
+        this.manifestReadParallelism = manifestReadParallelism;
     }
 
     public Executor fileExecutor() {
@@ -257,7 +262,7 @@ public abstract class FileDeletionBase<T extends Snapshot> {
                             }
                         },
                         manifests,
-                        fileOperationParallelism);
+                        manifestReadParallelism);
 
         List<Path> dataFiles = new ArrayList<>();
         DataFilePathFactories factories = new 
DataFilePathFactories(pathFactory);
@@ -276,7 +281,7 @@ public abstract class FileDeletionBase<T extends Snapshot> {
         return ManifestReadThreadPool.sequentialBatchedExecute(
                 manifest -> 
manifestFile.readExpireFileEntries(manifest.fileName()),
                 manifests,
-                fileOperationParallelism);
+                manifestReadParallelism);
     }
 
     public void cleanDataFiles(Collection<Path> dataFiles) {
@@ -463,7 +468,7 @@ public abstract class FileDeletionBase<T extends Snapshot> {
             futures.add(
                     CompletableFuture.supplyAsync(
                             () -> manifestSkippingSet(skippingSnapshot),
-                            
ManifestReadThreadPool.getExecutorService(fileOperationParallelism)));
+                            
ManifestReadThreadPool.getExecutorService(manifestReadParallelism)));
         }
 
         Set<String> skippingSet = new HashSet<>();
diff --git 
a/paimon-core/src/main/java/org/apache/paimon/operation/SnapshotDeletion.java 
b/paimon-core/src/main/java/org/apache/paimon/operation/SnapshotDeletion.java
index f97ec0474d..00bb731d03 100644
--- 
a/paimon-core/src/main/java/org/apache/paimon/operation/SnapshotDeletion.java
+++ 
b/paimon-core/src/main/java/org/apache/paimon/operation/SnapshotDeletion.java
@@ -29,6 +29,8 @@ import org.apache.paimon.manifest.ManifestList;
 import org.apache.paimon.stats.StatsFileHandler;
 import org.apache.paimon.utils.FileStorePathFactory;
 
+import javax.annotation.Nullable;
+
 import java.util.List;
 import java.util.Set;
 import java.util.function.Predicate;
@@ -47,7 +49,8 @@ public class SnapshotDeletion extends 
FileDeletionBase<Snapshot> {
             StatsFileHandler statsFileHandler,
             boolean produceChangelog,
             boolean cleanEmptyDirectories,
-            int fileOperationThreadNum) {
+            int fileOperationThreadNum,
+            @Nullable Integer manifestReadParallelism) {
         super(
                 fileIO,
                 pathFactory,
@@ -56,7 +59,8 @@ public class SnapshotDeletion extends 
FileDeletionBase<Snapshot> {
                 indexFileHandler,
                 statsFileHandler,
                 cleanEmptyDirectories,
-                fileOperationThreadNum);
+                fileOperationThreadNum,
+                manifestReadParallelism);
         this.produceChangelog = produceChangelog;
     }
 
diff --git 
a/paimon-core/src/main/java/org/apache/paimon/operation/TagDeletion.java 
b/paimon-core/src/main/java/org/apache/paimon/operation/TagDeletion.java
index ff3e05f9aa..e6f9d9d673 100644
--- a/paimon-core/src/main/java/org/apache/paimon/operation/TagDeletion.java
+++ b/paimon-core/src/main/java/org/apache/paimon/operation/TagDeletion.java
@@ -35,6 +35,8 @@ import org.apache.paimon.utils.FileStorePathFactory;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import javax.annotation.Nullable;
+
 import java.io.IOException;
 import java.util.Collection;
 import java.util.HashMap;
@@ -57,7 +59,8 @@ public class TagDeletion extends FileDeletionBase<Snapshot> {
             IndexFileHandler indexFileHandler,
             StatsFileHandler statsFileHandler,
             boolean cleanEmptyDirectories,
-            int fileOperationThreadNum) {
+            int fileOperationThreadNum,
+            @Nullable Integer manifestReadParallelism) {
         super(
                 fileIO,
                 pathFactory,
@@ -66,7 +69,8 @@ public class TagDeletion extends FileDeletionBase<Snapshot> {
                 indexFileHandler,
                 statsFileHandler,
                 cleanEmptyDirectories,
-                fileOperationThreadNum);
+                fileOperationThreadNum,
+                manifestReadParallelism);
     }
 
     @Override
diff --git 
a/paimon-core/src/test/java/org/apache/paimon/operation/ExpireSnapshotsTest.java
 
b/paimon-core/src/test/java/org/apache/paimon/operation/ExpireSnapshotsTest.java
index 46c7626f11..946144af58 100644
--- 
a/paimon-core/src/test/java/org/apache/paimon/operation/ExpireSnapshotsTest.java
+++ 
b/paimon-core/src/test/java/org/apache/paimon/operation/ExpireSnapshotsTest.java
@@ -1353,7 +1353,8 @@ public class ExpireSnapshotsTest {
                     store.newStatsFileHandler(),
                     store.options().changelogProducer() != 
CoreOptions.ChangelogProducer.NONE,
                     store.options().cleanEmptyDirectories(),
-                    store.options().fileOperationThreadNum());
+                    store.options().fileOperationThreadNum(),
+                    store.options().scanManifestParallelism());
             this.minBlockedSnapshotId = minBlockedSnapshotId;
             this.maxBlockedSnapshotId = maxBlockedSnapshotId;
         }
@@ -1426,7 +1427,8 @@ public class ExpireSnapshotsTest {
                     store.newStatsFileHandler(),
                     store.options().changelogProducer() != 
CoreOptions.ChangelogProducer.NONE,
                     store.options().cleanEmptyDirectories(),
-                    store.options().fileOperationThreadNum());
+                    store.options().fileOperationThreadNum(),
+                    store.options().scanManifestParallelism());
         }
 
         @Override
diff --git 
a/paimon-core/src/test/java/org/apache/paimon/operation/FileDeletionTest.java 
b/paimon-core/src/test/java/org/apache/paimon/operation/FileDeletionTest.java
index ee4eccd1d5..49345b0e98 100644
--- 
a/paimon-core/src/test/java/org/apache/paimon/operation/FileDeletionTest.java
+++ 
b/paimon-core/src/test/java/org/apache/paimon/operation/FileDeletionTest.java
@@ -56,6 +56,8 @@ import org.junit.jupiter.api.io.TempDir;
 import org.junit.jupiter.params.ParameterizedTest;
 import org.junit.jupiter.params.provider.ValueSource;
 
+import javax.annotation.Nullable;
+
 import java.io.IOException;
 import java.nio.file.Files;
 import java.nio.file.Paths;
@@ -748,7 +750,8 @@ public class FileDeletionTest {
                         store.newStatsFileHandler(),
                         store.options().changelogProducer() != 
CoreOptions.ChangelogProducer.NONE,
                         store.options().cleanEmptyDirectories(),
-                        store.options().fileOperationThreadNum());
+                        store.options().fileOperationThreadNum(),
+                        store.options().scanManifestParallelism());
 
         ExpireSnapshots expireSnapshots =
                 new ExpireSnapshotsImpl(
@@ -813,7 +816,8 @@ public class FileDeletionTest {
                         store.newStatsFileHandler(),
                         store.options().changelogProducer() != 
CoreOptions.ChangelogProducer.NONE,
                         store.options().cleanEmptyDirectories(),
-                        store.options().fileOperationThreadNum());
+                        store.options().fileOperationThreadNum(),
+                        store.options().scanManifestParallelism());
         ExpireSnapshots expireSnapshots =
                 new ExpireSnapshotsImpl(
                         snapshotManager, changelogManager, snapshotDeletion, 
tagManager);
@@ -952,7 +956,8 @@ public class FileDeletionTest {
                 StatsFileHandler statsFileHandler,
                 boolean produceChangelog,
                 boolean cleanEmptyDirectories,
-                int deleteFileThreadNum) {
+                int deleteFileThreadNum,
+                @Nullable Integer scanManifestParallelism) {
             super(
                     fileIO,
                     pathFactory,
@@ -962,7 +967,8 @@ public class FileDeletionTest {
                     statsFileHandler,
                     produceChangelog,
                     cleanEmptyDirectories,
-                    deleteFileThreadNum);
+                    deleteFileThreadNum,
+                    scanManifestParallelism);
         }
 
         @Override

Reply via email to