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 2016/12/23 01:47:01 UTC

[32/50] [abbrv] incubator-atlas git commit: ATLAS-1098 Atlas allows creation of tag with name isa which causes exceptions during search (apoorvnaik via kevalbhatt)

ATLAS-1098 Atlas allows creation of tag with name isa which causes exceptions during search (apoorvnaik via kevalbhatt)

(cherry picked from commit 96f2306f9dfc133f9e7d79421dc97eee0a4d671e)


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

Branch: refs/heads/0.7-incubating
Commit: 5eaf6b40fd37cff612a61ed095f9d5b380295986
Parents: 1eb5abf
Author: kevalbhatt <kb...@apache.org>
Authored: Fri Sep 9 22:33:57 2016 +0530
Committer: Madhan Neethiraj <ma...@apache.org>
Committed: Thu Dec 22 15:28:33 2016 -0800

----------------------------------------------------------------------
 release-log.txt                                 |  1 +
 .../atlas/services/DefaultMetadataService.java  | 56 ++++++++++++++++++++
 2 files changed, 57 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/5eaf6b40/release-log.txt
----------------------------------------------------------------------
diff --git a/release-log.txt b/release-log.txt
index 61a15ad..d94eb2b 100644
--- a/release-log.txt
+++ b/release-log.txt
@@ -31,6 +31,7 @@ ATLAS-409 Atlas will not import avro tables with schema read from a file (dosset
 ATLAS-379 Create sqoop and falcon metadata addons (venkatnrangan,bvellanki,sowmyaramesh via shwethags)
 
 ALL CHANGES:
+ATLAS-1098 Atlas allows creation of tag with name "isa" which causes exceptions during search (apoorvnaik via kevalbhatt)
 ATLAS-1160 Update Atlas hive hook to read configuration from atlas-application.properties instead of hive-site.xml (mneethiraj via kevalbhatt)
 ATLAS-1154 Errors in Eclipse with web.xml (davidrad via dkantor)
 ATLAS-1147 UI: column name doesn't show up in schema tab for hive table (Kalyanikashikar via kevalbhatt)

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/5eaf6b40/repository/src/main/java/org/apache/atlas/services/DefaultMetadataService.java
----------------------------------------------------------------------
diff --git a/repository/src/main/java/org/apache/atlas/services/DefaultMetadataService.java b/repository/src/main/java/org/apache/atlas/services/DefaultMetadataService.java
index 4d05d49..6a937f4 100755
--- a/repository/src/main/java/org/apache/atlas/services/DefaultMetadataService.java
+++ b/repository/src/main/java/org/apache/atlas/services/DefaultMetadataService.java
@@ -33,6 +33,8 @@ import org.apache.atlas.ha.HAConfiguration;
 import org.apache.atlas.listener.ActiveStateChangeHandler;
 import org.apache.atlas.listener.EntityChangeListener;
 import org.apache.atlas.listener.TypesChangeListener;
+import org.apache.atlas.query.QueryKeywords;
+import org.apache.atlas.query.QueryParser;
 import org.apache.atlas.repository.MetadataRepository;
 import org.apache.atlas.repository.RepositoryException;
 import org.apache.atlas.repository.audit.EntityAuditRepository;
@@ -64,12 +66,14 @@ import org.apache.atlas.typesystem.types.ValueConversionException;
 import org.apache.atlas.typesystem.types.cache.TypeCache;
 import org.apache.atlas.typesystem.types.utils.TypesUtil;
 import org.apache.atlas.utils.ParamChecker;
+import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.configuration.Configuration;
 import org.codehaus.jettison.json.JSONArray;
 import org.codehaus.jettison.json.JSONException;
 import org.codehaus.jettison.json.JSONObject;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import scala.collection.Set;
 
 import javax.inject.Inject;
 import javax.inject.Singleton;
@@ -240,6 +244,9 @@ public class DefaultMetadataService implements MetadataService, ActiveStateChang
         typeDefinition = ParamChecker.notEmpty(typeDefinition, "type definition");
         TypesDef typesDef = validateTypeDefinition(typeDefinition);
 
+        // Also validate if the types being created are not keywords
+        validateIfNotKeyword(typesDef);
+
         try {
             final TypeSystem.TransientTypeSystem transientTypeSystem = typeSystem.createTransientTypeSystem(typesDef, isUpdate);
             final Map<String, IDataType> typesAdded = transientTypeSystem.getTypesAdded();
@@ -285,6 +292,55 @@ public class DefaultMetadataService implements MetadataService, ActiveStateChang
         }
     }
 
+    private void validateIfNotKeyword(TypesDef typesDef) throws AtlasException {
+        List<EnumTypeDefinition> enumDefs = typesDef.enumTypesAsJavaList();
+        List<StructTypeDefinition> structDefs = typesDef.structTypesAsJavaList();
+        List<HierarchicalTypeDefinition<ClassType>> classDefs = typesDef.classTypesAsJavaList();
+        List<HierarchicalTypeDefinition<TraitType>> traitDefs = typesDef.traitTypesAsJavaList();
+
+        // QueryParser has it's own set of keywords that should be avoided
+        Set<String> keywords = QueryParser.keywordCache().keySet();
+        boolean keywordCacheNotEmpty = null != keywords && !keywords.isEmpty();
+
+        if (keywordCacheNotEmpty) {
+            if (CollectionUtils.isNotEmpty(enumDefs)) {
+                // Check if any enum name is a keyword
+                for (EnumTypeDefinition enumDef : enumDefs) {
+                    if (keywords.contains(enumDef.name)) {
+                        throw new AtlasException("Enum definition name \"" + enumDef.name + "\" is a keyword");
+                    }
+                }
+            }
+
+            if (CollectionUtils.isNotEmpty(classDefs)){
+                // Check if any class name is a keyword
+                for (HierarchicalTypeDefinition<ClassType> classDef : classDefs) {
+                    if (keywords.contains(classDef.typeName)) {
+                        throw new AtlasException("Class definition name \"" + classDef.typeName + "\" is a keyword");
+                    }
+                }
+            }
+
+            if (CollectionUtils.isNotEmpty(structDefs)){
+                // Check if any struct name is a keyword
+                for (StructTypeDefinition structDef : structDefs) {
+                    if (keywords.contains(structDef.typeName)) {
+                        throw new AtlasException("StructType definition name \"" + structDef.typeName + "\" is a keyword");
+                    }
+                }
+            }
+
+            if (CollectionUtils.isNotEmpty(traitDefs)){
+                // Check if any trait name is a keyword
+                for (HierarchicalTypeDefinition<TraitType> traitDef : traitDefs) {
+                    if (keywords.contains(traitDef.typeName)) {
+                        throw new AtlasException("TraitType definition name \"" + traitDef.typeName + "\" is a keyword");
+                    }
+                }
+            }
+        }
+    }
+
     /**
      * Return the definition for the given type.
      *