This is an automated email from the ASF dual-hosted git repository.
asf-gitbox-commits pushed a commit to branch atlas-2.6
in repository https://gitbox.apache.org/repos/asf/atlas.git
The following commit(s) were added to refs/heads/atlas-2.6 by this push:
new 0fa0b3998 ATLAS-5032: Fix basic search when querying by long attribute
values (#650)
0fa0b3998 is described below
commit 0fa0b3998b77a790514037a6a43d37d7cdc56aee
Author: saksenasonali <[email protected]>
AuthorDate: Wed Jun 3 03:45:16 2026 +0530
ATLAS-5032: Fix basic search when querying by long attribute values (#650)
(cherry picked from commit fa5239619491969136d2ebfa2910572546e0f563)
---
.../org/apache/atlas/repository/Constants.java | 1 +
.../apache/atlas/discovery/SearchProcessor.java | 21 +-
.../atlas/discovery/EntitySearchProcessorTest.java | 236 ++++++++++++++++++++-
3 files changed, 252 insertions(+), 6 deletions(-)
diff --git a/common/src/main/java/org/apache/atlas/repository/Constants.java
b/common/src/main/java/org/apache/atlas/repository/Constants.java
index 13f36c4b4..5a3a8118c 100644
--- a/common/src/main/java/org/apache/atlas/repository/Constants.java
+++ b/common/src/main/java/org/apache/atlas/repository/Constants.java
@@ -152,6 +152,7 @@ public final class Constants {
public static final String INDEX_SEARCH_MAX_RESULT_SET_SIZE =
"atlas.graph.index.search.max-result-set-size";
public static final String INDEX_SEARCH_TYPES_MAX_QUERY_STR_LENGTH =
"atlas.graph.index.search.types.max-query-str-length";
public static final String INDEX_SEARCH_TAGS_MAX_QUERY_STR_LENGTH =
"atlas.graph.index.search.tags.max-query-str-length";
+ public static final String INDEX_SEARCH_MAX_TOKEN_LENGTH =
"atlas.graph.index.search.max-token-length";
public static final String INDEX_SEARCH_VERTEX_PREFIX_PROPERTY =
"atlas.graph.index.search.vertex.prefix";
public static final String INDEX_SEARCH_VERTEX_PREFIX_DEFAULT = "$v$";
public static final String MAX_FULLTEXT_QUERY_STR_LENGTH =
"atlas.graph.fulltext-max-query-str-length";
diff --git
a/repository/src/main/java/org/apache/atlas/discovery/SearchProcessor.java
b/repository/src/main/java/org/apache/atlas/discovery/SearchProcessor.java
index 25897b656..9f7e3c3ab 100644
--- a/repository/src/main/java/org/apache/atlas/discovery/SearchProcessor.java
+++ b/repository/src/main/java/org/apache/atlas/discovery/SearchProcessor.java
@@ -112,6 +112,7 @@ public abstract class SearchProcessor {
public static final int MAX_RESULT_SIZE =
getApplicationProperty(Constants.INDEX_SEARCH_MAX_RESULT_SET_SIZE, 150);
public static final int MAX_QUERY_STR_LENGTH_TYPES =
getApplicationProperty(Constants.INDEX_SEARCH_TYPES_MAX_QUERY_STR_LENGTH, 512);
public static final int MAX_QUERY_STR_LENGTH_TAGS =
getApplicationProperty(Constants.INDEX_SEARCH_TAGS_MAX_QUERY_STR_LENGTH, 512);
+ public static final int INDEX_SEARCH_MAX_TOKEN_STR_LENGTH =
getApplicationProperty(Constants.INDEX_SEARCH_MAX_TOKEN_LENGTH, 255);
public static final String INDEX_SEARCH_PREFIX =
AtlasGraphUtilsV2.getIndexSearchPrefix();
public static final String AND_STR = " AND ";
public static final String EMPTY_STRING = "";
@@ -671,6 +672,10 @@ public abstract class SearchProcessor {
for (AtlasStructType structType : structTypes) {
String qualifiedName =
structType.getVertexPropertyName(criteria.getAttributeName());
+ if (isIndexSearchable(criteria, structType)) {
+ LOG.debug("toGraphFilterQuery() ==> skipped
attribute: {}, filter value: {}, and operator: {}",
criteria.getAttributeName(), criteria.getAttributeValue(),
criteria.getOperator());
+ continue;
+ }
if (filterAttributes.contains(qualifiedName)) {
String attrName =
criteria.getAttributeName();
@@ -863,8 +868,16 @@ public abstract class SearchProcessor {
LOG.debug("{} operator found for string attribute {},
deferring to in-memory or graph query (might cause poor performance)",
operator, qualifiedName);
ret = false;
- } else if (operator == SearchParameters.Operator.CONTAINS &&
AtlasAttribute.hastokenizeChar(attributeValue) && indexType == null) { //
indexType = TEXT
- LOG.debug("{} operator found for string (TEXT) attribute
{} and special characters found in filter value {}, deferring to in-memory or
graph query (might cause poor performance)", operator, qualifiedName,
attributeValue);
+ } else if (operator == SearchParameters.Operator.CONTAINS) {
+ if (StringUtils.length(attributeValue) >
INDEX_SEARCH_MAX_TOKEN_STR_LENGTH
+ || (indexType == null &&
AtlasAttribute.hastokenizeChar(attributeValue))) {
+ LOG.debug("{} operator found for string attribute {}
and filter value {}, deferring to in-memory or graph query (might cause poor
performance)", operator, qualifiedName, attributeValue);
+
+ ret = false;
+ }
+ } else if ((operator == SearchParameters.Operator.STARTS_WITH
|| operator == SearchParameters.Operator.ENDS_WITH)
+ && StringUtils.length(attributeValue) >
INDEX_SEARCH_MAX_TOKEN_STR_LENGTH) {
+ LOG.debug("{} operator found for string attribute {} (max
token length:{}) and filter value {}, deferring to in-memory or graph query
(might cause poor performance)", operator, qualifiedName,
INDEX_SEARCH_MAX_TOKEN_STR_LENGTH, attributeValue);
ret = false;
}
@@ -920,6 +933,10 @@ public abstract class SearchProcessor {
ArrayList<String> orExpQuery = new ArrayList<>();
for (AtlasStructType structType : structTypes) {
+ if (!isIndexSearchable(criteria, structType)) {
+ LOG.debug("toIndexQuery() ==> skipped attribute: {},
and filter value: {}, and operator: {}", criteria.getAttributeName(),
criteria.getAttributeValue(), criteria.getOperator());
+ continue;
+ }
String name =
structType.getVertexPropertyName(criteria.getAttributeName());
if (filterAttributes.contains(name)) {
diff --git
a/repository/src/test/java/org/apache/atlas/discovery/EntitySearchProcessorTest.java
b/repository/src/test/java/org/apache/atlas/discovery/EntitySearchProcessorTest.java
index bb5056d8e..0e4eff780 100644
---
a/repository/src/test/java/org/apache/atlas/discovery/EntitySearchProcessorTest.java
+++
b/repository/src/test/java/org/apache/atlas/discovery/EntitySearchProcessorTest.java
@@ -17,6 +17,7 @@
*/
package org.apache.atlas.discovery;
+import com.google.common.collect.ImmutableList;
import com.google.common.collect.Sets;
import org.apache.atlas.AtlasClient;
import org.apache.atlas.BasicTestSetup;
@@ -26,6 +27,7 @@ import org.apache.atlas.exception.AtlasBaseException;
import org.apache.atlas.model.discovery.SearchParameters;
import org.apache.atlas.model.instance.AtlasClassification;
import org.apache.atlas.model.instance.AtlasEntity;
+import org.apache.atlas.model.instance.AtlasEntity.AtlasEntitiesWithExtInfo;
import org.apache.atlas.model.instance.AtlasEntityHeader;
import org.apache.atlas.model.instance.EntityMutationResponse;
import org.apache.atlas.repository.Constants;
@@ -35,6 +37,7 @@ import org.apache.atlas.repository.graphdb.AtlasGraph;
import org.apache.atlas.repository.graphdb.AtlasVertex;
import org.apache.atlas.repository.store.graph.v2.AtlasEntityStream;
import org.apache.atlas.repository.store.graph.v2.EntityGraphRetriever;
+import org.apache.atlas.type.AtlasEntityType;
import org.apache.atlas.type.AtlasTypeRegistry;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -64,6 +67,14 @@ import static org.testng.Assert.fail;
public class EntitySearchProcessorTest extends BasicTestSetup {
private static final Logger LOG =
LoggerFactory.getLogger(EntitySearchProcessorTest.class);
+ private static final String HIVE_COLUMN_TYPE = "hive_column";
+
+ private static final String LONG_TABLE_NAME =
+
"rltdvhrxhocivajyqojaxulwzhgzgzpkfolziacfnndzncjkthzeaeykdhhrjqdeibhdgiepwqkinvqzqxevushydtwjaabzgbfjmzvcbsoxewruhyhciyjefzsnokxvbeiiowzbhlkmujcnwilslgeswobzwwvkugyupsemqxsbdcmgrlpxmeuljvxyddvpccvcloupjorziwhogwnjvsdrwksvrbxcxjlcrcmrvvmbdmenafmvgrqzcaqbgpnhxiqbvxcbnudafsmjzvlzzzzpqmjkngbximmbjbijrqfb";
+
+ private static final String LONG_TOKENIZED_TABLE_NAME =
+
"rrrr.tokenize:eeeivajaxulwzhgzgzpkfoianndzncjkthzeaeykdhhrjqdeibhdgiepwqkinvqzqxevushydtwjaabzgbfjmzvcbsoxewruhyhciyjefzsnokxvbeiiowzbhlkmujcnwilslgeswobzwwvkugyupsemqxsbdcmgrlpxmeuljvxyddvpccvcloupjogrqzcaqbgpnhxiqbvxcbnudafsmaajzvlzzzzpqmjkngbximmbjbijrq1";
+
private static final SimpleDateFormat FORMATTED_DATE = new
SimpleDateFormat("dd-MMM-yyyy");
private static final String EXPECTED_ENTITY_NAME =
"hive_Table_Null_tableType";
private static final TimeZone TIME_ZONE_UTC =
TimeZone.getTimeZone("UTC");
@@ -88,6 +99,7 @@ public class EntitySearchProcessorTest extends BasicTestSetup
{
super.initialize();
setupTestData();
+ createLongQualifiedNameTestEntities();
createJapaneseEntityWithDescription();
createChineseEntityWithDescription();
FORMATTED_DATE.setTimeZone(TIME_ZONE_UTC);
@@ -200,7 +212,7 @@ public class EntitySearchProcessorTest extends
BasicTestSetup {
EntitySearchProcessor processor = new EntitySearchProcessor(context);
List<AtlasVertex> vertices = processor.execute();
- assertEquals(vertices.size(), 7);
+ assertEquals(vertices.size(), 10);
List<String> nameList = new ArrayList<>();
for (AtlasVertex vertex : vertices) {
@@ -278,7 +290,7 @@ public class EntitySearchProcessorTest extends
BasicTestSetup {
SearchContext context = new SearchContext(params, typeRegistry, graph,
Collections.emptySet());
EntitySearchProcessor processor = new EntitySearchProcessor(context);
- assertEquals(processor.execute().size(), 14);
+ assertEquals(processor.execute().size(), 17);
}
@Test(expectedExceptions = AtlasBaseException.class,
expectedExceptionsMessageRegExp = "Not_Exists: Unknown/invalid typename")
@@ -377,7 +389,7 @@ public class EntitySearchProcessorTest extends
BasicTestSetup {
EntitySearchProcessor processor = new EntitySearchProcessor(context);
List<AtlasVertex> vertices = processor.execute();
- assertEquals(vertices.size(), 7);
+ assertEquals(vertices.size(), 10);
List<String> nameList = new ArrayList<>();
for (AtlasVertex vertex : vertices) {
@@ -792,6 +804,150 @@ public class EntitySearchProcessorTest extends
BasicTestSetup {
assertTrue(guids.contains(cjkGuid2));
}
+ @Test
+ public void searchTablesByQualifiedNameBeginswithAndEndswith() throws
AtlasBaseException {
+ SearchParameters.FilterCriteria filterCriteria = new
SearchParameters.FilterCriteria();
+ List<SearchParameters.FilterCriteria> lstCriterion = new
ArrayList<>();
+
+
filterCriteria.setCondition(SearchParameters.FilterCriteria.Condition.AND);
+
+
lstCriterion.add(getSingleFilterCriteria(AtlasClient.REFERENCEABLE_ATTRIBUTE_NAME,
SearchParameters.Operator.STARTS_WITH, "Sales.sample_table"));
+
lstCriterion.add(getSingleFilterCriteria(AtlasClient.REFERENCEABLE_ATTRIBUTE_NAME,
SearchParameters.Operator.ENDS_WITH, "@cl1"));
+ filterCriteria.setCriterion(lstCriterion);
+
+ SearchParameters params = getSearchParameters(HIVE_TABLE_TYPE,
filterCriteria, 20);
+ SearchContext context = new SearchContext(params,
typeRegistry, graph, indexer.getVertexIndexKeys());
+ EntitySearchProcessor processor = new EntitySearchProcessor(context);
+ List<AtlasVertex> vertices = processor.execute();
+
+ assertEquals(vertices.size(), 1);
+ }
+
+ @Test
+ public void searchTablesByLongQualifiedNameBeginswithAndEndswith() throws
AtlasBaseException {
+ SearchParameters.FilterCriteria filterCriteria = new
SearchParameters.FilterCriteria();
+
filterCriteria.setCondition(SearchParameters.FilterCriteria.Condition.AND);
+ List<SearchParameters.FilterCriteria> lstCriterion = new
ArrayList<>();
+
lstCriterion.add(getSingleFilterCriteria(AtlasClient.REFERENCEABLE_ATTRIBUTE_NAME,
SearchParameters.Operator.STARTS_WITH,
"Sales.rltdvhrxhocivajyqojaxulwzhgzgzpkfolziacfnndzncjkthzeaeykdhhrjqdeibhdgiepwqkinvqzqxevushydtwjaabzgbfjmzvcbsoxewruhyhciyjefzsnokxvbeiiowzbhlkmujcnwilslgeswobzwwvkugyupsemqxsbdcmgrlpxmeuljvxyddvpccvcloupjorziwhogwnjvsdrwksvrbxcxjlcrcmrvvmbdmenafmvgrqzcaqbgpnhxiqbvxcbnudafsmjzvlzzzzpqmjkngbximmbjbijrqfb"));
+
lstCriterion.add(getSingleFilterCriteria(AtlasClient.REFERENCEABLE_ATTRIBUTE_NAME,
SearchParameters.Operator.ENDS_WITH, "@cl1"));
+ filterCriteria.setCriterion(lstCriterion);
+
+ SearchParameters params = getSearchParameters(HIVE_TABLE_TYPE,
filterCriteria, 20);
+ SearchContext context = new SearchContext(params,
typeRegistry, graph, indexer.getVertexIndexKeys());
+ EntitySearchProcessor processor = new EntitySearchProcessor(context);
+ List<AtlasVertex> vertices = processor.execute();
+
+ assertEquals(vertices.size(), 1);
+ }
+
+ @Test
+ public void searchColumnsByQualifiedNameBeginswithAndEndswith() throws
AtlasBaseException {
+ SearchParameters.FilterCriteria filterCriteria = new
SearchParameters.FilterCriteria();
+
filterCriteria.setCondition(SearchParameters.FilterCriteria.Condition.AND);
+ List<SearchParameters.FilterCriteria> lstCriterion = new
ArrayList<>();
+
lstCriterion.add(getSingleFilterCriteria(AtlasClient.REFERENCEABLE_ATTRIBUTE_NAME,
SearchParameters.Operator.STARTS_WITH, "Sales.sample_table."));
+
lstCriterion.add(getSingleFilterCriteria(AtlasClient.REFERENCEABLE_ATTRIBUTE_NAME,
SearchParameters.Operator.ENDS_WITH, "@cl1"));
+ filterCriteria.setCriterion(lstCriterion);
+
+ SearchParameters params =
getSearchParameters(HIVE_COLUMN_TYPE, filterCriteria, 20);
+ SearchContext context = new SearchContext(params,
typeRegistry, graph, indexer.getVertexIndexKeys());
+ EntitySearchProcessor processor = new EntitySearchProcessor(context);
+ List<AtlasVertex> vertices = processor.execute();
+
+ assertEquals(vertices.size(), 6);
+ }
+
+ @Test
+ public void searchColumnsByLongQualifiedNameBeginswithAndEndswith() throws
AtlasBaseException {
+ SearchParameters.FilterCriteria filterCriteria = new
SearchParameters.FilterCriteria();
+
filterCriteria.setCondition(SearchParameters.FilterCriteria.Condition.AND);
+ List<SearchParameters.FilterCriteria> lstCriterion = new
ArrayList<>();
+
lstCriterion.add(getSingleFilterCriteria(AtlasClient.REFERENCEABLE_ATTRIBUTE_NAME,
SearchParameters.Operator.STARTS_WITH,
"Sales.rltdvhrxhocivajyqojaxulwzhgzgzpkfolziacfnndzncjkthzeaeykdhhrjqdeibhdgiepwqkinvqzqxevushydtwjaabzgbfjmzvcbsoxewruhyhciyjefzsnokxvbeiiowzbhlkmujcnwilslgeswobzwwvkugyupsemqxsbdcmgrlpxmeuljvxyddvpccvcloupjorziwhogwnjvsdrwksvrbxcxjlcrcmrvvmbdmenafmvgrqzcaqbgpnhxiqbvxcbnudafsmjzvlzzzzpqmjkngbximmbjbijrqfb."));
+
lstCriterion.add(getSingleFilterCriteria(AtlasClient.REFERENCEABLE_ATTRIBUTE_NAME,
SearchParameters.Operator.ENDS_WITH, "@cl1"));
+ filterCriteria.setCriterion(lstCriterion);
+
+ SearchParameters params =
getSearchParameters(HIVE_COLUMN_TYPE, filterCriteria, 20);
+ SearchContext context = new SearchContext(params,
typeRegistry, graph, indexer.getVertexIndexKeys());
+ EntitySearchProcessor processor = new EntitySearchProcessor(context);
+ List<AtlasVertex> vertices = processor.execute();
+
+ assertEquals(vertices.size(), 5);
+ }
+
+ @Test
+ public void
searchTablesByLongTokenizedQualifiedNameBeginswithAndEndswith() throws
AtlasBaseException {
+ SearchParameters.FilterCriteria filterCriteria = new
SearchParameters.FilterCriteria();
+
filterCriteria.setCondition(SearchParameters.FilterCriteria.Condition.AND);
+ List<SearchParameters.FilterCriteria> lstCriterion = new
ArrayList<>();
+
lstCriterion.add(getSingleFilterCriteria(AtlasClient.REFERENCEABLE_ATTRIBUTE_NAME,
SearchParameters.Operator.STARTS_WITH,
"Sales.rrrr.tokenize:eeeivajaxulwzhgzgzpkfoianndzncjkthzeaeykdhhrjqdeibhdgiepwqkinvqzqxevushydtwjaabzgbfjmzvcbsoxewruhyhciyjefzsnokxvbeiiowzbhlkmujcnwilslgeswobzwwvkugyupsemqxsbdcmgrlpxmeuljvxyddvpccvcloupjogrqzcaqbgpnhxiqbvxcbnudafsmaajzvlzzzzpqmjkngbximmbjbijrq1"));
+
lstCriterion.add(getSingleFilterCriteria(AtlasClient.REFERENCEABLE_ATTRIBUTE_NAME,
SearchParameters.Operator.ENDS_WITH, "@cl1"));
+ filterCriteria.setCriterion(lstCriterion);
+
+ SearchParameters params = getSearchParameters(HIVE_TABLE_TYPE,
filterCriteria, 20);
+ SearchContext context = new SearchContext(params,
typeRegistry, graph, indexer.getVertexIndexKeys());
+ EntitySearchProcessor processor = new EntitySearchProcessor(context);
+ List<AtlasVertex> vertices = processor.execute();
+
+ assertEquals(vertices.size(), 1);
+ }
+
+ @Test
+ public void searchTablesByQualifiedNameContainsAndEndswith() throws
AtlasBaseException {
+ SearchParameters.FilterCriteria filterCriteria = new
SearchParameters.FilterCriteria();
+ List<SearchParameters.FilterCriteria> lstCriterion = new
ArrayList<>();
+
+
filterCriteria.setCondition(SearchParameters.FilterCriteria.Condition.AND);
+
+
lstCriterion.add(getSingleFilterCriteria(AtlasClient.REFERENCEABLE_ATTRIBUTE_NAME,
SearchParameters.Operator.CONTAINS, ".sample_table"));
+
lstCriterion.add(getSingleFilterCriteria(AtlasClient.REFERENCEABLE_ATTRIBUTE_NAME,
SearchParameters.Operator.ENDS_WITH, "@cl1"));
+ filterCriteria.setCriterion(lstCriterion);
+
+ SearchParameters params = getSearchParameters(HIVE_TABLE_TYPE,
filterCriteria, 20);
+ SearchContext context = new SearchContext(params,
typeRegistry, graph, indexer.getVertexIndexKeys());
+ EntitySearchProcessor processor = new EntitySearchProcessor(context);
+ List<AtlasVertex> vertices = processor.execute();
+
+ assertEquals(vertices.size(), 1);
+ }
+
+ @Test
+ public void searchTableByLongTokenizedQualifiedNameContainsAndEndswith()
throws AtlasBaseException {
+ SearchParameters.FilterCriteria filterCriteria = new
SearchParameters.FilterCriteria();
+ List<SearchParameters.FilterCriteria> lstCriterion = new
ArrayList<>();
+
+
filterCriteria.setCondition(SearchParameters.FilterCriteria.Condition.AND);
+
+
lstCriterion.add(getSingleFilterCriteria(AtlasClient.REFERENCEABLE_ATTRIBUTE_NAME,
SearchParameters.Operator.CONTAINS,
".rrrr.tokenize:eeeivajaxulwzhgzgzpkfoianndzncjkthzeaeykdhhrjqdeibhdgiepwqkinvqzqxevushydtwjaabzgbfjmzvcbsoxewruhyhciyjefzsnokxvbeiiowzbhlkmujcnwilslgeswobzwwvkugyupsemqxsbdcmgrlpxmeuljvxyddvpccvcloupjogrqzcaqbgpnhxiqbvxcbnudafsmaajzvlzzzzpqmjkngbximmbjbijrq1"));
+
lstCriterion.add(getSingleFilterCriteria(AtlasClient.REFERENCEABLE_ATTRIBUTE_NAME,
SearchParameters.Operator.ENDS_WITH, "@cl1"));
+ filterCriteria.setCriterion(lstCriterion);
+
+ SearchParameters params = getSearchParameters(HIVE_TABLE_TYPE,
filterCriteria, 20);
+ SearchContext context = new SearchContext(params,
typeRegistry, graph, indexer.getVertexIndexKeys());
+ EntitySearchProcessor processor = new EntitySearchProcessor(context);
+ List<AtlasVertex> vertices = processor.execute();
+
+ assertEquals(vertices.size(), 1);
+ }
+
+ @Test
+ public void searchTableByLongQualifiedNameContainsAndEndswith() throws
AtlasBaseException {
+ SearchParameters.FilterCriteria filterCriteria = new
SearchParameters.FilterCriteria();
+ List<SearchParameters.FilterCriteria> lstCriterion = new
ArrayList<>();
+
+
filterCriteria.setCondition(SearchParameters.FilterCriteria.Condition.AND);
+
+
lstCriterion.add(getSingleFilterCriteria(AtlasClient.REFERENCEABLE_ATTRIBUTE_NAME,
SearchParameters.Operator.CONTAINS,
".rltdvhrxhocivajyqojaxulwzhgzgzpkfolziacfnndzncjkthzeaeykdhhrjqdeibhdgiepwqkinvqzqxevushydtwjaabzgbfjmzvcbsoxewruhyhciyjefzsnokxvbeiiowzbhlkmujcnwilslgeswobzwwvkugyupsemqxsbdcmgrlpxmeuljvxyddvpccvcloupjorziwhogwnjvsdrwksvrbxcxjlcrcmrvvmbdmenafmvgrqzcaqbgpnhxiqbvxcbnudafsmjzvlzzzzpqmjkngbximmbjbijrqfb"));
+
lstCriterion.add(getSingleFilterCriteria(AtlasClient.REFERENCEABLE_ATTRIBUTE_NAME,
SearchParameters.Operator.ENDS_WITH, "@cl1"));
+ filterCriteria.setCriterion(lstCriterion);
+
+ SearchParameters params = getSearchParameters(HIVE_TABLE_TYPE,
filterCriteria, 20);
+ SearchContext context = new SearchContext(params,
typeRegistry, graph, indexer.getVertexIndexKeys());
+ EntitySearchProcessor processor = new EntitySearchProcessor(context);
+ List<AtlasVertex> vertices = processor.execute();
+
+ assertEquals(vertices.size(), 1);
+ }
+
private static SearchParameters.FilterCriteria
filtercriteriaDateRange(String attributeValue, AtlasTypeRegistry typeRegistry,
AtlasGraph graph) throws AtlasBaseException {
SearchParameters.FilterCriteria filterCriteria = new
SearchParameters.FilterCriteria();
SearchParameters params = new
SearchParameters();
@@ -857,6 +1013,78 @@ public class EntitySearchProcessorTest extends
BasicTestSetup {
SearchContext context = new SearchContext(params, typeRegistry, graph,
Collections.emptySet());
EntitySearchProcessor processor = new EntitySearchProcessor(context);
- assertEquals(processor.getResultCount(), 11);
+ assertEquals(processor.getResultCount(), 14);
+ }
+
+ private void createLongQualifiedNameTestEntities() throws
AtlasBaseException {
+ AtlasEntityType entityType =
typeRegistry.getEntityTypeByName(DATABASE_TYPE);
+ AtlasEntity salesDB =
entityStore.getByUniqueAttributes(entityType,
+
Collections.singletonMap(AtlasClient.REFERENCEABLE_ATTRIBUTE_NAME,
"qualified:Sales")).getEntity();
+
+ AtlasEntity sd =
storageDescriptor("hdfs://host:8000/apps/warehouse/sales", "TextInputFormat",
"TextOutputFormat", true,
+ ImmutableList.of(column("time_id", "int", "time id")));
+
+ List<AtlasEntity> entities = new ArrayList<>();
+ entities.add(sd);
+
+ List<AtlasEntity> sampleColumns =
ImmutableList.of(column("sm_time_id", "int", "time id"),
+ column("sm_product_id", "int", "product id"),
+ column("sm_customer_id", "int", "customer id"),
+ column("sm_sales", "double", "product id"),
+ column("sm_test", "int", "test 1"),
+ column("sm_test_limit", "int", "test limit 1"));
+
+ entities.addAll(sampleColumns);
+ entities.add(createTableWithClusterQualifiedName("sample_table",
"sample table", salesDB, sd, "Dev 1", "Managed", sampleColumns));
+
+ List<AtlasEntity> longTableNameColumns =
ImmutableList.of(column("l_id", "int", "time id"),
+ column("l_product_id", "int", "product id"),
+ column("l_customer_id", "int", "customer id"),
+ column("l_sales", "double", "product id"),
+ column("l_test", "int", "test 1"));
+
+ entities.addAll(longTableNameColumns);
+ entities.add(createTableWithClusterQualifiedName(LONG_TABLE_NAME,
"table name length 300", salesDB, sd, "Dev 2", "Managed",
longTableNameColumns));
+
+ List<AtlasEntity> longTokenizeTableNameColumns =
ImmutableList.of(column("l_tknz_id", "int", "time id"),
+ column("l_tknz_product_id", "int", "product id"),
+ column("l_tknz_sales", "double", "product id"),
+ column("l_tknz_test", "int", "test 1"));
+
+ entities.addAll(longTokenizeTableNameColumns);
+
entities.add(createTableWithClusterQualifiedName(LONG_TOKENIZED_TABLE_NAME,
"table name length 300, Tokenized", salesDB, sd, "Dev 3", "Managed",
longTokenizeTableNameColumns));
+
+ entityStore.createOrUpdate(new AtlasEntityStream(new
AtlasEntitiesWithExtInfo(entities)), false);
+ }
+
+ private AtlasEntity createTableWithClusterQualifiedName(String name,
String description, AtlasEntity db, AtlasEntity sd,
+ String owner, String tableType, List<AtlasEntity> columns,
String... traitNames) {
+ AtlasEntity table = table(name, description, db, sd, owner, tableType,
columns, traitNames);
+ String dbName = db.getAttribute(AtlasClient.NAME).toString();
+ String clusterName = db.getAttribute("clusterName").toString();
+
+ table.setAttribute(AtlasClient.REFERENCEABLE_ATTRIBUTE_NAME, dbName +
"." + name + "@" + clusterName);
+
+ return table;
+ }
+
+ private SearchParameters.FilterCriteria getSingleFilterCriteria(String
attName, SearchParameters.Operator op, String attrValue) {
+ SearchParameters.FilterCriteria filterCriteria = new
SearchParameters.FilterCriteria();
+ filterCriteria.setAttributeName(attName);
+ filterCriteria.setOperator(op);
+ filterCriteria.setAttributeValue(attrValue);
+
+ return filterCriteria;
+ }
+
+ private SearchParameters getSearchParameters(String typeName,
SearchParameters.FilterCriteria entityFilter, int limit) {
+ SearchParameters params = new SearchParameters();
+ params.setTypeName(typeName);
+ if (entityFilter != null) {
+ params.setEntityFilters(entityFilter);
+ }
+ params.setLimit(limit);
+
+ return params;
}
}