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:
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-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)
......
......@@ -27,6 +27,8 @@ import org.apache.atlas.typesystem.types.IDataType;
import org.apache.atlas.typesystem.types.StructType;
import org.apache.atlas.typesystem.types.TraitType;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.ArrayList;
import java.util.Arrays;
......@@ -42,6 +44,7 @@ import java.util.concurrent.ConcurrentHashMap;
@Singleton
@SuppressWarnings("rawtypes")
public class DefaultTypeCache implements TypeCache {
private static final Logger LOG = LoggerFactory.getLogger(DefaultTypeCache.class);
private Map<String, IDataType> types_ = new ConcurrentHashMap<>();
private static final List<TypeCategory> validTypeFilterCategories =
......@@ -183,7 +186,9 @@ public class DefaultTypeCache implements TypeCache {
case SUPERTYPE:
case NOT_SUPERTYPE:
if (!has(filterEntry.getValue())) {
throw new IllegalArgumentException("Invalid supertype " + filterEntry.getValue());
if (LOG.isDebugEnabled()) {
LOG.debug("{}: supertype does not exist", filterEntry.getValue());
}
}
break;
......
......@@ -436,23 +436,15 @@ public class DefaultTypeCacheTest {
}
//invalid supertype
try {
ts.getTypeNames(new HashMap<TypeCache.TYPE_FILTER, String>() {{
put(TypeCache.TYPE_FILTER.SUPERTYPE, "X");
}});
fail("Expected IllegalArgumentException");
} catch (IllegalArgumentException e) {
//expected
}
results = ts.getTypeNames(new HashMap<TypeCache.TYPE_FILTER, String>() {{
put(TypeCache.TYPE_FILTER.SUPERTYPE, "X");
}});
assertTrue(results.isEmpty(), "Expected empty result for non-existent type 'X'. Found: " + results);
//invalid supertype
try {
ts.getTypeNames(new HashMap<TypeCache.TYPE_FILTER, String>() {{
put(TypeCache.TYPE_FILTER.NOT_SUPERTYPE, "X");
}});
fail("Expected IllegalArgumentException");
} catch (IllegalArgumentException e) {
//expected
}
results = ts.getTypeNames(new HashMap<TypeCache.TYPE_FILTER, String>() {{
put(TypeCache.TYPE_FILTER.NOT_SUPERTYPE, "X");
}});
assertTrue(results.containsAll(Arrays.asList("A", "A1", "B", "C")), "Results: " + results);
}
}
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