Disable tags when the classification is disabled (#13532)

* Disable tags when the classification is disabled

* remove unnecessary constants

---------

Co-authored-by: 07Himank <112613760+07Himank@users.noreply.github.com>
This commit is contained in:
Sriharsha Chintalapani 2023-10-12 16:11:24 -07:00 committed by GitHub
parent 932083f931
commit fcb06383c1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 62 additions and 39 deletions

View File

@ -108,6 +108,8 @@ public final class Entity {
public static final String FIELD_LIFE_CYCLE = "lifeCycle"; public static final String FIELD_LIFE_CYCLE = "lifeCycle";
public static final String FIELD_DISABLED = "disabled";
// //
// Service entities // Service entities
// //

View File

@ -13,7 +13,6 @@ import javax.ws.rs.core.Response;
import org.apache.commons.lang3.tuple.Pair; import org.apache.commons.lang3.tuple.Pair;
import org.openmetadata.schema.dataInsight.DataInsightChartResult; import org.openmetadata.schema.dataInsight.DataInsightChartResult;
import org.openmetadata.schema.service.configuration.elasticsearch.ElasticSearchConfiguration; import org.openmetadata.schema.service.configuration.elasticsearch.ElasticSearchConfiguration;
import org.openmetadata.schema.type.EntityReference;
import org.openmetadata.service.exception.CustomExceptionMessage; import org.openmetadata.service.exception.CustomExceptionMessage;
import org.openmetadata.service.search.models.IndexMapping; import org.openmetadata.service.search.models.IndexMapping;
import org.openmetadata.service.util.SSLUtil; import org.openmetadata.service.util.SSLUtil;
@ -29,14 +28,16 @@ public interface SearchClient {
String DELETE = "delete"; String DELETE = "delete";
String GLOBAL_SEARCH_ALIAS = "AllEntities"; String GLOBAL_SEARCH_ALIAS = "AllEntities";
String DEFAULT_UPDATE_SCRIPT = "for (k in params.keySet()) { ctx._source.put(k, params.get(k)) }"; String DEFAULT_UPDATE_SCRIPT = "for (k in params.keySet()) { ctx._source.put(k, params.get(k)) }";
String CLASSIFICATION_DISABLE_SCRIPT = "ctx._source.disabled=%s";
String REMOVE_DOMAINS_CHILDREN_SCRIPT = "ctx._source.remove('domain')"; String REMOVE_DOMAINS_CHILDREN_SCRIPT = "ctx._source.remove('domain')";
String PROPAGATE_FIELD_SCRIPT = "if(ctx._source.%s == null){ ctx._source.put('%s', params)}"; String PROPAGATE_ENTITY_REFERENCE_FIELD_SCRIPT = "if(ctx._source.%s == null){ ctx._source.put('%s', params)}";
String REMOVE_PROPAGATED_FIELD_SCRIPT =
String PROPAGATE_FIELD_SCRIPT = "ctx._source.put('%s', '%s')";
String REMOVE_PROPAGATED_ENTITY_REFERENCE_FIELD_SCRIPT =
"if((ctx._source.%s != null) && (ctx._source.%s.id == '%s')){ ctx._source.remove('%s')}"; "if((ctx._source.%s != null) && (ctx._source.%s.id == '%s')){ ctx._source.remove('%s')}";
String UPDATE_PROPAGATED_FIELD_SCRIPT = String REMOVE_PROPAGATED_FIELD_SCRIPT = "ctx._source.remove('%s')";
String UPDATE_PROPAGATED_ENTITY_REFERENCE_FIELD_SCRIPT =
"if((ctx._source.%s == null) || (ctx._source.%s.id == '%s')) { ctx._source.put('%s', params)}"; "if((ctx._source.%s == null) || (ctx._source.%s.id == '%s')) { ctx._source.put('%s', params)}";
String SOFT_DELETE_RESTORE_SCRIPT = "ctx._source.put('deleted', '%s')"; String SOFT_DELETE_RESTORE_SCRIPT = "ctx._source.put('deleted', '%s')";
String REMOVE_TAGS_CHILDREN_SCRIPT = String REMOVE_TAGS_CHILDREN_SCRIPT =
@ -84,7 +85,7 @@ public interface SearchClient {
void softDeleteOrRestoreChildren(String indexName, String scriptTxt, List<Pair<String, String>> fieldAndValue); void softDeleteOrRestoreChildren(String indexName, String scriptTxt, List<Pair<String, String>> fieldAndValue);
void updateChildren(String indexName, Pair<String, String> fieldAndValue, Pair<String, EntityReference> updates); void updateChildren(String indexName, Pair<String, String> fieldAndValue, Pair<String, Map<String, Object>> updates);
TreeMap<Long, List<Object>> getSortedDate( TreeMap<Long, List<Object>> getSortedDate(
String team, String team,

View File

@ -5,13 +5,15 @@ import static org.openmetadata.service.Entity.FIELD_USAGE_SUMMARY;
import static org.openmetadata.service.Entity.QUERY; import static org.openmetadata.service.Entity.QUERY;
import static org.openmetadata.service.search.SearchClient.DEFAULT_UPDATE_SCRIPT; import static org.openmetadata.service.search.SearchClient.DEFAULT_UPDATE_SCRIPT;
import static org.openmetadata.service.search.SearchClient.GLOBAL_SEARCH_ALIAS; import static org.openmetadata.service.search.SearchClient.GLOBAL_SEARCH_ALIAS;
import static org.openmetadata.service.search.SearchClient.PROPAGATE_ENTITY_REFERENCE_FIELD_SCRIPT;
import static org.openmetadata.service.search.SearchClient.PROPAGATE_FIELD_SCRIPT; import static org.openmetadata.service.search.SearchClient.PROPAGATE_FIELD_SCRIPT;
import static org.openmetadata.service.search.SearchClient.REMOVE_DOMAINS_CHILDREN_SCRIPT; import static org.openmetadata.service.search.SearchClient.REMOVE_DOMAINS_CHILDREN_SCRIPT;
import static org.openmetadata.service.search.SearchClient.REMOVE_PROPAGATED_ENTITY_REFERENCE_FIELD_SCRIPT;
import static org.openmetadata.service.search.SearchClient.REMOVE_PROPAGATED_FIELD_SCRIPT; import static org.openmetadata.service.search.SearchClient.REMOVE_PROPAGATED_FIELD_SCRIPT;
import static org.openmetadata.service.search.SearchClient.REMOVE_TAGS_CHILDREN_SCRIPT; import static org.openmetadata.service.search.SearchClient.REMOVE_TAGS_CHILDREN_SCRIPT;
import static org.openmetadata.service.search.SearchClient.REMOVE_TEST_SUITE_CHILDREN_SCRIPT; import static org.openmetadata.service.search.SearchClient.REMOVE_TEST_SUITE_CHILDREN_SCRIPT;
import static org.openmetadata.service.search.SearchClient.SOFT_DELETE_RESTORE_SCRIPT; import static org.openmetadata.service.search.SearchClient.SOFT_DELETE_RESTORE_SCRIPT;
import static org.openmetadata.service.search.SearchClient.UPDATE_PROPAGATED_FIELD_SCRIPT; import static org.openmetadata.service.search.SearchClient.UPDATE_PROPAGATED_ENTITY_REFERENCE_FIELD_SCRIPT;
import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.core.type.TypeReference;
import java.io.IOException; import java.io.IOException;
@ -43,6 +45,7 @@ import org.openmetadata.schema.type.EntityReference;
import org.openmetadata.schema.type.FieldChange; import org.openmetadata.schema.type.FieldChange;
import org.openmetadata.schema.type.UsageDetails; import org.openmetadata.schema.type.UsageDetails;
import org.openmetadata.service.Entity; import org.openmetadata.service.Entity;
import org.openmetadata.service.exception.UnhandledServerException;
import org.openmetadata.service.search.elasticsearch.ElasticSearchClient; import org.openmetadata.service.search.elasticsearch.ElasticSearchClient;
import org.openmetadata.service.search.indexes.SearchIndex; import org.openmetadata.service.search.indexes.SearchIndex;
import org.openmetadata.service.search.models.IndexMapping; import org.openmetadata.service.search.models.IndexMapping;
@ -58,7 +61,8 @@ public class SearchRepository {
private final String language; private final String language;
private final List<String> inheritableFields = List.of(Entity.FIELD_OWNER, Entity.FIELD_DOMAIN); private final List<String> inheritableFields =
List.of(Entity.FIELD_OWNER, Entity.FIELD_DOMAIN, Entity.FIELD_DISABLED);
public final List<String> dataInsightReports = public final List<String> dataInsightReports =
List.of( List.of(
@ -252,7 +256,7 @@ public class SearchRepository {
public void propagateInheritedFieldsToChildren( public void propagateInheritedFieldsToChildren(
String entityType, String entityId, ChangeDescription changeDescription, IndexMapping indexMapping) { String entityType, String entityId, ChangeDescription changeDescription, IndexMapping indexMapping) {
if (changeDescription != null) { if (changeDescription != null) {
Pair<String, EntityReference> updates = getInheritedFieldChanges(changeDescription); Pair<String, Map<String, Object>> updates = getInheritedFieldChanges(changeDescription);
Pair<String, String> parentMatch = new ImmutablePair<>(entityType + ".id", entityId); Pair<String, String> parentMatch = new ImmutablePair<>(entityType + ".id", entityId);
if (updates.getKey() != null && !updates.getKey().isEmpty()) { if (updates.getKey() != null && !updates.getKey().isEmpty()) {
searchClient.updateChildren(indexMapping.getAlias(), parentMatch, updates); searchClient.updateChildren(indexMapping.getAlias(), parentMatch, updates);
@ -260,40 +264,58 @@ public class SearchRepository {
} }
} }
private Pair<String, EntityReference> getInheritedFieldChanges(ChangeDescription changeDescription) { private Pair<String, Map<String, Object>> getInheritedFieldChanges(ChangeDescription changeDescription) {
StringBuilder scriptTxt = new StringBuilder(); StringBuilder scriptTxt = new StringBuilder();
EntityReference fieldData = null; Map<String, Object> fieldData = new HashMap<>();
if (changeDescription != null) { if (changeDescription != null) {
for (FieldChange field : changeDescription.getFieldsAdded()) { for (FieldChange field : changeDescription.getFieldsAdded()) {
if (inheritableFields.contains(field.getName())) { if (inheritableFields.contains(field.getName())) {
scriptTxt.append(String.format(PROPAGATE_FIELD_SCRIPT, field.getName(), field.getName())); try {
fieldData = JsonUtils.readValue(field.getNewValue().toString(), EntityReference.class); EntityReference entityReference =
JsonUtils.readValue(field.getNewValue().toString(), EntityReference.class);
scriptTxt.append(String.format(PROPAGATE_ENTITY_REFERENCE_FIELD_SCRIPT, field.getName(), field.getName()));
fieldData = JsonUtils.getMap(entityReference);
} catch (UnhandledServerException e) {
scriptTxt.append(String.format(PROPAGATE_FIELD_SCRIPT, field.getName(), field.getNewValue()));
}
} }
} }
for (FieldChange field : changeDescription.getFieldsUpdated()) { for (FieldChange field : changeDescription.getFieldsUpdated()) {
if (inheritableFields.contains(field.getName())) { if (inheritableFields.contains(field.getName())) {
EntityReference entityReference = JsonUtils.readValue(field.getOldValue().toString(), EntityReference.class); try {
scriptTxt.append( EntityReference oldEntityReference =
String.format( JsonUtils.readValue(field.getOldValue().toString(), EntityReference.class);
UPDATE_PROPAGATED_FIELD_SCRIPT, EntityReference newEntityReference =
field.getName(), JsonUtils.readValue(field.getNewValue().toString(), EntityReference.class);
field.getName(), scriptTxt.append(
entityReference.getId().toString(), String.format(
field.getName())); UPDATE_PROPAGATED_ENTITY_REFERENCE_FIELD_SCRIPT,
fieldData = JsonUtils.readValue(field.getNewValue().toString(), EntityReference.class); field.getName(),
field.getName(),
oldEntityReference.getId().toString(),
field.getName()));
fieldData = JsonUtils.getMap(newEntityReference);
} catch (UnhandledServerException e) {
scriptTxt.append(String.format(PROPAGATE_FIELD_SCRIPT, field.getName(), field.getNewValue()));
}
} }
} }
for (FieldChange field : changeDescription.getFieldsDeleted()) { for (FieldChange field : changeDescription.getFieldsDeleted()) {
if (inheritableFields.contains(field.getName())) { if (inheritableFields.contains(field.getName())) {
EntityReference entityReference = JsonUtils.readValue(field.getOldValue().toString(), EntityReference.class); try {
scriptTxt.append( EntityReference entityReference =
String.format( JsonUtils.readValue(field.getOldValue().toString(), EntityReference.class);
REMOVE_PROPAGATED_FIELD_SCRIPT, scriptTxt.append(
field.getName(), String.format(
field.getName(), REMOVE_PROPAGATED_ENTITY_REFERENCE_FIELD_SCRIPT,
entityReference.getId().toString(), field.getName(),
field.getName())); field.getName(),
fieldData = (EntityReference) field.getNewValue(); entityReference.getId().toString(),
field.getName()));
fieldData = JsonUtils.getMap(entityReference);
} catch (UnhandledServerException e) {
scriptTxt.append(String.format(REMOVE_PROPAGATED_FIELD_SCRIPT, field.getName()));
}
} }
} }
} }

View File

@ -111,7 +111,6 @@ import org.apache.http.impl.client.BasicCredentialsProvider;
import org.openmetadata.schema.DataInsightInterface; import org.openmetadata.schema.DataInsightInterface;
import org.openmetadata.schema.dataInsight.DataInsightChartResult; import org.openmetadata.schema.dataInsight.DataInsightChartResult;
import org.openmetadata.schema.service.configuration.elasticsearch.ElasticSearchConfiguration; import org.openmetadata.schema.service.configuration.elasticsearch.ElasticSearchConfiguration;
import org.openmetadata.schema.type.EntityReference;
import org.openmetadata.service.dataInsight.DataInsightAggregatorInterface; import org.openmetadata.service.dataInsight.DataInsightAggregatorInterface;
import org.openmetadata.service.jdbi3.DataInsightChartRepository; import org.openmetadata.service.jdbi3.DataInsightChartRepository;
import org.openmetadata.service.search.SearchClient; import org.openmetadata.service.search.SearchClient;
@ -981,7 +980,7 @@ public class ElasticSearchClient implements SearchClient {
@Override @Override
public void updateChildren( public void updateChildren(
String indexName, Pair<String, String> fieldAndValue, Pair<String, EntityReference> updates) { String indexName, Pair<String, String> fieldAndValue, Pair<String, Map<String, Object>> updates) {
if (isClientAvailable) { if (isClientAvailable) {
UpdateByQueryRequest updateByQueryRequest = new UpdateByQueryRequest(indexName); UpdateByQueryRequest updateByQueryRequest = new UpdateByQueryRequest(indexName);
updateByQueryRequest.setQuery( updateByQueryRequest.setQuery(
@ -991,7 +990,7 @@ public class ElasticSearchClient implements SearchClient {
ScriptType.INLINE, ScriptType.INLINE,
Script.DEFAULT_SCRIPT_LANG, Script.DEFAULT_SCRIPT_LANG,
updates.getKey(), updates.getKey(),
JsonUtils.getMap(updates.getValue() == null ? new HashMap<>() : JsonUtils.getMap(updates.getValue()))); JsonUtils.getMap(updates.getValue() == null ? new HashMap<>() : updates.getValue()));
updateByQueryRequest.setScript(script); updateByQueryRequest.setScript(script);
updateElasticSearchByQuery(updateByQueryRequest); updateElasticSearchByQuery(updateByQueryRequest);
} }

View File

@ -42,7 +42,6 @@ import org.apache.http.impl.client.BasicCredentialsProvider;
import org.openmetadata.schema.DataInsightInterface; import org.openmetadata.schema.DataInsightInterface;
import org.openmetadata.schema.dataInsight.DataInsightChartResult; import org.openmetadata.schema.dataInsight.DataInsightChartResult;
import org.openmetadata.schema.service.configuration.elasticsearch.ElasticSearchConfiguration; import org.openmetadata.schema.service.configuration.elasticsearch.ElasticSearchConfiguration;
import org.openmetadata.schema.type.EntityReference;
import org.openmetadata.service.dataInsight.DataInsightAggregatorInterface; import org.openmetadata.service.dataInsight.DataInsightAggregatorInterface;
import org.openmetadata.service.jdbi3.DataInsightChartRepository; import org.openmetadata.service.jdbi3.DataInsightChartRepository;
import org.openmetadata.service.search.SearchClient; import org.openmetadata.service.search.SearchClient;
@ -988,7 +987,7 @@ public class OpenSearchClient implements SearchClient {
@Override @Override
public void updateChildren( public void updateChildren(
String indexName, Pair<String, String> fieldAndValue, Pair<String, EntityReference> updates) { String indexName, Pair<String, String> fieldAndValue, Pair<String, Map<String, Object>> updates) {
if (isClientAvailable) { if (isClientAvailable) {
UpdateByQueryRequest updateByQueryRequest = new UpdateByQueryRequest(indexName); UpdateByQueryRequest updateByQueryRequest = new UpdateByQueryRequest(indexName);
updateByQueryRequest.setQuery(new MatchQueryBuilder(fieldAndValue.getKey(), fieldAndValue.getValue())); updateByQueryRequest.setQuery(new MatchQueryBuilder(fieldAndValue.getKey(), fieldAndValue.getValue()));
@ -997,7 +996,7 @@ public class OpenSearchClient implements SearchClient {
ScriptType.INLINE, ScriptType.INLINE,
Script.DEFAULT_SCRIPT_LANG, Script.DEFAULT_SCRIPT_LANG,
updates.getKey(), updates.getKey(),
JsonUtils.getMap(updates.getValue() == null ? new HashMap<>() : updates.getValue())); updates.getValue() == null ? new HashMap<>() : updates.getValue());
updateByQueryRequest.setScript(script); updateByQueryRequest.setScript(script);
updateOpenSearchByQuery(updateByQueryRequest); updateOpenSearchByQuery(updateByQueryRequest);
} }

View File

@ -111,7 +111,7 @@
"indexName": "tag_search_index", "indexName": "tag_search_index",
"indexMappingFile": "/elasticsearch/%s/tag_index_mapping.json", "indexMappingFile": "/elasticsearch/%s/tag_index_mapping.json",
"alias": "tag", "alias": "tag",
"parentAliases": ["all"] "parentAliases": ["classification","all"]
}, },
"classification": { "classification": {
"indexName": "classification_search_index", "indexName": "classification_search_index",