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);