This is an automated email from the ASF dual-hosted git repository.

yuqi4733 pushed a commit to branch branch-lance-namepspace-dev
in repository https://gitbox.apache.org/repos/asf/gravitino.git


The following commit(s) were added to refs/heads/branch-lance-namepspace-dev by 
this push:
     new 45c2dbcda7 bugfix[lance]: fix lance register table endpoint (#9093)
45c2dbcda7 is described below

commit 45c2dbcda71f9f81fcfafe6d5d752c63ed9da0fb
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";

Reply via email to