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/07/29 23:35:14 UTC

[atlas] branch branch-2.0 updated: ATLAS-3327 Create internal vertex property for classification names and propagated classification names

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 c9d29c0  ATLAS-3327 Create internal vertex property for classification names and propagated classification names
c9d29c0 is described below

commit c9d29c0cf62767180b695c0625da281c68a509aa
Author: Le Ma <lm...@cloudera.com>
AuthorDate: Thu Jul 18 14:42:40 2019 -0700

    ATLAS-3327 Create internal vertex property for classification names and propagated classification names
    
    (cherry picked from commit 854a8a012fac73b68c2458cd92ca7026aef1f03d)
---
 .../org/apache/atlas/repository/Constants.java     | 20 ++++----
 .../apache/atlas/repository/graph/GraphHelper.java |  7 ++-
 .../patches/ClassificationTextPatch.java           |  1 +
 .../repository/store/graph/v1/DeleteHandlerV1.java | 12 +++--
 .../store/graph/v2/EntityGraphMapper.java          | 55 +++++++++++++++-------
 .../apache/atlas/web/adapters/TestEntityREST.java  | 53 +++++++++++++++++++--
 6 files changed, 113 insertions(+), 35 deletions(-)

diff --git a/common/src/main/java/org/apache/atlas/repository/Constants.java b/common/src/main/java/org/apache/atlas/repository/Constants.java
index eb536cd..38a5198 100644
--- a/common/src/main/java/org/apache/atlas/repository/Constants.java
+++ b/common/src/main/java/org/apache/atlas/repository/Constants.java
@@ -39,8 +39,8 @@ public final class Constants {
     public static final String GUID_PROPERTY_KEY                = encodePropertyKey(INTERNAL_PROPERTY_KEY_PREFIX + "guid");
     public static final String RELATIONSHIP_GUID_PROPERTY_KEY   = encodePropertyKey(RELATIONSHIP_PROPERTY_KEY_PREFIX + GUID_PROPERTY_KEY);
     public static final String HISTORICAL_GUID_PROPERTY_KEY     = encodePropertyKey(INTERNAL_PROPERTY_KEY_PREFIX + "historicalGuids");
-    public static final String FREETEXT_REQUEST_HANDLER = "/freetext";
-    public static final String TERMS_REQUEST_HANDLER = "/terms";
+    public static final String FREETEXT_REQUEST_HANDLER         = "/freetext";
+    public static final String TERMS_REQUEST_HANDLER            = "/terms";
 
     /**
      * Entity type name property key.
@@ -82,15 +82,17 @@ public final class Constants {
     /**
      * Trait names property key and index name.
      */
-    public static final String TRAIT_NAMES_PROPERTY_KEY            = encodePropertyKey(INTERNAL_PROPERTY_KEY_PREFIX + "traitNames");
-    public static final String PROPAGATED_TRAIT_NAMES_PROPERTY_KEY = encodePropertyKey(INTERNAL_PROPERTY_KEY_PREFIX + "propagatedTraitNames");
+    public static final String TRAIT_NAMES_PROPERTY_KEY             = encodePropertyKey(INTERNAL_PROPERTY_KEY_PREFIX + "traitNames");
+    public static final String PROPAGATED_TRAIT_NAMES_PROPERTY_KEY  = encodePropertyKey(INTERNAL_PROPERTY_KEY_PREFIX + "propagatedTraitNames");
 
-    public static final String VERSION_PROPERTY_KEY          = encodePropertyKey(INTERNAL_PROPERTY_KEY_PREFIX + "version");
-    public static final String STATE_PROPERTY_KEY            = encodePropertyKey(INTERNAL_PROPERTY_KEY_PREFIX + "state");
-    public static final String CREATED_BY_KEY                = encodePropertyKey(INTERNAL_PROPERTY_KEY_PREFIX + "createdBy");
-    public static final String CLASSIFICATION_TEXT_KEY       = encodePropertyKey(INTERNAL_PROPERTY_KEY_PREFIX + "classificationsText");
+    public static final String VERSION_PROPERTY_KEY                 = encodePropertyKey(INTERNAL_PROPERTY_KEY_PREFIX + "version");
+    public static final String STATE_PROPERTY_KEY                   = encodePropertyKey(INTERNAL_PROPERTY_KEY_PREFIX + "state");
+    public static final String CREATED_BY_KEY                       = encodePropertyKey(INTERNAL_PROPERTY_KEY_PREFIX + "createdBy");
+    public static final String CLASSIFICATION_TEXT_KEY              = encodePropertyKey(INTERNAL_PROPERTY_KEY_PREFIX + "classificationsText");
+    public static final String CLASSIFICATION_NAMES_KEY             = encodePropertyKey(INTERNAL_PROPERTY_KEY_PREFIX + "classificationNames");
+    public static final String PROPAGATED_CLASSIFICATION_NAMES_KEY  = encodePropertyKey(INTERNAL_PROPERTY_KEY_PREFIX + "propagatedClassificationNames");
 
-    public static final String MODIFIED_BY_KEY      = encodePropertyKey(INTERNAL_PROPERTY_KEY_PREFIX + "modifiedBy");
+    public static final String MODIFIED_BY_KEY                      = encodePropertyKey(INTERNAL_PROPERTY_KEY_PREFIX + "modifiedBy");
 
     /**
      * Patch vertices property keys.
diff --git a/repository/src/main/java/org/apache/atlas/repository/graph/GraphHelper.java b/repository/src/main/java/org/apache/atlas/repository/graph/GraphHelper.java
index 449f382..d5361fe 100755
--- a/repository/src/main/java/org/apache/atlas/repository/graph/GraphHelper.java
+++ b/repository/src/main/java/org/apache/atlas/repository/graph/GraphHelper.java
@@ -92,6 +92,7 @@ import static org.apache.atlas.repository.Constants.CREATED_BY_KEY;
 import static org.apache.atlas.repository.Constants.ENTITY_TYPE_PROPERTY_KEY;
 import static org.apache.atlas.repository.Constants.MODIFICATION_TIMESTAMP_PROPERTY_KEY;
 import static org.apache.atlas.repository.Constants.MODIFIED_BY_KEY;
+import static org.apache.atlas.repository.Constants.PROPAGATED_CLASSIFICATION_NAMES_KEY;
 import static org.apache.atlas.repository.Constants.PROPAGATED_TRAIT_NAMES_PROPERTY_KEY;
 import static org.apache.atlas.repository.Constants.RELATIONSHIPTYPE_BLOCKED_PROPAGATED_CLASSIFICATIONS_KEY;
 import static org.apache.atlas.repository.Constants.RELATIONSHIPTYPE_TAG_PROPAGATION_KEY;
@@ -658,12 +659,16 @@ public final class GraphHelper {
         return element.toString();
     }
 
-    public static void addToPropagatedTraitNames(AtlasVertex entityVertex, String classificationName) {
+    public static void addToPropagatedClassificationAndTraitNames(AtlasVertex entityVertex, String classificationName) {
         if (LOG.isDebugEnabled()) {
             LOG.debug("Adding property {} = \"{}\" to vertex {}", PROPAGATED_TRAIT_NAMES_PROPERTY_KEY, classificationName, string(entityVertex));
         }
 
         entityVertex.addListProperty(PROPAGATED_TRAIT_NAMES_PROPERTY_KEY, classificationName);
+
+        String propClsNames = entityVertex.getProperty(PROPAGATED_CLASSIFICATION_NAMES_KEY, String.class);
+        propClsNames        = StringUtils.isEmpty(propClsNames)? classificationName : propClsNames + "|" + classificationName;
+        entityVertex.setProperty(PROPAGATED_CLASSIFICATION_NAMES_KEY, propClsNames);
     }
 
     /**
diff --git a/repository/src/main/java/org/apache/atlas/repository/patches/ClassificationTextPatch.java b/repository/src/main/java/org/apache/atlas/repository/patches/ClassificationTextPatch.java
index eeaf3d9..20a6cbf 100644
--- a/repository/src/main/java/org/apache/atlas/repository/patches/ClassificationTextPatch.java
+++ b/repository/src/main/java/org/apache/atlas/repository/patches/ClassificationTextPatch.java
@@ -72,6 +72,7 @@ public class ClassificationTextPatch extends AtlasPatchHandler {
             }
 
             getEntityGraphMapper().updateClassificationText(vertex);
+            getEntityGraphMapper().setClassificationNames(vertex);
 
             if(LOG.isDebugEnabled()) {
                 LOG.debug("processItem(typeName={}, vertexId={}): Done!", typeName, vertexId);
diff --git a/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/DeleteHandlerV1.java b/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/DeleteHandlerV1.java
index 0de9229..60b3e57 100644
--- a/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/DeleteHandlerV1.java
+++ b/repository/src/main/java/org/apache/atlas/repository/store/graph/v1/DeleteHandlerV1.java
@@ -64,6 +64,7 @@ import static org.apache.atlas.repository.Constants.CLASSIFICATION_ENTITY_STATUS
 import static org.apache.atlas.repository.Constants.CLASSIFICATION_LABEL;
 import static org.apache.atlas.repository.Constants.MODIFICATION_TIMESTAMP_PROPERTY_KEY;
 import static org.apache.atlas.repository.Constants.MODIFIED_BY_KEY;
+import static org.apache.atlas.repository.Constants.PROPAGATED_CLASSIFICATION_NAMES_KEY;
 import static org.apache.atlas.repository.Constants.PROPAGATED_TRAIT_NAMES_PROPERTY_KEY;
 import static org.apache.atlas.repository.Constants.RELATIONSHIP_GUID_PROPERTY_KEY;
 import static org.apache.atlas.repository.graph.GraphHelper.*;
@@ -449,7 +450,7 @@ public abstract class DeleteHandlerV1 {
 
                 graphHelper.addClassificationEdge(propagatedEntityVertex, classificationVertex, true);
 
-                addToPropagatedTraitNames(propagatedEntityVertex, classificationName);
+                addToPropagatedClassificationAndTraitNames(propagatedEntityVertex, classificationName);
 
                 // record add propagation details to send notifications at the end
                 RequestContext      context        = RequestContext.get();
@@ -613,7 +614,7 @@ public abstract class DeleteHandlerV1 {
 
                         graphHelper.removeEdge(propagatedEdge);
 
-                        removeFromPropagatedTraitNames(impactedEntityVertex, classificationName);
+                        removeFromPropagatedClassificationAndTraitNames(impactedEntityVertex, classificationName);
                     } else {
                         if (LOG.isDebugEnabled()) {
                             LOG.debug(" --> Not removing propagated classification edge from [{}] --> [{}][{}] using edge label: [{}], since edge doesn't exist",
@@ -665,7 +666,7 @@ public abstract class DeleteHandlerV1 {
                        getTypeName(entityVertex), GraphHelper.getGuid(entityVertex), CLASSIFICATION_LABEL);
         }
 
-        removeFromPropagatedTraitNames(entityVertex, classificationName);
+        removeFromPropagatedClassificationAndTraitNames(entityVertex, classificationName);
 
         deleteEdge(edge, true);
 
@@ -986,16 +987,17 @@ public abstract class DeleteHandlerV1 {
         return Objects.nonNull(entityType) && entityType.isInternalType();
     }
 
-    private void removeFromPropagatedTraitNames(AtlasVertex entityVertex, String classificationName) {
+    private void removeFromPropagatedClassificationAndTraitNames(AtlasVertex entityVertex, String classificationName) {
         if (entityVertex != null && StringUtils.isNotEmpty(classificationName)) {
             List<String> propagatedTraitNames = getTraitNames(entityVertex, true);
 
             propagatedTraitNames.remove(classificationName);
 
             entityVertex.removeProperty(PROPAGATED_TRAIT_NAMES_PROPERTY_KEY);
+            entityVertex.removeProperty(PROPAGATED_CLASSIFICATION_NAMES_KEY);
 
             for (String propagatedTraitName : propagatedTraitNames) {
-                addToPropagatedTraitNames(entityVertex, propagatedTraitName);
+                addToPropagatedClassificationAndTraitNames(entityVertex, propagatedTraitName);
             }
         }
     }
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 af74313..de46979 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
@@ -81,6 +81,7 @@ import static org.apache.atlas.model.instance.EntityMutations.EntityOperation.PA
 import static org.apache.atlas.model.instance.EntityMutations.EntityOperation.UPDATE;
 import static org.apache.atlas.model.typedef.AtlasStructDef.AtlasAttributeDef.Cardinality.SET;
 import static org.apache.atlas.repository.Constants.*;
+import static org.apache.atlas.repository.graph.GraphHelper.DEFAULT_REMOVE_PROPAGATIONS_ON_ENTITY_DELETE;
 import static org.apache.atlas.repository.graph.GraphHelper.getCollectionElementsUsingRelationship;
 import static org.apache.atlas.repository.graph.GraphHelper.getClassificationEdge;
 import static org.apache.atlas.repository.graph.GraphHelper.getClassificationVertex;
@@ -105,8 +106,9 @@ import static org.apache.atlas.type.AtlasStructType.AtlasAttribute.AtlasRelation
 public class EntityGraphMapper {
     private static final Logger LOG = LoggerFactory.getLogger(EntityGraphMapper.class);
 
-    private static final String SOFT_REF_FORMAT      = "%s:%s";
-    private static final int INDEXED_STR_SAFE_LEN = AtlasConfiguration.GRAPHSTORE_INDEXED_STRING_SAFE_LENGTH.getInt();
+    private static final String SOFT_REF_FORMAT               = "%s:%s";
+    private static final int INDEXED_STR_SAFE_LEN             = AtlasConfiguration.GRAPHSTORE_INDEXED_STRING_SAFE_LENGTH.getInt();
+    private static final String CLASSIFICATION_NAME_DELIMITER = "|";
 
     private final GraphHelper               graphHelper = GraphHelper.getInstance();
     private final AtlasGraph                graph;
@@ -116,7 +118,7 @@ public class EntityGraphMapper {
     private final AtlasEntityChangeNotifier entityChangeNotifier;
     private final AtlasInstanceConverter    instanceConverter;
     private final EntityGraphRetriever      entityRetriever;
-    private final FullTextMapperV2 fullTextMapperV2;
+    private final FullTextMapperV2          fullTextMapperV2;
 
     @Inject
     public EntityGraphMapper(DeleteHandlerDelegate deleteDelegate, AtlasTypeRegistry typeRegistry, AtlasGraph atlasGraph,
@@ -1510,7 +1512,7 @@ public class EntityGraphMapper {
                     LOG.debug("Adding classification [{}] to [{}] using edge label: [{}]", classificationName, entityType.getTypeName(), getTraitLabel(classificationName));
                 }
 
-                AtlasGraphUtilsV2.addEncodedProperty(entityVertex, TRAIT_NAMES_PROPERTY_KEY, classificationName);
+                addClassificationAndTraitNames(entityVertex, classificationName);
 
                 // add a new AtlasVertex for the struct or trait instance
                 AtlasVertex classificationVertex = createClassificationVertex(classification);
@@ -1575,7 +1577,6 @@ public class EntityGraphMapper {
                 AtlasEntity               entity               = instanceConverter.getAndCacheEntity(entityGuid);
                 List<AtlasClassification> addedClassifications = StringUtils.equals(entityGuid, guid) ? addClassifications : propagations.get(vertex);
 
-
                 vertex.setProperty(CLASSIFICATION_TEXT_KEY, fullTextMapperV2.getClassificationTextForEntity(entity));
                 if (CollectionUtils.isNotEmpty(addedClassifications)) {
                     entityChangeNotifier.onClassificationAddedToEntity(entity, addedClassifications);
@@ -1675,7 +1676,7 @@ public class EntityGraphMapper {
 
         traitNames.remove(classificationName);
 
-        updateTraitNamesProperty(entityVertex, traitNames);
+        updateClassificationAndTraitNames(entityVertex, traitNames);
 
         updateModificationMetadata(entityVertex);
 
@@ -1696,6 +1697,38 @@ public class EntityGraphMapper {
         return entity;
     }
 
+    public void setClassificationNames(AtlasVertex vertex) {
+        List<String> clsNamesList     = getTraitNames(vertex, false);
+        List<String> propClsNamesList = getTraitNames(vertex, true);
+        String clsNames               = StringUtils.join(clsNamesList, CLASSIFICATION_NAME_DELIMITER);
+        String propClsNames           = StringUtils.join(propClsNamesList, CLASSIFICATION_NAME_DELIMITER);
+
+        vertex.setProperty(CLASSIFICATION_NAMES_KEY, clsNames);
+        vertex.setProperty(PROPAGATED_CLASSIFICATION_NAMES_KEY, propClsNames);
+    }
+
+    private void addClassificationAndTraitNames(AtlasVertex entityVertex, String classificationName) {
+
+        AtlasGraphUtilsV2.addEncodedProperty(entityVertex, TRAIT_NAMES_PROPERTY_KEY, classificationName);
+
+        String clsNames = entityVertex.getProperty(CLASSIFICATION_NAMES_KEY, String.class);
+        clsNames = StringUtils.isEmpty(clsNames) ? classificationName : clsNames + CLASSIFICATION_NAME_DELIMITER + classificationName;
+        entityVertex.setProperty(CLASSIFICATION_NAMES_KEY, clsNames);
+    }
+
+    private void updateClassificationAndTraitNames(AtlasVertex entityVertex, List<String> traitNames) {
+        if (entityVertex != null) {
+            entityVertex.removeProperty(TRAIT_NAMES_PROPERTY_KEY);
+            entityVertex.removeProperty(CLASSIFICATION_NAMES_KEY);
+
+            for (String traitName : traitNames) {
+                AtlasGraphUtilsV2.addEncodedProperty(entityVertex, TRAIT_NAMES_PROPERTY_KEY, traitName);
+            }
+
+            entityVertex.setProperty(CLASSIFICATION_NAMES_KEY, StringUtils.join(traitNames, CLASSIFICATION_NAME_DELIMITER));
+        }
+    }
+
     public void updateClassifications(EntityMutationContext context, String guid, List<AtlasClassification> classifications) throws AtlasBaseException {
         if (CollectionUtils.isEmpty(classifications)) {
             throw new AtlasBaseException(AtlasErrorCode.INVALID_CLASSIFICATION_PARAMS, "update", guid);
@@ -1918,16 +1951,6 @@ public class EntityGraphMapper {
         }
     }
 
-    private void updateTraitNamesProperty(AtlasVertex entityVertex, List<String> traitNames) {
-        if (entityVertex != null) {
-            entityVertex.removeProperty(TRAIT_NAMES_PROPERTY_KEY);
-
-            for (String traitName : traitNames) {
-                AtlasGraphUtilsV2.addEncodedProperty(entityVertex, TRAIT_NAMES_PROPERTY_KEY, traitName);
-            }
-        }
-    }
-
     private void validateClassificationExists(List<String> existingClassifications, List<String> suppliedClassifications) throws AtlasBaseException {
         Set<String> existingNames = new HashSet<>(existingClassifications);
         for (String classificationName : suppliedClassifications) {
diff --git a/webapp/src/test/java/org/apache/atlas/web/adapters/TestEntityREST.java b/webapp/src/test/java/org/apache/atlas/web/adapters/TestEntityREST.java
index c8015ec..cc87959 100644
--- a/webapp/src/test/java/org/apache/atlas/web/adapters/TestEntityREST.java
+++ b/webapp/src/test/java/org/apache/atlas/web/adapters/TestEntityREST.java
@@ -30,6 +30,9 @@ import org.apache.atlas.model.instance.AtlasEntityHeader;
 import org.apache.atlas.model.instance.EntityMutationResponse;
 import org.apache.atlas.model.instance.EntityMutations;
 import org.apache.atlas.model.typedef.AtlasTypesDef;
+import org.apache.atlas.repository.Constants;
+import org.apache.atlas.repository.graphdb.AtlasVertex;
+import org.apache.atlas.repository.store.graph.v2.AtlasGraphUtilsV2;
 import org.apache.atlas.store.AtlasTypeDefStore;
 import org.apache.atlas.type.AtlasTypeUtil;
 import org.apache.atlas.web.rest.EntityREST;
@@ -62,7 +65,7 @@ public class TestEntityREST {
     private AtlasEntity dbEntity;
 
     private AtlasClassification testClassification;
-    
+
     private AtlasClassification phiClassification;
 
     @BeforeClass
@@ -108,7 +111,7 @@ public class TestEntityREST {
     }
 
     @Test(dependsOnMethods = "testGetEntityById")
-    public void  testAddAndGetClassification() throws Exception {
+    public void testAddAndGetClassification() throws Exception {
 
         List<AtlasClassification> classifications = new ArrayList<>();
         testClassification = new AtlasClassification(TestUtilsV2.CLASSIFICATION, new HashMap<String, Object>() {{ put("tag", "tagName"); }});
@@ -126,6 +129,13 @@ public class TestEntityREST {
 
         Assert.assertNotNull(retrievedClassification);
         Assert.assertEquals(retrievedClassification, testClassification);
+
+        // For ATLAS-3327 to test internal properties are added properly.
+        AtlasVertex vertex = AtlasGraphUtilsV2.findByGuid(dbEntity.getGuid());
+        String classificationNames = vertex.getProperty(Constants.CLASSIFICATION_NAMES_KEY, String.class);
+
+        Assert.assertNotNull(classificationNames);
+        Assert.assertEquals(classificationNames, TestUtilsV2.CLASSIFICATION);
     }
 
     @Test(dependsOnMethods = "testGetEntityById")
@@ -156,6 +166,14 @@ public class TestEntityREST {
             Assert.assertEquals(retrievedClassification.getAttribute(attrName), phiClassification.getAttribute(attrName));
         }
 
+        // For ATLAS-3327 to test internal properties are added properly.
+        String expectedClsNames = TestUtilsV2.CLASSIFICATION + "|" + TestUtilsV2.PHI;
+        AtlasVertex vertex = AtlasGraphUtilsV2.findByGuid(dbEntity.getGuid());
+        String classificationNames = vertex.getProperty(Constants.CLASSIFICATION_NAMES_KEY, String.class);
+
+        Assert.assertNotNull(classificationNames);
+        Assert.assertEquals(classificationNames, expectedClsNames);
+
         // update multiple tags attributes
         phiClassification = new AtlasClassification(TestUtilsV2.PHI, new HashMap<String, Object>() {{
             put("stringAttr", "sample_string_v2");
@@ -178,11 +196,24 @@ public class TestEntityREST {
         Assert.assertNotNull(updatedClassification);
         Assert.assertEquals(updatedClassification.getAttribute("tag"), testClassification.getAttribute("tag"));
 
+        vertex = AtlasGraphUtilsV2.findByGuid(dbEntity.getGuid());
+        classificationNames = vertex.getProperty(Constants.CLASSIFICATION_NAMES_KEY, String.class);
+
+        Assert.assertNotNull(classificationNames);
+        Assert.assertEquals(classificationNames, expectedClsNames);
+
         deleteClassification(dbEntity.getGuid(), TestUtilsV2.PHI);
+
+        expectedClsNames = TestUtilsV2.CLASSIFICATION;
+        vertex = AtlasGraphUtilsV2.findByGuid(dbEntity.getGuid());
+        classificationNames = vertex.getProperty(Constants.CLASSIFICATION_NAMES_KEY, String.class);
+
+        Assert.assertNotNull(classificationNames);
+        Assert.assertEquals(classificationNames, expectedClsNames);
     }
 
     @Test(dependsOnMethods = "testAddAndGetClassification")
-    public void  testGetEntityWithAssociations() throws Exception {
+    public void testGetEntityWithAssociations() throws Exception {
 
         AtlasEntityWithExtInfo entity = entityREST.getById(dbEntity.getGuid(), false, false);
         final List<AtlasClassification> retrievedClassifications = entity.getEntity().getClassifications();
@@ -192,11 +223,18 @@ public class TestEntityREST {
     }
 
     @Test(dependsOnMethods = "testGetEntityWithAssociations")
-    public void  testDeleteClassification() throws Exception {
+    public void testDeleteClassification() throws Exception {
 
         deleteClassification(dbEntity.getGuid(), TestUtilsV2.CLASSIFICATION);
         final AtlasClassification.AtlasClassifications retrievedClassifications = entityREST.getClassifications(dbEntity.getGuid());
 
+        String expectedClsNames    = "";
+        AtlasVertex vertex         = AtlasGraphUtilsV2.findByGuid(dbEntity.getGuid());
+        String classificationNames = vertex.getProperty(Constants.CLASSIFICATION_NAMES_KEY, String.class);
+
+        Assert.assertNotNull(classificationNames);
+        Assert.assertEquals(classificationNames, expectedClsNames);
+
         Assert.assertNotNull(retrievedClassifications);
         Assert.assertEquals(retrievedClassifications.getList().size(), 0);
     }
@@ -219,6 +257,13 @@ public class TestEntityREST {
 
         Assert.assertEquals(classifications, retrievedClassificationsList);
 
+        String expectedClsNames    = TestUtilsV2.CLASSIFICATION;
+        AtlasVertex vertex         = AtlasGraphUtilsV2.findByGuid(dbEntity.getGuid());
+        String classificationNames = vertex.getProperty(Constants.CLASSIFICATION_NAMES_KEY, String.class);
+
+        Assert.assertNotNull(classificationNames);
+        Assert.assertEquals(classificationNames, expectedClsNames);
+
         final AtlasClassification retrievedClassification = entityREST.getClassification(dbEntity.getGuid(), TestUtilsV2.CLASSIFICATION);
 
         Assert.assertNotNull(retrievedClassification);