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

fanng 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 e9745d42ea [#6005]fix(iceberg-rest-server): Support to get custom 
property for dynamic config provider (#6026)
e9745d42ea is described below

commit e9745d42eadccc28fc06e3eaeedd74b8db55c151
Author: youze Liang <[email protected]>
AuthorDate: Mon Dec 30 10:12:46 2024 +0800

    [#6005]fix(iceberg-rest-server): Support to get custom property for dynamic 
config provider (#6026)
    
    ### What changes were proposed in this pull request?
    
    Users can pass custom parameters to catalog-backend via
    gravitino.bypass.xxx
    
    
    ### Why are the changes needed?
    
    Fix: #6005
    
    ### Does this PR introduce _any_ user-facing change?
    
    no
    
    ### How was this patch tested?
    
    add a new test case in TestDynamicIcebergConfigProvider
---
 .../provider/DynamicIcebergConfigProvider.java     | 11 +++++-
 .../provider/TestDynamicIcebergConfigProvider.java | 43 ++++++++++++++++++++++
 2 files changed, 52 insertions(+), 2 deletions(-)

diff --git 
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/iceberg/service/provider/DynamicIcebergConfigProvider.java
 
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/iceberg/service/provider/DynamicIcebergConfigProvider.java
index 0f35fae529..62ce035f93 100644
--- 
a/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/iceberg/service/provider/DynamicIcebergConfigProvider.java
+++ 
b/iceberg/iceberg-rest-server/src/main/java/org/apache/gravitino/iceberg/service/provider/DynamicIcebergConfigProvider.java
@@ -18,8 +18,11 @@
  */
 package org.apache.gravitino.iceberg.service.provider;
 
+import static org.apache.gravitino.connector.BaseCatalog.CATALOG_BYPASS_PREFIX;
+
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Preconditions;
+import java.util.HashMap;
 import java.util.Map;
 import java.util.Optional;
 import org.apache.commons.lang3.StringUtils;
@@ -29,6 +32,7 @@ import 
org.apache.gravitino.catalog.lakehouse.iceberg.IcebergPropertiesUtils;
 import org.apache.gravitino.client.GravitinoAdminClient;
 import org.apache.gravitino.exceptions.NoSuchCatalogException;
 import org.apache.gravitino.iceberg.common.IcebergConfig;
+import org.apache.gravitino.utils.MapUtils;
 
 /**
  * This provider proxy Gravitino lakehouse-iceberg catalogs.
@@ -75,8 +79,11 @@ public class DynamicIcebergConfigProvider implements 
IcebergConfigProvider {
         "lakehouse-iceberg".equals(catalog.provider()),
         String.format("%s.%s is not iceberg catalog", gravitinoMetalake, 
catalogName));
 
-    Map<String, String> properties =
-        
IcebergPropertiesUtils.toIcebergCatalogProperties(catalog.properties());
+    Map<String, String> catalogProperties = catalog.properties();
+    Map<String, String> properties = new HashMap<>();
+    
properties.putAll(IcebergPropertiesUtils.toIcebergCatalogProperties(catalogProperties));
+    properties.putAll(MapUtils.getPrefixMap(catalogProperties, 
CATALOG_BYPASS_PREFIX));
+
     return Optional.of(new IcebergConfig(properties));
   }
 
diff --git 
a/iceberg/iceberg-rest-server/src/test/java/org/apache/gravitino/iceberg/service/provider/TestDynamicIcebergConfigProvider.java
 
b/iceberg/iceberg-rest-server/src/test/java/org/apache/gravitino/iceberg/service/provider/TestDynamicIcebergConfigProvider.java
index 4eb5da5afc..696e75309d 100644
--- 
a/iceberg/iceberg-rest-server/src/test/java/org/apache/gravitino/iceberg/service/provider/TestDynamicIcebergConfigProvider.java
+++ 
b/iceberg/iceberg-rest-server/src/test/java/org/apache/gravitino/iceberg/service/provider/TestDynamicIcebergConfigProvider.java
@@ -19,10 +19,13 @@
 package org.apache.gravitino.iceberg.service.provider;
 
 import java.util.HashMap;
+import java.util.Map;
+import java.util.Optional;
 import org.apache.gravitino.Catalog;
 import org.apache.gravitino.catalog.lakehouse.iceberg.IcebergConstants;
 import org.apache.gravitino.client.GravitinoAdminClient;
 import org.apache.gravitino.client.GravitinoMetalake;
+import org.apache.gravitino.iceberg.common.IcebergConfig;
 import org.apache.gravitino.iceberg.common.ops.IcebergCatalogWrapper;
 import org.apache.iceberg.hive.HiveCatalog;
 import org.apache.iceberg.jdbc.JdbcCatalog;
@@ -113,4 +116,44 @@ public class TestDynamicIcebergConfigProvider {
         IllegalArgumentException.class,
         () -> 
provider.getIcebergCatalogConfig(IcebergConstants.ICEBERG_REST_DEFAULT_CATALOG));
   }
+
+  @Test
+  public void testCustomProperties() {
+    String customCatalogName = "custom_backend";
+    String customKey1 = "custom-k1";
+    String customValue1 = "custom-v1";
+    String customKey2 = "custom-k2";
+    String customValue2 = "custom-v2";
+
+    Catalog customMockCatalog = Mockito.mock(Catalog.class);
+
+    GravitinoMetalake gravitinoMetalake = 
Mockito.mock(GravitinoMetalake.class);
+    
Mockito.when(gravitinoMetalake.loadCatalog(customCatalogName)).thenReturn(customMockCatalog);
+
+    Mockito.when(customMockCatalog.provider()).thenReturn("lakehouse-iceberg");
+
+    Mockito.when(customMockCatalog.properties())
+        .thenReturn(
+            new HashMap<String, String>() {
+              {
+                put(IcebergConstants.CATALOG_BACKEND, "custom");
+                put(IcebergConstants.CATALOG_BACKEND_NAME, customCatalogName);
+                put("gravitino.bypass." + customKey1, customValue1);
+                put(customKey2, customValue2);
+              }
+            });
+    GravitinoAdminClient client = Mockito.mock(GravitinoAdminClient.class);
+    
Mockito.when(client.loadMetalake(Mockito.any())).thenReturn(gravitinoMetalake);
+    DynamicIcebergConfigProvider provider = new DynamicIcebergConfigProvider();
+    provider.setClient(client);
+    Optional<IcebergConfig> icebergCatalogConfig =
+        provider.getIcebergCatalogConfig(customCatalogName);
+    Assertions.assertTrue(icebergCatalogConfig.isPresent());
+    Map<String, String> icebergCatalogProperties =
+        icebergCatalogConfig.get().getIcebergCatalogProperties();
+    Assertions.assertEquals(icebergCatalogProperties.get(customKey1), 
customValue1);
+    Assertions.assertFalse(icebergCatalogProperties.containsKey(customKey2));
+    Assertions.assertEquals(
+        icebergCatalogProperties.get(IcebergConstants.CATALOG_BACKEND_NAME), 
customCatalogName);
+  }
 }

Reply via email to