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 e0fad53203896024ca722e67b21d2bd737de9705
Author: Madhan Neethiraj <mad...@apache.org>
AuthorDate: Thu Oct 24 16:39:45 2019 -0700

    ATLAS-3492: updated object-id attributes in audit logs to replace 
unassigned-guids with assigned-guids
    
    (cherry picked from commit f687fb7d12d5ed752b85f813fbd550e26105daeb)
---
 .../store/graph/v2/EntityGraphMapper.java          | 62 +++++++++++++++++++---
 .../main/java/org/apache/atlas/RequestContext.java | 39 ++++++++++++--
 2 files changed, 91 insertions(+), 10 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 48466c1..749c307 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
@@ -597,6 +597,8 @@ public class EntityGraphMapper {
                                                       true, 
ctx.getAttribute().getRelationshipEdgeDirection(), ctx.getReferringVertex());
                 }
 
+                setAssignedGuid(ctx.getValue(), context.getGuidAssignments());
+
                 return newEdge;
             }
 
@@ -626,6 +628,8 @@ public class EntityGraphMapper {
             }
         }
 
+        setAssignedGuid(ctx.getValue(), context.getGuidAssignments());
+
         return ret;
     }
 
@@ -886,10 +890,16 @@ public class EntityGraphMapper {
         AtlasVertex entityVertex = 
context.getDiscoveryContext().getResolvedEntityVertex(guid);
 
         if (entityVertex == null) {
-            AtlasObjectId objId = getObjectId(ctx.getValue());
+            if (AtlasTypeUtil.isAssignedGuid(guid)) {
+                entityVertex = context.getVertex(guid);
+            }
+
+            if (entityVertex == null) {
+                AtlasObjectId objId = getObjectId(ctx.getValue());
 
-            if (objId != null) {
-                entityVertex = 
context.getDiscoveryContext().getResolvedEntityVertex(objId);
+                if (objId != null) {
+                    entityVertex = 
context.getDiscoveryContext().getResolvedEntityVertex(objId);
+                }
             }
         }
 
@@ -921,14 +931,21 @@ public class EntityGraphMapper {
             LOG.debug("==> mapObjectIdValueUsingRelationship({})", ctx);
         }
 
-        AtlasVertex attributeVertex = 
context.getDiscoveryContext().getResolvedEntityVertex(getGuid(ctx.getValue()));
+        String      guid            = getGuid(ctx.getValue());
+        AtlasVertex attributeVertex = 
context.getDiscoveryContext().getResolvedEntityVertex(guid);
         AtlasVertex entityVertex    = ctx.getReferringVertex();
         AtlasEdge   ret;
 
         if (attributeVertex == null) {
-            AtlasObjectId objectId = getObjectId(ctx.getValue());
+            if (AtlasTypeUtil.isAssignedGuid(guid)) {
+                attributeVertex = context.getVertex(guid);
+            }
+
+            if (attributeVertex == null) {
+                AtlasObjectId objectId = getObjectId(ctx.getValue());
 
-            attributeVertex = (objectId != null) ? 
context.getDiscoveryContext().getResolvedEntityVertex(objectId) : null;
+                attributeVertex = (objectId != null) ? 
context.getDiscoveryContext().getResolvedEntityVertex(objectId) : null;
+            }
         }
 
         if (attributeVertex == null) {
@@ -1287,6 +1304,39 @@ public class EntityGraphMapper {
         return null;
     }
 
+    private static void setAssignedGuid(Object val, Map<String, String> 
guidAssignements) {
+        if (val != null && MapUtils.isNotEmpty(guidAssignements)) {
+            if (val instanceof AtlasObjectId) {
+                AtlasObjectId objId = (AtlasObjectId) val;
+                String        guid  = objId.getGuid();
+
+                if (StringUtils.isNotEmpty(guid) && 
!AtlasTypeUtil.isAssignedGuid(guid)) {
+                    String assignedGuid = guidAssignements.get(guid);
+
+                    if (StringUtils.isNotEmpty(assignedGuid)) {
+                        RequestContext.get().recordEntityGuidUpdate(objId, 
guid);
+
+                        objId.setGuid(assignedGuid);
+                    }
+                }
+            } else if (val instanceof Map) {
+                Map    objId   = (Map) val;
+                Object guidVal = objId.get(AtlasObjectId.KEY_GUID);
+                String guid    = objId != null ? guidVal.toString() : null;
+
+                if (StringUtils.isNotEmpty(guid) && 
!AtlasTypeUtil.isAssignedGuid(guid)) {
+                    String assignedGuid = guidAssignements.get(guid);
+
+                    if (StringUtils.isNotEmpty(assignedGuid)) {
+                        RequestContext.get().recordEntityGuidUpdate(objId, 
guid);
+
+                        objId.put(AtlasObjectId.KEY_GUID, assignedGuid);
+                    }
+                }
+            }
+        }
+    }
+
     private static Map<String, Object> getRelationshipAttributes(Object val) 
throws AtlasBaseException {
         if (val instanceof AtlasRelatedObjectId) {
             AtlasStruct relationshipStruct = ((AtlasRelatedObjectId) 
val).getRelationshipAttributes();
diff --git a/server-api/src/main/java/org/apache/atlas/RequestContext.java 
b/server-api/src/main/java/org/apache/atlas/RequestContext.java
index 009a664..3d2a18f 100644
--- a/server-api/src/main/java/org/apache/atlas/RequestContext.java
+++ b/server-api/src/main/java/org/apache/atlas/RequestContext.java
@@ -22,6 +22,7 @@ import org.apache.atlas.model.instance.AtlasClassification;
 import org.apache.atlas.model.instance.AtlasEntity;
 import org.apache.atlas.model.instance.AtlasEntity.AtlasEntityWithExtInfo;
 import org.apache.atlas.model.instance.AtlasEntityHeader;
+import org.apache.atlas.model.instance.AtlasObjectId;
 import org.apache.atlas.store.DeleteType;
 import org.apache.atlas.utils.AtlasPerfMetrics;
 import org.apache.atlas.utils.AtlasPerfMetrics.MetricRecorder;
@@ -37,6 +38,8 @@ import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.HashMap;
 
+import static org.apache.atlas.model.instance.AtlasObjectId.KEY_GUID;
+
 
 public class RequestContext {
     private static final Logger METRICS = LoggerFactory.getLogger("METRICS");
@@ -337,11 +340,23 @@ public class RequestContext {
     }
 
     public void recordEntityGuidUpdate(AtlasEntity entity, String 
guidInRequest) {
+        recordEntityGuidUpdate(new EntityGuidPair(entity, guidInRequest));
+    }
+
+    public void recordEntityGuidUpdate(AtlasObjectId entity, String 
guidInRequest) {
+        recordEntityGuidUpdate(new EntityGuidPair(entity, guidInRequest));
+    }
+
+    public void recordEntityGuidUpdate(Map entity, String guidInRequest) {
+        recordEntityGuidUpdate(new EntityGuidPair(entity, guidInRequest));
+    }
+
+    public void recordEntityGuidUpdate(EntityGuidPair record) {
         if (entityGuidInRequest == null) {
             entityGuidInRequest = new ArrayList<>();
         }
 
-        entityGuidInRequest.add(new EntityGuidPair(entity, guidInRequest));
+        entityGuidInRequest.add(record);
     }
 
     public void resetEntityGuidUpdates() {
@@ -353,16 +368,32 @@ public class RequestContext {
     }
 
     public class EntityGuidPair {
-        private final AtlasEntity entity;
-        private final String      guid;
+        private final Object entity;
+        private final String guid;
 
         public EntityGuidPair(AtlasEntity entity, String guid) {
             this.entity = entity;
             this.guid   = guid;
         }
 
+        public EntityGuidPair(AtlasObjectId entity, String guid) {
+            this.entity = entity;
+            this.guid   = guid;
+        }
+
+        public EntityGuidPair(Map entity, String guid) {
+            this.entity = entity;
+            this.guid   = guid;
+        }
+
         public void resetEntityGuid() {
-            entity.setGuid(guid);
+            if (entity instanceof AtlasEntity) {
+                ((AtlasEntity) entity).setGuid(guid);
+            } else if (entity instanceof AtlasObjectId) {
+                ((AtlasObjectId) entity).setGuid(guid);
+            } else if (entity instanceof Map) {
+                ((Map) entity).put(KEY_GUID, guid);
+            }
         }
     }
 

Reply via email to