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

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


The following commit(s) were added to refs/heads/main by this push:
     new 32f66f3ce [spark] Overwrite paimon dlf authentication configs by spark 
job level properties
32f66f3ce is described below

commit 32f66f3cea181670d98dc8da29c51f8bd0127483
Author: Yang Zhang <[email protected]>
AuthorDate: Wed May 27 13:54:03 2026 +0800

    [spark] Overwrite paimon dlf authentication configs by spark job level 
properties
---
 .../fluss/spark/read/lake/FlussLakeUtils.scala     | 26 +++++++++++++++++-----
 1 file changed, 21 insertions(+), 5 deletions(-)

diff --git 
a/fluss-spark/fluss-spark-common/src/main/scala/org/apache/fluss/spark/read/lake/FlussLakeUtils.scala
 
b/fluss-spark/fluss-spark-common/src/main/scala/org/apache/fluss/spark/read/lake/FlussLakeUtils.scala
index 62a6b6d98..0bdcb8721 100644
--- 
a/fluss-spark/fluss-spark-common/src/main/scala/org/apache/fluss/spark/read/lake/FlussLakeUtils.scala
+++ 
b/fluss-spark/fluss-spark-common/src/main/scala/org/apache/fluss/spark/read/lake/FlussLakeUtils.scala
@@ -29,7 +29,20 @@ import scala.collection.JavaConverters._
 
 object FlussLakeUtils {
 
-  private val SPARK_CATALOG_PREFIX = "spark.sql.catalog."
+  /**
+   * Paimon DLF supports multiple authentication schemes (see
+   * https://paimon.apache.org/docs/1.3/concepts/rest/dlf/), allowing clients 
to freely choose the
+   * appropriate method based on their runtime environment. However, the Fluss 
server does not
+   * propagate auth configs for all scenarios. These keys are therefore 
overridden with the values
+   * from the Catalog configuration, replacing whatever the Fluss server 
provides, so that clients
+   * can use their preferred authentication method.
+   */
+  private val REMOVAL_KEYS = Set(
+    "dlf.access-key-id",
+    "dlf.access-key-secret",
+    "dlf.security-token",
+    "dlf.token-path",
+    "dlf.token-loader")
 
   def createLakeSource(
       catalogProperties: util.Map[String, String],
@@ -39,11 +52,14 @@ object FlussLakeUtils {
     val datalakeFormat = tableConfig.get(ConfigOptions.TABLE_DATALAKE_FORMAT)
     val dataLakePrefix = "table.datalake." + datalakeFormat + "."
 
+    val rewriteProperties =
+      PropertiesUtils.extractAndRemovePrefix(tableProperties, 
dataLakePrefix).asScala.filterNot {
+        case (k, _) => REMOVAL_KEYS(k)
+      } ++
+        catalogProperties.asScala.filter { case (k, _) => REMOVAL_KEYS(k) }
+
     val lakeConfig =
-      
Configuration.fromMap(PropertiesUtils.extractAndRemovePrefix(tableProperties, 
dataLakePrefix))
-    catalogProperties.asScala.foreach {
-      case (k, v) => lakeConfig.setString(s"$SPARK_CATALOG_PREFIX$k", v)
-    }
+      Configuration.fromMap(rewriteProperties.asJava)
     val lakeStoragePlugin =
       LakeStoragePluginSetUp.fromDataLakeFormat(datalakeFormat.toString, null)
     val lakeStorage = lakeStoragePlugin.createLakeStorage(lakeConfig)

Reply via email to