Skip to content

Commit

Permalink
ATLAS-4863: NPE while deleting BusinessMetadata (apache#276)
Browse files Browse the repository at this point in the history
  • Loading branch information
pinal-shah authored Jan 28, 2025
1 parent 4899bf3 commit ad72e3c
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -404,7 +404,7 @@ private void checkBusinessMetadataRef(String typeName) throws AtlasBaseException
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);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -262,6 +262,23 @@ public void deleteBusinessMetadataDefs() throws AtlasBaseException {
}
}

@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);
Expand Down Expand Up @@ -413,6 +430,23 @@ private AtlasBusinessMetadataDef createBusinessMetadataDef(String businessMetada
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",
Expand Down

0 comments on commit ad72e3c

Please sign in to comment.