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

commit 599e7c45a8a5412c8c5b2c24ffaba878011e9558
Author: Ashutosh Mestry <[email protected]>
AuthorDate: Fri May 1 10:54:41 2020 -0700

    ATLAS-3773: Shadow Attributes Update Post-Migration from 0.8.
    
    (cherry picked from commit a43b5488fbd10c874d181bf27e076fd502693a93)
---
 .../repository/patches/UniqueAttributePatch.java   | 43 +++++++++++++++++++---
 1 file changed, 37 insertions(+), 6 deletions(-)

diff --git 
a/repository/src/main/java/org/apache/atlas/repository/patches/UniqueAttributePatch.java
 
b/repository/src/main/java/org/apache/atlas/repository/patches/UniqueAttributePatch.java
index 2b58119..d3111f1 100644
--- 
a/repository/src/main/java/org/apache/atlas/repository/patches/UniqueAttributePatch.java
+++ 
b/repository/src/main/java/org/apache/atlas/repository/patches/UniqueAttributePatch.java
@@ -23,7 +23,11 @@ import org.apache.atlas.pc.WorkItemManager;
 import org.apache.atlas.repository.Constants;
 import org.apache.atlas.repository.IndexException;
 import org.apache.atlas.repository.graph.GraphBackedSearchIndexer.UniqueKind;
-import org.apache.atlas.repository.graphdb.*;
+import org.apache.atlas.repository.graphdb.AtlasCardinality;
+import org.apache.atlas.repository.graphdb.AtlasGraph;
+import org.apache.atlas.repository.graphdb.AtlasGraphManagement;
+import org.apache.atlas.repository.graphdb.AtlasSchemaViolationException;
+import org.apache.atlas.repository.graphdb.AtlasVertex;
 import org.apache.atlas.repository.store.graph.v2.AtlasGraphUtilsV2;
 import org.apache.atlas.repository.store.graph.v2.EntityGraphRetriever;
 import org.apache.atlas.type.AtlasEntityType;
@@ -159,10 +163,37 @@ public class UniqueAttributePatch extends 
AtlasPatchHandler {
         protected void processItem(Long vertexId, AtlasVertex vertex, String 
typeName, AtlasEntityType entityType) {
             LOG.debug("processItem(typeName={}, vertexId={})", typeName, 
vertexId);
 
+            processIndexStringAttribute(vertexId, vertex, typeName, 
entityType);
+            processUniqueAttribute(vertexId, vertex, typeName, entityType);
+
+            LOG.debug("processItem(typeName={}, vertexId={}): Done!", 
typeName, vertexId);
+        }
+
+        private void processIndexStringAttribute(Long vertexId, AtlasVertex 
vertex, String typeName, AtlasEntityType entityType) {
+            for (AtlasAttribute attribute : 
entityType.getAllAttributes().values()) {
+                if (attribute.getAttributeDef().getIndexType() != null &&
+                        attribute.getAttributeDef().getIndexType() == 
AtlasAttributeDef.IndexType.STRING) {
+
+                    String vertexPropertyName = 
attribute.getVertexPropertyName();
+                    if (vertex.getProperty(vertexPropertyName, String.class) 
!= null) {
+                        continue;
+                    }
+
+                    Object attrVal = 
AtlasGraphUtilsV2.getEncodedProperty(vertex, attribute.getQualifiedName(), 
String.class);
+                    if (attrVal != null) {
+                        AtlasGraphUtilsV2.setEncodedProperty(vertex, 
vertexPropertyName, attrVal);
+                    }
+                }
+            }
+
+            LOG.debug("processIndexStringAttribute(typeName={}, vertexId={}): 
Done!", typeName, vertexId);
+        }
+
+        private void processUniqueAttribute(Long vertexId, AtlasVertex vertex, 
String typeName, AtlasEntityType entityType) {
             for (AtlasAttribute attribute : 
entityType.getUniqAttributes().values()) {
-                String                       uniquePropertyKey = 
attribute.getVertexUniquePropertyName();
-                Collection<? extends String> propertyKeys      = 
vertex.getPropertyKeys();
-                Object                       uniqAttrValue     = null;
+                String uniquePropertyKey = 
attribute.getVertexUniquePropertyName();
+                Collection<? extends String> propertyKeys = 
vertex.getPropertyKeys();
+                Object uniqAttrValue = null;
 
                 if (propertyKeys == null || 
!propertyKeys.contains(uniquePropertyKey)) {
                     try {
@@ -171,14 +202,14 @@ public class UniqueAttributePatch extends 
AtlasPatchHandler {
                         uniqAttrValue = 
EntityGraphRetriever.mapVertexToPrimitive(vertex, propertyKey, 
attribute.getAttributeDef());
 
                         AtlasGraphUtilsV2.setEncodedProperty(vertex, 
uniquePropertyKey, uniqAttrValue);
-                    } catch(AtlasSchemaViolationException ex) {
+                    } catch (AtlasSchemaViolationException ex) {
                         LOG.error("Duplicates detected: {}:{}:{}", typeName, 
uniqAttrValue, getIdFromVertex(vertex));
                         vertex.removeProperty(uniquePropertyKey);
                     }
                 }
             }
 
-            LOG.debug("processItem(typeName={}, vertexId={}): Done!", 
typeName, vertexId);
+            LOG.debug("processUniqueAttribute(typeName={}, vertexId={}): 
Done!", typeName, vertexId);
         }
     }
 }

Reply via email to