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

madhan 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 d887d8a  ATLAS-3227: fixed removal of indexes while deleting typedefs
d887d8a is described below

commit d887d8aef09bf8c6ceb9e4af9758d2bf7342c5df
Author: Madhan Neethiraj <mad...@apache.org>
AuthorDate: Sat Jun 1 12:59:06 2019 -0700

    ATLAS-3227: fixed removal of indexes while deleting typedefs
    
    (cherry picked from commit e4f0b09e216360022f004126efcc2670c1038136)
---
 .../repository/graph/GraphBackedSearchIndexer.java | 92 +++++++++-------------
 1 file changed, 36 insertions(+), 56 deletions(-)

diff --git 
a/repository/src/main/java/org/apache/atlas/repository/graph/GraphBackedSearchIndexer.java
 
b/repository/src/main/java/org/apache/atlas/repository/graph/GraphBackedSearchIndexer.java
index 1cfa202..1fc48a8 100755
--- 
a/repository/src/main/java/org/apache/atlas/repository/graph/GraphBackedSearchIndexer.java
+++ 
b/repository/src/main/java/org/apache/atlas/repository/graph/GraphBackedSearchIndexer.java
@@ -178,7 +178,7 @@ public class GraphBackedSearchIndexer implements 
SearchIndexer, ActiveStateChang
             // Invalidate the property key for deleted types
             if 
(CollectionUtils.isNotEmpty(changedTypeDefs.getDeletedTypeDefs())) {
                 for (AtlasBaseTypeDef typeDef : 
changedTypeDefs.getDeletedTypeDefs()) {
-                    cleanupIndices(management, typeDef);
+                    deleteIndexForType(management, typeDef);
                 }
             }
 
@@ -329,6 +329,27 @@ public class GraphBackedSearchIndexer implements 
SearchIndexer, ActiveStateChang
         }
     }
 
+    private void deleteIndexForType(AtlasGraphManagement management, 
AtlasBaseTypeDef typeDef) {
+        Preconditions.checkNotNull(typeDef, "Cannot process null typedef");
+
+        if (LOG.isDebugEnabled()) {
+            LOG.debug("Deleting indexes for type {}", typeDef.getName());
+        }
+
+        if (typeDef instanceof AtlasStructDef) {
+            AtlasStructDef          structDef     = (AtlasStructDef) typeDef;
+            List<AtlasAttributeDef> attributeDefs = 
structDef.getAttributeDefs();
+
+            if (CollectionUtils.isNotEmpty(attributeDefs)) {
+                for (AtlasAttributeDef attributeDef : attributeDefs) {
+                    deleteIndexForAttribute(management, typeDef.getName(), 
attributeDef);
+                }
+            }
+        }
+
+        LOG.info("Completed deleting indexes for type {}", typeDef.getName());
+    }
+
     private void createIndexForAttribute(AtlasGraphManagement management, 
String typeName, AtlasAttributeDef attributeDef) {
         final String     propertyName   = 
AtlasGraphUtilsV2.encodePropertyKey(typeName + "." + attributeDef.getName());
         AtlasCardinality cardinality    = 
toAtlasCardinality(attributeDef.getCardinality());
@@ -403,6 +424,20 @@ public class GraphBackedSearchIndexer implements 
SearchIndexer, ActiveStateChang
         }
     }
 
+    private void deleteIndexForAttribute(AtlasGraphManagement management, 
String typeName, AtlasAttributeDef attributeDef) {
+        final String propertyName = 
AtlasGraphUtilsV2.encodePropertyKey(typeName + "." + attributeDef.getName());
+
+        try {
+            if (management.containsPropertyKey(propertyName)) {
+                LOG.info("Deleting propertyKey {}, for attribute {}.{}", 
propertyName, typeName, attributeDef.getName());
+
+                management.deletePropertyKey(propertyName);
+            }
+        } catch (Exception excp) {
+            LOG.warn("Failed to delete propertyKey {}, for attribute {}.{}", 
propertyName, typeName, attributeDef.getName());
+        }
+    }
+
     private void createLabelIfNeeded(final AtlasGraphManagement management, 
final String propertyName, final String attribTypeName) {
         // If any of the referenced typename is of type Entity or Struct then 
the edge label needs to be created
         for (String typeName : 
AtlasTypeUtil.getReferencedTypeNames(attribTypeName)) {
@@ -728,61 +763,6 @@ public class GraphBackedSearchIndexer implements 
SearchIndexer, ActiveStateChang
         }
     }
 
-    private void cleanupIndices(AtlasGraphManagement management, 
AtlasBaseTypeDef typeDef) {
-        Preconditions.checkNotNull(typeDef, "Cannot process null typedef");
-        if (LOG.isDebugEnabled()) {
-            LOG.debug("Cleaning up index for {}", typeDef);
-        }
-
-        if (typeDef instanceof AtlasEnumDef) {
-            // Only handle complex types like Struct, Classification and Entity
-            return;
-        }
-
-        if (typeDef instanceof AtlasStructDef) {
-            AtlasStructDef structDef = (AtlasStructDef) typeDef;
-            List<AtlasAttributeDef> attributeDefs = 
structDef.getAttributeDefs();
-            if (CollectionUtils.isNotEmpty(attributeDefs)) {
-                for (AtlasAttributeDef attributeDef : attributeDefs) {
-                    cleanupIndexForAttribute(management, typeDef.getName(), 
attributeDef);
-                }
-            }
-        } else if (!AtlasTypeUtil.isBuiltInType(typeDef.getName())){
-            throw new IllegalArgumentException("bad data type" + 
typeDef.getName());
-        }
-    }
-
-    private void cleanupIndexForAttribute(AtlasGraphManagement management, 
String typeName, AtlasAttributeDef attributeDef) {
-        final String propertyName = 
AtlasGraphUtilsV2.encodePropertyKey(typeName + "." + attributeDef.getName());
-        String  attribTypeName    = attributeDef.getTypeName();
-        boolean isBuiltInType     = 
AtlasTypeUtil.isBuiltInType(attribTypeName);
-        boolean isArrayType       = isArrayType(attribTypeName);
-        boolean isMapType         = isMapType(attribTypeName);
-
-        try {
-            AtlasType atlasType = typeRegistry.getType(attribTypeName);
-
-            if (isClassificationType(atlasType) || isEntityType(atlasType)) {
-                LOG.warn("Ignoring non-indexable attribute {}", 
attribTypeName);
-            } else if (isBuiltInType || isEnumType(atlasType) || isArrayType 
|| isMapType) {
-                cleanupIndex(management, propertyName);
-            } else if (isStructType(atlasType)) {
-                AtlasStructDef structDef = 
typeRegistry.getStructDefByName(attribTypeName);
-                cleanupIndices(management, structDef);
-            }
-        } catch (AtlasBaseException e) {
-            LOG.error("No type exists for {}", attribTypeName, e);
-        }
-    }
-
-    private void cleanupIndex(AtlasGraphManagement management, String 
propertyKey) {
-        if (LOG.isDebugEnabled()) {
-            LOG.debug("Invalidating property key = {}", propertyKey);
-        }
-
-        management.deletePropertyKey(propertyKey);
-    }
-
     private void attemptRollback(ChangedTypeDefs changedTypeDefs, 
AtlasGraphManagement management)
             throws AtlasBaseException {
         if (null != management) {

Reply via email to