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

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


The following commit(s) were added to refs/heads/master by this push:
     new d6c258660 [core] Fix outputlevel is still 0 in extreme scenarios 
(#2033)
d6c258660 is described below

commit d6c25866009ae4341f68eb037cac0be20c75cadf
Author: LPL <[email protected]>
AuthorDate: Wed Sep 20 08:06:51 2023 -0500

    [core] Fix outputlevel is still 0 in extreme scenarios (#2033)
---
 .../mergetree/compact/UniversalCompaction.java       |  4 ++++
 .../compact/ForceUpLevel0CompactionTest.java         |  2 +-
 .../mergetree/compact/UniversalCompactionTest.java   | 20 ++++++++++++++++++++
 3 files changed, 25 insertions(+), 1 deletion(-)

diff --git 
a/paimon-core/src/main/java/org/apache/paimon/mergetree/compact/UniversalCompaction.java
 
b/paimon-core/src/main/java/org/apache/paimon/mergetree/compact/UniversalCompaction.java
index 86e7597a1..5db0fa5e5 100644
--- 
a/paimon-core/src/main/java/org/apache/paimon/mergetree/compact/UniversalCompaction.java
+++ 
b/paimon-core/src/main/java/org/apache/paimon/mergetree/compact/UniversalCompaction.java
@@ -171,6 +171,10 @@ public class UniversalCompaction implements 
CompactStrategy {
             }
         }
 
+        if (runCount == runs.size()) {
+            outputLevel = maxLevel;
+        }
+
         return CompactUnit.fromLevelRuns(outputLevel, runs.subList(0, 
runCount));
     }
 }
diff --git 
a/paimon-core/src/test/java/org/apache/paimon/mergetree/compact/ForceUpLevel0CompactionTest.java
 
b/paimon-core/src/test/java/org/apache/paimon/mergetree/compact/ForceUpLevel0CompactionTest.java
index 9c8fac85b..07eedc921 100644
--- 
a/paimon-core/src/test/java/org/apache/paimon/mergetree/compact/ForceUpLevel0CompactionTest.java
+++ 
b/paimon-core/src/test/java/org/apache/paimon/mergetree/compact/ForceUpLevel0CompactionTest.java
@@ -45,7 +45,7 @@ public class ForceUpLevel0CompactionTest {
 
         result = compaction.pick(3, Arrays.asList(run(0, 1), run(1, 10)));
         assertThat(result).isPresent();
-        assertThat(result.get().outputLevel()).isEqualTo(1);
+        assertThat(result.get().outputLevel()).isEqualTo(2);
 
         result = compaction.pick(3, Arrays.asList(run(0, 1), run(0, 5), run(2, 
10)));
         assertThat(result).isPresent();
diff --git 
a/paimon-core/src/test/java/org/apache/paimon/mergetree/compact/UniversalCompactionTest.java
 
b/paimon-core/src/test/java/org/apache/paimon/mergetree/compact/UniversalCompactionTest.java
index 4c4020343..6e5127c63 100644
--- 
a/paimon-core/src/test/java/org/apache/paimon/mergetree/compact/UniversalCompactionTest.java
+++ 
b/paimon-core/src/test/java/org/apache/paimon/mergetree/compact/UniversalCompactionTest.java
@@ -94,6 +94,26 @@ public class UniversalCompactionTest {
         assertThat(results).isEqualTo(new long[] {1, 2, 3});
     }
 
+    @Test
+    public void testExtremeCaseNoOutputLevel0() {
+        UniversalCompaction compaction = new UniversalCompaction(200, 1, 5);
+
+        Optional<CompactUnit> pick =
+                compaction.pick(
+                        6,
+                        Arrays.asList(
+                                level(0, 1),
+                                level(0, 1),
+                                level(0, 1),
+                                level(0, 1024),
+                                level(0, 1024 * 1024)));
+
+        assertThat(pick.isPresent()).isTrue();
+        long[] results = 
pick.get().files().stream().mapToLong(DataFileMeta::fileSize).toArray();
+        assertThat(results).isEqualTo(new long[] {1, 1, 1, 1024, 1024 * 1024});
+        assertThat(pick.get().outputLevel()).isEqualTo(5);
+    }
+
     @Test
     public void testSizeAmplification() {
         UniversalCompaction compaction = new UniversalCompaction(25, 0, 1);

Reply via email to