You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@atlas.apache.org by ma...@apache.org on 2018/11/29 20:35:10 UTC

atlas git commit: ATLAS-2982: import fails to create classification-def

Repository: atlas
Updated Branches:
  refs/heads/master 18350777e -> 5ebb16901


ATLAS-2982: import fails to create classification-def


Project: http://git-wip-us.apache.org/repos/asf/atlas/repo
Commit: http://git-wip-us.apache.org/repos/asf/atlas/commit/5ebb1690
Tree: http://git-wip-us.apache.org/repos/asf/atlas/tree/5ebb1690
Diff: http://git-wip-us.apache.org/repos/asf/atlas/diff/5ebb1690

Branch: refs/heads/master
Commit: 5ebb16901040c22a717de29f962ca53941ba4078
Parents: 1835077
Author: Madhan Neethiraj <ma...@apache.org>
Authored: Wed Nov 28 08:15:21 2018 -0800
Committer: Madhan Neethiraj <ma...@apache.org>
Committed: Wed Nov 28 21:01:24 2018 -0800

----------------------------------------------------------------------
 .../atlas/authorize/AtlasAuthorizationUtils.java       |  6 +++---
 .../apache/atlas/repository/impexp/ImportService.java  |  3 +++
 .../repository/store/graph/v2/AtlasEntityStoreV2.java  | 13 ++++++-------
 .../repository/store/graph/v2/EntityGraphMapper.java   | 10 +++++-----
 .../store/graph/v2/EntityMutationContext.java          |  4 ----
 .../store/graph/v2/IDBasedEntityResolver.java          |  5 +++--
 .../src/main/java/org/apache/atlas/RequestContext.java |  8 ++++++++
 7 files changed, 28 insertions(+), 21 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/atlas/blob/5ebb1690/authorization/src/main/java/org/apache/atlas/authorize/AtlasAuthorizationUtils.java
