You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@atlas.apache.org by sa...@apache.org on 2019/12/05 04:57:18 UTC

[atlas] branch master updated: ATLAS-3545: NullPointerException while trying to delete classification

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

sarath 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 c95aba2  ATLAS-3545: NullPointerException while trying to delete classification
c95aba2 is described below

commit c95aba218b9318ce44abf574faff62908f24916d
Author: Sarath Subramanian <sa...@apache.org>
AuthorDate: Wed Dec 4 20:16:36 2019 -0800

    ATLAS-3545: NullPointerException while trying to delete classification
---
 .../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());
             }
         }