diff --git a/hudi-common/src/main/java/org/apache/hudi/common/table/timeline/HoodieArchivedTimeline.java b/hudi-common/src/main/java/org/apache/hudi/common/table/timeline/HoodieArchivedTimeline.java index d5145ee0c6c7e..eb4dc631ed602 100644 --- a/hudi-common/src/main/java/org/apache/hudi/common/table/timeline/HoodieArchivedTimeline.java +++ b/hudi-common/src/main/java/org/apache/hudi/common/table/timeline/HoodieArchivedTimeline.java @@ -143,7 +143,11 @@ public void loadInstantDetailsInMemory(String startTs, String endTs) { public void loadCompletedInstantDetailsInMemory() { loadInstants(null, true, - record -> HoodieInstant.State.COMPLETED.toString().equals(record.get(ACTION_STATE).toString())); + record -> { + // Very old archived instants don't have action state set. + Object action = record.get(ACTION_STATE); + return action == null || HoodieInstant.State.COMPLETED.toString().equals(action.toString()); + }); } public void loadCompactionDetailsInMemory(String compactionInstantTime) { @@ -152,9 +156,13 @@ public void loadCompactionDetailsInMemory(String compactionInstantTime) { public void loadCompactionDetailsInMemory(String startTs, String endTs) { // load compactionPlan - loadInstants(new TimeRangeFilter(startTs, endTs), true, record -> - record.get(ACTION_TYPE_KEY).toString().equals(HoodieTimeline.COMPACTION_ACTION) - && HoodieInstant.State.INFLIGHT.toString().equals(record.get(ACTION_STATE).toString()) + loadInstants(new TimeRangeFilter(startTs, endTs), true, + record -> { + // Older files don't have action state set. + Object action = record.get(ACTION_STATE); + return record.get(ACTION_TYPE_KEY).toString().equals(HoodieTimeline.COMPACTION_ACTION) + && (action == null || HoodieInstant.State.INFLIGHT.toString().equals(action.toString())); + } ); }