----------------------------------------------------------------------
diff --git a/authorization/src/main/java/org/apache/atlas/authorize/AtlasAuthorizationUtils.java b/authorization/src/main/java/org/apache/atlas/authorize/AtlasAuthorizationUtils.java
index 3f5bd24..c59b186 100644
--- a/authorization/src/main/java/org/apache/atlas/authorize/AtlasAuthorizationUtils.java
+++ b/authorization/src/main/java/org/apache/atlas/authorize/AtlasAuthorizationUtils.java
@@ -111,7 +111,7 @@ public class AtlasAuthorizationUtils {
         boolean ret      = false;
         String  userName = getCurrentUserName();
 
-        if (StringUtils.isNotEmpty(userName)) {
+        if (StringUtils.isNotEmpty(userName) && !RequestContext.get().isImportInProgress()) {
             try {
                 AtlasAuthorizer authorizer = AtlasAuthorizerFactory.getAtlasAuthorizer();
 
@@ -132,7 +132,7 @@ public class AtlasAuthorizationUtils {
         boolean ret      = false;
         String  userName = getCurrentUserName();
 
-        if (StringUtils.isNotEmpty(userName)) {
+        if (StringUtils.isNotEmpty(userName) && !RequestContext.get().isImportInProgress()) {
             try {
                 AtlasAuthorizer authorizer = AtlasAuthorizerFactory.getAtlasAuthorizer();
 
@@ -153,7 +153,7 @@ public class AtlasAuthorizationUtils {
         boolean ret      = false;
         String  userName = getCurrentUserName();
 
-        if (StringUtils.isNotEmpty(userName)) {
+        if (StringUtils.isNotEmpty(userName) && !RequestContext.get().isImportInProgress()) {
             try {
                 AtlasAuthorizer authorizer = AtlasAuthorizerFactory.getAtlasAuthorizer();
 

http://git-wip-us.apache.org/repos/asf/atlas/blob/5ebb1690/repository/src/main/java/org/apache/atlas/repository/impexp/ImportService.java
----------------------------------------------------------------------
diff --git a/repository/src/main/java/org/apache/atlas/repository/impexp/ImportService.java b/repository/src/main/java/org/apache/atlas/repository/impexp/ImportService.java
index b5d8b7c..d06fd4a 100644
--- a/repository/src/main/java/org/apache/atlas/repository/impexp/ImportService.java
+++ b/repository/src/main/java/org/apache/atlas/repository/impexp/ImportService.java
@@ -19,6 +19,7 @@ package org.apache.atlas.repository.impexp;
 
 import com.google.common.annotations.VisibleForTesting;
 import org.apache.atlas.AtlasErrorCode;
+import org.apache.atlas.RequestContext;
 import org.apache.atlas.entitytransform.BaseEntityHandler;
 import org.apache.atlas.entitytransform.TransformerContext;
 import org.apache.atlas.exception.AtlasBaseException;
@@ -79,6 +80,8 @@ public class ImportService {
 
     public AtlasImportResult run(ZipSource source, AtlasImportRequest request, String userName,
                                  String hostName, String requestingIP) throws AtlasBaseException {
+        RequestContext.get().setImportInProgress(true);
+
         if (request == null) {
             request = new AtlasImportRequest();
         }

http://git-wip-us.apache.org/repos/asf/atlas/blob/5ebb1690/repository/src/main/java/org/apache/atlas/repository/store/graph/v2/AtlasEntityStoreV2.java
----------------------------------------------------------------------
diff --git a/repository/src/main/java/org/apache/atlas/repository/store/graph/v2/AtlasEntityStoreV2.java b/repository/src/main/java/org/apache/atlas/repository/store/graph/v2/AtlasEntityStoreV2.java
index 6ee0279..d97b74d 100644
--- a/repository/src/main/java/org/apache/atlas/repository/store/graph/v2/AtlasEntityStoreV2.java
+++ b/repository/src/main/java/org/apache/atlas/repository/store/graph/v2/AtlasEntityStoreV2.java
@@ -672,11 +672,10 @@ public class AtlasEntityStoreV2 implements AtlasEntityStore {
         }
 
         try {
-            final boolean               isImport = entityStream instanceof EntityImportStream;
-            final EntityMutationContext context  = preCreateOrUpdate(entityStream, entityGraphMapper, isPartialUpdate);
+            final EntityMutationContext context = preCreateOrUpdate(entityStream, entityGraphMapper, isPartialUpdate);
 
             // Check if authorized to create entities
-            if (!isImport && CollectionUtils.isNotEmpty(context.getCreatedEntities())) {
+            if (!RequestContext.get().isImportInProgress()) {
                 for (AtlasEntity entity : context.getCreatedEntities()) {
                     AtlasAuthorizationUtils.verifyAccess(new AtlasEntityAccessRequest(typeRegistry, AtlasPrivilege.ENTITY_CREATE, new AtlasEntityHeader(entity)),
                                                          "create entity: type=", entity.getTypeName());
@@ -710,7 +709,7 @@ public class AtlasEntityStoreV2 implements AtlasEntityStore {
                 }
 
                 // Check if authorized to update entities
-                if (!isImport) {
+                if (!RequestContext.get().isImportInProgress()) {
                     for (AtlasEntity entity : context.getUpdatedEntities()) {
                         AtlasAuthorizationUtils.verifyAccess(new AtlasEntityAccessRequest(typeRegistry, AtlasPrivilege.ENTITY_UPDATE, new AtlasEntityHeader(entity)),
                                                              "update entity: type=", entity.getTypeName());
@@ -723,7 +722,7 @@ public class AtlasEntityStoreV2 implements AtlasEntityStore {
             ret.setGuidAssignments(context.getGuidAssignments());
 
             // Notify the change listeners
-            entityChangeNotifier.onEntitiesMutated(ret, isImport);
+            entityChangeNotifier.onEntitiesMutated(ret, RequestContext.get().isImportInProgress());
 
             if (LOG.isDebugEnabled()) {
                 LOG.debug("<== createOrUpdate()");
@@ -772,7 +771,7 @@ public class AtlasEntityStoreV2 implements AtlasEntityStore {
 
 
                     //Create vertices which do not exist in the repository
-                    if ((entityStream instanceof EntityImportStream) && AtlasTypeUtil.isAssignedGuid(entity.getGuid())) {
+                    if (RequestContext.get().isImportInProgress() && AtlasTypeUtil.isAssignedGuid(entity.getGuid())) {
                         vertex = entityGraphMapper.createVertexWithGuid(entity, entity.getGuid());
                     } else {
                          vertex = entityGraphMapper.createVertex(entity);
@@ -792,7 +791,7 @@ public class AtlasEntityStoreV2 implements AtlasEntityStore {
                 }
 
                 // during import, update the system attributes
-                if (entityStream instanceof EntityImportStream) {
+                if (RequestContext.get().isImportInProgress()) {
                     entityGraphMapper.updateSystemAttributes(vertex, entity);
                 }
             }

http://git-wip-us.apache.org/repos/asf/atlas/blob/5ebb1690/repository/src/main/java/org/apache/atlas/repository/store/graph/v2/EntityGraphMapper.java
----------------------------------------------------------------------
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 f5a5982..6c830ba 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
@@ -416,7 +416,7 @@ public class EntityGraphMapper {
                 AtlasEdge currentEdge;
 
                 // if relationshipGuid is assigned in AtlasRelatedObjectId use it to fetch existing AtlasEdge
-                if (StringUtils.isNotEmpty(relationshipGuid) && !context.isImport()) {
+                if (StringUtils.isNotEmpty(relationshipGuid) && !RequestContext.get().isImportInProgress()) {
                     currentEdge = graphHelper.getEdgeForGUID(relationshipGuid);
                 } else {
                     currentEdge = graphHelper.getEdgeForLabel(ctx.getReferringVertex(), edgeLabel, edgeDirection);
@@ -611,7 +611,7 @@ public class EntityGraphMapper {
     }
 
     private void updateRelationshipGuidForImport(EntityMutationContext context, String inverseAttributeName, AtlasVertex inverseVertex, AtlasEdge edge) throws AtlasBaseException {
-        if (!context.isImport()) {
+        if (!RequestContext.get().isImportInProgress()) {
             return;
         }
 
@@ -795,7 +795,7 @@ public class EntityGraphMapper {
         }
 
         if (attributeVertex == null) {
-            if(context.isImport()) {
+            if(RequestContext.get().isImportInProgress()) {
                 return null;
             }
 
@@ -836,7 +836,7 @@ public class EntityGraphMapper {
                     ret = getOrCreateRelationship(fromVertex, toVertex, relationshipName, relationshipAttributes);
 
                     // for import use the relationship guid provided
-                    if (context.isImport()) {
+                    if (RequestContext.get().isImportInProgress()) {
                         String relationshipGuid = getRelationshipGuid(ctx.getValue());
 
                         if(!StringUtils.isEmpty(relationshipGuid)) {
@@ -1384,7 +1384,7 @@ public class EntityGraphMapper {
                 }
 
                 if (propagateTags == null) {
-                    if(context.isImport()) {
+                    if(RequestContext.get().isImportInProgress()) {
                         propagateTags = false;
                         classification.setPropagate(propagateTags);
                     } else {

http://git-wip-us.apache.org/repos/asf/atlas/blob/5ebb1690/repository/src/main/java/org/apache/atlas/repository/store/graph/v2/EntityMutationContext.java
----------------------------------------------------------------------
diff --git a/repository/src/main/java/org/apache/atlas/repository/store/graph/v2/EntityMutationContext.java b/repository/src/main/java/org/apache/atlas/repository/store/graph/v2/EntityMutationContext.java
index f5dc117..453dbe6 100644
--- a/repository/src/main/java/org/apache/atlas/repository/store/graph/v2/EntityMutationContext.java
+++ b/repository/src/main/java/org/apache/atlas/repository/store/graph/v2/EntityMutationContext.java
@@ -87,10 +87,6 @@ public class EntityMutationContext {
 
     public AtlasVertex getVertex(String guid) { return entityVsVertex.get(guid); }
 
-    public boolean isImport() {
-        return (context != null) && context.getEntityStream() instanceof EntityImportStream;
-    }
-
     @Override
     public boolean equals(final Object o) {
         if (this == o) return true;

http://git-wip-us.apache.org/repos/asf/atlas/blob/5ebb1690/repository/src/main/java/org/apache/atlas/repository/store/graph/v2/IDBasedEntityResolver.java
----------------------------------------------------------------------
diff --git a/repository/src/main/java/org/apache/atlas/repository/store/graph/v2/IDBasedEntityResolver.java b/repository/src/main/java/org/apache/atlas/repository/store/graph/v2/IDBasedEntityResolver.java
index 0fcdf94..fe76b3a 100644
--- a/repository/src/main/java/org/apache/atlas/repository/store/graph/v2/IDBasedEntityResolver.java
+++ b/repository/src/main/java/org/apache/atlas/repository/store/graph/v2/IDBasedEntityResolver.java
@@ -18,6 +18,7 @@
 package org.apache.atlas.repository.store.graph.v2;
 
 import org.apache.atlas.AtlasErrorCode;
+import org.apache.atlas.RequestContext;
 import org.apache.atlas.exception.AtlasBaseException;
 import org.apache.atlas.model.TypeCategory;
 import org.apache.atlas.model.instance.AtlasEntity;
@@ -51,7 +52,7 @@ public class IDBasedEntityResolver implements EntityResolver {
             boolean isAssignedGuid = AtlasTypeUtil.isAssignedGuid(guid);
             AtlasVertex vertex = isAssignedGuid ? AtlasGraphUtilsV2.findByGuid(guid) : null;
 
-            if (vertex == null && !(entityStream instanceof EntityImportStream)) { // if not found in the store, look if the entity is present in the stream
+            if (vertex == null && !RequestContext.get().isImportInProgress()) { // if not found in the store, look if the entity is present in the stream
                 AtlasEntity entity = entityStream.getByGuid(guid);
 
                 if (entity != null) { // look for the entity in the store using unique-attributes
@@ -70,7 +71,7 @@ public class IDBasedEntityResolver implements EntityResolver {
             if (vertex != null) {
                 context.addResolvedGuid(guid, vertex);
             } else {
-                if (isAssignedGuid && !(entityStream instanceof EntityImportStream)) {
+                if (isAssignedGuid && !RequestContext.get().isImportInProgress()) {
                     throw new AtlasBaseException(AtlasErrorCode.REFERENCED_ENTITY_NOT_FOUND, guid);
                 } else {
                     context.addLocalGuidReference(guid);

http://git-wip-us.apache.org/repos/asf/atlas/blob/5ebb1690/server-api/src/main/java/org/apache/atlas/RequestContext.java
----------------------------------------------------------------------
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 b49591d..099d713 100644
--- a/server-api/src/main/java/org/apache/atlas/RequestContext.java
+++ b/server-api/src/main/java/org/apache/atlas/RequestContext.java
@@ -50,6 +50,7 @@ public class RequestContext {
     private DeleteType  deleteType   = DeleteType.DEFAULT;
     private int         maxAttempts  = 1;
     private int         attemptCount = 1;
+    private boolean     isImportInProgress = false;
 
 
     private RequestContext() {
@@ -145,6 +146,13 @@ public class RequestContext {
         this.attemptCount = attemptCount;
     }
 
+    public boolean isImportInProgress() {
+        return isImportInProgress;
+    }
+
+    public void setImportInProgress(boolean importInProgress) {
+        isImportInProgress = importInProgress;
+    }
 
     public void recordEntityUpdate(AtlasObjectId entity) {
         if (entity != null && entity.getGuid() != null) {