diff --git a/paimon-core/src/main/java/org/apache/paimon/utils/SnapshotManager.java b/paimon-core/src/main/java/org/apache/paimon/utils/SnapshotManager.java index 49da83bfe48a..ae70d7aec5d1 100644 --- a/paimon-core/src/main/java/org/apache/paimon/utils/SnapshotManager.java +++ b/paimon-core/src/main/java/org/apache/paimon/utils/SnapshotManager.java @@ -745,7 +745,7 @@ public List findSnapshotsForIdentifiers( } public void commitChangelog(Changelog changelog, long id) throws IOException { - fileIO.writeFile(longLivedChangelogPath(id), changelog.toJson(), false); + fileIO.writeFile(longLivedChangelogPath(id), changelog.toJson(), true); } /** diff --git a/paimon-core/src/test/java/org/apache/paimon/utils/SnapshotManagerTest.java b/paimon-core/src/test/java/org/apache/paimon/utils/SnapshotManagerTest.java index 26480cf411bb..e828a0c90a9d 100644 --- a/paimon-core/src/test/java/org/apache/paimon/utils/SnapshotManagerTest.java +++ b/paimon-core/src/test/java/org/apache/paimon/utils/SnapshotManagerTest.java @@ -39,6 +39,7 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.fail; +import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; /** Tests for {@link SnapshotManager}. */ public class SnapshotManagerTest { @@ -398,4 +399,15 @@ public void testLongLivedChangelog() throws Exception { Assertions.assertThat(snapshotManager.latestSnapshotId()).isEqualTo(10); Assertions.assertThat(snapshotManager.changelog(1)).isNotNull(); } + + @Test + public void testCommitChangelogWhenSameChangelogCommitTwice() throws IOException { + FileIO localFileIO = LocalFileIO.create(); + SnapshotManager snapshotManager = + new SnapshotManager(localFileIO, new Path(tempDir.toString())); + long id = 1L; + Changelog changelog = createChangelogWithMillis(id, 1L); + snapshotManager.commitChangelog(changelog, id); + assertDoesNotThrow(() -> snapshotManager.commitChangelog(changelog, id)); + } }