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

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


The following commit(s) were added to refs/heads/main by this push:
     new b8446866 pass skip_credential_subscoping_indirection param to 
TaskFileIOSupplier (#400)
b8446866 is described below

commit b8446866b55e79c35c6505681c871e22f8a86634
Author: Alessandro Nori <[email protected]>
AuthorDate: Wed Dec 18 18:46:44 2024 +0100

    pass skip_credential_subscoping_indirection param to TaskFileIOSupplier 
(#400)
    
    * pass skip_credential_subscoping_indirection param to TaskFileIOSupplier
    
    # Conflicts:
    #       
dropwizard/service/src/main/java/org/apache/polaris/service/dropwizard/PolarisApplication.java
    
    * address review comments + reformat
    
    * fix ctor in test
    
    * pass configurationStore to TaskFileIOSupplier
---
 .../service/dropwizard/PolarisApplication.java     |  6 +++-
 .../dropwizard/catalog/BasePolarisCatalogTest.java |  5 ++-
 .../apache/polaris/core/PolarisConfiguration.java  | 15 +++++++++
 .../service/catalog/BasePolarisCatalog.java        | 15 ++-------
 .../polaris/service/task/TaskFileIOSupplier.java   | 37 +++++++++++++++-------
 5 files changed, 52 insertions(+), 26 deletions(-)

diff --git 
a/dropwizard/service/src/main/java/org/apache/polaris/service/dropwizard/PolarisApplication.java
 
b/dropwizard/service/src/main/java/org/apache/polaris/service/dropwizard/PolarisApplication.java
index 62f4d304..29afa31a 100644
--- 
a/dropwizard/service/src/main/java/org/apache/polaris/service/dropwizard/PolarisApplication.java
+++ 
b/dropwizard/service/src/main/java/org/apache/polaris/service/dropwizard/PolarisApplication.java
@@ -82,6 +82,7 @@ import java.util.function.Function;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 import org.apache.iceberg.rest.RESTSerializers;
+import org.apache.polaris.core.PolarisConfigurationStore;
 import org.apache.polaris.core.auth.AuthenticatedPolarisPrincipal;
 import org.apache.polaris.core.auth.PolarisAuthorizer;
 import org.apache.polaris.core.auth.PolarisAuthorizerImpl;
@@ -329,7 +330,10 @@ public class PolarisApplication extends 
Application<PolarisApplicationConfig> {
                 TaskExecutorImpl taskExecutor =
                     new TaskExecutorImpl(taskConfig.executorService(), 
metaStoreManagerFactory);
                 TaskFileIOSupplier fileIOSupplier =
-                    new TaskFileIOSupplier(metaStoreManagerFactory, 
fileIOFactory);
+                    new TaskFileIOSupplier(
+                        metaStoreManagerFactory,
+                        fileIOFactory,
+                        
configuration.findService(PolarisConfigurationStore.class));
                 taskExecutor.addTaskHandler(
                     new TableCleanupTaskHandler(
                         taskExecutor, metaStoreManagerFactory, 
fileIOSupplier));
diff --git 
a/dropwizard/service/src/test/java/org/apache/polaris/service/dropwizard/catalog/BasePolarisCatalogTest.java
 
b/dropwizard/service/src/test/java/org/apache/polaris/service/dropwizard/catalog/BasePolarisCatalogTest.java
index 436ce4cc..1b7c59e2 100644
--- 
a/dropwizard/service/src/test/java/org/apache/polaris/service/dropwizard/catalog/BasePolarisCatalogTest.java
+++ 
b/dropwizard/service/src/test/java/org/apache/polaris/service/dropwizard/catalog/BasePolarisCatalogTest.java
@@ -1357,7 +1357,10 @@ public class BasePolarisCatalogTest extends 
CatalogTests<BasePolarisCatalog> {
         .containsEntry(PolarisCredentialProperty.AWS_SECRET_KEY, 
SECRET_ACCESS_KEY)
         .containsEntry(PolarisCredentialProperty.AWS_TOKEN, SESSION_TOKEN);
     FileIO fileIO =
-        new TaskFileIOSupplier(createMockMetaStoreManagerFactory(), new 
DefaultFileIOFactory())
+        new TaskFileIOSupplier(
+                createMockMetaStoreManagerFactory(),
+                new DefaultFileIOFactory(),
+                polarisContext.getConfigurationStore())
             .apply(taskEntity);
     
Assertions.assertThat(fileIO).isNotNull().isInstanceOf(InMemoryFileIO.class);
   }
diff --git 
a/polaris-core/src/main/java/org/apache/polaris/core/PolarisConfiguration.java 
b/polaris-core/src/main/java/org/apache/polaris/core/PolarisConfiguration.java
index 45a2f3c2..294a6ac6 100644
--- 
a/polaris-core/src/main/java/org/apache/polaris/core/PolarisConfiguration.java
+++ 
b/polaris-core/src/main/java/org/apache/polaris/core/PolarisConfiguration.java
@@ -110,6 +110,21 @@ public class PolarisConfiguration<T> {
               .defaultValue(false)
               .build();
 
+  public static final PolarisConfiguration<Boolean> 
SKIP_CREDENTIAL_SUBSCOPING_INDIRECTION =
+      PolarisConfiguration.<Boolean>builder()
+          .key("SKIP_CREDENTIAL_SUBSCOPING_INDIRECTION")
+          .description(
+              "If set to true, skip credential-subscoping indirection entirely 
whenever trying\n"
+                  + "   to obtain storage credentials for instantiating a 
FileIO. If 'true', no attempt is made\n"
+                  + "   to use StorageConfigs to generate table-specific 
storage credentials, but instead the default\n"
+                  + "   fallthrough of table-level credential properties or 
else provider-specific APPLICATION_DEFAULT\n"
+                  + "   credential-loading will be used for the FileIO.\n"
+                  + "   Typically this setting is used in single-tenant server 
deployments that don't rely on\n"
+                  + "   \"credential-vending\" and can use server-default 
environment variables or credential config\n"
+                  + "   files for all storage access, or in test/dev 
scenarios.")
+          .defaultValue(false)
+          .build();
+
   public static final PolarisConfiguration<Boolean> 
ALLOW_TABLE_LOCATION_OVERLAP =
       PolarisConfiguration.<Boolean>builder()
           .key("ALLOW_TABLE_LOCATION_OVERLAP")
diff --git 
a/service/common/src/main/java/org/apache/polaris/service/catalog/BasePolarisCatalog.java
 
b/service/common/src/main/java/org/apache/polaris/service/catalog/BasePolarisCatalog.java
index a0f85911..56fc2468 100644
--- 
a/service/common/src/main/java/org/apache/polaris/service/catalog/BasePolarisCatalog.java
+++ 
b/service/common/src/main/java/org/apache/polaris/service/catalog/BasePolarisCatalog.java
@@ -121,18 +121,6 @@ public class BasePolarisCatalog extends 
BaseMetastoreViewCatalog
   static final String ALLOW_SPECIFYING_FILE_IO_IMPL = 
"ALLOW_SPECIFYING_FILE_IO_IMPL";
   static final boolean ALLOW_SPECIFYING_FILE_IO_IMPL_DEFAULT = false;
 
-  // Config key for whether to skip credential-subscoping indirection entirely 
whenever trying
-  // to obtain storage credentials for instantiating a FileIO. If 'true', no 
attempt is made
-  // to use StorageConfigs to generate table-specific storage credentials, but 
instead the default
-  // fallthrough of table-level credential properties or else 
provider-specific APPLICATION_DEFAULT
-  // credential-loading will be used for the FileIO.
-  // Typically this setting is used in single-tenant server deployments that 
don't rely on
-  // "credential-vending" and can use server-default environment variables or 
credential config
-  // files for all storage access, or in test/dev scenarios.
-  static final String SKIP_CREDENTIAL_SUBSCOPING_INDIRECTION =
-      "SKIP_CREDENTIAL_SUBSCOPING_INDIRECTION";
-  static final boolean SKIP_CREDENTIAL_SUBSCOPING_INDIRECTION_DEFAULT = false;
-
   // Config key for initializing a default "catalogFileIO" that is available 
either via getIo()
   // or for any TableOperations/ViewOperations instantiated, via ops.io() 
before entity-specific
   // FileIO initialization is triggered for any such operations.
@@ -874,7 +862,8 @@ public class BasePolarisCatalog extends 
BaseMetastoreViewCatalog
       PolarisEntity entity) {
     Boolean skipCredentialSubscopingIndirection =
         getBooleanContextConfiguration(
-            SKIP_CREDENTIAL_SUBSCOPING_INDIRECTION, 
SKIP_CREDENTIAL_SUBSCOPING_INDIRECTION_DEFAULT);
+            PolarisConfiguration.SKIP_CREDENTIAL_SUBSCOPING_INDIRECTION.key,
+            
PolarisConfiguration.SKIP_CREDENTIAL_SUBSCOPING_INDIRECTION.defaultValue);
     if (Boolean.TRUE.equals(skipCredentialSubscopingIndirection)) {
       LOGGER
           .atInfo()
diff --git 
a/service/common/src/main/java/org/apache/polaris/service/task/TaskFileIOSupplier.java
 
b/service/common/src/main/java/org/apache/polaris/service/task/TaskFileIOSupplier.java
index c84eebd9..75ceff8e 100644
--- 
a/service/common/src/main/java/org/apache/polaris/service/task/TaskFileIOSupplier.java
+++ 
b/service/common/src/main/java/org/apache/polaris/service/task/TaskFileIOSupplier.java
@@ -24,6 +24,8 @@ import java.util.Set;
 import java.util.function.Function;
 import org.apache.iceberg.CatalogProperties;
 import org.apache.iceberg.io.FileIO;
+import org.apache.polaris.core.PolarisConfiguration;
+import org.apache.polaris.core.PolarisConfigurationStore;
 import org.apache.polaris.core.context.CallContext;
 import org.apache.polaris.core.entity.PolarisTaskConstants;
 import org.apache.polaris.core.entity.TaskEntity;
@@ -34,11 +36,15 @@ import org.apache.polaris.service.catalog.io.FileIOFactory;
 public class TaskFileIOSupplier implements Function<TaskEntity, FileIO> {
   private final MetaStoreManagerFactory metaStoreManagerFactory;
   private final FileIOFactory fileIOFactory;
+  private final PolarisConfigurationStore configurationStore;
 
   public TaskFileIOSupplier(
-      MetaStoreManagerFactory metaStoreManagerFactory, FileIOFactory 
fileIOFactory) {
+      MetaStoreManagerFactory metaStoreManagerFactory,
+      FileIOFactory fileIOFactory,
+      PolarisConfigurationStore configurationStore) {
     this.metaStoreManagerFactory = metaStoreManagerFactory;
     this.fileIOFactory = fileIOFactory;
+    this.configurationStore = configurationStore;
   }
 
   @Override
@@ -49,16 +55,25 @@ public class TaskFileIOSupplier implements 
Function<TaskEntity, FileIO> {
         metaStoreManagerFactory.getOrCreateMetaStoreManager(
             CallContext.getCurrentContext().getRealmContext());
     Map<String, String> properties = new HashMap<>(internalProperties);
-    properties.putAll(
-        metaStoreManagerFactory
-            
.getOrCreateStorageCredentialCache(CallContext.getCurrentContext().getRealmContext())
-            .getOrGenerateSubScopeCreds(
-                metaStoreManager,
-                CallContext.getCurrentContext().getPolarisCallContext(),
-                task,
-                true,
-                Set.of(location),
-                Set.of(location)));
+
+    Boolean skipCredentialSubscopingIndirection =
+        configurationStore.getConfiguration(
+            null,
+            PolarisConfiguration.SKIP_CREDENTIAL_SUBSCOPING_INDIRECTION.key,
+            
PolarisConfiguration.SKIP_CREDENTIAL_SUBSCOPING_INDIRECTION.defaultValue);
+
+    if (!skipCredentialSubscopingIndirection) {
+      properties.putAll(
+          metaStoreManagerFactory
+              
.getOrCreateStorageCredentialCache(CallContext.getCurrentContext().getRealmContext())
+              .getOrGenerateSubScopeCreds(
+                  metaStoreManager,
+                  CallContext.getCurrentContext().getPolarisCallContext(),
+                  task,
+                  true,
+                  Set.of(location),
+                  Set.of(location)));
+    }
     String ioImpl =
         properties.getOrDefault(
             CatalogProperties.FILE_IO_IMPL, 
"org.apache.iceberg.io.ResolvingFileIO");

Reply via email to