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 6df11fe2242f..48d4f48989b0 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 void notifyCheckpointComplete(long checkpointId) { // when the earliest inflight instant has timed out, assumes it has failed // already and just rolls it back. - // comment out: do we really need the timeout rollback ? - // CompactionUtil.rollbackEarliestCompaction(table, conf); + CompactionUtil.rollbackEarliestCompaction(table, conf); scheduleCompaction(table, checkpointId); } catch (Throwable throwable) { // make it fail-safe @@ -99,7 +98,8 @@ public void notifyCheckpointComplete(long checkpointId) { private void scheduleCompaction(HoodieFlinkTable 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 @@ private void scheduleCompaction(HoodieFlinkTable table, long checkpointId) th return; } + Option 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