From 3abb83052d801def64c90da2ee63618dc4f951af Mon Sep 17 00:00:00 2001 From: Suresh Srinivas Date: Fri, 15 Sep 2023 10:21:38 -0700 Subject: [PATCH] Fixes #13049 - Glossary recursive delete fails (#13182) --- .../service/jdbi3/EntityRepository.java | 12 ++---------- .../service/jdbi3/GlossaryTermRepository.java | 12 ++++++++---- .../glossary/GlossaryTermResourceTest.java | 14 ++++++++------ 3 files changed, 18 insertions(+), 20 deletions(-) diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/EntityRepository.java b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/EntityRepository.java index c02a08bf79c..65fdd8dbfee 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/EntityRepository.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/EntityRepository.java @@ -874,9 +874,6 @@ public abstract class EntityRepository { String changeType; T updated = get(null, original.getId(), putFields, ALL, false); - // clearFields(updated, Fields.EMPTY_FIELDS); // Clear the entity and set the fields again - // setFieldsInternal(updated, putFields); // we need service, database, databaseSchema to delete properly from - // ES. if (supportsSoftDelete && !hardDelete) { updated.setUpdatedBy(deletedBy); updated.setUpdatedAt(System.currentTimeMillis()); @@ -901,7 +898,6 @@ public abstract class EntityRepository { public final DeleteResponse deleteInternal(String updatedBy, UUID id, boolean recursive, boolean hardDelete) { // Validate entity - T entity = dao.findEntityById(id, ALL); return delete(updatedBy, entity, recursive, hardDelete); } @@ -1069,15 +1065,11 @@ public abstract class EntityRepository { public List getResultsFromAndToTimestamps( String fullyQualifiedName, String extension, Long startTs, Long endTs) { return getResultsFromAndToTimestamps( - fullyQualifiedName, extension, startTs, endTs, CollectionDAO.EntityExtensionTimeSeriesDAO.OrderBy.DESC); + fullyQualifiedName, extension, startTs, endTs, EntityTimeSeriesDAO.OrderBy.DESC); } public List getResultsFromAndToTimestamps( - String fqn, - String extension, - Long startTs, - Long endTs, - CollectionDAO.EntityExtensionTimeSeriesDAO.OrderBy orderBy) { + String fqn, String extension, Long startTs, Long endTs, EntityTimeSeriesDAO.OrderBy orderBy) { return daoCollection .entityExtensionTimeSeriesDao() .listBetweenTimestampsByOrder(fqn, extension, startTs, endTs, orderBy); diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/GlossaryTermRepository.java b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/GlossaryTermRepository.java index aa0b8ee1651..714d5e07d53 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/GlossaryTermRepository.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/GlossaryTermRepository.java @@ -73,7 +73,7 @@ public class GlossaryTermRepository extends EntityRepository { @Override public GlossaryTerm setFields(GlossaryTerm entity, Fields fields) { - entity.withGlossary(getGlossary(entity)).withParent(getParent(entity)); + entity.withParent(getParent(entity)).withGlossary(getGlossary(entity)); entity.setRelatedTerms(fields.contains("relatedTerms") ? getRelatedTerms(entity) : entity.getRelatedTerms()); return entity.withUsageCount(fields.contains("usageCount") ? getUsageCount(entity) : entity.getUsageCount()); } @@ -176,9 +176,10 @@ public class GlossaryTermRepository extends EntityRepository { } protected EntityReference getGlossary(GlossaryTerm term) { + Relationship relationship = term.getParent() != null ? Relationship.HAS : Relationship.CONTAINS; return term.getGlossary() != null ? term.getGlossary() - : getFromEntityRef(term.getId(), Relationship.CONTAINS, GLOSSARY, true); + : getFromEntityRef(term.getId(), relationship, GLOSSARY, true); } public EntityReference getGlossary(String id) { @@ -220,7 +221,8 @@ public class GlossaryTermRepository extends EntityRepository { } private void addGlossaryRelationship(GlossaryTerm term) { - addRelationship(term.getGlossary().getId(), term.getId(), GLOSSARY, GLOSSARY_TERM, Relationship.CONTAINS); + Relationship relationship = term.getParent() != null ? Relationship.HAS : Relationship.CONTAINS; + addRelationship(term.getGlossary().getId(), term.getId(), GLOSSARY, GLOSSARY_TERM, relationship); } private void addParentRelationship(GlossaryTerm term) { @@ -357,6 +359,7 @@ public class GlossaryTermRepository extends EntityRepository { invalidateTerm(original.getId()); } if (parentChanged) { + updateGlossaryRelationship(original, updated); updateParentRelationship(original, updated); recordChange("parent", original.getParent(), updated.getParent(), true, entityReferenceMatch); invalidateTerm(original.getId()); @@ -378,7 +381,8 @@ public class GlossaryTermRepository extends EntityRepository { } private void deleteGlossaryRelationship(GlossaryTerm term) { - deleteRelationship(term.getGlossary().getId(), GLOSSARY, term.getId(), GLOSSARY_TERM, Relationship.CONTAINS); + Relationship relationship = term.getParent() == null ? Relationship.CONTAINS : Relationship.HAS; + deleteRelationship(term.getGlossary().getId(), GLOSSARY, term.getId(), GLOSSARY_TERM, relationship); } private void updateParentRelationship(GlossaryTerm orig, GlossaryTerm updated) { diff --git a/openmetadata-service/src/test/java/org/openmetadata/service/resources/glossary/GlossaryTermResourceTest.java b/openmetadata-service/src/test/java/org/openmetadata/service/resources/glossary/GlossaryTermResourceTest.java index 72744269780..91ee64c349c 100644 --- a/openmetadata-service/src/test/java/org/openmetadata/service/resources/glossary/GlossaryTermResourceTest.java +++ b/openmetadata-service/src/test/java/org/openmetadata/service/resources/glossary/GlossaryTermResourceTest.java @@ -312,20 +312,22 @@ public class GlossaryTermResourceTest extends EntityResourceTest