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

yuqi4733 pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/gravitino.git


The following commit(s) were added to refs/heads/main by this push:
     new b8245a1edf  [#8933][#8959] fix(lance-rest-server): fix lance rest 
server issues (#9186)
b8245a1edf is described below

commit b8245a1edfc0f0fb7d566b931aa2386afd4dfbcc
Author: Junda Yang <[email protected]>
AuthorDate: Thu Nov 20 03:01:02 2025 -0800

     [#8933][#8959] fix(lance-rest-server): fix lance rest server issues (#9186)
    
    ### What changes were proposed in this pull request?
    
    This PR combines two bug fixes for Lance REST server integration:
    
    CI Configuration Fix:
    - Renamed `ignoreIcebergRestService` to `ignoreAuxRestService` to
    support both Iceberg and Lance auxiliary services
    - Added Lance REST service to `gravitino.auxService.names` in config
    template
    - Added `:lance:lance-rest-server:jar` as test dependency in Iceberg
    catalog, Spark connector (v3.3, v3.4, v3.5) build scripts
    - Implemented `getLanceRestServiceConfigs()` in MiniGravitino to
    auto-configure Lance REST service for integration tests
    
    Configuration Key Fix:
    - Removed excessive `LANCE_CONFIG_PREFIX` from `METALAKE_NAME` and
    `NAMESPACE_BACKEND_URI` configuration entries
    - Changed keys from `gravitino.lance-rest.gravitino.metalake-name` →
    `gravitino.metalake-name` and `gravitino.lance-rest.gravitino.uri` →
    `gravitino.uri`
    
    ### Why are the changes needed?
    
    CI Fix: Fixing IT tests. The naming ignoreIcebergRestService was also
    confusing since it should control all auxiliary services, not just
    Iceberg.
    
    Config Fix: The Lance REST server strips the `LANCE_CONFIG_PREFIX` when
    starting, so having it in the configuration key definitions caused a
    mismatch where configurations couldn't be properly loaded (e.g., the
    server would look for `gravitino.metalake-name` but the config defined
    `gravitino.lance-rest.gravitino.metalake-name`).
    
    Fix: #8933
    Fix: #8959
    
    ### Does this PR introduce _any_ user-facing change?
    
    No to user-facing API changes, but yes to configuration changes
    
    ### How was this patch tested?
    
    CI
    
    ---------
    
    Co-authored-by: Jerry Shao <[email protected]>
    Co-authored-by: Mini Yu <[email protected]>
---
 .../catalog-lakehouse-iceberg/build.gradle.kts     |  2 ++
 .../integration/test/CatalogIcebergBaseIT.java     |  2 +-
 .../test/CatalogIcebergKerberosHiveIT.java         |  2 +-
 conf/gravitino.conf.template                       |  2 +-
 .../connector/integration/test/FlinkEnvIT.java     |  2 +-
 .../gravitino/integration/test/MiniGravitino.java  | 25 ++++++++++++++++++----
 .../integration/test/MiniGravitinoContext.java     |  6 +++---
 .../gravitino/integration/test/util/BaseIT.java    |  5 ++---
 .../gravitino/lance/common/config/LanceConfig.java |  4 ++--
 .../connector/integration/test/SparkEnvIT.java     |  2 +-
 spark-connector/v3.3/spark/build.gradle.kts        |  1 +
 spark-connector/v3.4/spark/build.gradle.kts        |  1 +
 spark-connector/v3.5/spark/build.gradle.kts        |  1 +
 13 files changed, 38 insertions(+), 17 deletions(-)

diff --git a/catalogs/catalog-lakehouse-iceberg/build.gradle.kts 
b/catalogs/catalog-lakehouse-iceberg/build.gradle.kts
index e61649bb69..4a143321f9 100644
--- a/catalogs/catalog-lakehouse-iceberg/build.gradle.kts
+++ b/catalogs/catalog-lakehouse-iceberg/build.gradle.kts
@@ -148,6 +148,8 @@ tasks.test {
     exclude("**/integration/test/**")
   } else {
     dependsOn(tasks.jar)
+    dependsOn(":iceberg:iceberg-rest-server:jar")
+    dependsOn(":lance:lance-rest-server:jar")
   }
 }
 
diff --git 
a/catalogs/catalog-lakehouse-iceberg/src/test/java/org/apache/gravitino/catalog/lakehouse/iceberg/integration/test/CatalogIcebergBaseIT.java
 
b/catalogs/catalog-lakehouse-iceberg/src/test/java/org/apache/gravitino/catalog/lakehouse/iceberg/integration/test/CatalogIcebergBaseIT.java
index 1260d7d795..b0d4f3b5eb 100644
--- 
a/catalogs/catalog-lakehouse-iceberg/src/test/java/org/apache/gravitino/catalog/lakehouse/iceberg/integration/test/CatalogIcebergBaseIT.java
+++ 
b/catalogs/catalog-lakehouse-iceberg/src/test/java/org/apache/gravitino/catalog/lakehouse/iceberg/integration/test/CatalogIcebergBaseIT.java
@@ -124,7 +124,7 @@ public abstract class CatalogIcebergBaseIT extends BaseIT {
 
   @BeforeAll
   public void startup() throws Exception {
-    ignoreIcebergRestService = false;
+    super.ignoreAuxRestService = false;
     super.startIntegrationTest();
     containerSuite.startHiveContainer();
     initIcebergCatalogProperties();
diff --git 
a/catalogs/catalog-lakehouse-iceberg/src/test/java/org/apache/gravitino/catalog/lakehouse/iceberg/integration/test/CatalogIcebergKerberosHiveIT.java
 
b/catalogs/catalog-lakehouse-iceberg/src/test/java/org/apache/gravitino/catalog/lakehouse/iceberg/integration/test/CatalogIcebergKerberosHiveIT.java
index 1017ccb4e1..cce787ec85 100644
--- 
a/catalogs/catalog-lakehouse-iceberg/src/test/java/org/apache/gravitino/catalog/lakehouse/iceberg/integration/test/CatalogIcebergKerberosHiveIT.java
+++ 
b/catalogs/catalog-lakehouse-iceberg/src/test/java/org/apache/gravitino/catalog/lakehouse/iceberg/integration/test/CatalogIcebergKerberosHiveIT.java
@@ -127,7 +127,7 @@ public class CatalogIcebergKerberosHiveIT extends BaseIT {
       // Config kerberos configuration for Gravitino server
       addKerberosConfig();
 
-      ignoreIcebergRestService = false;
+      super.ignoreAuxRestService = false;
       // Start Gravitino server
       super.startIntegrationTest();
     } catch (Exception e) {
diff --git a/conf/gravitino.conf.template b/conf/gravitino.conf.template
index 44a9e50f82..f3af89c12b 100644
--- a/conf/gravitino.conf.template
+++ b/conf/gravitino.conf.template
@@ -82,7 +82,7 @@ gravitino.authorization.serviceAdmins = anonymous
 
 # THE CONFIGURATION FOR AUXILIARY SERVICE
 # Auxiliary service names, separate by ',', currently support iceberg-rest and 
lance-rest
-gravitino.auxService.names = iceberg-rest
+gravitino.auxService.names = iceberg-rest,lance-rest
 # Iceberg REST service classpath
 gravitino.iceberg-rest.classpath = iceberg-rest-server/libs, 
iceberg-rest-server/conf
 # Iceberg REST service host
diff --git 
a/flink-connector/flink/src/test/java/org/apache/gravitino/flink/connector/integration/test/FlinkEnvIT.java
 
b/flink-connector/flink/src/test/java/org/apache/gravitino/flink/connector/integration/test/FlinkEnvIT.java
index d372eb92af..ca79144f5b 100644
--- 
a/flink-connector/flink/src/test/java/org/apache/gravitino/flink/connector/integration/test/FlinkEnvIT.java
+++ 
b/flink-connector/flink/src/test/java/org/apache/gravitino/flink/connector/integration/test/FlinkEnvIT.java
@@ -112,7 +112,7 @@ public abstract class FlinkEnvIT extends BaseIT {
   protected abstract String getProvider();
 
   private void initIcebergRestServiceEnv() {
-    ignoreIcebergRestService = false;
+    super.ignoreAuxRestService = false;
     Map<String, String> icebergRestServiceConfigs = new HashMap<>();
     icebergRestServiceConfigs.put(
         "gravitino."
diff --git 
a/integration-test-common/src/test/java/org/apache/gravitino/integration/test/MiniGravitino.java
 
b/integration-test-common/src/test/java/org/apache/gravitino/integration/test/MiniGravitino.java
index d0ce1710d7..3cff6940c6 100644
--- 
a/integration-test-common/src/test/java/org/apache/gravitino/integration/test/MiniGravitino.java
+++ 
b/integration-test-common/src/test/java/org/apache/gravitino/integration/test/MiniGravitino.java
@@ -78,7 +78,7 @@ public class MiniGravitino {
     mockConfDir.mkdirs();
   }
 
-  private void removeIcebergRestConfiguration(Properties properties) {
+  private void removeAuxRestConfiguration(Properties properties) {
     // Disable Iceberg REST service
     properties.remove(
         AuxiliaryServiceManager.GRAVITINO_AUX_SERVICE_PREFIX
@@ -103,9 +103,9 @@ public class MiniGravitino {
         serverConfig.loadPropertiesFromFile(
             new File(ITUtils.joinPath(mockConfDir.getAbsolutePath(), 
"gravitino.conf")));
 
-    // Remove Iceberg rest service.
-    if (context.ignoreIcebergRestService) {
-      removeIcebergRestConfiguration(properties);
+    // Disable auxiliary rest service.
+    if (context.ignoreAuxRestService) {
+      removeAuxRestConfiguration(properties);
       ITUtils.overwriteConfigFile(
           ITUtils.joinPath(mockConfDir.getAbsolutePath(), "gravitino.conf"), 
properties);
     }
@@ -230,6 +230,22 @@ public class MiniGravitino {
     return customConfigs;
   }
 
+  private Map<String, String> getLanceRestServiceConfigs() throws IOException {
+    Map<String, String> customConfigs = new HashMap<>();
+
+    String lanceJarPath = Paths.get("lance", "lance-rest-server", "build", 
"libs").toString();
+    String lanceConfigPath =
+        Paths.get("lance", "lance-rest-server", "src", "main", 
"resources").toString();
+    customConfigs.put(
+        "gravitino.lance-rest." + 
AuxiliaryServiceManager.AUX_SERVICE_CLASSPATH,
+        String.join(",", lanceJarPath, lanceConfigPath));
+
+    customConfigs.put(
+        "gravitino.lance-rest." + 
JettyServerConfig.WEBSERVER_HTTP_PORT.getKey(),
+        String.valueOf(RESTUtils.findAvailablePort(4000, 5000)));
+    return customConfigs;
+  }
+
   // Customize the config file
   private void customizeConfigFile(String configTempFileName, String 
configFileName)
       throws IOException {
@@ -239,6 +255,7 @@ public class MiniGravitino {
         String.valueOf(RESTUtils.findAvailablePort(2000, 3000)));
 
     configMap.putAll(getIcebergRestServiceConfigs());
+    configMap.putAll(getLanceRestServiceConfigs());
     configMap.putAll(context.customConfig);
 
     ITUtils.rewriteConfigFile(configTempFileName, configFileName, configMap);
diff --git 
a/integration-test-common/src/test/java/org/apache/gravitino/integration/test/MiniGravitinoContext.java
 
b/integration-test-common/src/test/java/org/apache/gravitino/integration/test/MiniGravitinoContext.java
index 5b2acfac33..601138ecfd 100644
--- 
a/integration-test-common/src/test/java/org/apache/gravitino/integration/test/MiniGravitinoContext.java
+++ 
b/integration-test-common/src/test/java/org/apache/gravitino/integration/test/MiniGravitinoContext.java
@@ -23,10 +23,10 @@ import java.util.Map;
 
 public class MiniGravitinoContext {
   Map<String, String> customConfig;
-  final boolean ignoreIcebergRestService;
+  final boolean ignoreAuxRestService;
 
-  public MiniGravitinoContext(Map<String, String> customConfig, boolean 
ignoreIcebergRestService) {
+  public MiniGravitinoContext(Map<String, String> customConfig, boolean 
ignoreAuxRestService) {
     this.customConfig = customConfig;
-    this.ignoreIcebergRestService = ignoreIcebergRestService;
+    this.ignoreAuxRestService = ignoreAuxRestService;
   }
 }
diff --git 
a/integration-test-common/src/test/java/org/apache/gravitino/integration/test/util/BaseIT.java
 
b/integration-test-common/src/test/java/org/apache/gravitino/integration/test/util/BaseIT.java
index 72923341b9..1ae60a0fec 100644
--- 
a/integration-test-common/src/test/java/org/apache/gravitino/integration/test/util/BaseIT.java
+++ 
b/integration-test-common/src/test/java/org/apache/gravitino/integration/test/util/BaseIT.java
@@ -102,7 +102,7 @@ public class BaseIT {
 
   protected Map<String, String> customConfigs = new HashMap<>();
 
-  protected boolean ignoreIcebergRestService = true;
+  protected boolean ignoreAuxRestService = true;
 
   public String DOWNLOAD_MYSQL_JDBC_DRIVER_URL =
       
"https://repo1.maven.org/maven2/mysql/mysql-connector-java/8.0.26/mysql-connector-java-8.0.26.jar";;
@@ -330,8 +330,7 @@ public class BaseIT {
     serverConfig = new ServerConfig();
     customConfigs.put(ENTITY_RELATIONAL_JDBC_BACKEND_PATH.getKey(), 
file.getAbsolutePath());
     if (testMode != null && testMode.equals(ITUtils.EMBEDDED_TEST_MODE)) {
-      MiniGravitinoContext context =
-          new MiniGravitinoContext(customConfigs, ignoreIcebergRestService);
+      MiniGravitinoContext context = new MiniGravitinoContext(customConfigs, 
ignoreAuxRestService);
       miniGravitino = new MiniGravitino(context);
       miniGravitino.start();
       serverConfig = miniGravitino.getServerConfig();
diff --git 
a/lance/lance-common/src/main/java/org/apache/gravitino/lance/common/config/LanceConfig.java
 
b/lance/lance-common/src/main/java/org/apache/gravitino/lance/common/config/LanceConfig.java
index f517d1a349..f4556e43e4 100644
--- 
a/lance/lance-common/src/main/java/org/apache/gravitino/lance/common/config/LanceConfig.java
+++ 
b/lance/lance-common/src/main/java/org/apache/gravitino/lance/common/config/LanceConfig.java
@@ -47,14 +47,14 @@ public class LanceConfig extends Config implements 
OverwriteDefaultConfig {
           .createWithDefault(GRAVITINO_NAMESPACE_BACKEND);
 
   public static final ConfigEntry<String> METALAKE_NAME =
-      new ConfigBuilder(LANCE_CONFIG_PREFIX + GRAVITINO_NAMESPACE_BACKEND + 
"." + CONFIG_METALAKE)
+      new ConfigBuilder(GRAVITINO_NAMESPACE_BACKEND + "." + CONFIG_METALAKE)
           .doc("The Metalake name for Lance Gravitino namespace backend")
           .version(ConfigConstants.VERSION_0_1_0)
           .stringConf()
           .create();
 
   public static final ConfigEntry<String> NAMESPACE_BACKEND_URI =
-      new ConfigBuilder(LANCE_CONFIG_PREFIX + GRAVITINO_NAMESPACE_BACKEND + 
"." + CONFIG_URI)
+      new ConfigBuilder(GRAVITINO_NAMESPACE_BACKEND + "." + CONFIG_URI)
           .doc("The URI of the namespace backend, e.g., Gravitino server URI")
           .version(ConfigConstants.VERSION_0_1_0)
           .stringConf()
diff --git 
a/spark-connector/spark-common/src/test/java/org/apache/gravitino/spark/connector/integration/test/SparkEnvIT.java
 
b/spark-connector/spark-common/src/test/java/org/apache/gravitino/spark/connector/integration/test/SparkEnvIT.java
index 273d6d3bcd..9c2d2d5110 100644
--- 
a/spark-connector/spark-common/src/test/java/org/apache/gravitino/spark/connector/integration/test/SparkEnvIT.java
+++ 
b/spark-connector/spark-common/src/test/java/org/apache/gravitino/spark/connector/integration/test/SparkEnvIT.java
@@ -155,7 +155,7 @@ public abstract class SparkEnvIT extends SparkUtilIT {
   protected void initCatalogEnv() throws Exception {}
 
   private void initIcebergRestServiceEnv() {
-    ignoreIcebergRestService = false;
+    super.ignoreAuxRestService = false;
     Map<String, String> icebergRestServiceConfigs = new HashMap<>();
     icebergRestServiceConfigs.put(
         "gravitino."
diff --git a/spark-connector/v3.3/spark/build.gradle.kts 
b/spark-connector/v3.3/spark/build.gradle.kts
index 9023404980..1cc7f6d1a1 100644
--- a/spark-connector/v3.3/spark/build.gradle.kts
+++ b/spark-connector/v3.3/spark/build.gradle.kts
@@ -175,6 +175,7 @@ tasks.test {
     dependsOn(":catalogs:catalog-lakehouse-iceberg:jar")
     dependsOn(":catalogs:catalog-hive:jar")
     dependsOn(":iceberg:iceberg-rest-server:jar")
+    dependsOn(":lance:lance-rest-server:jar")
     dependsOn(":catalogs:catalog-lakehouse-paimon:jar")
     dependsOn(":catalogs:catalog-jdbc-mysql:jar")
     dependsOn(":catalogs:catalog-jdbc-postgresql:jar")
diff --git a/spark-connector/v3.4/spark/build.gradle.kts 
b/spark-connector/v3.4/spark/build.gradle.kts
index 8a9b527dce..519799d076 100644
--- a/spark-connector/v3.4/spark/build.gradle.kts
+++ b/spark-connector/v3.4/spark/build.gradle.kts
@@ -175,6 +175,7 @@ tasks.test {
     dependsOn(":catalogs:catalog-lakehouse-iceberg:jar")
     dependsOn(":catalogs:catalog-hive:jar")
     dependsOn(":iceberg:iceberg-rest-server:jar")
+    dependsOn(":lance:lance-rest-server:jar")
     dependsOn(":catalogs:catalog-lakehouse-paimon:jar")
     dependsOn(":catalogs:catalog-jdbc-mysql:jar")
     dependsOn(":catalogs:catalog-jdbc-postgresql:jar")
diff --git a/spark-connector/v3.5/spark/build.gradle.kts 
b/spark-connector/v3.5/spark/build.gradle.kts
index edbed1ca2d..cc1d8c9f88 100644
--- a/spark-connector/v3.5/spark/build.gradle.kts
+++ b/spark-connector/v3.5/spark/build.gradle.kts
@@ -177,6 +177,7 @@ tasks.test {
     dependsOn(":catalogs:catalog-lakehouse-iceberg:jar")
     dependsOn(":catalogs:catalog-hive:jar")
     dependsOn(":iceberg:iceberg-rest-server:jar")
+    dependsOn(":lance:lance-rest-server:jar")
     dependsOn(":catalogs:catalog-lakehouse-paimon:jar")
     dependsOn(":catalogs:catalog-jdbc-mysql:jar")
     dependsOn(":catalogs:catalog-jdbc-postgresql:jar")

Reply via email to