Commit 2dba5fea by Madhan Neethiraj Committed by Suma Shivaprasad

ATLAS-1049: non-existing supertype in query filter should not fail the query

parent d0a9b999
...@@ -6,6 +6,7 @@ INCOMPATIBLE CHANGES: ...@@ -6,6 +6,7 @@ INCOMPATIBLE CHANGES:
ALL CHANGES: ALL CHANGES:
ATLAS-1049 Fix validation while filtering by supertypes(mneethiraj via sumasai)
ATLAS-1053 Fix issues flagged by Coverity scan - potential NPE (mneethiraj via sumasai) ATLAS-1053 Fix issues flagged by Coverity scan - potential NPE (mneethiraj via sumasai)
ATLAS-1052 Fix NPE in HiveHook due to null Session State (sumasai) ATLAS-1052 Fix NPE in HiveHook due to null Session State (sumasai)
ATLAS-1051 Sqoop Hook does not package HDFS model jars which is required (sumasai) ATLAS-1051 Sqoop Hook does not package HDFS model jars which is required (sumasai)
......
...@@ -27,6 +27,8 @@ import org.apache.atlas.typesystem.types.IDataType; ...@@ -27,6 +27,8 @@ import org.apache.atlas.typesystem.types.IDataType;
import org.apache.atlas.typesystem.types.StructType; import org.apache.atlas.typesystem.types.StructType;
import org.apache.atlas.typesystem.types.TraitType; import org.apache.atlas.typesystem.types.TraitType;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
...@@ -42,6 +44,7 @@ import java.util.concurrent.ConcurrentHashMap; ...@@ -42,6 +44,7 @@ import java.util.concurrent.ConcurrentHashMap;
@Singleton @Singleton
@SuppressWarnings("rawtypes") @SuppressWarnings("rawtypes")
public class DefaultTypeCache implements TypeCache { public class DefaultTypeCache implements TypeCache {
private static final Logger LOG = LoggerFactory.getLogger(DefaultTypeCache.class);
private Map<String, IDataType> types_ = new ConcurrentHashMap<>(); private Map<String, IDataType> types_ = new ConcurrentHashMap<>();
private static final List<TypeCategory> validTypeFilterCategories = private static final List<TypeCategory> validTypeFilterCategories =
...@@ -183,7 +186,9 @@ public class DefaultTypeCache implements TypeCache { ...@@ -183,7 +186,9 @@ public class DefaultTypeCache implements TypeCache {
case SUPERTYPE: case SUPERTYPE:
case NOT_SUPERTYPE: case NOT_SUPERTYPE:
if (!has(filterEntry.getValue())) { if (!has(filterEntry.getValue())) {
throw new IllegalArgumentException("Invalid supertype " + filterEntry.getValue()); if (LOG.isDebugEnabled()) {
LOG.debug("{}: supertype does not exist", filterEntry.getValue());
}
} }
break; break;
......
...@@ -436,23 +436,15 @@ public class DefaultTypeCacheTest { ...@@ -436,23 +436,15 @@ public class DefaultTypeCacheTest {
} }
//invalid supertype //invalid supertype
try { results = ts.getTypeNames(new HashMap<TypeCache.TYPE_FILTER, String>() {{
ts.getTypeNames(new HashMap<TypeCache.TYPE_FILTER, String>() {{ put(TypeCache.TYPE_FILTER.SUPERTYPE, "X");
put(TypeCache.TYPE_FILTER.SUPERTYPE, "X"); }});
}}); assertTrue(results.isEmpty(), "Expected empty result for non-existent type 'X'. Found: " + results);
fail("Expected IllegalArgumentException");
} catch (IllegalArgumentException e) {
//expected
}
//invalid supertype //invalid supertype
try { results = ts.getTypeNames(new HashMap<TypeCache.TYPE_FILTER, String>() {{
ts.getTypeNames(new HashMap<TypeCache.TYPE_FILTER, String>() {{ put(TypeCache.TYPE_FILTER.NOT_SUPERTYPE, "X");
put(TypeCache.TYPE_FILTER.NOT_SUPERTYPE, "X"); }});
}}); assertTrue(results.containsAll(Arrays.asList("A", "A1", "B", "C")), "Results: " + results);
fail("Expected IllegalArgumentException");
} catch (IllegalArgumentException e) {
//expected
}
} }
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment