This is an automated email from the ASF dual-hosted git repository.
pinal pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/atlas.git
The following commit(s) were added to refs/heads/master by this push:
new ad72e3c14 ATLAS-4863: NPE while deleting BusinessMetadata (#276)
ad72e3c14 is described below
commit ad72e3c14ab223abbb54bec2b944d4aa57dfbae6
Author: Pinal Shah <[email protected]>
AuthorDate: Tue Jan 28 08:32:06 2025 +0700
ATLAS-4863: NPE while deleting BusinessMetadata (#276)
---
.../graph/v2/AtlasBusinessMetadataDefStoreV2.java | 2 +-
.../v2/AtlasBusinessMetadataDefStoreV2Test.java | 34 ++++++++++++++++++++++
2 files changed, 35 insertions(+), 1 deletion(-)
diff --git
a/repository/src/main/java/org/apache/atlas/repository/store/graph/v2/AtlasBusinessMetadataDefStoreV2.java
b/repository/src/main/java/org/apache/atlas/repository/store/graph/v2/AtlasBusinessMetadataDefStoreV2.java
index ece1a231e..2aa9652bb 100644
---
a/repository/src/main/java/org/apache/atlas/repository/store/graph/v2/AtlasBusinessMetadataDefStoreV2.java
+++
b/repository/src/main/java/org/apache/atlas/repository/store/graph/v2/AtlasBusinessMetadataDefStoreV2.java
@@ -404,7 +404,7 @@ public class AtlasBusinessMetadataDefStoreV2 extends
AtlasAbstractDefStoreV2<Atl
String vertexPropertyName =
AtlasStructType.AtlasAttribute.generateVertexPropertyName(businessMetadataDef,
attributeDef, qualifiedName);
Set<String> applicableTypes =
AtlasJson.fromJson(attributeDef.getOption(AtlasBusinessMetadataDef.ATTR_OPTION_APPLICABLE_ENTITY_TYPES),
Set.class);
- if (isBusinessAttributePresent(vertexPropertyName,
applicableTypes)) {
+ if (CollectionUtils.isNotEmpty(applicableTypes) &&
isBusinessAttributePresent(vertexPropertyName, applicableTypes)) {
throw new
AtlasBaseException(AtlasErrorCode.TYPE_HAS_REFERENCES, typeName);
}
}
diff --git
a/repository/src/test/java/org/apache/atlas/repository/store/graph/v2/AtlasBusinessMetadataDefStoreV2Test.java
b/repository/src/test/java/org/apache/atlas/repository/store/graph/v2/AtlasBusinessMetadataDefStoreV2Test.java
index eaffac1b1..51ac56757 100644
---
a/repository/src/test/java/org/apache/atlas/repository/store/graph/v2/AtlasBusinessMetadataDefStoreV2Test.java
+++
b/repository/src/test/java/org/apache/atlas/repository/store/graph/v2/AtlasBusinessMetadataDefStoreV2Test.java
@@ -262,6 +262,23 @@ public class AtlasBusinessMetadataDefStoreV2Test {
}
}
+ @Test
+ public void deleteBusinessMetadataDefWithNoAssignedTypes() throws
AtlasBaseException {
+ createBusinessMetadataTypesWithoutAssignedTypes(businessMetadataName);
+ for (AtlasBusinessMetadataDef atlasBusinessMetaDataDef :
typesDefs.getBusinessMetadataDefs()) {
+ if
(atlasBusinessMetaDataDef.getName().equals(businessMetadataName)) {
+ typesDefs = new AtlasTypesDef(Collections.emptyList(),
Collections.emptyList(), Collections.emptyList(), Collections.emptyList(),
Collections.emptyList(),
+ Collections.emptyList());
+
typesDefs.setBusinessMetadataDefs(Arrays.asList(atlasBusinessMetaDataDef));
+ typeDefStore.deleteTypesDef(typesDefs);
+ }
+ }
+
+ for (AtlasBusinessMetadataDef businessMetadataDef :
typeRegistry.getAllBusinessMetadataDefs()) {
+ Assert.assertNotEquals(businessMetadataDef.getName(),
businessMetadataName);
+ }
+ }
+
@Test
public void updateBusinessMetadataDefs() throws AtlasBaseException {
createBusinessMetadataTypes(businessMetadataName);
@@ -413,6 +430,23 @@ public class AtlasBusinessMetadataDefStoreV2Test {
return businessMetadataDef1;
}
+ private void createBusinessMetadataTypesWithoutAssignedTypes(String
businessMetadataName) throws AtlasBaseException {
+ List<AtlasBusinessMetadataDef> businessMetadataDefs = new
ArrayList(typesDefs.getBusinessMetadataDefs());
+
businessMetadataDefs.add(createBusinessMetadataDefWithoutAssignedTypes(businessMetadataName));
+ typesDefs.setBusinessMetadataDefs(businessMetadataDefs);
+ AtlasTypesDef createdTypesDef = typeDefStore.createTypesDef(typesDefs);
+
+ Assert.assertEquals(createdTypesDef.getBusinessMetadataDefs(),
businessMetadataDefs, "Data integrity issue while persisting");
+ }
+
+ private AtlasBusinessMetadataDef
createBusinessMetadataDefWithoutAssignedTypes(String businessMetadataName) {
+ AtlasBusinessMetadataDef businessMetadataDef1 = new
AtlasBusinessMetadataDef(businessMetadataName, "test_no_attributes", null);
+ addBusinessAttribute(businessMetadataDef1,
"test_businessMetadata_attribute1", Collections.emptySet(), "int",
+ AtlasStructDef.AtlasAttributeDef.Cardinality.SINGLE);
+ TestUtilsV2.populateSystemAttributes(businessMetadataDef1);
+ return businessMetadataDef1;
+ }
+
private AtlasBusinessMetadataDef createBusinessMetadataDef2(String
businessMetadataName) {
AtlasBusinessMetadataDef businessMetadataDef1 = new
AtlasBusinessMetadataDef(businessMetadataName, "test_description", null);
addBusinessAttribute(businessMetadataDef1,
"test_businessMetadata_attribute1", Collections.emptySet(), "int",