This is an automated email from the ASF dual-hosted git repository. yuqi4733 pushed a commit to branch branch-lance-namespace-dev in repository https://gitbox.apache.org/repos/asf/gravitino.git
commit ea3eb770aac2aa0a873439431699e2d38afcc81e Author: Junda Yang <[email protected]> AuthorDate: Wed Nov 12 17:29:05 2025 -0800 bugfix[lance]: fix lance register table endpoint (#9093) ### What changes were proposed in this pull request? set `props.put("register", "true")` in lance rest server register table api, which will be passed to GenericLakehouseCatalogOperations - https://github.com/apache/gravitino/blob/d724f2e5226cb7348803b8ade9821a030472aa40/catalogs/catalog-generic-lakehouse/src/main/java/org/apache/gravitino/catalog/lakehouse/GenericLakehouseCatalogOperations.java#L282, so it only register the table but not creating physical table location. ### Why are the changes needed? Without `props.put("register", "true");`, Lance catalog will actually creates the table on the physical storage location. ### Does this PR introduce _any_ user-facing change? No. ### How was this patch tested? Unit test --- .../lance/service/rest/LanceTableOperations.java | 1 + .../service/rest/TestLanceNamespaceOperations.java | 41 ++++++++++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/lance/lance-rest-server/src/main/java/org/apache/gravitino/lance/service/rest/LanceTableOperations.java b/lance/lance-rest-server/src/main/java/org/apache/gravitino/lance/service/rest/LanceTableOperations.java index 290730f39a..bbef8e3b6a 100644 --- a/lance/lance-rest-server/src/main/java/org/apache/gravitino/lance/service/rest/LanceTableOperations.java +++ b/lance/lance-rest-server/src/main/java/org/apache/gravitino/lance/service/rest/LanceTableOperations.java @@ -162,6 +162,7 @@ public class LanceTableOperations { ? Maps.newHashMap() : Maps.newHashMap(registerTableRequest.getProperties()); props.put(LANCE_LOCATION, registerTableRequest.getLocation()); + props.put("register", "true"); ModeEnum mode = registerTableRequest.getMode(); RegisterTableResponse response = diff --git a/lance/lance-rest-server/src/test/java/org/apache/gravitino/lance/service/rest/TestLanceNamespaceOperations.java b/lance/lance-rest-server/src/test/java/org/apache/gravitino/lance/service/rest/TestLanceNamespaceOperations.java index efe1f90436..0fc4df9cfd 100644 --- a/lance/lance-rest-server/src/test/java/org/apache/gravitino/lance/service/rest/TestLanceNamespaceOperations.java +++ b/lance/lance-rest-server/src/test/java/org/apache/gravitino/lance/service/rest/TestLanceNamespaceOperations.java @@ -502,6 +502,47 @@ public class TestLanceNamespaceOperations extends JerseyTest { Assertions.assertEquals(RuntimeException.class.getSimpleName(), errorResp.getType()); } + @Test + void testRegisterTableSetsRegisterPropertyToTrue() { + String tableIds = "catalog.scheme.register_table_with_property"; + String delimiter = "."; + + // Reset mock to clear any previous test state + Mockito.reset(tableOps); + + // Test that the "register" property is set to "true" + RegisterTableResponse registerTableResponse = new RegisterTableResponse(); + registerTableResponse.setLocation("/path/to/registered_table"); + registerTableResponse.setProperties(ImmutableMap.of("key", "value", "register", "true")); + when(tableOps.registerTable(any(), any(), any(), any())).thenReturn(registerTableResponse); + + RegisterTableRequest tableRequest = new RegisterTableRequest(); + tableRequest.setLocation("/path/to/registered_table"); + tableRequest.setMode(RegisterTableRequest.ModeEnum.CREATE); + tableRequest.setProperties(ImmutableMap.of("custom-key", "custom-value")); + + Response resp = + target(String.format("/v1/table/%s/register", tableIds)) + .queryParam("delimiter", delimiter) + .request(MediaType.APPLICATION_JSON_TYPE) + .post(Entity.entity(tableRequest, MediaType.APPLICATION_JSON_TYPE)); + + Assertions.assertEquals(Response.Status.OK.getStatusCode(), resp.getStatus()); + + // Verify that registerTable was called with properties containing "register": "true" + Mockito.verify(tableOps) + .registerTable( + eq(tableIds), + eq(RegisterTableRequest.ModeEnum.CREATE), + eq(delimiter), + Mockito.argThat( + props -> + props != null + && "true".equals(props.get("register")) + && "/path/to/registered_table".equals(props.get("location")) + && "custom-value".equals(props.get("custom-key")))); + } + @Test void testDeregisterTable() { String tableIds = "catalog.scheme.deregister_table";
