This is an automated email from the ASF dual-hosted git repository.
pinal 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 b4745dcfe ATLAS-4822: Relationship Search feature should be
configurable
b4745dcfe is described below
commit b4745dcfe1799d9eddf43f62cffa162d19ad0c92
Author: vinayak.marraiya <[email protected]>
AuthorDate: Thu Mar 14 21:34:13 2024 +0530
ATLAS-4822: Relationship Search feature should be configurable
Signed-off-by: Pinal Shah <[email protected]>
---
dashboardv2/public/css/scss/override.scss | 6 +++++
dashboardv2/public/js/main.js | 29 ++++++++++++++--------
.../js/templates/search/SearchLayoutView_tmpl.html | 4 +--
dashboardv2/public/js/utils/Globals.js | 1 +
.../public/js/views/search/SearchLayoutView.js | 8 +++++-
dashboardv3/public/js/main.js | 19 ++++++++++++++
dashboardv3/public/js/utils/Globals.js | 1 +
.../views/search/SearchFilterBrowseLayoutView.js | 4 ++-
.../search/tree/CustomFilterTreeLayoutView.js | 19 ++++++++------
.../java/org/apache/atlas/AtlasConfiguration.java | 3 ++-
.../patches/RelationshipTypeNamePatch.java | 6 +++++
.../apache/atlas/web/resources/AdminResource.java | 4 +++
.../org/apache/atlas/web/rest/DiscoveryREST.java | 8 ++++++
13 files changed, 89 insertions(+), 23 deletions(-)
diff --git a/dashboardv2/public/css/scss/override.scss
b/dashboardv2/public/css/scss/override.scss
index 0c5f8bc0d..26b706547 100644
--- a/dashboardv2/public/css/scss/override.scss
+++ b/dashboardv2/public/css/scss/override.scss
@@ -659,4 +659,10 @@ div.columnmanager-dropdown-container {
background-color: #323544 !important;
}
}
+}
+.disable-relationship-search{
+ display:none !important;
+}
+.search-tab-body{
+ padding: 0px 18px 18px 18px !important;
}
\ No newline at end of file
diff --git a/dashboardv2/public/js/main.js b/dashboardv2/public/js/main.js
index f0cea7999..9c864cf8f 100644
--- a/dashboardv2/public/js/main.js
+++ b/dashboardv2/public/js/main.js
@@ -257,6 +257,19 @@ require(['App',
App.start();
}
};
+ var relationshipSearch= function(){
+ var that=this;
+ this.relationshipDefCollection.fetch({
+ async: true,
+ complete: function() {
+ that.relationshipDefCollection.fullCollection.comparator =
function(model) {
+ return model.get('name').toLowerCase();
+ };
+ that.relationshipDefCollection.fullCollection.sort({ silent:
true });
+ that.relationshipEventAgg.trigger("Relationship:Update");
+ }
+ });
+ };
CommonViewFunction.userDataFetch({
url: UrlLinks.sessionApiUrl(),
callback: function(response) {
@@ -308,6 +321,12 @@ require(['App',
if (response['atlas.lineage.on.demand.default.node.count'] !==
undefined) {
Globals.lineageNodeCount =
response['atlas.lineage.on.demand.default.node.count'];
}
+ if (response['atlas.relationship.search.enabled'] !==
undefined) {
+ Globals.isRelationshipSearchEnabled =
response['atlas.relationship.search.enabled'];
+ }
+ if(Globals.isRelationshipSearchEnabled){
+ relationshipSearch();
+ }
/* Atlas idealTimeout
redirectUrl: url to redirect after timeout
idealTimeLimit: timeout in seconds
@@ -391,16 +410,6 @@ require(['App',
startApp();
}
});
- this.relationshipDefCollection.fetch({
- async: true,
- complete: function() {
- that.relationshipDefCollection.fullCollection.comparator =
function(model) {
- return model.get('name').toLowerCase();
- };
- that.relationshipDefCollection.fullCollection.sort({ silent: true
});
- that.relationshipEventAgg.trigger("Relationship:Update");
- }
- });
CommonViewFunction.fetchRootEntityAttributes({
url: UrlLinks.rootEntityDefUrl(Enums.addOnEntities[0]),
entity: Enums.addOnEntities,
diff --git a/dashboardv2/public/js/templates/search/SearchLayoutView_tmpl.html
b/dashboardv2/public/js/templates/search/SearchLayoutView_tmpl.html
index f049fa420..3d4e15036 100644
--- a/dashboardv2/public/js/templates/search/SearchLayoutView_tmpl.html
+++ b/dashboardv2/public/js/templates/search/SearchLayoutView_tmpl.html
@@ -16,7 +16,7 @@
-->
<div class="row row-margin-bottom">
<div class="col-sm-12" style="margin-top: 10px;">
- <div class="row">
+ <div class="row" data-id="searchTabs">
<div>
<ul class="nav nav-tabs" data-id="tab-searchlist">
<li role="basic-search" class="tab basicSearch active"><a
href="#tab-basicSearch" aria-controls="tab-basicSearch" role="tab"
data-toggle="tab" aria-expanded="true">ENTITIES</a></li>
@@ -25,7 +25,7 @@
</div>
</div>
<div class="tab-content">
- <div id="tab-basicSearch" role="basic-search" class="tab-pane
active animated fadeIn row">
+ <div id="tab-basicSearch" data-id="searchTabBody"
role="basic-search" class="tab-pane active animated fadeIn row">
<div class="searchToggleBtn-container" style="margin:15px 0px;
font-size: 14px;">
<div class="row">
<div class="col-sm-9" style="margin-top: 5px;">
diff --git a/dashboardv2/public/js/utils/Globals.js
b/dashboardv2/public/js/utils/Globals.js
index 431a24b38..8ea4aafe7 100644
--- a/dashboardv2/public/js/utils/Globals.js
+++ b/dashboardv2/public/js/utils/Globals.js
@@ -60,6 +60,7 @@ define(["require", "underscore"], function(require, _) {
Globals.lineageNodeCount = 3;
Globals.lineageDepth = 3;
Globals.fromRelationshipSearch = false;
+ Globals.isRelationshipSearchEnabled = false;
return Globals;
});
\ No newline at end of file
diff --git a/dashboardv2/public/js/views/search/SearchLayoutView.js
b/dashboardv2/public/js/views/search/SearchLayoutView.js
index c59a5d83e..8173f70ff 100644
--- a/dashboardv2/public/js/views/search/SearchLayoutView.js
+++ b/dashboardv2/public/js/views/search/SearchLayoutView.js
@@ -55,7 +55,9 @@ define(['require',
advancedInfoBtn: '[data-id="advancedInfo"]',
typeAttrFilter: '[data-id="typeAttrFilter"]',
tagAttrFilter: '[data-id="tagAttrFilter"]',
- tablist: '[data-id="tab-searchlist"] li'
+ tablist: '[data-id="tab-searchlist"] li',
+ searchTabs:'[data-id="searchTabs"]',
+ searchTabBody:'[data-id="searchTabBody"]',
},
/** ui events hash */
@@ -385,6 +387,10 @@ define(['require',
// array of tags which is coming from url
this.initializeValues();
this.updateTabState();
+ if(!Globals.isRelationshipSearchEnabled){ // hide relationship
search
+ this.ui.searchTabs.addClass("disable-relationship-search");
+ this.ui.searchTabBody.addClass("search-tab-body");
+ }
},
updateTabState: function() {
if ((Utils.getUrlState.isRelationTab() ||
Utils.getUrlState.isRelationshipDetailPage()) && !this.isRelationSearch) {
diff --git a/dashboardv3/public/js/main.js b/dashboardv3/public/js/main.js
index 7423c88c3..69ffed9ae 100644
--- a/dashboardv3/public/js/main.js
+++ b/dashboardv3/public/js/main.js
@@ -284,6 +284,19 @@ require(['App',
App.start();
}
};
+ var relationshipSearch= function(){
+ var that=this;
+ this.relationshipDefCollection.fetch({
+ async: true,
+ complete: function() {
+ that.relationshipDefCollection.fullCollection.comparator =
function(model) {
+ return model.get('name').toLowerCase();
+ };
+ that.relationshipDefCollection.fullCollection.sort({ silent:
true });
+ startApp();
+ }
+ });
+ };
CommonViewFunction.userDataFetch({
url: UrlLinks.sessionApiUrl(),
callback: function(response) {
@@ -335,6 +348,12 @@ require(['App',
if (response['atlas.lineage.on.demand.default.node.count'] !==
undefined) {
Globals.lineageNodeCount =
response['atlas.lineage.on.demand.default.node.count'];
}
+ if (response['atlas.relationship.search.enabled'] !==
undefined) {
+ Globals.isRelationshipSearchEnabled =
response['atlas.relationship.search.enabled'];
+ }
+ if(Globals.isRelationshipSearchEnabled){
+ relationshipSearch();
+ }
/* Atlas idealTimeout
redirectUrl: url to redirect after timeout
idealTimeLimit: timeout in seconds
diff --git a/dashboardv3/public/js/utils/Globals.js
b/dashboardv3/public/js/utils/Globals.js
index 410d82881..056ac640e 100644
--- a/dashboardv3/public/js/utils/Globals.js
+++ b/dashboardv3/public/js/utils/Globals.js
@@ -61,6 +61,7 @@ define(["require", "underscore"], function(require, _) {
Globals.lineageNodeCount = 3;
Globals.lineageDepth = 3;
Globals.fromRelationshipSearch = false;
+ Globals.isRelationshipSearchEnabled = false;
return Globals;
});
\ No newline at end of file
diff --git a/dashboardv3/public/js/views/search/SearchFilterBrowseLayoutView.js
b/dashboardv3/public/js/views/search/SearchFilterBrowseLayoutView.js
index c81a74fd8..1c160016e 100644
--- a/dashboardv3/public/js/views/search/SearchFilterBrowseLayoutView.js
+++ b/dashboardv3/public/js/views/search/SearchFilterBrowseLayoutView.js
@@ -124,7 +124,9 @@ define([
this.renderGlossaryTree(opt);
this.renderCustomFilterTree();
this.renderBusinessMetadataTree();
- this.renderRelationshipTree();
+ if(Globals.isRelationshipSearchEnabled){ // show, hide
relationship search
+ this.renderRelationshipTree();
+ }
this.showHideGlobalFilter();
this.showDefaultPage();
},
diff --git
a/dashboardv3/public/js/views/search/tree/CustomFilterTreeLayoutView.js
b/dashboardv3/public/js/views/search/tree/CustomFilterTreeLayoutView.js
index ea7185b35..b49541d3a 100644
--- a/dashboardv3/public/js/views/search/tree/CustomFilterTreeLayoutView.js
+++ b/dashboardv3/public/js/views/search/tree/CustomFilterTreeLayoutView.js
@@ -385,15 +385,18 @@ define([
text: "Advanced Search",
name: "Advanced Search",
state: { opened: true }
- }, {
- icon: "fa fa-folder-o",
- gType: "customFilter",
- type: "customFilterFolder",
- children: customFilterRelationshipList,
- text: "Relationship Search",
- name: "Relationship Search",
- state: { opened: true }
}];
+ if(Globals.isRelationshipSearchEnabled){
+ treeView.push({
+ icon: "fa fa-folder-o",
+ gType: "customFilter",
+ type: "customFilterFolder",
+ children: customFilterRelationshipList,
+ text: "Relationship Search",
+ name: "Relationship Search",
+ state: { opened: true }
+ });
+ }
var customFilterList = that.isGroupView ? treeView :
allCustomFilter;
return customFilterList;
},
diff --git a/intg/src/main/java/org/apache/atlas/AtlasConfiguration.java
b/intg/src/main/java/org/apache/atlas/AtlasConfiguration.java
index 090889e1c..0868f8b6e 100644
--- a/intg/src/main/java/org/apache/atlas/AtlasConfiguration.java
+++ b/intg/src/main/java/org/apache/atlas/AtlasConfiguration.java
@@ -109,7 +109,8 @@ public enum AtlasConfiguration {
MIN_AUDIT_COUNT_TO_MAINTAIN("atlas.audit.min.count.to.maintain", 50),
ATLAS_AUDIT_AGING_SEARCH_MAX_LIMIT("atlas.audit.aging.search.maxlimit",
10000),
ATLAS_AUDIT_DEFAULT_AGEOUT_IGNORE_TTL("atlas.audit.default.ageout.ignore.ttl",
false),
-
ATLAS_AUDIT_AGING_TTL_TEST_AUTOMATION("atlas.audit.aging.ttl.test.automation",
false); //Only for test automation
+
ATLAS_AUDIT_AGING_TTL_TEST_AUTOMATION("atlas.audit.aging.ttl.test.automation",
false),//Only for test automation
+ RELATIONSHIP_SEARCH_ENABLED("atlas.relationship.search.enabled" ,false);
private static final Configuration APPLICATION_PROPERTIES;
diff --git
a/repository/src/main/java/org/apache/atlas/repository/patches/RelationshipTypeNamePatch.java
b/repository/src/main/java/org/apache/atlas/repository/patches/RelationshipTypeNamePatch.java
index c3a9106fa..52adcd4d7 100644
---
a/repository/src/main/java/org/apache/atlas/repository/patches/RelationshipTypeNamePatch.java
+++
b/repository/src/main/java/org/apache/atlas/repository/patches/RelationshipTypeNamePatch.java
@@ -17,6 +17,7 @@
*/
package org.apache.atlas.repository.patches;
+import org.apache.atlas.AtlasConfiguration;
import org.apache.atlas.exception.AtlasBaseException;
import org.apache.atlas.pc.WorkItemManager;
import org.apache.atlas.repository.Constants;
@@ -52,6 +53,11 @@ public class RelationshipTypeNamePatch extends
AtlasPatchHandler {
@Override
public void apply() throws AtlasBaseException {
+ if (AtlasConfiguration.RELATIONSHIP_SEARCH_ENABLED.getBoolean() ==
false) {
+ LOG.info("RelationshipTypeNamePatch: Skipped, since not enabled!");
+ return;
+ }
+ LOG.info("RelationshipTypeNamePatch: Starting...");
EdgePatchProcessor patchProcessor = new
RelationshipTypeNamePatchProcessor(context);
patchProcessor.apply();
diff --git
a/webapp/src/main/java/org/apache/atlas/web/resources/AdminResource.java
b/webapp/src/main/java/org/apache/atlas/web/resources/AdminResource.java
index 27ec59d37..0025276bb 100755
--- a/webapp/src/main/java/org/apache/atlas/web/resources/AdminResource.java
+++ b/webapp/src/main/java/org/apache/atlas/web/resources/AdminResource.java
@@ -190,6 +190,7 @@ public class AdminResource {
private final boolean isTasksEnabled;
private final boolean isOnDemandLineageEnabled;
private final int defaultLineageNodeCount;
+ private final boolean isRelationshipSearchEnabled;
private final AtlasMetricsUtil atlasMetricsUtil;
private AtlasAuditReductionService auditReductionService;
@@ -237,6 +238,7 @@ public class AdminResource {
this.isTasksEnabled =
AtlasConfiguration.TASKS_USE_ENABLED.getBoolean();
this.isOnDemandLineageEnabled =
AtlasConfiguration.LINEAGE_ON_DEMAND_ENABLED.getBoolean();
this.defaultLineageNodeCount =
AtlasConfiguration.LINEAGE_ON_DEMAND_DEFAULT_NODE_COUNT.getInt();
+ this.isRelationshipSearchEnabled =
AtlasConfiguration.RELATIONSHIP_SEARCH_ENABLED.getBoolean();
} else {
this.defaultUIVersion = UI_VERSION_V2;
this.isTimezoneFormatEnabled = true;
@@ -245,6 +247,7 @@ public class AdminResource {
this.isTasksEnabled = false;
this.isOnDemandLineageEnabled = false;
this.defaultLineageNodeCount = 3;
+ this.isRelationshipSearchEnabled = false;
}
}
@@ -396,6 +399,7 @@ public class AdminResource {
responseData.put(AtlasConfiguration.TASKS_USE_ENABLED.getPropertyName(),
isTasksEnabled);
responseData.put(AtlasConfiguration.LINEAGE_ON_DEMAND_ENABLED.getPropertyName(),
isOnDemandLineageEnabled);
responseData.put(AtlasConfiguration.LINEAGE_ON_DEMAND_DEFAULT_NODE_COUNT.getPropertyName(),
defaultLineageNodeCount);
+ responseData.put(
AtlasConfiguration.RELATIONSHIP_SEARCH_ENABLED.getPropertyName(),isRelationshipSearchEnabled);
if (AtlasConfiguration.SESSION_TIMEOUT_SECS.getInt() != -1) {
responseData.put(AtlasConfiguration.SESSION_TIMEOUT_SECS.getPropertyName(),
AtlasConfiguration.SESSION_TIMEOUT_SECS.getInt());
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 d1d19075f..b15f662d0 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
@@ -21,6 +21,7 @@ import org.apache.atlas.AtlasClient;
import org.apache.atlas.AtlasErrorCode;
import org.apache.atlas.RequestContext;
import org.apache.atlas.SortOrder;
+import org.apache.atlas.AtlasConfiguration;
import org.apache.atlas.annotation.Timed;
import org.apache.atlas.authorize.AtlasAuthorizationUtils;
import org.apache.atlas.discovery.AtlasDiscoveryService;
@@ -449,6 +450,10 @@ public class DiscoveryREST {
throw new AtlasBaseException(AtlasErrorCode.BAD_REQUEST,
"RelationshipFilters specified without Type name");
}
+ if (AtlasConfiguration.RELATIONSHIP_SEARCH_ENABLED.getBoolean() ==
false) {
+ throw new AtlasBaseException(AtlasErrorCode.BAD_REQUEST,
"Relationship search is currently disabled, set property " +
AtlasConfiguration.RELATIONSHIP_SEARCH_ENABLED.getPropertyName() + " = true to
enable");
+ }
+
return discoveryService.searchRelationsWithParameters(parameters);
} finally {
AtlasPerfTracer.log(perf);
@@ -485,6 +490,9 @@ public class DiscoveryREST {
", " + sortByAttribute + ", " + sortOrder + ", " +
limit + ", " + offset + ", " + marker + ")");
}
+ if (AtlasConfiguration.RELATIONSHIP_SEARCH_ENABLED.getBoolean() ==
false) {
+ throw new AtlasBaseException(AtlasErrorCode.BAD_REQUEST,
"Relationship search is currently disabled, set property " +
AtlasConfiguration.RELATIONSHIP_SEARCH_ENABLED.getPropertyName() + " = true to
enable");
+ }
RelationshipSearchParameters parameters = new
RelationshipSearchParameters();
parameters.setRelationshipName(relationshipName);
parameters.setSortBy(sortByAttribute);