From 3644f120e2bd77bcfe9de4d6fb55f39717998661 Mon Sep 17 00:00:00 2001 From: Justin Donn Date: Wed, 27 Nov 2024 14:27:47 -0800 Subject: [PATCH] fix(relationship): fix bug in extractRelationshipFromAspect (#482) --- .../java/com/linkedin/metadata/dao/utils/EBeanDAOUtils.java | 4 ++++ .../com/linkedin/metadata/dao/utils/EBeanDAOUtilsTest.java | 4 +++- .../testing/AnnotatedAspectBarWithRelationshipFields.pdl | 5 +++++ 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/dao-impl/ebean-dao/src/main/java/com/linkedin/metadata/dao/utils/EBeanDAOUtils.java b/dao-impl/ebean-dao/src/main/java/com/linkedin/metadata/dao/utils/EBeanDAOUtils.java index 510411ff7..6ae211bb9 100644 --- a/dao-impl/ebean-dao/src/main/java/com/linkedin/metadata/dao/utils/EBeanDAOUtils.java +++ b/dao-impl/ebean-dao/src/main/java/com/linkedin/metadata/dao/utils/EBeanDAOUtils.java @@ -405,6 +405,10 @@ public static LocalRelationshipCriterion buildRelationshipFieldCriterion(LocalRe } else if (!(obj instanceof List) || ((List) obj).isEmpty() || !(((List) obj).get(0) instanceof RecordTemplate)) { return; } + // filter out all non-primitive, non-relationship, non-list fields + if (!(obj instanceof List)) { + return; + } List relationshipsList = (List) obj; ModelType modelType = parseModelTypeFromGmaAnnotation(relationshipsList.get(0)); if (modelType == ModelType.RELATIONSHIP) { diff --git a/dao-impl/ebean-dao/src/test/java/com/linkedin/metadata/dao/utils/EBeanDAOUtilsTest.java b/dao-impl/ebean-dao/src/test/java/com/linkedin/metadata/dao/utils/EBeanDAOUtilsTest.java index c2d7ee2ed..2f2b31dd8 100644 --- a/dao-impl/ebean-dao/src/test/java/com/linkedin/metadata/dao/utils/EBeanDAOUtilsTest.java +++ b/dao-impl/ebean-dao/src/test/java/com/linkedin/metadata/dao/utils/EBeanDAOUtilsTest.java @@ -645,6 +645,7 @@ public void testExtractRelationshipsFromAspect() throws URISyntaxException { // relationshipFoos -> [foo1, foo2] // relationshipBars -> [bar1] // moreRelationshipFoos -> not present + // nonPrimitiveNonRelationshipField -> commonAspect2 // } // expect: // [[foo1, foo2], [bar1]] @@ -655,7 +656,8 @@ public void testExtractRelationshipsFromAspect() throws URISyntaxException { .setRelationshipFoo1(test3) // don't set relationshipFoo2 fields .setRelationshipFoos(relationshipFoos) - .setRelationshipBars(relationshipBars); // don't set moreRelationshipFoos field + .setRelationshipBars(relationshipBars) // don't set moreRelationshipFoos field + .setNonPrimitiveNonRelationshipField(new CommonAspect()); results = EBeanDAOUtils.extractRelationshipsFromAspect(barWithRelationshipFields); assertEquals(2, results.size()); diff --git a/gradle-plugins/metadata-annotations-test-models/src/main/pegasus/com/linkedin/testing/AnnotatedAspectBarWithRelationshipFields.pdl b/gradle-plugins/metadata-annotations-test-models/src/main/pegasus/com/linkedin/testing/AnnotatedAspectBarWithRelationshipFields.pdl index 01c46c616..b43a1178c 100644 --- a/gradle-plugins/metadata-annotations-test-models/src/main/pegasus/com/linkedin/testing/AnnotatedAspectBarWithRelationshipFields.pdl +++ b/gradle-plugins/metadata-annotations-test-models/src/main/pegasus/com/linkedin/testing/AnnotatedAspectBarWithRelationshipFields.pdl @@ -51,4 +51,9 @@ record AnnotatedAspectBarWithRelationshipFields { * For unit tests */ moreRelationshipFoos: optional array[AnnotatedRelationshipFoo] + + /** + * For unit tests + */ + nonPrimitiveNonRelationshipField: optional CommonAspect } \ No newline at end of file