diff --git a/hudi-flink-datasource/hudi-flink/src/main/java/org/apache/hudi/sink/compact/CompactionPlanOperator.java b/hudi-flink-datasource/hudi-flink/src/main/java/org/apache/hudi/sink/compact/CompactionPlanOperator.java index 6df11fe22..48d4f4898 100644 --- a/hudi-flink-datasource/hudi-flink/src/main/java/org/apache/hudi/sink/compact/CompactionPlanOperator.java +++ b/hudi-flink-datasource/hudi-flink/src/main/java/org/apache/hudi/sink/compact/CompactionPlanOperator.java @@ -88,8 +88,7 @@ public class CompactionPlanOperator extends AbstractStreamOperator table, long checkpointId) throws IOException { // the first instant takes the highest priority. - Option firstRequested = table.getActiveTimeline().filterPendingCompactionTimeline() + HoodieTimeline pendingCompactionTimeline = table.getActiveTimeline().filterPendingCompactionTimeline(); + Option firstRequested = pendingCompactionTimeline .filter(instant -> instant.getState() == HoodieInstant.State.REQUESTED).firstInstant(); if (!firstRequested.isPresent()) { // do nothing. @@ -107,6 +107,13 @@ public class CompactionPlanOperator extends AbstractStreamOperator firstInflight = pendingCompactionTimeline + .filter(instant -> instant.getState() == HoodieInstant.State.INFLIGHT).firstInstant(); + if (firstInflight.isPresent()) { + LOG.warn("Waiting for pending compaction instant : " + firstInflight + " to complete, skip scheduling new compaction plans"); + return; + } + String compactionInstantTime = firstRequested.get().getTimestamp(); // generate compaction plan