This is an automated email from the ASF dual-hosted git repository.
yuqi4733 pushed a commit to branch branch-1.1
in repository https://gitbox.apache.org/repos/asf/gravitino.git
The following commit(s) were added to refs/heads/branch-1.1 by this push:
new ce12c8c1dc [#9512] fix(lance-rest): Handle null mode in
registerTableRequest and add test case for verification (#9550)
ce12c8c1dc is described below
commit ce12c8c1dc045fe31628f4d54fa5751f23d81c89
Author: github-actions[bot]
<41898282+github-actions[bot]@users.noreply.github.com>
AuthorDate: Wed Dec 24 18:09:37 2025 +0800
[#9512] fix(lance-rest): Handle null mode in registerTableRequest and add
test case for verification (#9550)
### What changes were proposed in this pull request?
Try to fix a possible bug if the mode in `RegisterTableRequest` is null.
### Why are the changes needed?
It's a bug.
Fix: #9512
### Does this PR introduce _any_ user-facing change?
N/A.
### How was this patch tested?
Add ITs
Co-authored-by: Mini Yu <[email protected]>
---
.github/workflows/backend-integration-test.yml | 1 +
.../org/apache/gravitino/lance/service/LanceExceptionMapper.java | 5 +++++
.../gravitino/lance/service/rest/LanceTableOperations.java | 3 ++-
.../gravitino/lance/integration/test/LanceRESTServiceIT.java | 9 +++++++++
4 files changed, 17 insertions(+), 1 deletion(-)
diff --git a/.github/workflows/backend-integration-test.yml
b/.github/workflows/backend-integration-test.yml
index 1334bf1892..b1b99ca818 100644
--- a/.github/workflows/backend-integration-test.yml
+++ b/.github/workflows/backend-integration-test.yml
@@ -32,6 +32,7 @@ jobs:
- common/**
- conf/**
- core/**
+ - lance/**
- dev/**
- gradle/**
- iceberg/**
diff --git
a/lance/lance-rest-server/src/main/java/org/apache/gravitino/lance/service/LanceExceptionMapper.java
b/lance/lance-rest-server/src/main/java/org/apache/gravitino/lance/service/LanceExceptionMapper.java
index 59bf7e6642..6ae9419e1c 100644
---
a/lance/lance-rest-server/src/main/java/org/apache/gravitino/lance/service/LanceExceptionMapper.java
+++
b/lance/lance-rest-server/src/main/java/org/apache/gravitino/lance/service/LanceExceptionMapper.java
@@ -42,6 +42,11 @@ public class LanceExceptionMapper implements
ExceptionMapper<Exception> {
? (LanceNamespaceException) ex
: toLanceNamespaceException(instance, ex);
+ LOG.error(
+ "Operate Lance instance with id '{}' got exception: {}",
+ instance,
+ lanceException.getMessage());
+
return handleLanceNamespaceException(lanceException);
}
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 e01eca59d9..26f6e6cc90 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
@@ -167,7 +167,8 @@ public class LanceTableOperations {
: Maps.newHashMap(registerTableRequest.getProperties());
props.put(LANCE_LOCATION, registerTableRequest.getLocation());
props.put(LanceConstants.LANCE_TABLE_REGISTER, "true");
- ModeEnum mode = registerTableRequest.getMode();
+ ModeEnum mode =
+ registerTableRequest.getMode() == null ? ModeEnum.CREATE :
registerTableRequest.getMode();
RegisterTableResponse response =
lanceNamespace.asTableOps().registerTable(tableId, mode, delimiter,
props);
diff --git
a/lance/lance-rest-server/src/test/java/org/apache/gravitino/lance/integration/test/LanceRESTServiceIT.java
b/lance/lance-rest-server/src/test/java/org/apache/gravitino/lance/integration/test/LanceRESTServiceIT.java
index 5570f38839..716ed83393 100644
---
a/lance/lance-rest-server/src/test/java/org/apache/gravitino/lance/integration/test/LanceRESTServiceIT.java
+++
b/lance/lance-rest-server/src/test/java/org/apache/gravitino/lance/integration/test/LanceRESTServiceIT.java
@@ -672,6 +672,15 @@ public class LanceRESTServiceIT extends BaseIT {
Assertions.assertNotNull(response);
Assertions.assertEquals(nonExistingLocation, response.getLocation());
Assertions.assertFalse(new File(nonExistingLocation).exists());
+
+ // Test registerTable with null mode after deregister should succeed
+ registerTableRequest.setMode(null);
+ String verifyNullModeLocation = tempDir + "/" +
"verify_null_mode_location/";
+ registerTableRequest.setLocation(verifyNullModeLocation);
+ registerTableRequest.setId(List.of(CATALOG_NAME, SCHEMA_NAME,
"verify_null_mode_location"));
+ response = Assertions.assertDoesNotThrow(() ->
ns.registerTable(registerTableRequest));
+ Assertions.assertNotNull(response);
+ Assertions.assertEquals(verifyNullModeLocation, response.getLocation());
}
@Test