diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/ChangeSummarizer.java b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/ChangeSummarizer.java index 1044a65eeb9..f4e720a1db8 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/ChangeSummarizer.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/ChangeSummarizer.java @@ -56,7 +56,10 @@ public class ChangeSummarizer { new ChangeSummary() .withChangeSource(changeSource) .withChangedAt(changedAt) - .withChangedBy(changedBy))); + .withChangedBy(changedBy), + // If its a consolidation, we might have multiple changes for the same field. + // Since we are only interested in the field name, we can just take whichever. + (existing, replacement) -> existing)); } private boolean isFieldTracked(String fieldName) { diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/EntityRepository.java b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/EntityRepository.java index f02a50e695c..f6171b08f02 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/EntityRepository.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/EntityRepository.java @@ -2993,6 +2993,7 @@ public abstract class EntityRepository { ChangeSummaryMap current = Optional.ofNullable(original.getChangeDescription()) .map(ChangeDescription::getChangeSummary) + .map(changeSummaryMap -> JsonUtils.deepCopy(changeSummaryMap, ChangeSummaryMap.class)) .orElse(new ChangeSummaryMap()); Map addedSummaries = diff --git a/openmetadata-service/src/test/java/org/openmetadata/service/jdbi3/ChangeSummarizerTest.java b/openmetadata-service/src/test/java/org/openmetadata/service/jdbi3/ChangeSummarizerTest.java index 94b20168317..3ec534bd448 100644 --- a/openmetadata-service/src/test/java/org/openmetadata/service/jdbi3/ChangeSummarizerTest.java +++ b/openmetadata-service/src/test/java/org/openmetadata/service/jdbi3/ChangeSummarizerTest.java @@ -42,6 +42,26 @@ public class ChangeSummarizerTest { assert result.size() == 0; } + @Test + public void test_duplicateEntriesConsolidation() { + String fieldName = "description"; + ChangeSource changeSource = ChangeSource.MANUAL; + long updatedAt = System.currentTimeMillis(); + String updatedBy = "testUser"; + List changes = + List.of(new FieldChange().withName(fieldName), new FieldChange().withName(fieldName)); + + Map result = + changeSummarizer.summarizeChanges(Map.of(), changes, changeSource, updatedBy, updatedAt); + assert result.size() == 1; + Assertions.assertTrue(result.containsKey(fieldName)); + + result = + changeSummarizer.summarizeChanges( + result, changes, ChangeSource.AUTOMATED, "older-change", updatedAt - 100); + assert result.size() == 0; + } + @Test public void test_columnDescription() { String fieldName = "columns.column1.description";