This is an automated email from the ASF dual-hosted git repository.

pinal pushed a commit to branch atlas-2.5
in repository https://gitbox.apache.org/repos/asf/atlas.git


The following commit(s) were added to refs/heads/atlas-2.5 by this push:
     new fc4bd9d7d ATLAS-4863: NPE while deleting BusinessMetadata (#276)
fc4bd9d7d is described below

commit fc4bd9d7d480d6178bdb52f1d782344363099004
Author: Pinal Shah <60691793+pinal-s...@users.noreply.github.com>
AuthorDate: Tue Jan 28 08:32:06 2025 +0700

    ATLAS-4863: NPE while deleting BusinessMetadata (#276)
    
    (cherry picked from commit ad72e3c14ab223abbb54bec2b944d4aa57dfbae6)
---
 .../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",

Reply via email to