Fix #5761: Delete is not working at database and service level (#5762)

* Fix #5761: Delete is not working at database and service level

* Fix failing test
This commit is contained in:
Sriharsha Chintalapani 2022-06-30 01:56:44 -07:00 committed by GitHub
parent e0a97d7944
commit f3f45bc174
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 17 additions and 3 deletions

View File

@ -56,6 +56,7 @@ import org.openmetadata.catalog.entity.data.Topic;
import org.openmetadata.catalog.entity.services.DashboardService; import org.openmetadata.catalog.entity.services.DashboardService;
import org.openmetadata.catalog.entity.services.DatabaseService; import org.openmetadata.catalog.entity.services.DatabaseService;
import org.openmetadata.catalog.entity.services.MessagingService; import org.openmetadata.catalog.entity.services.MessagingService;
import org.openmetadata.catalog.entity.services.MlModelService;
import org.openmetadata.catalog.entity.services.PipelineService; import org.openmetadata.catalog.entity.services.PipelineService;
import org.openmetadata.catalog.entity.tags.Tag; import org.openmetadata.catalog.entity.tags.Tag;
import org.openmetadata.catalog.entity.teams.Team; import org.openmetadata.catalog.entity.teams.Team;
@ -138,6 +139,9 @@ public class ElasticSearchEventPublisher extends AbstractEventPublisher {
case Entity.PIPELINE_SERVICE: case Entity.PIPELINE_SERVICE:
updatePipelineService(event); updatePipelineService(event);
break; break;
case Entity.MLMODEL_SERVICE:
updateMlModelService(event);
break;
case Entity.MLMODEL: case Entity.MLMODEL:
updateMlModel(event); updateMlModel(event);
break; break;
@ -527,7 +531,7 @@ public class ElasticSearchEventPublisher extends AbstractEventPublisher {
DeleteByQueryRequest request = new DeleteByQueryRequest(ElasticSearchIndexType.TABLE_SEARCH_INDEX.indexName); DeleteByQueryRequest request = new DeleteByQueryRequest(ElasticSearchIndexType.TABLE_SEARCH_INDEX.indexName);
BoolQueryBuilder queryBuilder = new BoolQueryBuilder(); BoolQueryBuilder queryBuilder = new BoolQueryBuilder();
queryBuilder.must(new TermQueryBuilder("database.name", database.getName())); queryBuilder.must(new TermQueryBuilder("database.name", database.getName()));
queryBuilder.must(new TermQueryBuilder("service.name", database.getService())); queryBuilder.must(new TermQueryBuilder("service.name", database.getService().getName()));
request.setQuery(queryBuilder); request.setQuery(queryBuilder);
deleteEntityFromElasticSearchByQuery(request); deleteEntityFromElasticSearchByQuery(request);
} }
@ -549,7 +553,7 @@ public class ElasticSearchEventPublisher extends AbstractEventPublisher {
if (event.getEventType() == EventType.ENTITY_DELETED) { if (event.getEventType() == EventType.ENTITY_DELETED) {
DatabaseService databaseService = (DatabaseService) event.getEntity(); DatabaseService databaseService = (DatabaseService) event.getEntity();
DeleteByQueryRequest request = new DeleteByQueryRequest(ElasticSearchIndexType.TABLE_SEARCH_INDEX.indexName); DeleteByQueryRequest request = new DeleteByQueryRequest(ElasticSearchIndexType.TABLE_SEARCH_INDEX.indexName);
request.setQuery(new TermQueryBuilder(Entity.FIELD_SERVICE, databaseService.getName())); request.setQuery(new TermQueryBuilder("service.name", databaseService.getName()));
deleteEntityFromElasticSearchByQuery(request); deleteEntityFromElasticSearchByQuery(request);
} }
} }
@ -563,6 +567,15 @@ public class ElasticSearchEventPublisher extends AbstractEventPublisher {
} }
} }
private void updateMlModelService(ChangeEvent event) throws IOException {
if (event.getEventType() == EventType.ENTITY_DELETED) {
MlModelService mlModelService = (MlModelService) event.getEntity();
DeleteByQueryRequest request = new DeleteByQueryRequest(ElasticSearchIndexType.MLMODEL_SEARCH_INDEX.indexName);
request.setQuery(new TermQueryBuilder("service.name", mlModelService.getName()));
deleteEntityFromElasticSearchByQuery(request);
}
}
private void updateMessagingService(ChangeEvent event) throws IOException { private void updateMessagingService(ChangeEvent event) throws IOException {
if (event.getEventType() == EventType.ENTITY_DELETED) { if (event.getEventType() == EventType.ENTITY_DELETED) {
MessagingService messagingService = (MessagingService) event.getEntity(); MessagingService messagingService = (MessagingService) event.getEntity();

View File

@ -68,7 +68,7 @@ public class BotRepository extends EntityRepository<Bot> {
public EntityReference getBotUser(Bot bot) throws IOException { public EntityReference getBotUser(Bot bot) throws IOException {
List<String> refs = findTo(bot.getId(), Entity.BOT, Relationship.CONTAINS, Entity.USER); List<String> refs = findTo(bot.getId(), Entity.BOT, Relationship.CONTAINS, Entity.USER);
ensureSingleRelationship(Entity.BOT, bot.getId(), refs, "botUser", true); ensureSingleRelationship(Entity.BOT, bot.getId(), refs, "botUser", false);
return refs.isEmpty() return refs.isEmpty()
? null ? null
: daoCollection.userDAO().findEntityReferenceById(UUID.fromString(refs.get(0)), Include.ALL); : daoCollection.userDAO().findEntityReferenceById(UUID.fromString(refs.get(0)), Include.ALL);

View File

@ -538,6 +538,7 @@ public abstract class EntityRepository<T extends EntityInterface> {
String changeType; String changeType;
T updated = JsonUtils.readValue(json, entityClass); T updated = JsonUtils.readValue(json, entityClass);
setFields(updated, putFields); // we need service, database, databaseSchema to delete properly from ES.
if (supportsSoftDelete && !hardDelete) { if (supportsSoftDelete && !hardDelete) {
updated.setUpdatedBy(updatedBy); updated.setUpdatedBy(updatedBy);
updated.setUpdatedAt(System.currentTimeMillis()); updated.setUpdatedAt(System.currentTimeMillis());