diff --git a/metacat-client/src/main/java/com/netflix/metacat/client/api/MetacatV1.java b/metacat-client/src/main/java/com/netflix/metacat/client/api/MetacatV1.java index 0904f41c3..8aa8caa94 100644 --- a/metacat-client/src/main/java/com/netflix/metacat/client/api/MetacatV1.java +++ b/metacat-client/src/main/java/com/netflix/metacat/client/api/MetacatV1.java @@ -291,7 +291,36 @@ default TableDto getTable( Boolean includeInfoDetails ) { return getTable(catalogName, databaseName, tableName, includeInfo, - includeDefinitionMetadata, includeDataMetadata, includeInfoDetails, false); + includeDefinitionMetadata, includeDataMetadata, includeInfoDetails, false, + false); + } + + /** + * Get the table. + * Add this method to maintain backward compatability with dependent services which currently uses metacatClient + * @param catalogName catalog name + * @param databaseName database name + * @param tableName table name. + * @param includeInfo true if the details need to be included + * @param includeDefinitionMetadata true if the definition metadata to be included + * @param includeDataMetadata true if the data metadata to be included + * @param includeInfoDetails true if the more info details to be included + * @param includeMetadataLocationOnly true if includeMetadataLocationOnly + * @return table + */ + default TableDto getTable( + String catalogName, + String databaseName, + String tableName, + Boolean includeInfo, + Boolean includeDefinitionMetadata, + Boolean includeDataMetadata, + Boolean includeInfoDetails, + Boolean includeMetadataLocationOnly + ) { + return getTable(catalogName, databaseName, tableName, includeInfo, + includeDefinitionMetadata, includeDataMetadata, includeInfoDetails, includeMetadataLocationOnly, + false); } /** @@ -306,6 +335,7 @@ default TableDto getTable( * @param includeInfoDetails true if the more info details to be included * @param includeMetadataLocationOnly true if only metadata location needs to be included. * All other flags are ignored if this is set to true. + * @param includeParentChildInfo true if includeParentChildInfo * @return table */ @GET @@ -333,7 +363,10 @@ TableDto getTable( Boolean includeInfoDetails, @DefaultValue("false") @QueryParam("includeMetadataLocationOnly") - Boolean includeMetadataLocationOnly + Boolean includeMetadataLocationOnly, + @DefaultValue("false") + @QueryParam("includeParentChildInfo") + Boolean includeParentChildInfo ); /** diff --git a/metacat-common-server/src/main/java/com/netflix/metacat/common/server/api/v1/MetacatV1.java b/metacat-common-server/src/main/java/com/netflix/metacat/common/server/api/v1/MetacatV1.java index 82f256032..f992cf14b 100644 --- a/metacat-common-server/src/main/java/com/netflix/metacat/common/server/api/v1/MetacatV1.java +++ b/metacat-common-server/src/main/java/com/netflix/metacat/common/server/api/v1/MetacatV1.java @@ -81,7 +81,7 @@ default TableDto getTable( final boolean includeInfoDetails ) { return getTable(catalogName, databaseName, tableName, includeInfo, includeDefinitionMetadata, - includeDataMetadata, includeInfoDetails, false); + includeDataMetadata, includeInfoDetails, false, false); } /** @@ -96,6 +96,7 @@ default TableDto getTable( * @param includeInfoDetails true if the more info details to be included * @param includeMetadataLocationOnly true if only metadata location needs to be included. * All other flags are ignored + * @param includeParentChildInfo true if includeParentChildInfo needs to be included. * @return table */ TableDto getTable( @@ -106,7 +107,8 @@ TableDto getTable( final boolean includeDefinitionMetadata, final boolean includeDataMetadata, final boolean includeInfoDetails, - final boolean includeMetadataLocationOnly + final boolean includeMetadataLocationOnly, + final boolean includeParentChildInfo ); /** diff --git a/metacat-functional-tests/metacat-test-cluster/docker-compose.yml b/metacat-functional-tests/metacat-test-cluster/docker-compose.yml index bdf867b91..d528e2b1b 100644 --- a/metacat-functional-tests/metacat-test-cluster/docker-compose.yml +++ b/metacat-functional-tests/metacat-test-cluster/docker-compose.yml @@ -75,7 +75,6 @@ services: -Dmetacat.table.update.noUpdateOnTags=iceberg_migration_do_not_modify -Dmetacat.event.updateIcebergTablePostEventEnabled=true -Dmetacat.parentChildRelationshipProperties.createEnabled=true - -Dmetacat.parentChildRelationshipProperties.getEnabled=true -Dmetacat.parentChildRelationshipProperties.renameEnabled=true -Dmetacat.parentChildRelationshipProperties.dropEnabled=true' labels: diff --git a/metacat-functional-tests/src/functionalTest/groovy/com/netflix/metacat/MetacatSmokeSpec.groovy b/metacat-functional-tests/src/functionalTest/groovy/com/netflix/metacat/MetacatSmokeSpec.groovy index c7193abd6..30b7f9e57 100644 --- a/metacat-functional-tests/src/functionalTest/groovy/com/netflix/metacat/MetacatSmokeSpec.groovy +++ b/metacat-functional-tests/src/functionalTest/groovy/com/netflix/metacat/MetacatSmokeSpec.groovy @@ -143,9 +143,9 @@ class MetacatSmokeSpec extends Specification { } static void initializeParentChildRelDefinitionMetadata(TableDto tableDto, - String parent, - String parent_uuid, - String child_uuid) { + String parent, + String parent_uuid, + String child_uuid) { def mapper = new ObjectMapper() def innerNode = mapper.createObjectNode() innerNode.put(ParentChildRelMetadataConstants.PARENT_NAME, parent) @@ -1822,7 +1822,7 @@ class MetacatSmokeSpec extends Specification { assert ret2_new.size() == 0 cleanup: - api.deleteMView(catalogName, databaseName, tableName, viewName) + api.deleteMView(catalogName, databaseName, tableName, viewName) where: catalogName | databaseName | tableName | viewName |tags 'embedded-hive-metastore' | 'smoke_db4' | 'part' | 'part_view' | ['test_tag'] as List @@ -2043,8 +2043,8 @@ class MetacatSmokeSpec extends Specification { child11TableDto.definitionMetadata.put("random_key", "random_value") api.createTable(catalogName, databaseName, child11, child11TableDto) - def parent1Table = api.getTable(catalogName, databaseName, parent1, true, true, false) - def child11Table = api.getTable(catalogName, databaseName, child11, true, true, false) + def parent1Table = api.getTable(catalogName, databaseName, parent1, true, true, false, false, false, true) + def child11Table = api.getTable(catalogName, databaseName, child11, true, true, false, false, false, true) then: // Test Parent 1 parentChildInfo assert parent1Table.definitionMetadata.get("parentChildRelationInfo").get("isParent").booleanValue() @@ -2071,8 +2071,8 @@ class MetacatSmokeSpec extends Specification { assert e.message.contains("already exists") when: - parent1Table = api.getTable(catalogName, databaseName, parent1, true, true, false) - child11Table = api.getTable(catalogName, databaseName, child11, true, true, false) + parent1Table = api.getTable(catalogName, databaseName, parent1, true, true, false, false, false, true) + child11Table = api.getTable(catalogName, databaseName, child11, true, true, false, false, false, true) then: // Test Parent 1 parentChildInfo assert parent1Table.definitionMetadata.get("parentChildRelationInfo").get("isParent").booleanValue() @@ -2143,8 +2143,8 @@ class MetacatSmokeSpec extends Specification { assert e.message.contains("already exists") when: - parent1Table = api.getTable(catalogName, databaseName, parent1, true, true, false) - child11Table = api.getTable(catalogName, databaseName, child11, true, true, false) + parent1Table = api.getTable(catalogName, databaseName, parent1, true, true, false, false, false, true) + child11Table = api.getTable(catalogName, databaseName, child11, true, true, false, false, false, true) then: // Test Parent 1 parentChildInfo assert parent1Table.definitionMetadata.get("parentChildRelationInfo").get("isParent").booleanValue() @@ -2169,8 +2169,8 @@ class MetacatSmokeSpec extends Specification { def child12TableDto = PigDataDtoProvider.getTable(catalogName, databaseName, child12, 'amajumdar', child12Uri) initializeParentChildRelDefinitionMetadata(child12TableDto, parent1FullName, parent1UUID, child12UUID) api.createTable(catalogName, databaseName, child12, child12TableDto) - parent1Table = api.getTable(catalogName, databaseName, parent1, true, true, false) - def child12Table = api.getTable(catalogName, databaseName, child12, true, true, false) + parent1Table = api.getTable(catalogName, databaseName, parent1, true, true, false, false, false, true) + def child12Table = api.getTable(catalogName, databaseName, child12, true, true, false, false, false, true) then: // Test Parent 1 parentChildInfo @@ -2227,8 +2227,8 @@ class MetacatSmokeSpec extends Specification { def child21TableDto = PigDataDtoProvider.getTable(catalogName, databaseName, child21, 'amajumdar', child21Uri) initializeParentChildRelDefinitionMetadata(child21TableDto, parent2FullName, parent2UUID, child21UUID) api.createTable(catalogName, databaseName, child21, child21TableDto) - def parent2Table = api.getTable(catalogName, databaseName, parent2, true, true, false) - def child21Table = api.getTable(catalogName, databaseName, child21, true, true, false) + def parent2Table = api.getTable(catalogName, databaseName, parent2, true, true, false, false, false, true) + def child21Table = api.getTable(catalogName, databaseName, child21, true, true, false, false, false, true) then: // Test Parent 2 parentChildInfo @@ -2259,9 +2259,9 @@ class MetacatSmokeSpec extends Specification { assert e.message.contains("already exists") when: - parent1Table = api.getTable(catalogName, databaseName, parent1, true, true, false) - child11Table = api.getTable(catalogName, databaseName, child11, true, true, false) - child12Table = api.getTable(catalogName, databaseName, child12, true, true, false) + parent1Table = api.getTable(catalogName, databaseName, parent1, true, true, false, false, false, true) + child11Table = api.getTable(catalogName, databaseName, child11, true, true, false, false, false, true) + child12Table = api.getTable(catalogName, databaseName, child12, true, true, false, false, false, true) then: // Test Parent 1 parentChildInfo @@ -2298,11 +2298,11 @@ class MetacatSmokeSpec extends Specification { assert e.message.contains("is already a parent table") when: - parent1Table = api.getTable(catalogName, databaseName, parent1, true, true, false) - child11Table = api.getTable(catalogName, databaseName, child11, true, true, false) - child12Table = api.getTable(catalogName, databaseName, child12, true, true, false) - parent2Table = api.getTable(catalogName, databaseName, parent2, true, true, false) - child21Table = api.getTable(catalogName, databaseName, child21, true, true, false) + parent1Table = api.getTable(catalogName, databaseName, parent1, true, true, false, false, false, true) + child11Table = api.getTable(catalogName, databaseName, child11, true, true, false, false, false, true) + child12Table = api.getTable(catalogName, databaseName, child12, true, true, false, false, false, true) + parent2Table = api.getTable(catalogName, databaseName, parent2, true, true, false, false, false, true) + child21Table = api.getTable(catalogName, databaseName, child21, true, true, false, false, false, true) then: // Test Parent 1 parentChildInfo assert parent1Table.definitionMetadata.get("parentChildRelationInfo").get("isParent").booleanValue() @@ -2344,9 +2344,9 @@ class MetacatSmokeSpec extends Specification { when: api.deleteTable(catalogName, databaseName, renameParent1) api.renameTable(catalogName, databaseName, parent1, renameParent1) - parent1Table = api.getTable(catalogName, databaseName, renameParent1, true, true, false) - child11Table = api.getTable(catalogName, databaseName, child11, true, true, false) - child12Table = api.getTable(catalogName, databaseName, child12, true, true, false) + parent1Table = api.getTable(catalogName, databaseName, renameParent1, true, true, false, false, false, true) + child11Table = api.getTable(catalogName, databaseName, child11, true, true, false, false, false, true) + child12Table = api.getTable(catalogName, databaseName, child12, true, true, false, false, false, true) then: // Test Parent 1 parentChildInfo newName @@ -2375,7 +2375,7 @@ class MetacatSmokeSpec extends Specification { //get the parent oldName should fail as it no longer exists when: - api.getTable(catalogName, databaseName, parent1, true, true, false) + api.getTable(catalogName, databaseName, parent1, true, true, false, false, false, true) then: e = thrown(Exception) assert e.message.contains("Unable to locate for") @@ -2394,9 +2394,9 @@ class MetacatSmokeSpec extends Specification { assert e.message.contains("already exists") when: - parent1Table = api.getTable(catalogName, databaseName, renameParent1, true, true, false) - child11Table = api.getTable(catalogName, databaseName, child11, true, true, false) - child12Table = api.getTable(catalogName, databaseName, child12, true, true, false) + parent1Table = api.getTable(catalogName, databaseName, renameParent1, true, true, false, false, false, true) + child11Table = api.getTable(catalogName, databaseName, child11, true, true, false, false, false, true) + child12Table = api.getTable(catalogName, databaseName, child12, true, true, false, false, false, true) then: // Test Parent 1 parentChildInfo newName assert parent1Table.definitionMetadata.get("parentChildRelationInfo").get("isParent").booleanValue() @@ -2438,10 +2438,10 @@ class MetacatSmokeSpec extends Specification { assert e.message.contains("is already a child table") when: - def renameChild11Table = api.getTable(catalogName, databaseName, renameChild11, true, true, false) - parent1Table = api.getTable(catalogName, databaseName, renameParent1, true, true, false) - child11Table = api.getTable(catalogName, databaseName, child11, true, true, false) - child12Table = api.getTable(catalogName, databaseName, child12, true, true, false) + def renameChild11Table = api.getTable(catalogName, databaseName, renameChild11, true, true, false, false, false, true) + parent1Table = api.getTable(catalogName, databaseName, renameParent1, true, true, false, false, false, true) + child11Table = api.getTable(catalogName, databaseName, child11, true, true, false, false, false, true) + child12Table = api.getTable(catalogName, databaseName, child12, true, true, false, false, false, true) then: // Test Parent 1 parentChildInfo newName assert parent1Table.definitionMetadata.get("parentChildRelationInfo").get("isParent").booleanValue() @@ -2481,8 +2481,8 @@ class MetacatSmokeSpec extends Specification { when: api.deleteTable(catalogName, databaseName, renameChild11) api.renameTable(catalogName, databaseName, child11, renameChild11) - parent1Table = api.getTable(catalogName, databaseName, renameParent1, true, true, false) - child11Table = api.getTable(catalogName, databaseName, renameChild11, true, true, false) + parent1Table = api.getTable(catalogName, databaseName, renameParent1, true, true, false, false, false, true) + child11Table = api.getTable(catalogName, databaseName, renameChild11, true, true, false, false, false, true) then: // Test parent1Table parentChildInfo with newName @@ -2503,7 +2503,7 @@ class MetacatSmokeSpec extends Specification { //get the child oldName should fail as it no longer exists when: - api.getTable(catalogName, databaseName, child11, true, true, false) + api.getTable(catalogName, databaseName, child11, true, true, false, false, false, true) then: e = thrown(Exception) assert e.message.contains("Unable to locate for") @@ -2523,7 +2523,7 @@ class MetacatSmokeSpec extends Specification { */ when: api.deleteTable(catalogName, databaseName, renameChild11) - parent1Table = api.getTable(catalogName, databaseName, renameParent1, true, true, false) + parent1Table = api.getTable(catalogName, databaseName, renameParent1, true, true, false, false, false, true) then: // Test parent1 Table @@ -2541,8 +2541,8 @@ class MetacatSmokeSpec extends Specification { when: child11TableDto = PigDataDtoProvider.getTable(catalogName, databaseName, renameChild11, 'amajumdar', child11Uri) api.createTable(catalogName, databaseName, renameChild11, child11TableDto) - child11Table = api.getTable(catalogName, databaseName, renameChild11, true, true, false) - parent1Table = api.getTable(catalogName, databaseName, renameParent1, true, true, false) + child11Table = api.getTable(catalogName, databaseName, renameChild11, true, true, false, false, false, true) + parent1Table = api.getTable(catalogName, databaseName, renameParent1, true, true, false, false, false, true) then: assert !child11Table.definitionMetadata.has("parentChildRelationInfo") assert child11Table.definitionMetadata.get("random_key").asText() == "random_value" @@ -2560,7 +2560,7 @@ class MetacatSmokeSpec extends Specification { */ when: api.deleteTable(catalogName, databaseName, child12) - parent1Table = api.getTable(catalogName, databaseName, renameParent1, true, true, false) + parent1Table = api.getTable(catalogName, databaseName, renameParent1, true, true, false, false, false, true) then: assert !parent1Table.definitionMetadata.has("parentChildRelationInfo") assert parentChildRelV1.getChildren(catalogName, databaseName, renameParent1).isEmpty() @@ -2571,8 +2571,8 @@ class MetacatSmokeSpec extends Specification { */ when: api.deleteTable(catalogName, databaseName, renameParent1) - parent2Table = api.getTable(catalogName, databaseName, parent2, true, true, false) - child21Table = api.getTable(catalogName, databaseName, child21, true, true, false) + parent2Table = api.getTable(catalogName, databaseName, parent2, true, true, false, false, false, true) + child21Table = api.getTable(catalogName, databaseName, child21, true, true, false, false, false, true) then: //Since renameParent1 table is dropped @@ -2603,8 +2603,8 @@ class MetacatSmokeSpec extends Specification { initializeParentChildRelDefinitionMetadata(updateParent2Dto, "RANDOM", "RANDOM", "RANDOM") api.updateTable(catalogName, databaseName, parent2, updateParent2Dto) - parent2Table = api.getTable(catalogName, databaseName, parent2, true, true, false) - child21Table = api.getTable(catalogName, databaseName, child21, true, true, false) + parent2Table = api.getTable(catalogName, databaseName, parent2, true, true, false, false, false, true) + child21Table = api.getTable(catalogName, databaseName, child21, true, true, false, false, false, true) then: assert parent2Table.definitionMetadata.get("parentChildRelationInfo").get("isParent").booleanValue() assert parentChildRelV1.getChildren(catalogName, databaseName, parent2) == [ @@ -2627,8 +2627,8 @@ class MetacatSmokeSpec extends Specification { initializeParentChildRelDefinitionMetadata(updateParent2Dto, "RANDOM", "RANDOM", "RANDOM") api.updateTable(catalogName, databaseName, child21, updateChild21Dto) - parent2Table = api.getTable(catalogName, databaseName, parent2, true, true, false) - child21Table = api.getTable(catalogName, databaseName, child21, true, true, false) + parent2Table = api.getTable(catalogName, databaseName, parent2, true, true, false, false, false, true) + child21Table = api.getTable(catalogName, databaseName, child21, true, true, false, false, false, true) then: // Test Parent 2 parentChildInfo assert parent2Table.definitionMetadata.get("parentChildRelationInfo").get("isParent").booleanValue() @@ -2644,5 +2644,14 @@ class MetacatSmokeSpec extends Specification { false) assert parentChildRelV1.getChildren(catalogName, databaseName, child21).isEmpty() assert parentChildRelV1.getParents(catalogName, databaseName, child21) == [new ParentInfoDto("embedded-fast-hive-metastore/iceberg_db/parent2", "CLONE", "p2_uuid")] as Set + + // Test if not included the information, nothing related to parent child relation should return + when: + parent2Table = api.getTable(catalogName, databaseName, parent2, true, true, false, false, false, false) + child21Table = api.getTable(catalogName, databaseName, child21, true, true, false, false, false, false) + + then: + ! parent2Table.definitionMetadata.has("parentChildRelationInfo") + ! child21Table.definitionMetadata.has("parentChildRelationInfo") } } diff --git a/metacat-main/src/main/java/com/netflix/metacat/main/api/v1/MetacatController.java b/metacat-main/src/main/java/com/netflix/metacat/main/api/v1/MetacatController.java index 6ad96130f..53d447343 100644 --- a/metacat-main/src/main/java/com/netflix/metacat/main/api/v1/MetacatController.java +++ b/metacat-main/src/main/java/com/netflix/metacat/main/api/v1/MetacatController.java @@ -655,7 +655,10 @@ public TableDto getTable( @ApiParam(value = "Whether to include only the metadata location in the response") @RequestParam( name = "includeMetadataLocationOnly", - defaultValue = "false") final boolean includeMetadataLocationOnly + defaultValue = "false") final boolean includeMetadataLocationOnly, + @RequestParam( + name = "includeParentChildInfo", + defaultValue = "false") final boolean includeParentChildInfo ) { final Supplier qualifiedNameSupplier = () -> QualifiedName.ofTable(catalogName, databaseName, tableName); @@ -669,6 +672,7 @@ public TableDto getTable( .put("includeDataMetadata", String.valueOf(includeDataMetadata)) .put("includeMetadataFromConnector", String.valueOf(includeInfoDetails)) .put("includeMetadataLocationOnly", String.valueOf(includeMetadataLocationOnly)) + .put("includeParentChildInfo", String.valueOf(includeParentChildInfo)) .build(), () -> { final Optional table = this.tableService.get( @@ -680,6 +684,7 @@ public TableDto getTable( .disableOnReadMetadataIntercetor(false) .includeMetadataFromConnector(includeInfoDetails) .includeMetadataLocationOnly(includeMetadataLocationOnly) + .includeParentChildInfo(includeParentChildInfo) .useCache(true) .build() ); diff --git a/metacat-main/src/main/java/com/netflix/metacat/main/services/GetTableServiceParameters.java b/metacat-main/src/main/java/com/netflix/metacat/main/services/GetTableServiceParameters.java index e3cb5f358..99b2fb771 100644 --- a/metacat-main/src/main/java/com/netflix/metacat/main/services/GetTableServiceParameters.java +++ b/metacat-main/src/main/java/com/netflix/metacat/main/services/GetTableServiceParameters.java @@ -36,4 +36,5 @@ public class GetTableServiceParameters { private final boolean useCache; private final boolean includeMetadataFromConnector; private final boolean includeMetadataLocationOnly; + private final boolean includeParentChildInfo; } diff --git a/metacat-main/src/main/java/com/netflix/metacat/main/services/impl/TableServiceImpl.java b/metacat-main/src/main/java/com/netflix/metacat/main/services/impl/TableServiceImpl.java index df784eab8..aa385b122 100644 --- a/metacat-main/src/main/java/com/netflix/metacat/main/services/impl/TableServiceImpl.java +++ b/metacat-main/src/main/java/com/netflix/metacat/main/services/impl/TableServiceImpl.java @@ -518,7 +518,7 @@ public Optional get(final QualifiedName name, final GetTableServicePar && definitionMetadata.get().has(ParentChildRelMetadataConstants.PARENT_CHILD_RELINFO)) { definitionMetadata.get().remove(ParentChildRelMetadataConstants.PARENT_CHILD_RELINFO); } - if (config.isParentChildGetEnabled()) { + if (config.isParentChildGetEnabled() || getTableServiceParameters.isIncludeParentChildInfo()) { final ObjectNode parentChildRelObjectNode = createParentChildObjectNode(name); if (!parentChildRelObjectNode.isEmpty()) { if (!definitionMetadata.isPresent()) { diff --git a/metacat-main/src/test/groovy/com/netflix/metacat/main/services/impl/TableServiceImplSpec.groovy b/metacat-main/src/test/groovy/com/netflix/metacat/main/services/impl/TableServiceImplSpec.groovy index 5aedea827..144811412 100644 --- a/metacat-main/src/test/groovy/com/netflix/metacat/main/services/impl/TableServiceImplSpec.groovy +++ b/metacat-main/src/test/groovy/com/netflix/metacat/main/services/impl/TableServiceImplSpec.groovy @@ -480,7 +480,7 @@ class TableServiceImplSpec extends Specification { noExceptionThrown() } - def "Mock Parent Child Relationship Drop"() { + def "Mock Parent Child Relationship Drop with isParentChildGetEnabled enabled and getParameter disabled"() { given: def name = QualifiedName.ofTable("clone", "clone", "child") @@ -577,7 +577,7 @@ class TableServiceImplSpec extends Specification { noExceptionThrown() } - def "Mock Parent Child Relationship Get"() { + def "Mock Parent Child Relationship Get with GetTableServiceParameters disabled"() { when: service.get(name,GetTableServiceParameters.builder(). disableOnReadMetadataIntercetor(false) @@ -609,6 +609,39 @@ class TableServiceImplSpec extends Specification { 1 * parentChildRelSvc.isParentTable(name) } + def "Mock Parent Child Relationship Get with GetTableServiceParameters enabled"() { + when: + service.get(name,GetTableServiceParameters.builder(). + disableOnReadMetadataIntercetor(false) + .includeDataMetadata(true) + .includeDefinitionMetadata(true) + .includeParentChildInfo(true) + .build()) + then: + 1 * connectorManager.getCatalogConfig(_) >> catalogConfig + 1 * usermetadataService.getDefinitionMetadataWithInterceptor(_,_) >> Optional.empty() + 1 * usermetadataService.getDataMetadata(_) >> Optional.empty() + 0 * usermetadataService.getDefinitionMetadata(_) >> Optional.empty() + 1 * config.isParentChildGetEnabled() >> false + 1 * parentChildRelSvc.getParents(name) + 1 * parentChildRelSvc.isParentTable(name) + + when: + service.get(name,GetTableServiceParameters.builder(). + disableOnReadMetadataIntercetor(false) + .includeDataMetadata(true) + .includeDefinitionMetadata(true) + .build()) + then: + 1 * connectorManager.getCatalogConfig(_) >> catalogConfig + 1 * usermetadataService.getDefinitionMetadataWithInterceptor(_,_) >> Optional.empty() + 1 * usermetadataService.getDataMetadata(_) >> Optional.empty() + 0 * usermetadataService.getDefinitionMetadata(_) >> Optional.empty() + 1 * config.isParentChildGetEnabled() >> true + 1 * parentChildRelSvc.getParents(name) + 1 * parentChildRelSvc.isParentTable(name) + } + def "Will not throw on Successful Table Update with Failed Get"() { given: def updatedTableDto = new TableDto(name: name, serde: new StorageDto(uri: 's3:/a/b/c'))