From a15b0da565becca6dbf971a25cb7657b26255541 Mon Sep 17 00:00:00 2001 From: mkuchenbecker Date: Wed, 27 May 2026 16:25:21 -0700 Subject: [PATCH 1/2] Revert "Support returning HTS fields in table list api (#579)" This reverts commit 637896219c53cad672a4a3d381c1dad302971854. Conflict markers preserved in OpenHouseInternalCatalog.java so the reviewer can see what merged where; resolution lands in a follow-up commit on this branch. Co-Authored-By: Claude Opus 4.7 (1M context) --- .../catalog/OpenHouseInternalCatalog.java | 3 ++ .../tables/api/handler/TablesApiHandler.java | 14 +---- .../impl/OpenHouseTablesApiHandler.java | 12 ++--- .../api/validator/TablesApiValidator.java | 5 +- .../impl/OpenHouseTablesApiValidator.java | 22 +------- .../tables/controller/TablesController.java | 14 +---- .../tables/dto/mapper/TablesMapper.java | 16 ------ .../OpenHouseInternalRepository.java | 7 --- .../impl/OpenHouseInternalRepositoryImpl.java | 18 ------- .../tables/services/TablesService.java | 20 +------ .../tables/services/TablesServiceImpl.java | 14 +---- .../tables/e2e/h2/TablesControllerTest.java | 42 --------------- .../tables/e2e/h2/TablesServiceTest.java | 54 ------------------- .../tables/mock/MockTablesApiHandler.java | 8 +-- 14 files changed, 17 insertions(+), 232 deletions(-) diff --git a/iceberg/openhouse/internalcatalog/src/main/java/com/linkedin/openhouse/internal/catalog/OpenHouseInternalCatalog.java b/iceberg/openhouse/internalcatalog/src/main/java/com/linkedin/openhouse/internal/catalog/OpenHouseInternalCatalog.java index 57c216b2b..3dd8b522c 100644 --- a/iceberg/openhouse/internalcatalog/src/main/java/com/linkedin/openhouse/internal/catalog/OpenHouseInternalCatalog.java +++ b/iceberg/openhouse/internalcatalog/src/main/java/com/linkedin/openhouse/internal/catalog/OpenHouseInternalCatalog.java @@ -125,6 +125,7 @@ public Page listTables(Namespace namespace, Pageable pageable) .map(houseTable -> TableIdentifier.of(houseTable.getDatabaseId(), houseTable.getTableId())); } +<<<<<<< HEAD /** * Paginated listing that preserves the underlying {@link HouseTable} rows, so callers can read * HTS-resident columns (e.g. tableLocation) without an extra metadata.json load per table. @@ -153,6 +154,8 @@ public Optional findHouseTable(TableIdentifier identifier) { } } +======= +>>>>>>> parent of 63789621 (Support returning HTS fields in table list api (#579)) @Override public boolean dropTable(TableIdentifier identifier, boolean purge) { // Look up the HouseTable row directly instead of calling loadTable(), so drop works even when diff --git a/services/tables/src/main/java/com/linkedin/openhouse/tables/api/handler/TablesApiHandler.java b/services/tables/src/main/java/com/linkedin/openhouse/tables/api/handler/TablesApiHandler.java index d314b7700..8249a688d 100644 --- a/services/tables/src/main/java/com/linkedin/openhouse/tables/api/handler/TablesApiHandler.java +++ b/services/tables/src/main/java/com/linkedin/openhouse/tables/api/handler/TablesApiHandler.java @@ -8,7 +8,6 @@ import com.linkedin.openhouse.tables.api.spec.v0.response.GetAllSoftDeletedTablesResponseBody; import com.linkedin.openhouse.tables.api.spec.v0.response.GetAllTablesResponseBody; import com.linkedin.openhouse.tables.api.spec.v0.response.GetTableResponseBody; -import java.util.List; /** * Interface layer between REST and Tables backend. The implementation is injected into the Service @@ -38,25 +37,16 @@ ApiResponse getTable( /** * Function to Get one Page of Table Resources in a given databaseId given the page size and sort - * the results by the sortBy field. The caller may optionally request that additional fields - * (beyond databaseId + tableId) be populated on each returned table. When {@code fields} is - * non-empty, {@code actingPrincipal} must hold GET_TABLE_METADATA on the database. + * the results by the sortBy field. * * @param databaseId * @param page * @param size * @param sortBy - * @param fields optional list of GetTableResponseBody field names to populate - * @param actingPrincipal authenticated user; required when {@code fields} is non-empty * @return A page of tables in the given database. */ ApiResponse searchTables( - String databaseId, - int page, - int size, - String sortBy, - List fields, - String actingPrincipal); + String databaseId, int page, int size, String sortBy); /** * Function to Create Table Resource in a given databaseId diff --git a/services/tables/src/main/java/com/linkedin/openhouse/tables/api/handler/impl/OpenHouseTablesApiHandler.java b/services/tables/src/main/java/com/linkedin/openhouse/tables/api/handler/impl/OpenHouseTablesApiHandler.java index f4b7b1a67..691691173 100644 --- a/services/tables/src/main/java/com/linkedin/openhouse/tables/api/handler/impl/OpenHouseTablesApiHandler.java +++ b/services/tables/src/main/java/com/linkedin/openhouse/tables/api/handler/impl/OpenHouseTablesApiHandler.java @@ -14,7 +14,6 @@ import com.linkedin.openhouse.tables.dto.mapper.TablesMapper; import com.linkedin.openhouse.tables.model.TableDto; import com.linkedin.openhouse.tables.services.TablesService; -import java.util.List; import java.util.stream.Collectors; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.util.Pair; @@ -64,20 +63,15 @@ public ApiResponse searchTables(String databaseId) { @Override public ApiResponse searchTables( - String databaseId, - int page, - int size, - String sortBy, - List fields, - String actingPrincipal) { - tablesApiValidator.validateSearchTables(databaseId, page, size, sortBy, fields); + String databaseId, int page, int size, String sortBy) { + tablesApiValidator.validateSearchTables(databaseId, page, size, sortBy); return ApiResponse.builder() .httpStatus(HttpStatus.OK) .responseBody( GetAllTablesResponseBody.builder() .pageResults( tableService - .searchTables(databaseId, page, size, sortBy, fields, actingPrincipal) + .searchTables(databaseId, page, size, sortBy) .map(tableDto -> tablesMapper.toGetTableResponseBody(tableDto))) .build()) .build(); diff --git a/services/tables/src/main/java/com/linkedin/openhouse/tables/api/validator/TablesApiValidator.java b/services/tables/src/main/java/com/linkedin/openhouse/tables/api/validator/TablesApiValidator.java index b5527fe52..b59c025c0 100644 --- a/services/tables/src/main/java/com/linkedin/openhouse/tables/api/validator/TablesApiValidator.java +++ b/services/tables/src/main/java/com/linkedin/openhouse/tables/api/validator/TablesApiValidator.java @@ -3,7 +3,6 @@ import com.linkedin.openhouse.tables.api.spec.v0.request.CreateUpdateLockRequestBody; import com.linkedin.openhouse.tables.api.spec.v0.request.CreateUpdateTableRequestBody; import com.linkedin.openhouse.tables.api.spec.v0.request.UpdateAclPoliciesRequestBody; -import java.util.List; public interface TablesApiValidator { @@ -34,12 +33,10 @@ public interface TablesApiValidator { * @param page * @param size * @param sortBy - * @param fields optional list of GetTableResponseBody field names to populate * @throws com.linkedin.openhouse.common.exception.RequestValidationFailureException if request is * invalid */ - void validateSearchTables( - String databaseId, int page, int size, String sortBy, List fields); + void validateSearchTables(String databaseId, int page, int size, String sortBy); /** * Function to validate a request to create a Table Resource. diff --git a/services/tables/src/main/java/com/linkedin/openhouse/tables/api/validator/impl/OpenHouseTablesApiValidator.java b/services/tables/src/main/java/com/linkedin/openhouse/tables/api/validator/impl/OpenHouseTablesApiValidator.java index 2b06a70de..90c328152 100644 --- a/services/tables/src/main/java/com/linkedin/openhouse/tables/api/validator/impl/OpenHouseTablesApiValidator.java +++ b/services/tables/src/main/java/com/linkedin/openhouse/tables/api/validator/impl/OpenHouseTablesApiValidator.java @@ -43,13 +43,6 @@ @Component public class OpenHouseTablesApiValidator implements TablesApiValidator { - /** - * Fields selectable via the v2 search {@code ?fields=} query param. Each entry must match a field - * name on {@link com.linkedin.openhouse.tables.api.spec.v0.response.GetTableResponseBody}. - */ - private static final Set SUPPORTED_SEARCH_FIELDS = - Collections.unmodifiableSet(new HashSet<>(Arrays.asList("tableLocation"))); - @Autowired private Validator validator; @Autowired private RetentionPolicySpecValidator retentionPolicySpecValidator; @@ -80,23 +73,10 @@ public void validateSearchTables(String databaseId) { } @Override - public void validateSearchTables( - String databaseId, int page, int size, String sortBy, List fields) { + public void validateSearchTables(String databaseId, int page, int size, String sortBy) { List validationFailures = new ArrayList<>(); validateDatabaseId(databaseId, validationFailures); ApiValidatorUtil.validatePageable(page, size, sortBy, validationFailures); - if (fields != null && !fields.isEmpty()) { - List unsupported = - fields.stream() - .filter(f -> !SUPPORTED_SEARCH_FIELDS.contains(f)) - .collect(Collectors.toList()); - if (!unsupported.isEmpty()) { - validationFailures.add( - String.format( - "fields : unsupported field(s) %s. Supported fields: %s", - unsupported, SUPPORTED_SEARCH_FIELDS)); - } - } if (!validationFailures.isEmpty()) { throw new RequestValidationFailureException(validationFailures); } diff --git a/services/tables/src/main/java/com/linkedin/openhouse/tables/controller/TablesController.java b/services/tables/src/main/java/com/linkedin/openhouse/tables/controller/TablesController.java index ef459ea17..29db397e2 100644 --- a/services/tables/src/main/java/com/linkedin/openhouse/tables/controller/TablesController.java +++ b/services/tables/src/main/java/com/linkedin/openhouse/tables/controller/TablesController.java @@ -16,7 +16,6 @@ import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.responses.ApiResponses; -import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.security.access.annotation.Secured; @@ -119,19 +118,10 @@ public ResponseEntity searchTablesPaginated( @Parameter(description = "Database ID", required = true) @PathVariable String databaseId, @RequestParam(required = false, defaultValue = "0") int page, @RequestParam(required = false, defaultValue = "50") int size, - @RequestParam(required = false) String sortBy, - @Parameter( - description = - "Optional list of GetTableResponseBody field names to populate beyond the " - + "identifiers (databaseId, tableId). Requires GET_TABLE_METADATA on the " - + "database when set. Supported values: \"tableLocation\". Accepts " - + "comma-separated (?fields=a,b) or repeated (?fields=a&fields=b) values.") - @RequestParam(name = "fields", required = false) - List fields) { + @RequestParam(required = false) String sortBy) { com.linkedin.openhouse.common.api.spec.ApiResponse apiResponse = - tablesApiHandler.searchTables( - databaseId, page, size, sortBy, fields, extractAuthenticatedUserPrincipal()); + tablesApiHandler.searchTables(databaseId, page, size, sortBy); return new ResponseEntity<>( apiResponse.getResponseBody(), apiResponse.getHttpHeaders(), apiResponse.getHttpStatus()); diff --git a/services/tables/src/main/java/com/linkedin/openhouse/tables/dto/mapper/TablesMapper.java b/services/tables/src/main/java/com/linkedin/openhouse/tables/dto/mapper/TablesMapper.java index 08111cd82..184a233a8 100644 --- a/services/tables/src/main/java/com/linkedin/openhouse/tables/dto/mapper/TablesMapper.java +++ b/services/tables/src/main/java/com/linkedin/openhouse/tables/dto/mapper/TablesMapper.java @@ -1,7 +1,6 @@ package com.linkedin.openhouse.tables.dto.mapper; import com.linkedin.openhouse.common.schema.IcebergSchemaHelper; -import com.linkedin.openhouse.internal.catalog.model.HouseTable; import com.linkedin.openhouse.internal.catalog.model.SoftDeletedTableDto; import com.linkedin.openhouse.tables.api.spec.v0.request.CreateUpdateTableRequestBody; import com.linkedin.openhouse.tables.api.spec.v0.request.IcebergSnapshotsRequestBody; @@ -15,7 +14,6 @@ import com.linkedin.openhouse.tables.model.TableDto; import com.linkedin.openhouse.tables.model.TableDtoPrimaryKey; import java.util.HashMap; -import java.util.Set; import org.apache.iceberg.SortOrder; import org.apache.iceberg.Table; import org.apache.iceberg.catalog.TableIdentifier; @@ -159,20 +157,6 @@ public interface TablesMapper { }) TableDto toTableDto(TableIdentifier tableIdentifier); - /** - * Build a partially-populated TableDto from a HouseTable, populating only the fields the caller - * requested. Identifier fields (databaseId, tableId) are always populated. Used by the paginated - * search endpoint to avoid loading metadata.json per table. - */ - default TableDto toTableDto(HouseTable houseTable, Set fields) { - TableDto.TableDtoBuilder builder = - TableDto.builder().databaseId(houseTable.getDatabaseId()).tableId(houseTable.getTableId()); - if (fields != null && fields.contains("tableLocation")) { - builder.tableLocation(houseTable.getTableLocation()); - } - return builder.build(); - } - /** * Transform {@link SoftDeletedTableDto} to {@link GetSoftDeletedTableResponseBody} * diff --git a/services/tables/src/main/java/com/linkedin/openhouse/tables/repository/OpenHouseInternalRepository.java b/services/tables/src/main/java/com/linkedin/openhouse/tables/repository/OpenHouseInternalRepository.java index d44d5dedf..a47826f8f 100644 --- a/services/tables/src/main/java/com/linkedin/openhouse/tables/repository/OpenHouseInternalRepository.java +++ b/services/tables/src/main/java/com/linkedin/openhouse/tables/repository/OpenHouseInternalRepository.java @@ -36,13 +36,6 @@ public interface OpenHouseInternalRepository Page searchTables(String databaseId, Pageable pageable); - /** - * Paginated search that populates a caller-selected subset of fields on each returned {@link - * TableDto}. Passing a null or empty {@code fields} list returns identifier-only results (same as - * the two-arg overload). - */ - Page searchTables(String databaseId, Pageable pageable, List fields); - void rename(TableDtoPrimaryKey from, TableDtoPrimaryKey to); Page searchSoftDeletedTables( diff --git a/services/tables/src/main/java/com/linkedin/openhouse/tables/repository/impl/OpenHouseInternalRepositoryImpl.java b/services/tables/src/main/java/com/linkedin/openhouse/tables/repository/impl/OpenHouseInternalRepositoryImpl.java index 3f4f40487..eb1e6486e 100644 --- a/services/tables/src/main/java/com/linkedin/openhouse/tables/repository/impl/OpenHouseInternalRepositoryImpl.java +++ b/services/tables/src/main/java/com/linkedin/openhouse/tables/repository/impl/OpenHouseInternalRepositoryImpl.java @@ -36,11 +36,9 @@ import com.linkedin.openhouse.tables.repository.SchemaValidator; import io.micrometer.core.instrument.MeterRegistry; import io.opentelemetry.instrumentation.annotations.WithSpan; -import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Optional; -import java.util.Set; import java.util.stream.Collectors; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.CollectionUtils; @@ -735,22 +733,6 @@ public Page searchTables(String databaseId, Pageable pageable) { .map(tablesIdentifier -> mapper.toTableDto(tablesIdentifier)); } - @Timed(metricKey = MetricsConstant.REPO_TABLES_SEARCH_BY_DATABASE_PAGINATED_TIME) - @Override - public Page searchTables(String databaseId, Pageable pageable, List fields) { - if (CollectionUtils.isEmpty(fields)) { - return searchTables(databaseId, pageable); - } - if (!(catalog instanceof OpenHouseInternalCatalog)) { - throw new UnsupportedOperationException( - "Does not support paginated search for getting all tables in a database"); - } - Set fieldSet = new HashSet<>(fields); - return ((OpenHouseInternalCatalog) catalog) - .listHouseTables(Namespace.of(databaseId), pageable) - .map(houseTable -> mapper.toTableDto(houseTable, fieldSet)); - } - @Timed(metricKey = MetricsConstant.REPO_TABLE_IDS_FIND_ALL_TIME) @Override public List findAllIds() { diff --git a/services/tables/src/main/java/com/linkedin/openhouse/tables/services/TablesService.java b/services/tables/src/main/java/com/linkedin/openhouse/tables/services/TablesService.java index c095095ee..363ec0cdd 100644 --- a/services/tables/src/main/java/com/linkedin/openhouse/tables/services/TablesService.java +++ b/services/tables/src/main/java/com/linkedin/openhouse/tables/services/TablesService.java @@ -33,31 +33,15 @@ public interface TablesService { List searchTables(String databaseId); /** - * Given a databaseId, prepare list of {@link TableDto}s. The returned dtos are populated with - * identifier fields plus any HouseTable-resident fields listed in {@code fields}. Passing null or - * empty returns identifier-only dtos. - * - *

When {@code fields} is non-empty, {@code actingPrincipal} must hold the {@code - * GET_TABLE_METADATA} privilege on the database — per-table sharing ACLs are not consulted by - * this call, so this guard prevents callers from bulk-reading field data on tables they would not - * be authorized to read individually. + * Given a databaseId, prepare list of {@link TableDto}s. * * @param databaseId * @param page * @param size * @param sortBy - * @param fields optional list of {@link TableDto}/{@code GetTableResponseBody} field names to - * populate in addition to identifiers - * @param actingPrincipal authenticated user; required when {@code fields} is non-empty * @return list of {@link TableDto} */ - Page searchTables( - String databaseId, - int page, - int size, - String sortBy, - List fields, - String actingPrincipal); + Page searchTables(String databaseId, int page, int size, String sortBy); /** * Given a {@link CreateUpdateTableRequestBody}, create or update a Openhouse table for it diff --git a/services/tables/src/main/java/com/linkedin/openhouse/tables/services/TablesServiceImpl.java b/services/tables/src/main/java/com/linkedin/openhouse/tables/services/TablesServiceImpl.java index 898a12b9b..2c6bf611b 100644 --- a/services/tables/src/main/java/com/linkedin/openhouse/tables/services/TablesServiceImpl.java +++ b/services/tables/src/main/java/com/linkedin/openhouse/tables/services/TablesServiceImpl.java @@ -81,19 +81,9 @@ public List searchTables(String databaseId) { } @Override - public Page searchTables( - String databaseId, - int page, - int size, - String sortBy, - List fields, - String actingPrincipal) { - if (fields != null && !fields.isEmpty()) { - authorizationUtils.checkDatabasePrivilege( - databaseId, actingPrincipal, Privileges.GET_TABLE_METADATA); - } + public Page searchTables(String databaseId, int page, int size, String sortBy) { Pageable pageable = createPageable(page, size, sortBy, null); - return openHouseInternalRepository.searchTables(databaseId, pageable, fields); + return openHouseInternalRepository.searchTables(databaseId, pageable); } @WithSpan("TablesService.putTable") diff --git a/services/tables/src/test/java/com/linkedin/openhouse/tables/e2e/h2/TablesControllerTest.java b/services/tables/src/test/java/com/linkedin/openhouse/tables/e2e/h2/TablesControllerTest.java index 777adc6fa..f44c1748b 100644 --- a/services/tables/src/test/java/com/linkedin/openhouse/tables/e2e/h2/TablesControllerTest.java +++ b/services/tables/src/test/java/com/linkedin/openhouse/tables/e2e/h2/TablesControllerTest.java @@ -1026,48 +1026,6 @@ public void testSearchTablesWithDatabaseIdPaginated() throws Exception { } } - @Test - public void testSearchTablesPaginatedWithTableLocationField() throws Exception { - List tables = new ArrayList<>(); - for (int i = 0; i < 3; i++) { - GetTableResponseBody table = buildGetTableResponseBodyWithDbTbl("d1", "tloc" + i); - tables.add(table); - RequestAndValidateHelper.createTableAndValidateResponse(table, mvc, storageManager); - } - - mvc.perform( - MockMvcRequestBuilders.post("/v2/databases/d1/tables/search") - .param("page", "0") - .param("size", "10") - .param("fields", "tableLocation") - .accept(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()) - .andExpect(content().contentType(MediaType.APPLICATION_JSON)) - .andExpect(jsonPath("$.pageResults.content", hasSize(3))) - .andExpect(jsonPath("$.pageResults.content[0].tableId", notNullValue())) - .andExpect(jsonPath("$.pageResults.content[0].databaseId", is("d1"))) - .andExpect(jsonPath("$.pageResults.content[0].tableLocation", notNullValue())) - .andExpect( - jsonPath( - "$.pageResults.content[0].tableLocation", - org.hamcrest.Matchers.endsWith(".metadata.json"))); - - for (GetTableResponseBody t : tables) { - RequestAndValidateHelper.deleteTableAndValidateResponse(mvc, t); - } - } - - @Test - public void testSearchTablesPaginatedRejectsUnknownField() throws Exception { - mvc.perform( - MockMvcRequestBuilders.post("/v2/databases/d1/tables/search") - .param("fields", "schema") - .accept(MediaType.APPLICATION_JSON)) - .andExpect(status().isBadRequest()) - .andExpect(jsonPath("$.message", containsString("schema"))) - .andExpect(jsonPath("$.message", containsString("tableLocation"))); - } - @Test public void testUpdateSucceedsForColumnTags() throws Exception { MvcResult mvcResult = diff --git a/services/tables/src/test/java/com/linkedin/openhouse/tables/e2e/h2/TablesServiceTest.java b/services/tables/src/test/java/com/linkedin/openhouse/tables/e2e/h2/TablesServiceTest.java index 563162e61..3a5998ebb 100644 --- a/services/tables/src/test/java/com/linkedin/openhouse/tables/e2e/h2/TablesServiceTest.java +++ b/services/tables/src/test/java/com/linkedin/openhouse/tables/e2e/h2/TablesServiceTest.java @@ -33,8 +33,6 @@ import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; -import java.util.Arrays; -import java.util.Collections; import java.util.UUID; import org.apache.iceberg.Schema; import org.apache.iceberg.types.Types; @@ -673,58 +671,6 @@ public void testPrimaryTableUpdateAsNonSystemAdmin() { tableDtoCopy.getDatabaseId(), TABLE_DTO.getTableId(), TEST_USER)); } - @Test - public void testSearchTablesWithFieldsRequiresGetTableMetadata() { - TableDto tableDtoCopy = TABLE_DTO.toBuilder().build(); - verifyPutTableRequest(tableDtoCopy, null, true); - - // No fields requested — identifier-only search must succeed regardless of GET_TABLE_METADATA. - Mockito.when( - authorizationHandler.checkAccessDecision( - Mockito.any(), - Mockito.any(DatabaseDto.class), - Mockito.eq(Privileges.GET_TABLE_METADATA))) - .thenReturn(false); - Assertions.assertDoesNotThrow( - () -> - tablesService.searchTables( - tableDtoCopy.getDatabaseId(), 0, 10, null, Collections.emptyList(), TEST_USER)); - Assertions.assertDoesNotThrow( - () -> - tablesService.searchTables(tableDtoCopy.getDatabaseId(), 0, 10, null, null, TEST_USER)); - - // Fields requested but GET_TABLE_METADATA denied — must throw. - Assertions.assertThrows( - AccessDeniedException.class, - () -> - tablesService.searchTables( - tableDtoCopy.getDatabaseId(), - 0, - 10, - null, - Arrays.asList("tableLocation"), - TEST_USER)); - - // Allow GET_TABLE_METADATA — field-projection search now succeeds. - Mockito.when( - authorizationHandler.checkAccessDecision( - Mockito.any(), - Mockito.any(DatabaseDto.class), - Mockito.eq(Privileges.GET_TABLE_METADATA))) - .thenReturn(true); - Assertions.assertDoesNotThrow( - () -> - tablesService.searchTables( - tableDtoCopy.getDatabaseId(), - 0, - 10, - null, - Arrays.asList("tableLocation"), - TEST_USER)); - - tablesService.deleteTable(tableDtoCopy.getDatabaseId(), TABLE_DTO.getTableId(), TEST_USER); - } - /** assert lock is created as policy object on createLock call */ @Test public void testCreateLockOnTable() { diff --git a/services/tables/src/test/java/com/linkedin/openhouse/tables/mock/MockTablesApiHandler.java b/services/tables/src/test/java/com/linkedin/openhouse/tables/mock/MockTablesApiHandler.java index 6a80f599e..b7268dfdb 100644 --- a/services/tables/src/test/java/com/linkedin/openhouse/tables/mock/MockTablesApiHandler.java +++ b/services/tables/src/test/java/com/linkedin/openhouse/tables/mock/MockTablesApiHandler.java @@ -20,7 +20,6 @@ import com.linkedin.openhouse.tables.api.spec.v0.response.GetSoftDeletedTableResponseBody; import com.linkedin.openhouse.tables.api.spec.v0.response.GetTableResponseBody; import java.util.ArrayList; -import java.util.List; import org.springframework.context.annotation.Primary; import org.springframework.http.HttpStatus; import org.springframework.security.access.AccessDeniedException; @@ -65,12 +64,7 @@ public ApiResponse searchTables(String databaseId) { @Override public ApiResponse searchTables( - String databaseId, - int page, - int size, - String sortBy, - List fields, - String actingPrincipal) { + String databaseId, int page, int size, String sortBy) { return null; } From 387dd773545a60b1e6956d25ae5bfe7686eb424e Mon Sep 17 00:00:00 2001 From: mkuchenbecker Date: Wed, 27 May 2026 16:26:37 -0700 Subject: [PATCH 2/2] Resolve revert conflict: keep findHouseTable from #589 The revert of #579 conflicted with #589 (merged after) in OpenHouseInternalCatalog.java. #579 added listHouseTables; #589 added findHouseTable, which is still needed by the drop path. Resolution: drop listHouseTables (the #579 addition), keep findHouseTable (the #589 addition). Co-Authored-By: Claude Opus 4.7 (1M context) --- .../internal/catalog/OpenHouseInternalCatalog.java | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/iceberg/openhouse/internalcatalog/src/main/java/com/linkedin/openhouse/internal/catalog/OpenHouseInternalCatalog.java b/iceberg/openhouse/internalcatalog/src/main/java/com/linkedin/openhouse/internal/catalog/OpenHouseInternalCatalog.java index 3dd8b522c..1039125b7 100644 --- a/iceberg/openhouse/internalcatalog/src/main/java/com/linkedin/openhouse/internal/catalog/OpenHouseInternalCatalog.java +++ b/iceberg/openhouse/internalcatalog/src/main/java/com/linkedin/openhouse/internal/catalog/OpenHouseInternalCatalog.java @@ -125,16 +125,6 @@ public Page listTables(Namespace namespace, Pageable pageable) .map(houseTable -> TableIdentifier.of(houseTable.getDatabaseId(), houseTable.getTableId())); } -<<<<<<< HEAD - /** - * Paginated listing that preserves the underlying {@link HouseTable} rows, so callers can read - * HTS-resident columns (e.g. tableLocation) without an extra metadata.json load per table. - */ - public Page listHouseTables(Namespace namespace, Pageable pageable) { - NamespaceUtil.validateOperationNamespace(namespace); - return houseTableRepository.findAllByDatabaseId(namespace.toString(), pageable); - } - /** * Direct HTS lookup that returns the {@link HouseTable} row without parsing metadata.json. Use * this when only HTS-resident columns (e.g. tableUUID, tableLocation) are needed — for example, @@ -154,8 +144,6 @@ public Optional findHouseTable(TableIdentifier identifier) { } } -======= ->>>>>>> parent of 63789621 (Support returning HTS fields in table list api (#579)) @Override public boolean dropTable(TableIdentifier identifier, boolean purge) { // Look up the HouseTable row directly instead of calling loadTable(), so drop works even when