From 3ba6b8deefb69929995b6aa86333d3adb82894dd Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Thu, 18 Sep 2025 14:20:42 +0000 Subject: [PATCH] [BugFix] Fix get max compaction score NullPointerException bug (backport #63268) (#63276) Signed-off-by: wyb Co-authored-by: wyb --- .../java/com/starrocks/lake/compaction/CompactionMgr.java | 4 ++-- .../com/starrocks/lake/compaction/CompactionMgrTest.java | 8 ++++++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/fe/fe-core/src/main/java/com/starrocks/lake/compaction/CompactionMgr.java b/fe/fe-core/src/main/java/com/starrocks/lake/compaction/CompactionMgr.java index bad13484321..bd2fe1fca14 100644 --- a/fe/fe-core/src/main/java/com/starrocks/lake/compaction/CompactionMgr.java +++ b/fe/fe-core/src/main/java/com/starrocks/lake/compaction/CompactionMgr.java @@ -206,8 +206,8 @@ public class CompactionMgr implements MemoryTrackable { } public double getMaxCompactionScore() { - return partitionStatisticsHashMap.values().stream().mapToDouble(stat -> stat.getCompactionScore().getMax()) - .max().orElse(0); + return partitionStatisticsHashMap.values().stream().filter(stat -> stat.getCompactionScore() != null) + .mapToDouble(stat -> stat.getCompactionScore().getMax()).max().orElse(0); } void enableCompactionAfter(PartitionIdentifier partition, long delayMs) { diff --git a/fe/fe-core/src/test/java/com/starrocks/lake/compaction/CompactionMgrTest.java b/fe/fe-core/src/test/java/com/starrocks/lake/compaction/CompactionMgrTest.java index 1e88a583723..ed45402535e 100644 --- a/fe/fe-core/src/test/java/com/starrocks/lake/compaction/CompactionMgrTest.java +++ b/fe/fe-core/src/test/java/com/starrocks/lake/compaction/CompactionMgrTest.java @@ -166,6 +166,7 @@ public class CompactionMgrTest { PartitionIdentifier partition2 = new PartitionIdentifier(1, 2, 4); Assertions.assertEquals(0, compactionMgr.getMaxCompactionScore(), delta); + // load and compact partition 1 compactionMgr.handleLoadingFinished(partition1, 2, System.currentTimeMillis(), Quantiles.compute(Lists.newArrayList(1d))); Assertions.assertEquals(1, compactionMgr.getMaxCompactionScore(), delta); @@ -173,10 +174,17 @@ public class CompactionMgrTest { Quantiles.compute(Lists.newArrayList(2d)), 1234, false); Assertions.assertEquals(2, compactionMgr.getMaxCompactionScore(), delta); + // load partition 2 compactionMgr.handleLoadingFinished(partition2, 2, System.currentTimeMillis(), Quantiles.compute(Lists.newArrayList(3d))); Assertions.assertEquals(3, compactionMgr.getMaxCompactionScore(), delta); + // set partition 2 compaction score to null + PartitionStatistics statistics2 = compactionMgr.getStatistics(partition2); + statistics2.setCompactionScore(null); + Assertions.assertEquals(2, compactionMgr.getMaxCompactionScore(), delta); + + // remove partition 2 compactionMgr.removePartition(partition2); Assertions.assertEquals(2, compactionMgr.getMaxCompactionScore(), delta); }