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

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


The following commit(s) were added to refs/heads/branch-2.0 by this push:
     new 6b96a40  ATLAS-3545: NullPointerException while trying to delete 
classification
6b96a40 is described below

commit 6b96a40d1787ebeae247140c49af5de2fd59b1d4
Author: Sarath Subramanian <[email protected]>
AuthorDate: Wed Dec 4 20:16:36 2019 -0800

    ATLAS-3545: NullPointerException while trying to delete classification
    
    (cherry picked from commit c95aba218b9318ce44abf574faff62908f24916d)
---
 .../store/graph/v2/EntityGraphMapper.java          |  8 ++++
 .../store/graph/v2/EntityGraphRetriever.java       | 51 ++++++++++++++--------
 2 files changed, 41 insertions(+), 18 deletions(-)

diff --git 
a/repository/src/main/java/org/apache/atlas/repository/store/graph/v2/EntityGraphMapper.java
 
b/repository/src/main/java/org/apache/atlas/repository/store/graph/v2/EntityGraphMapper.java
index a114d25..a415d30 100644
--- 
a/repository/src/main/java/org/apache/atlas/repository/store/graph/v2/EntityGraphMapper.java
+++ 
b/repository/src/main/java/org/apache/atlas/repository/store/graph/v2/EntityGraphMapper.java
@@ -1862,6 +1862,10 @@ public class EntityGraphMapper {
         AtlasVertex         classificationVertex = 
getClassificationVertex(entityVertex, classificationName);
         AtlasClassification classification       = 
entityRetriever.toAtlasClassification(classificationVertex);
 
+        if (classification == null) {
+            throw new 
AtlasBaseException(AtlasErrorCode.CLASSIFICATION_NOT_FOUND, classificationName);
+        }
+
         // remove classification from propagated entities if propagation is 
turned on
         if (isPropagationEnabled(classificationVertex)) {
             List<AtlasVertex> propagatedEntityVertices = 
deleteDelegate.getHandler().removeTagPropagation(classificationVertex);
@@ -2028,6 +2032,10 @@ public class EntityGraphMapper {
 
             AtlasClassification currentClassification = 
entityRetriever.toAtlasClassification(classificationVertex);
 
+            if (currentClassification == null) {
+                continue;
+            }
+
             validateAndNormalizeForUpdate(classification);
 
             boolean isClassificationUpdated = false;
diff --git 
a/repository/src/main/java/org/apache/atlas/repository/store/graph/v2/EntityGraphRetriever.java
 
b/repository/src/main/java/org/apache/atlas/repository/store/graph/v2/EntityGraphRetriever.java
index 6b11173..8a24fa1 100644
--- 
a/repository/src/main/java/org/apache/atlas/repository/store/graph/v2/EntityGraphRetriever.java
+++ 
b/repository/src/main/java/org/apache/atlas/repository/store/graph/v2/EntityGraphRetriever.java
@@ -277,20 +277,27 @@ public class EntityGraphRetriever {
     }
 
     public AtlasClassification toAtlasClassification(AtlasVertex 
classificationVertex) throws AtlasBaseException {
-        AtlasClassification ret = new 
AtlasClassification(getTypeName(classificationVertex));
+        AtlasClassification ret                = null;
+        String              classificationName = 
getTypeName(classificationVertex);
 
-        
ret.setEntityGuid(AtlasGraphUtilsV2.getEncodedProperty(classificationVertex, 
CLASSIFICATION_ENTITY_GUID, String.class));
-        
ret.setEntityStatus(getClassificationEntityStatus(classificationVertex));
-        ret.setPropagate(isPropagationEnabled(classificationVertex));
-        
ret.setRemovePropagationsOnEntityDelete(getRemovePropagations(classificationVertex));
+        if (StringUtils.isEmpty(classificationName)) {
+            LOG.warn("Ignoring invalid classification vertex: {}", 
AtlasGraphUtilsV2.toString(classificationVertex));
+        } else {
+            ret = new AtlasClassification(classificationName);
 
-        String strValidityPeriods = 
AtlasGraphUtilsV2.getEncodedProperty(classificationVertex, 
CLASSIFICATION_VALIDITY_PERIODS_KEY, String.class);
+            
ret.setEntityGuid(AtlasGraphUtilsV2.getEncodedProperty(classificationVertex, 
CLASSIFICATION_ENTITY_GUID, String.class));
+            
ret.setEntityStatus(getClassificationEntityStatus(classificationVertex));
+            ret.setPropagate(isPropagationEnabled(classificationVertex));
+            
ret.setRemovePropagationsOnEntityDelete(getRemovePropagations(classificationVertex));
 
-        if (strValidityPeriods != null) {
-            ret.setValidityPeriods(AtlasJson.fromJson(strValidityPeriods, 
TIME_BOUNDARIES_LIST_TYPE));
-        }
+            String strValidityPeriods = 
AtlasGraphUtilsV2.getEncodedProperty(classificationVertex, 
CLASSIFICATION_VALIDITY_PERIODS_KEY, String.class);
 
-        mapAttributes(classificationVertex, ret, null);
+            if (strValidityPeriods != null) {
+                ret.setValidityPeriods(AtlasJson.fromJson(strValidityPeriods, 
TIME_BOUNDARIES_LIST_TYPE));
+            }
+
+            mapAttributes(classificationVertex, ret, null);
+        }
 
         return ret;
     }
@@ -621,10 +628,12 @@ public class EntityGraphRetriever {
             Iterator<AtlasEdge> iterator = edges.iterator();
 
             while (iterator.hasNext()) {
-                AtlasEdge edge = iterator.next();
+                AtlasEdge           classificationEdge   = iterator.next();
+                AtlasVertex         classificationVertex = classificationEdge 
!= null ? classificationEdge.getInVertex() : null;
+                AtlasClassification classification       = 
toAtlasClassification(classificationVertex);
 
-                if (edge != null) {
-                    ret.add(toAtlasClassification(edge.getInVertex()));
+                if (classification != null) {
+                    ret.add(classification);
                 }
             }
         }
@@ -711,12 +720,15 @@ public class EntityGraphRetriever {
         List<AtlasEdge> edges = getAllClassificationEdges(entityVertex);
 
         if (CollectionUtils.isNotEmpty(edges)) {
-            List<AtlasClassification> allClassifications                 = new 
ArrayList<>();
+            List<AtlasClassification> allClassifications = new ArrayList<>();
 
             for (AtlasEdge edge : edges) {
-                AtlasVertex classificationVertex = edge.getInVertex();
+                AtlasVertex         classificationVertex = edge.getInVertex();
+                AtlasClassification classification       = 
toAtlasClassification(classificationVertex);
 
-                
allClassifications.add(toAtlasClassification(classificationVertex));
+                if (classification != null) {
+                    allClassifications.add(classification);
+                }
             }
 
             entity.setClassifications(allClassifications);
@@ -1387,7 +1399,10 @@ public class EntityGraphRetriever {
         for (AtlasVertex classificationVertex : classificationVertices) {
             String              classificationId = 
classificationVertex.getIdForDisplay();
             AtlasClassification classification   = 
toAtlasClassification(classificationVertex);
-            String              entityGuid       = 
classification.getEntityGuid();
+
+            if (classification == null) {
+                continue;
+            }
 
             if (blockedClassificationIds.contains(classificationId)) {
                 blockedClassifications.add(classification);
@@ -1397,7 +1412,7 @@ public class EntityGraphRetriever {
 
             // add entity headers to referred entities
             if (extendedInfo) {
-                addToReferredEntities(relationshipWithExtInfo, entityGuid);
+                addToReferredEntities(relationshipWithExtInfo, 
classification.getEntityGuid());
             }
         }
 

Reply via email to