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


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

Branch: refs/heads/master
Commit: c1081a49da3553f55b33edecb416de99c90d10b4
Parents: 7bb2709
Author: Shwetha GS <sshivalingamur...@hortonworks.com>
Authored: Mon Sep 19 11:13:08 2016 +0530
Committer: Shwetha GS <sshivalingamur...@hortonworks.com>
Committed: Mon Sep 19 11:13:08 2016 +0530

----------------------------------------------------------------------
 pom.xml                                         |  2 +-
 release-log.txt                                 |  1 +
 .../atlas/services/DefaultMetadataService.java  | 52 --------------------
 .../org/apache/atlas/query/QueryParser.scala    | 12 +++--
 .../org/apache/atlas/BaseRepositoryTest.java    |  5 +-
 .../GraphBackedDiscoveryServiceTest.java        |  3 ++
 6 files changed, 16 insertions(+), 59 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/c1081a49/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 17660b5..ac5b042 100755
--- a/pom.xml
+++ b/pom.xml
@@ -1737,7 +1737,7 @@
                         <exclude>**/users-credentials.properties</exclude>
                         <exclude>**/public/css/animate.min.css</exclude>
                         <exclude>**/public/css/bootstrap-sidebar.css</exclude>
-                        
<exclude>**/public/js/require-handlebars-plugin/**</exclude>
+                        <exclude>**/public/js/external_lib/**</exclude>
                         <exclude>**/node_modules/**</exclude>
                         <!-- All the npm plugins are copied here, so exclude 
it -->
                         <exclude>**/public/js/libs/**</exclude>

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/c1081a49/release-log.txt
----------------------------------------------------------------------
diff --git a/release-log.txt b/release-log.txt
index d53a866..f1ac7a7 100644
--- a/release-log.txt
+++ b/release-log.txt
@@ -9,6 +9,7 @@ ATLAS-1060 Add composite indexes for exact match performance 
improvements for al
 ATLAS-1127 Modify creation and modification timestamps to Date instead of 
Long(sumasai)
 
 ALL CHANGES:
+ATLAS-1098 Atlas allows creation of tag with name "isa" which causes 
exceptions during search (apoorvnaik via shwethags)
 ATLAS-1142 Lineage UI Improvement (kevalbhatt via shwethags)
 ATLAS-712 Support getTrait() API (svimal2106 via shwethags)
 ATLAS-1173 Doc: Minor editorial bug in the example given for property 
atlas.server.ha.zookeeper.auth (yhemanth via shwethags)

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/c1081a49/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 fdb749a..3550492 100755
--- 
a/repository/src/main/java/org/apache/atlas/services/DefaultMetadataService.java
+++ 
b/repository/src/main/java/org/apache/atlas/services/DefaultMetadataService.java
@@ -241,9 +241,6 @@ 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();
@@ -289,55 +286,6 @@ 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.
      *

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/c1081a49/repository/src/main/scala/org/apache/atlas/query/QueryParser.scala
----------------------------------------------------------------------
diff --git a/repository/src/main/scala/org/apache/atlas/query/QueryParser.scala 
b/repository/src/main/scala/org/apache/atlas/query/QueryParser.scala
index 4d2429e..7074d74 100755
--- a/repository/src/main/scala/org/apache/atlas/query/QueryParser.scala
+++ b/repository/src/main/scala/org/apache/atlas/query/QueryParser.scala
@@ -387,6 +387,7 @@ class QueryLexer(val keywords: Seq[String], val delims: 
Seq[String]) extends Std
                 | floatConstant ^^ FloatLiteral
                 | dubConstant ^^ DoubleLiteral
                 | identifier ^^ processIdent
+                | quotedIdentifier ^^ Identifier
                 | string ^^ StringLit
                 | EofCh ^^^ EOF
                 | '\'' ~> failure("unclosed string literal")
@@ -398,10 +399,11 @@ class QueryLexer(val keywords: Seq[String], val delims: 
Seq[String]) extends Std
 
     override def identChar = letter | elem('_')
 
-    def identifier = identChar ~ (identChar | digit).* ^^ { case first ~ rest 
=> (first :: rest).mkString} |
-        '`' ~> chrExcept('`', '\n', EofCh).* <~ '`' ^^ {
-            _ mkString ""
-        }
+    def identifier = identChar ~ (identChar | digit).* ^^ { case first ~ rest 
=> (first :: rest).mkString}
+
+    def quotedIdentifier = '`' ~> chrExcept('`', '\n', EofCh).* <~ '`' ^^ {
+      _ mkString ""
+    }
 
     override def whitespace: Parser[Any] =
         (whitespaceChar
@@ -477,4 +479,4 @@ class QueryLexer(val keywords: Seq[String], val delims: 
Seq[String]) extends Std
                 allCaseVersions(s.tail, prefix + s.head.toUpper)
         }
     }
-}
\ No newline at end of file
+}

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/c1081a49/repository/src/test/java/org/apache/atlas/BaseRepositoryTest.java
----------------------------------------------------------------------
diff --git a/repository/src/test/java/org/apache/atlas/BaseRepositoryTest.java 
b/repository/src/test/java/org/apache/atlas/BaseRepositoryTest.java
index 01c4bfa..500a305 100644
--- a/repository/src/test/java/org/apache/atlas/BaseRepositoryTest.java
+++ b/repository/src/test/java/org/apache/atlas/BaseRepositoryTest.java
@@ -174,8 +174,11 @@ public class BaseRepositoryTest {
 
         HierarchicalTypeDefinition<TraitType> logTraitDef = 
TypesUtil.createTraitTypeDef("Log Data", null);
 
+        HierarchicalTypeDefinition<TraitType> isaKeywordTraitDef = 
TypesUtil.createTraitTypeDef("isa", null);
+
         return TypesUtil.getTypesDef(ImmutableList.<EnumTypeDefinition>of(), 
ImmutableList.<StructTypeDefinition>of(),
-            ImmutableList.of(dimTraitDef, factTraitDef, piiTraitDef, 
metricTraitDef, etlTraitDef, jdbcTraitDef, logTraitDef),
+            ImmutableList.of(dimTraitDef, factTraitDef, piiTraitDef, 
metricTraitDef, etlTraitDef, jdbcTraitDef, logTraitDef,
+                    isaKeywordTraitDef),
             ImmutableList.of(dbClsDef, storageDescClsDef, columnClsDef, 
tblClsDef, loadProcessClsDef, viewClsDef, partClsDef, datasetSubTypeClsDef));
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-atlas/blob/c1081a49/repository/src/test/java/org/apache/atlas/discovery/GraphBackedDiscoveryServiceTest.java
----------------------------------------------------------------------
diff --git 
a/repository/src/test/java/org/apache/atlas/discovery/GraphBackedDiscoveryServiceTest.java
 
b/repository/src/test/java/org/apache/atlas/discovery/GraphBackedDiscoveryServiceTest.java
index 8a40110..40dc861 100755
--- 
a/repository/src/test/java/org/apache/atlas/discovery/GraphBackedDiscoveryServiceTest.java
+++ 
b/repository/src/test/java/org/apache/atlas/discovery/GraphBackedDiscoveryServiceTest.java
@@ -393,6 +393,9 @@ public class GraphBackedDiscoveryServiceTest extends 
BaseRepositoryTest {
                 {"Metric", 9},
                 {"PII", 8},
                 {"`Log Data`", 4},
+                // Not sure what the expected rows should be, but since we 
didn't assign or do anything with the created
+                // I assume it'll be zero
+                {"`isa`", 0},
 
                 /* Lineage queries are fired through ClosureQuery and are 
tested through HiveLineageJerseyResourceIt in webapp module.
                    Commenting out the below queries since DSL to Gremlin 
parsing/translation fails with lineage queries when there are array types

Reply via email to