You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@atlas.apache.org by ni...@apache.org on 2020/07/09 13:17:39 UTC
[atlas] branch master updated: ATLAS-3880 : BasicSearch: Multiple
type/tag: Log invalid and allow searching valid type/tag names
This is an automated email from the ASF dual-hosted git repository.
nixon pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/atlas.git
The following commit(s) were added to refs/heads/master by this push:
new f690755 ATLAS-3880 : BasicSearch: Multiple type/tag: Log invalid and allow searching valid type/tag names
f690755 is described below
commit f690755f79f9696e3214b9a3f158977b3bd5f4a7
Author: Pinal Shah <pi...@freestoneinfotech.com>
AuthorDate: Tue Jul 7 19:03:40 2020 +0530
ATLAS-3880 : BasicSearch: Multiple type/tag: Log invalid and allow searching valid type/tag names
Signed-off-by: nixonrodrigues <ni...@apache.org>
---
.../org/apache/atlas/discovery/SearchContext.java | 42 +++++++++++-----------
.../atlas/discovery/EntitySearchProcessorTest.java | 2 +-
.../org/apache/atlas/web/rest/DiscoveryREST.java | 11 ++++--
3 files changed, 32 insertions(+), 23 deletions(-)
diff --git a/repository/src/main/java/org/apache/atlas/discovery/SearchContext.java b/repository/src/main/java/org/apache/atlas/discovery/SearchContext.java
index 04e8218..dd24a8c 100644
--- a/repository/src/main/java/org/apache/atlas/discovery/SearchContext.java
+++ b/repository/src/main/java/org/apache/atlas/discovery/SearchContext.java
@@ -359,7 +359,7 @@ public class SearchContext {
Set<String> classificationNames = new HashSet<>();
if (StringUtils.isNotEmpty(classification)) {
- String[] types = classification.split(TYPENAME_DELIMITER);
+ String[] types = classification.split(TYPENAME_DELIMITER);
Set<String> names = new HashSet<>(Arrays.asList(types));
names.forEach(name -> {
@@ -370,11 +370,13 @@ public class SearchContext {
});
// Validate if the classification exists
- if (CollectionUtils.isEmpty(classificationNames) || classificationNames.size() != names.size()) {
- if (CollectionUtils.isNotEmpty(classificationNames)) {
- names.removeAll(classificationNames);
- }
- throw new AtlasBaseException(AtlasErrorCode.UNKNOWN_CLASSIFICATION, String.join(TYPENAME_DELIMITER, names));
+ if (CollectionUtils.isEmpty(classificationNames)) {
+ throw new AtlasBaseException(AtlasErrorCode.UNKNOWN_CLASSIFICATION, classification);
+
+ } else if (classificationNames.size() != names.size()) {
+ names.removeAll(classificationNames);
+
+ LOG.info("Could not search for {} , invalid classifications", String.join(TYPENAME_DELIMITER, names));
}
}
@@ -398,24 +400,24 @@ public class SearchContext {
getEntityType(n)).filter(Objects::nonNull).collect(Collectors.toSet());
// Validate if the type name is incorrect
- if (CollectionUtils.isEmpty(entityTypes) || entityTypes.size() != typeNames.size()) {
- if (CollectionUtils.isNotEmpty(entityTypes)) {
- Set<String> validEntityTypes = new HashSet<>();
- for (AtlasEntityType entityType : entityTypes) {
- String name = entityType.getTypeName();
- if (name.equals(MATCH_ALL_ENTITY_TYPES.getTypeName())) {
- validEntityTypes.add(ALL_ENTITY_TYPES);
- continue;
- }
- validEntityTypes.add(entityType.getTypeName());
+ if (CollectionUtils.isEmpty(entityTypes)) {
+ throw new AtlasBaseException(AtlasErrorCode.UNKNOWN_TYPENAME,typeName);
+
+ } else if (entityTypes.size() != typeNames.size()) {
+ Set<String> validEntityTypes = new HashSet<>();
+ for (AtlasEntityType entityType : entityTypes) {
+ String name = entityType.getTypeName();
+ if (name.equals(MATCH_ALL_ENTITY_TYPES.getTypeName())) {
+ validEntityTypes.add(ALL_ENTITY_TYPES);
+ continue;
}
-
- typeNames.removeAll(validEntityTypes);
+ validEntityTypes.add(entityType.getTypeName());
}
- throw new AtlasBaseException(AtlasErrorCode.UNKNOWN_TYPENAME, String.join(TYPENAME_DELIMITER, typeNames));
- }
+ typeNames.removeAll(validEntityTypes);
+ LOG.info("Could not search for {} , invalid typeNames", String.join(TYPENAME_DELIMITER, typeNames));
+ }
}
return entityTypes;
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 b7ce978..8e42d17 100644
--- a/repository/src/test/java/org/apache/atlas/discovery/EntitySearchProcessorTest.java
+++ b/repository/src/test/java/org/apache/atlas/discovery/EntitySearchProcessorTest.java
@@ -250,7 +250,7 @@ public class EntitySearchProcessorTest extends BasicTestSetup {
@Test(expectedExceptions = AtlasBaseException.class, expectedExceptionsMessageRegExp = "Not_Exists: Unknown/invalid typename")
public void entityTypesNotAllowed() throws AtlasBaseException {
SearchParameters params = new SearchParameters();
- params.setTypeName(DATABASE_TYPE+",Not_Exists");
+ params.setTypeName("Not_Exists");
params.setLimit(20);
SearchContext context = new SearchContext(params, typeRegistry, graph, Collections.<String>emptySet());
diff --git a/webapp/src/main/java/org/apache/atlas/web/rest/DiscoveryREST.java b/webapp/src/main/java/org/apache/atlas/web/rest/DiscoveryREST.java
index 140ed9a..cdeb912 100644
--- a/webapp/src/main/java/org/apache/atlas/web/rest/DiscoveryREST.java
+++ b/webapp/src/main/java/org/apache/atlas/web/rest/DiscoveryREST.java
@@ -326,9 +326,16 @@ public class DiscoveryREST {
throw new AtlasBaseException(AtlasErrorCode.BAD_REQUEST, "Limit/offset should be non-negative");
}
+ if (StringUtils.isEmpty(parameters.getTypeName()) && !isEmpty(parameters.getEntityFilters())) {
+ throw new AtlasBaseException(AtlasErrorCode.BAD_REQUEST, "EntityFilters specified without Type name");
+ }
+
+ if (StringUtils.isEmpty(parameters.getClassification()) && !isEmpty(parameters.getTagFilters())) {
+ throw new AtlasBaseException(AtlasErrorCode.BAD_REQUEST, "TagFilters specified without tag name");
+ }
+
if (StringUtils.isEmpty(parameters.getTypeName()) && StringUtils.isEmpty(parameters.getClassification()) &&
- StringUtils.isEmpty(parameters.getQuery()) && StringUtils.isEmpty(parameters.getTermName()) &&
- isEmpty(parameters.getEntityFilters()) && isEmpty(parameters.getTagFilters())) {
+ StringUtils.isEmpty(parameters.getQuery()) && StringUtils.isEmpty(parameters.getTermName())) {
throw new AtlasBaseException(AtlasErrorCode.INVALID_SEARCH_PARAMS);
}