From e367f557a6678c0ebe9a08a18c563571ac1e6c52 Mon Sep 17 00:00:00 2001 From: Suresh Srinivas Date: Mon, 13 Nov 2023 16:32:18 -0800 Subject: [PATCH] Make restoring patch attributes consistent across entities (#13961) * Make restoring patch attributes consistent across entities * Fix test failures * Fix test failures --- .../org/openmetadata/service/jdbi3/ChartRepository.java | 7 ++----- .../service/jdbi3/ClassificationRepository.java | 3 ++- .../openmetadata/service/jdbi3/ContainerRepository.java | 8 ++------ .../service/jdbi3/DashboardDataModelRepository.java | 7 ++----- .../openmetadata/service/jdbi3/DashboardRepository.java | 7 ++----- .../openmetadata/service/jdbi3/DataProductRepository.java | 1 + .../openmetadata/service/jdbi3/DatabaseRepository.java | 7 ++----- .../service/jdbi3/DatabaseSchemaRepository.java | 7 ++----- .../openmetadata/service/jdbi3/DocumentRepository.java | 6 ------ .../org/openmetadata/service/jdbi3/DomainRepository.java | 1 + .../org/openmetadata/service/jdbi3/EntityRepository.java | 6 +++++- .../service/jdbi3/EventSubscriptionRepository.java | 5 ----- .../openmetadata/service/jdbi3/GlossaryRepository.java | 2 ++ .../service/jdbi3/GlossaryTermRepository.java | 4 ++++ .../org/openmetadata/service/jdbi3/MlModelRepository.java | 7 ++----- .../org/openmetadata/service/jdbi3/PersonaRepository.java | 6 ------ .../openmetadata/service/jdbi3/PipelineRepository.java | 7 ++----- .../org/openmetadata/service/jdbi3/RoleRepository.java | 6 ------ .../org/openmetadata/service/jdbi3/TableRepository.java | 8 ++------ .../org/openmetadata/service/jdbi3/TagRepository.java | 4 ++++ .../org/openmetadata/service/jdbi3/TeamRepository.java | 2 +- .../org/openmetadata/service/jdbi3/UserRepository.java | 3 +-- 22 files changed, 39 insertions(+), 75 deletions(-) diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/ChartRepository.java b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/ChartRepository.java index fd820450f6e..cc68e5d29fb 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/ChartRepository.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/ChartRepository.java @@ -75,11 +75,8 @@ public class ChartRepository extends EntityRepository { @Override public void restorePatchAttributes(Chart original, Chart updated) { // Patch can't make changes to following fields. Ignore the changes - updated - .withFullyQualifiedName(original.getFullyQualifiedName()) - .withName(original.getName()) - .withService(original.getService()) - .withId(original.getId()); + super.restorePatchAttributes(original, updated); + updated.withService(original.getService()); } @Override diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/ClassificationRepository.java b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/ClassificationRepository.java index 2354ee0cde9..34c8dc20f3c 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/ClassificationRepository.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/ClassificationRepository.java @@ -48,6 +48,7 @@ public class ClassificationRepository extends EntityRepository { ""); quoteFqn = true; supportsSearch = true; + renameAllowed = true; } @Override @@ -110,7 +111,6 @@ public class ClassificationRepository extends EntityRepository { @Transaction @Override public void entitySpecificUpdate() { - // TODO handle name change // TODO mutuallyExclusive from false to true? recordChange("mutuallyExclusive", original.getMutuallyExclusive(), updated.getMutuallyExclusive()); recordChange("disabled", original.getDisabled(), updated.getDisabled()); @@ -125,6 +125,7 @@ public class ClassificationRepository extends EntityRepository { } // Classification name changed - update tag names starting from classification and all the children tags LOG.info("Classification name changed from {} to {}", original.getName(), updated.getName()); + setFullyQualifiedName(updated); daoCollection.tagDAO().updateFqn(original.getName(), updated.getName()); daoCollection .tagUsageDAO() diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/ContainerRepository.java b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/ContainerRepository.java index ae41596f7b0..1bc99e17a4d 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/ContainerRepository.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/ContainerRepository.java @@ -146,12 +146,8 @@ public class ContainerRepository extends EntityRepository { @Override public void restorePatchAttributes(Container original, Container updated) { // Patch can't make changes to following fields. Ignore the changes - updated - .withFullyQualifiedName(original.getFullyQualifiedName()) - .withService(original.getService()) - .withParent(original.getParent()) - .withName(original.getName()) - .withId(original.getId()); + super.restorePatchAttributes(original, updated); + updated.withService(original.getService()).withParent(original.getParent()); } @Override diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/DashboardDataModelRepository.java b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/DashboardDataModelRepository.java index 73f8ac596b0..1e2d8a541d4 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/DashboardDataModelRepository.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/DashboardDataModelRepository.java @@ -174,11 +174,8 @@ public class DashboardDataModelRepository extends EntityRepository columns) { diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/DashboardRepository.java b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/DashboardRepository.java index e59e564f5b5..547fdab1ae3 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/DashboardRepository.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/DashboardRepository.java @@ -118,11 +118,8 @@ public class DashboardRepository extends EntityRepository { @Override public void restorePatchAttributes(Dashboard original, Dashboard updated) { // Patch can't make changes to following fields. Ignore the changes - updated - .withId(original.getId()) - .withFullyQualifiedName(original.getFullyQualifiedName()) - .withName(original.getName()) - .withService(original.getService()); + super.restorePatchAttributes(original, updated); + updated.withService(original.getService()); } private void populateService(Dashboard dashboard) { diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/DataProductRepository.java b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/DataProductRepository.java index baec64f119d..70ba4c2aba3 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/DataProductRepository.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/DataProductRepository.java @@ -92,6 +92,7 @@ public class DataProductRepository extends EntityRepository { @Override public void restorePatchAttributes(DataProduct original, DataProduct updated) { + super.restorePatchAttributes(original, updated); updated.withDomain(original.getDomain()); // Domain can't be changed } diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/DatabaseRepository.java b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/DatabaseRepository.java index 842ad0453f6..77a726173e7 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/DatabaseRepository.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/DatabaseRepository.java @@ -112,11 +112,8 @@ public class DatabaseRepository extends EntityRepository { @Override public void restorePatchAttributes(Database original, Database updated) { // Patch can't make changes to following fields. Ignore the changes - updated - .withFullyQualifiedName(original.getFullyQualifiedName()) - .withName(original.getName()) - .withService(original.getService()) - .withId(original.getId()); + super.restorePatchAttributes(original, updated); + updated.withService(original.getService()); } @Override diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/DatabaseSchemaRepository.java b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/DatabaseSchemaRepository.java index 4b23d49906b..41efff8533f 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/DatabaseSchemaRepository.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/DatabaseSchemaRepository.java @@ -124,11 +124,8 @@ public class DatabaseSchemaRepository extends EntityRepository { @Override public void restorePatchAttributes(DatabaseSchema original, DatabaseSchema updated) { // Patch can't make changes to following fields. Ignore the changes - updated - .withFullyQualifiedName(original.getFullyQualifiedName()) - .withName(original.getName()) - .withService(original.getService()) - .withId(original.getId()); + super.restorePatchAttributes(original, updated); + updated.withService(original.getService()); } @Override diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/DocumentRepository.java b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/DocumentRepository.java index ae971c451d3..2a0918ec2ab 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/DocumentRepository.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/DocumentRepository.java @@ -43,12 +43,6 @@ public class DocumentRepository extends EntityRepository { doc.setFullyQualifiedName(doc.getFullyQualifiedName()); } - @Override - public void restorePatchAttributes(Document original, Document updated) { - // Patch can't make changes to following fields. Ignore the changes - updated.withName(original.getName()).withId(original.getId()); - } - @Override public Document setFields(Document document, Fields fields) { return document; diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/DomainRepository.java b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/DomainRepository.java index e6ae51efdef..009ee5a9788 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/DomainRepository.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/DomainRepository.java @@ -97,6 +97,7 @@ public class DomainRepository extends EntityRepository { @Override public void restorePatchAttributes(Domain original, Domain updated) { + super.restorePatchAttributes(original, updated); updated.withParent(original.getParent()); // Parent can't be changed updated.withChildren(original.getChildren()); // Children can't be changed } 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 5a49fff8bd1..1da0040e9df 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 @@ -211,6 +211,7 @@ public abstract class EntityRepository { @Getter protected final boolean supportsReviewers; @Getter protected final boolean supportsExperts; protected boolean quoteFqn = false; // Entity FQNS not hierarchical such user, teams, services need to be quoted + protected boolean renameAllowed = false; // Entity can be renamed /** Fields that can be updated during PATCH operation */ @Getter private final Fields patchFields; @@ -370,7 +371,10 @@ public abstract class EntityRepository { * stored in the original entity. */ public void restorePatchAttributes(T original, T updated) { - /* Nothing to restore during PATCH */ + updated.setId(original.getId()); + updated.setName(renameAllowed ? updated.getName() : original.getName()); + updated.setFullyQualifiedName(original.getFullyQualifiedName()); + updated.setChangeDescription(original.getChangeDescription()); } /** Set fullyQualifiedName of an entity */ diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/EventSubscriptionRepository.java b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/EventSubscriptionRepository.java index 51a901a1c63..9d395aac99e 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/EventSubscriptionRepository.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/EventSubscriptionRepository.java @@ -93,11 +93,6 @@ public class EventSubscriptionRepository extends EntityRepository { public class GlossaryUpdater extends EntityUpdater { public GlossaryUpdater(Glossary original, Glossary updated, Operation operation) { super(original, updated, operation); + renameAllowed = true; } @Transaction @@ -285,6 +286,7 @@ public class GlossaryRepository extends EntityRepository { } // Glossary name changed - update tag names starting from glossary and all the children tags LOG.info("Glossary name changed from {} to {}", original.getName(), updated.getName()); + setFullyQualifiedName(updated); daoCollection.glossaryTermDAO().updateFqn(original.getName(), updated.getName()); daoCollection .tagUsageDAO() 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 21b54449e30..708c6eb778e 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 @@ -82,6 +82,7 @@ public class GlossaryTermRepository extends EntityRepository { PATCH_FIELDS, UPDATE_FIELDS); supportsSearch = true; + renameAllowed = true; } @Override @@ -177,6 +178,7 @@ public class GlossaryTermRepository extends EntityRepository { @Override public void restorePatchAttributes(GlossaryTerm original, GlossaryTerm updated) { // Patch can't update Children + super.restorePatchAttributes(original, updated); updated.withChildren(original.getChildren()); } @@ -435,6 +437,7 @@ public class GlossaryTermRepository extends EntityRepository { CatalogExceptionMessage.systemEntityRenameNotAllowed(original.getName(), entityType)); } // Glossary term name changed - update the FQNs of the children terms to reflect this + setFullyQualifiedName(updated); LOG.info("Glossary term name changed from {} to {}", original.getName(), updated.getName()); daoCollection.glossaryTermDAO().updateFqn(original.getFullyQualifiedName(), updated.getFullyQualifiedName()); daoCollection @@ -455,6 +458,7 @@ public class GlossaryTermRepository extends EntityRepository { UUID newGlossaryId = getId(updated.getGlossary()); boolean glossaryChanged = !Objects.equals(oldGlossaryId, newGlossaryId); + setFullyQualifiedName(updated); // Update the FQN since the parent has changed daoCollection.glossaryTermDAO().updateFqn(original.getFullyQualifiedName(), updated.getFullyQualifiedName()); daoCollection .tagUsageDAO() diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/MlModelRepository.java b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/MlModelRepository.java index ee028378467..adf0cf09476 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/MlModelRepository.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/MlModelRepository.java @@ -103,11 +103,8 @@ public class MlModelRepository extends EntityRepository { @Override public void restorePatchAttributes(MlModel original, MlModel updated) { // Patch can't make changes to following fields. Ignore the changes - updated - .withFullyQualifiedName(original.getFullyQualifiedName()) - .withService(original.getService()) - .withName(original.getName()) - .withId(original.getId()); + super.restorePatchAttributes(original, updated); + updated.withService(original.getService()); } private void setMlFeatureSourcesFQN(List mlSources) { diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/PersonaRepository.java b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/PersonaRepository.java index 680b47662d1..ba1ae3635d4 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/PersonaRepository.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/PersonaRepository.java @@ -56,12 +56,6 @@ public class PersonaRepository extends EntityRepository { return persona; } - @Override - public void restorePatchAttributes(Persona original, Persona updated) { - // Patch can't make changes to following fields. Ignore the changes - updated.withName(original.getName()).withId(original.getId()); - } - @Override public void prepare(Persona persona, boolean update) { validateUsers(persona.getUsers()); diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/PipelineRepository.java b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/PipelineRepository.java index 6f7eced0af6..a4eae7c4cba 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/PipelineRepository.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/PipelineRepository.java @@ -210,11 +210,8 @@ public class PipelineRepository extends EntityRepository { @Override public void restorePatchAttributes(Pipeline original, Pipeline updated) { // Patch can't make changes to following fields. Ignore the changes - updated - .withFullyQualifiedName(original.getFullyQualifiedName()) - .withName(original.getName()) - .withService(original.getService()) - .withId(original.getId()); + super.restorePatchAttributes(original, updated); + updated.withService(original.getService()); } @Override diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/RoleRepository.java b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/RoleRepository.java index 108a68e24b2..bbebd06ac06 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/RoleRepository.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/RoleRepository.java @@ -65,12 +65,6 @@ public class RoleRepository extends EntityRepository { return findFrom(role.getId(), Entity.ROLE, Relationship.HAS, Entity.TEAM); } - @Override - public void restorePatchAttributes(Role original, Role updated) { - // Patch can't make changes to following fields. Ignore the changes - updated.withName(original.getName()).withId(original.getId()); - } - /** * If policy does not exist for this role, create a new entity reference. The actual policy gets created within the * storeEntity method call. diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/TableRepository.java b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/TableRepository.java index d166c42df60..4f61305c259 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/TableRepository.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/TableRepository.java @@ -170,12 +170,8 @@ public class TableRepository extends EntityRepository { @Override public void restorePatchAttributes(Table original, Table updated) { // Patch can't make changes to following fields. Ignore the changes. - updated - .withFullyQualifiedName(original.getFullyQualifiedName()) - .withName(original.getName()) - .withDatabase(original.getDatabase()) - .withService(original.getService()) - .withId(original.getId()); + super.restorePatchAttributes(original, updated); + updated.withDatabase(original.getDatabase()).withService(original.getService()); } @Override diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/TagRepository.java b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/TagRepository.java index b9e7a14f918..c352b909543 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/TagRepository.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/TagRepository.java @@ -41,6 +41,7 @@ public class TagRepository extends EntityRepository { public TagRepository() { super(TagResource.TAG_COLLECTION_PATH, Entity.TAG, Tag.class, Entity.getCollectionDAO().tagDAO(), "", ""); supportsSearch = true; + renameAllowed = true; } @Override @@ -67,6 +68,7 @@ public class TagRepository extends EntityRepository { @Override public void restorePatchAttributes(Tag original, Tag updated) { + super.restorePatchAttributes(original, updated); updated.setChildren(original.getChildren()); } @@ -153,6 +155,7 @@ public class TagRepository extends EntityRepository { } // Category name changed - update tag names starting from classification and all the children tags LOG.info("Tag name changed from {} to {}", original.getName(), updated.getName()); + setFullyQualifiedName(updated); daoCollection.tagDAO().updateFqn(original.getFullyQualifiedName(), updated.getFullyQualifiedName()); daoCollection .tagUsageDAO() @@ -176,6 +179,7 @@ public class TagRepository extends EntityRepository { UUID newCategoryId = getId(updated.getClassification()); boolean classificationChanged = !Objects.equals(oldCategoryId, newCategoryId); + setFullyQualifiedName(updated); daoCollection.tagDAO().updateFqn(original.getFullyQualifiedName(), updated.getFullyQualifiedName()); daoCollection .tagUsageDAO() diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/TeamRepository.java b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/TeamRepository.java index 1baeab477dd..a8403b923d6 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/TeamRepository.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/TeamRepository.java @@ -125,7 +125,7 @@ public class TeamRepository extends EntityRepository { @Override public void restorePatchAttributes(Team original, Team updated) { // Patch can't make changes to following fields. Ignore the changes - updated.withName(original.getName()).withId(original.getId()); + super.restorePatchAttributes(original, updated); updated.withInheritedRoles(original.getInheritedRoles()); } diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/UserRepository.java b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/UserRepository.java index f674f7662c8..9fe5bca878e 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/UserRepository.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/UserRepository.java @@ -136,9 +136,8 @@ public class UserRepository extends EntityRepository { @Override public void restorePatchAttributes(User original, User updated) { // Patch can't make changes to following fields. Ignore the changes + super.restorePatchAttributes(original, updated); updated - .withId(original.getId()) - .withName(original.getName()) .withInheritedRoles(original.getInheritedRoles()) .withAuthenticationMechanism(original.getAuthenticationMechanism()); }