diff --git a/catalog-rest-service/src/main/java/org/openmetadata/catalog/TypeRegistry.java b/catalog-rest-service/src/main/java/org/openmetadata/catalog/TypeRegistry.java index f9c8967a2f1..06dd5a10e11 100644 --- a/catalog-rest-service/src/main/java/org/openmetadata/catalog/TypeRegistry.java +++ b/catalog-rest-service/src/main/java/org/openmetadata/catalog/TypeRegistry.java @@ -56,7 +56,7 @@ public class TypeRegistry { } } - public static void removeType(String typeName) { + public void removeType(String typeName) { TYPES.remove(typeName); LOG.info("Deleted type {}\n", typeName); // TODO cleanup custom fields diff --git a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/EntityRepository.java b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/EntityRepository.java index e85b4c5d915..68927810030 100644 --- a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/EntityRepository.java +++ b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/EntityRepository.java @@ -409,6 +409,8 @@ public abstract class EntityRepository { PutResponse response = createOrUpdateInternal(uriInfo, updated); if (response.getStatus() == Status.CREATED) { postCreate(response.getEntity()); + } else if (response.getStatus() == Status.OK) { + postUpdate(response.getEntity()); } return response; } diff --git a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/TypeRepository.java b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/TypeRepository.java index 1db271a380e..b12414b7b6b 100644 --- a/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/TypeRepository.java +++ b/catalog-rest-service/src/main/java/org/openmetadata/catalog/jdbi3/TypeRepository.java @@ -84,7 +84,12 @@ public class TypeRepository extends EntityRepository { @Override protected void postDelete(Type entity) { - TypeRegistry.removeType(entity.getName()); + TypeRegistry.instance().removeType(entity.getName()); + } + + @Override + protected void postUpdate(Type entity) { + TypeRegistry.instance().addType(entity); } @Override @@ -95,6 +100,7 @@ public class TypeRepository extends EntityRepository { public PutResponse addCustomField(UriInfo uriInfo, String updatedBy, String id, CustomField field) throws IOException { Type type = dao.findEntityById(UUID.fromString(id), Include.NON_DELETED); + field.setFieldType(dao.findEntityReferenceById(field.getFieldType().getId(), Include.NON_DELETED)); if (type.getCategory().equals(Category.Field)) { throw new IllegalArgumentException("Field types can't be extended"); } diff --git a/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/metadata/TypeResourceTest.java b/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/metadata/TypeResourceTest.java index 63fdee1b479..705654749c5 100644 --- a/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/metadata/TypeResourceTest.java +++ b/catalog-rest-service/src/test/java/org/openmetadata/catalog/resources/metadata/TypeResourceTest.java @@ -41,6 +41,7 @@ import org.openmetadata.catalog.entity.type.CustomField; import org.openmetadata.catalog.resources.EntityResourceTest; import org.openmetadata.catalog.resources.types.TypeResource; import org.openmetadata.catalog.resources.types.TypeResource.TypeList; +import org.openmetadata.catalog.type.EntityReference; import org.openmetadata.catalog.util.TestUtils; @Slf4j @@ -91,9 +92,13 @@ public class TypeResourceTest extends EntityResourceTest { assertEquals(fieldA, tableEntity.getCustomFields().get(0)); // Add a second field with name intB with type integer - CustomField fieldB = - new CustomField().withName("intB").withDescription("intB").withFieldType(INT_TYPE.getEntityReference()); + EntityReference typeRef = + new EntityReference() + .withType(INT_TYPE.getEntityReference().getType()) + .withId(INT_TYPE.getEntityReference().getId()); + CustomField fieldB = new CustomField().withName("intB").withDescription("intB").withFieldType(typeRef); tableEntity = addCustomField(tableEntity.getId(), fieldB, Status.OK, ADMIN_AUTH_HEADERS); + fieldB.setFieldType(INT_TYPE.getEntityReference()); assertEquals(2, tableEntity.getCustomFields().size()); assertEquals(fieldA, tableEntity.getCustomFields().get(0)); assertEquals(fieldB, tableEntity.getCustomFields().get(1));