From 97283f7b04cb36a9d9542dcdf292f341fd04da01 Mon Sep 17 00:00:00 2001 From: Hitesh Khandelwal Date: Fri, 31 May 2024 15:16:22 +0530 Subject: [PATCH 1/3] fixed "track_total_hits": false gives an NPE --- .../repository/graphdb/janus/AtlasElasticsearchQuery.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/graphdb/janus/src/main/java/org/apache/atlas/repository/graphdb/janus/AtlasElasticsearchQuery.java b/graphdb/janus/src/main/java/org/apache/atlas/repository/graphdb/janus/AtlasElasticsearchQuery.java index c303029146..6d3ee807f7 100644 --- a/graphdb/janus/src/main/java/org/apache/atlas/repository/graphdb/janus/AtlasElasticsearchQuery.java +++ b/graphdb/janus/src/main/java/org/apache/atlas/repository/graphdb/janus/AtlasElasticsearchQuery.java @@ -445,7 +445,10 @@ private DirectIndexQueryResult getResultFromResponse(Map if (hits_0 == null) { return result; } - this.vertexTotals = (Integer) hits_0.get("total").get("value"); + LinkedHashMap approximateCount = hits_0.get("total"); + if (approximateCount != null) { + this.vertexTotals = (Integer) approximateCount.get("value"); + } List hits_1 = AtlasType.fromJson(AtlasType.toJson(hits_0.get("hits")), List.class); From afaec7aedca87094d616a2d43233d05bf8ed3efe Mon Sep 17 00:00:00 2001 From: Suman Das <59254445+sumandas0@users.noreply.github.com> Date: Mon, 3 Jun 2024 20:16:46 +0530 Subject: [PATCH 2/3] fix: add check only for table not to check for supertypes --- .../main/java/org/apache/atlas/type/AtlasTypeRegistry.java | 3 +++ .../atlas/repository/store/graph/v2/AtlasGraphUtilsV2.java | 7 ++++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/intg/src/main/java/org/apache/atlas/type/AtlasTypeRegistry.java b/intg/src/main/java/org/apache/atlas/type/AtlasTypeRegistry.java index 4cb7e4a185..82628ce73e 100644 --- a/intg/src/main/java/org/apache/atlas/type/AtlasTypeRegistry.java +++ b/intg/src/main/java/org/apache/atlas/type/AtlasTypeRegistry.java @@ -44,6 +44,9 @@ public class AtlasTypeRegistry { private static final Logger LOG = LoggerFactory.getLogger(AtlasTypeRegistry.class); private static final int DEFAULT_LOCK_MAX_WAIT_TIME_IN_SECONDS = 15; + public static final ArrayList TYPENAMES_TO_SKIP_SUPER_TYPE_CHECK = new ArrayList() {{ + add("Table"); + }}; protected RegistryData registryData; private final TypeRegistryUpdateSynchronizer updateSynchronizer; private final Set missingRelationshipDefs; diff --git a/repository/src/main/java/org/apache/atlas/repository/store/graph/v2/AtlasGraphUtilsV2.java b/repository/src/main/java/org/apache/atlas/repository/store/graph/v2/AtlasGraphUtilsV2.java index 5f97d5645c..d6af87c224 100644 --- a/repository/src/main/java/org/apache/atlas/repository/store/graph/v2/AtlasGraphUtilsV2.java +++ b/repository/src/main/java/org/apache/atlas/repository/store/graph/v2/AtlasGraphUtilsV2.java @@ -35,8 +35,9 @@ import org.apache.atlas.type.AtlasEntityType; import org.apache.atlas.type.AtlasEnumType; import org.apache.atlas.type.AtlasStructType; -import org.apache.atlas.type.AtlasStructType.AtlasAttribute; +import org.apache.atlas.type.AtlasTypeRegistry; import org.apache.atlas.type.AtlasType; +import org.apache.atlas.type.AtlasStructType.AtlasAttribute; import org.apache.atlas.util.FileUtils; import org.apache.atlas.utils.AtlasPerfMetrics; import org.apache.atlas.utils.AtlasPerfMetrics.MetricRecorder; @@ -349,14 +350,14 @@ public static AtlasVertex findByUniqueAttributes(AtlasGraph graph, AtlasEntityTy vertex = findByTypeAndUniquePropertyName(graph, typeName, uniqAttrValues); // if no instance of given typeName is found, try to find an instance of type's sub-type - if (vertex == null && !entitySubTypes.isEmpty()) { + if (vertex == null && !entitySubTypes.isEmpty() && !AtlasTypeRegistry.TYPENAMES_TO_SKIP_SUPER_TYPE_CHECK.contains(typeName)) { vertex = findBySuperTypeAndUniquePropertyName(graph, typeName, uniqAttrValues); } } else { vertex = findByTypeAndPropertyName(graph, typeName, attrNameValues); // if no instance of given typeName is found, try to find an instance of type's sub-type - if (vertex == null && !entitySubTypes.isEmpty()) { + if (vertex == null && !entitySubTypes.isEmpty() && !AtlasTypeRegistry.TYPENAMES_TO_SKIP_SUPER_TYPE_CHECK.contains(typeName)) { vertex = findBySuperTypeAndPropertyName(graph, typeName, attrNameValues); } } From c004d353c196b45d162792043a728821a65f0e95 Mon Sep 17 00:00:00 2001 From: Suman Das <59254445+sumandas0@users.noreply.github.com> Date: Mon, 3 Jun 2024 20:20:43 +0530 Subject: [PATCH 3/3] nit: add comment for better generalising --- .../atlas/repository/store/graph/v2/AtlasGraphUtilsV2.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/repository/src/main/java/org/apache/atlas/repository/store/graph/v2/AtlasGraphUtilsV2.java b/repository/src/main/java/org/apache/atlas/repository/store/graph/v2/AtlasGraphUtilsV2.java index d6af87c224..42d30d39ca 100644 --- a/repository/src/main/java/org/apache/atlas/repository/store/graph/v2/AtlasGraphUtilsV2.java +++ b/repository/src/main/java/org/apache/atlas/repository/store/graph/v2/AtlasGraphUtilsV2.java @@ -350,6 +350,7 @@ public static AtlasVertex findByUniqueAttributes(AtlasGraph graph, AtlasEntityTy vertex = findByTypeAndUniquePropertyName(graph, typeName, uniqAttrValues); // if no instance of given typeName is found, try to find an instance of type's sub-type + // Added exception for few types to solve https://atlanhq.atlassian.net/browse/PLT-1638 if (vertex == null && !entitySubTypes.isEmpty() && !AtlasTypeRegistry.TYPENAMES_TO_SKIP_SUPER_TYPE_CHECK.contains(typeName)) { vertex = findBySuperTypeAndUniquePropertyName(graph, typeName, uniqAttrValues); } @@ -357,6 +358,7 @@ public static AtlasVertex findByUniqueAttributes(AtlasGraph graph, AtlasEntityTy vertex = findByTypeAndPropertyName(graph, typeName, attrNameValues); // if no instance of given typeName is found, try to find an instance of type's sub-type + // Added exception for few types to solve https://atlanhq.atlassian.net/browse/PLT-1638 if (vertex == null && !entitySubTypes.isEmpty() && !AtlasTypeRegistry.TYPENAMES_TO_SKIP_SUPER_TYPE_CHECK.contains(typeName)) { vertex = findBySuperTypeAndPropertyName(graph, typeName, attrNameValues); }