From 19dcb01252ce4dc05bbe09439d6ba0ae4c385c7d Mon Sep 17 00:00:00 2001 From: Nuoya Jiang Date: Mon, 20 Oct 2025 23:56:03 -0500 Subject: [PATCH 1/3] replaced refreshAccessConfig --- .../service/catalog/io/DefaultFileIOFactory.java | 16 ++++++---------- .../catalog/io/WasbTranslatingFileIOFactory.java | 6 +++--- .../AbstractPolarisGenericTableCatalogTest.java | 6 +++++- .../iceberg/AbstractIcebergCatalogTest.java | 13 ++++++++----- .../iceberg/AbstractIcebergCatalogViewTest.java | 7 +++++-- .../iceberg/IcebergCatalogHandlerAuthzTest.java | 2 +- .../service/catalog/io/FileIOFactoryTest.java | 4 ++-- .../policy/AbstractPolicyCatalogTest.java | 6 +++++- .../org/apache/polaris/service/TestServices.java | 9 ++++----- .../catalog/io/MeasuredFileIOFactory.java | 7 ++----- 10 files changed, 41 insertions(+), 35 deletions(-) diff --git a/runtime/service/src/main/java/org/apache/polaris/service/catalog/io/DefaultFileIOFactory.java b/runtime/service/src/main/java/org/apache/polaris/service/catalog/io/DefaultFileIOFactory.java index 44f038d72f..15f87dbf96 100644 --- a/runtime/service/src/main/java/org/apache/polaris/service/catalog/io/DefaultFileIOFactory.java +++ b/runtime/service/src/main/java/org/apache/polaris/service/catalog/io/DefaultFileIOFactory.java @@ -38,7 +38,6 @@ import org.apache.polaris.core.storage.AccessConfig; import org.apache.polaris.core.storage.PolarisCredentialVendor; import org.apache.polaris.core.storage.PolarisStorageActions; -import org.apache.polaris.core.storage.cache.StorageCredentialCache; /** * A default FileIO factory implementation for creating Iceberg {@link FileIO} instances with @@ -52,15 +51,14 @@ @Identifier("default") public class DefaultFileIOFactory implements FileIOFactory { - private final StorageCredentialCache storageCredentialCache; private final MetaStoreManagerFactory metaStoreManagerFactory; + private final AccessConfigProvider accessConfigProvider; @Inject public DefaultFileIOFactory( - StorageCredentialCache storageCredentialCache, - MetaStoreManagerFactory metaStoreManagerFactory) { - this.storageCredentialCache = storageCredentialCache; + MetaStoreManagerFactory metaStoreManagerFactory, AccessConfigProvider accessConfigProvider) { this.metaStoreManagerFactory = metaStoreManagerFactory; + this.accessConfigProvider = accessConfigProvider; } @Override @@ -83,15 +81,13 @@ public FileIO loadFileIO( Optional accessConfig = storageInfoEntity.map( storageInfo -> - FileIOUtil.refreshAccessConfig( + accessConfigProvider.getAccessConfig( callContext, - storageCredentialCache, - credentialVendor, identifier, tableLocations, storageActions, - storageInfo, - Optional.empty())); + Optional.empty(), + resolvedEntityPath)); // Update the FileIO with the subscoped credentials // Update with properties in case there are table-level overrides the credentials should diff --git a/runtime/service/src/main/java/org/apache/polaris/service/catalog/io/WasbTranslatingFileIOFactory.java b/runtime/service/src/main/java/org/apache/polaris/service/catalog/io/WasbTranslatingFileIOFactory.java index 048e19bb41..2b4b90588b 100644 --- a/runtime/service/src/main/java/org/apache/polaris/service/catalog/io/WasbTranslatingFileIOFactory.java +++ b/runtime/service/src/main/java/org/apache/polaris/service/catalog/io/WasbTranslatingFileIOFactory.java @@ -42,9 +42,9 @@ public class WasbTranslatingFileIOFactory implements FileIOFactory { @Inject public WasbTranslatingFileIOFactory( StorageCredentialCache storageCredentialCache, - MetaStoreManagerFactory metaStoreManagerFactory) { - defaultFileIOFactory = - new DefaultFileIOFactory(storageCredentialCache, metaStoreManagerFactory); + MetaStoreManagerFactory metaStoreManagerFactory, + AccessConfigProvider accessConfigProvider) { + defaultFileIOFactory = new DefaultFileIOFactory(metaStoreManagerFactory, accessConfigProvider); } @Override diff --git a/runtime/service/src/test/java/org/apache/polaris/service/catalog/generic/AbstractPolarisGenericTableCatalogTest.java b/runtime/service/src/test/java/org/apache/polaris/service/catalog/generic/AbstractPolarisGenericTableCatalogTest.java index af2efded58..5af3b1bc9d 100644 --- a/runtime/service/src/test/java/org/apache/polaris/service/catalog/generic/AbstractPolarisGenericTableCatalogTest.java +++ b/runtime/service/src/test/java/org/apache/polaris/service/catalog/generic/AbstractPolarisGenericTableCatalogTest.java @@ -67,6 +67,7 @@ import org.apache.polaris.service.admin.PolarisAdminService; import org.apache.polaris.service.catalog.PolarisPassthroughResolutionView; import org.apache.polaris.service.catalog.iceberg.IcebergCatalog; +import org.apache.polaris.service.catalog.io.AccessConfigProvider; import org.apache.polaris.service.catalog.io.DefaultFileIOFactory; import org.apache.polaris.service.catalog.io.FileIOFactory; import org.apache.polaris.service.config.ReservedProperties; @@ -120,6 +121,7 @@ public abstract class AbstractPolarisGenericTableCatalogTest { private PolarisPrincipal authenticatedRoot; private PolarisEntity catalogEntity; private SecurityContext securityContext; + private AccessConfigProvider accessConfigProvider; protected static final Schema SCHEMA = new Schema( @@ -156,6 +158,8 @@ public void before(TestInfo testInfo) { metaStoreManagerFactory.getOrCreateSession(realmContext), configurationStore); realmConfig = polarisContext.getRealmConfig(); + accessConfigProvider = + new AccessConfigProvider(storageCredentialCache, metaStoreManagerFactory); PrincipalEntity rootPrincipal = metaStoreManager.findRootPrincipal(polarisContext).orElseThrow(); @@ -211,7 +215,7 @@ public void before(TestInfo testInfo) { new PolarisPassthroughResolutionView( resolutionManifestFactory, securityContext, CATALOG_NAME); TaskExecutor taskExecutor = Mockito.mock(); - this.fileIOFactory = new DefaultFileIOFactory(storageCredentialCache, metaStoreManagerFactory); + this.fileIOFactory = new DefaultFileIOFactory(metaStoreManagerFactory, accessConfigProvider); StsClient stsClient = Mockito.mock(StsClient.class); when(stsClient.assumeRole(isA(AssumeRoleRequest.class))) diff --git a/runtime/service/src/test/java/org/apache/polaris/service/catalog/iceberg/AbstractIcebergCatalogTest.java b/runtime/service/src/test/java/org/apache/polaris/service/catalog/iceberg/AbstractIcebergCatalogTest.java index 369a672520..1212aed7b1 100644 --- a/runtime/service/src/test/java/org/apache/polaris/service/catalog/iceberg/AbstractIcebergCatalogTest.java +++ b/runtime/service/src/test/java/org/apache/polaris/service/catalog/iceberg/AbstractIcebergCatalogTest.java @@ -135,6 +135,7 @@ import org.apache.polaris.service.admin.PolarisAdminService; import org.apache.polaris.service.catalog.PolarisPassthroughResolutionView; import org.apache.polaris.service.catalog.Profiles; +import org.apache.polaris.service.catalog.io.AccessConfigProvider; import org.apache.polaris.service.catalog.io.DefaultFileIOFactory; import org.apache.polaris.service.catalog.io.ExceptionMappingFileIO; import org.apache.polaris.service.catalog.io.FileIOFactory; @@ -249,6 +250,7 @@ public Map getConfigOverrides() { private SecurityContext securityContext; private TestPolarisEventListener testPolarisEventListener; private ReservedProperties reservedProperties; + private AccessConfigProvider accessConfigProvider; @BeforeAll public static void setUpMocks() { @@ -286,7 +288,8 @@ public void before(TestInfo testInfo) { metaStoreManagerFactory.getOrCreateSession(realmContext), configurationStore); realmConfig = polarisContext.getRealmConfig(); - + accessConfigProvider = + new AccessConfigProvider(storageCredentialCache, metaStoreManagerFactory); EntityCache entityCache = createEntityCache(diagServices, realmConfig, metaStoreManager); resolverFactory = (securityContext, referenceCatalogName) -> @@ -352,7 +355,7 @@ public void before(TestInfo testInfo) { .build() .asCatalog(serviceIdentityProvider))); - this.fileIOFactory = new DefaultFileIOFactory(storageCredentialCache, metaStoreManagerFactory); + this.fileIOFactory = new DefaultFileIOFactory(metaStoreManagerFactory, accessConfigProvider); StsClient stsClient = Mockito.mock(StsClient.class); when(stsClient.assumeRole(isA(AssumeRoleRequest.class))) @@ -997,7 +1000,7 @@ public void testValidateNotificationFailToCreateFileIO() { final String tableLocation = "s3://externally-owned-bucket/validate_table/"; final String tableMetadataLocation = tableLocation + "metadata/"; FileIOFactory fileIOFactory = - spy(new DefaultFileIOFactory(storageCredentialCache, metaStoreManagerFactory)); + spy(new DefaultFileIOFactory(metaStoreManagerFactory, accessConfigProvider)); IcebergCatalog catalog = newIcebergCatalog(catalog().name(), metaStoreManager, fileIOFactory); catalog.initialize( CATALOG_NAME, @@ -1915,7 +1918,7 @@ public void testDropTableWithPurge() { .containsEntry(StorageAccessProperty.AWS_TOKEN.getPropertyName(), SESSION_TOKEN); FileIO fileIO = new TaskFileIOSupplier( - new DefaultFileIOFactory(storageCredentialCache, metaStoreManagerFactory)) + new DefaultFileIOFactory(metaStoreManagerFactory, accessConfigProvider)) .apply(taskEntity, TABLE, polarisContext); Assertions.assertThat(fileIO).isNotNull().isInstanceOf(ExceptionMappingFileIO.class); Assertions.assertThat(((ExceptionMappingFileIO) fileIO).getInnerIo()) @@ -2042,7 +2045,7 @@ static Stream testRetriableException() { @Test public void testFileIOWrapper() { MeasuredFileIOFactory measured = - new MeasuredFileIOFactory(storageCredentialCache, metaStoreManagerFactory); + new MeasuredFileIOFactory(metaStoreManagerFactory, accessConfigProvider); IcebergCatalog catalog = newIcebergCatalog(CATALOG_NAME, metaStoreManager, measured); catalog.initialize( CATALOG_NAME, diff --git a/runtime/service/src/test/java/org/apache/polaris/service/catalog/iceberg/AbstractIcebergCatalogViewTest.java b/runtime/service/src/test/java/org/apache/polaris/service/catalog/iceberg/AbstractIcebergCatalogViewTest.java index 97c31cdb51..9f2a99d422 100644 --- a/runtime/service/src/test/java/org/apache/polaris/service/catalog/iceberg/AbstractIcebergCatalogViewTest.java +++ b/runtime/service/src/test/java/org/apache/polaris/service/catalog/iceberg/AbstractIcebergCatalogViewTest.java @@ -60,6 +60,7 @@ import org.apache.polaris.service.admin.PolarisAdminService; import org.apache.polaris.service.catalog.PolarisPassthroughResolutionView; import org.apache.polaris.service.catalog.Profiles; +import org.apache.polaris.service.catalog.io.AccessConfigProvider; import org.apache.polaris.service.catalog.io.DefaultFileIOFactory; import org.apache.polaris.service.catalog.io.FileIOFactory; import org.apache.polaris.service.config.ReservedProperties; @@ -123,6 +124,7 @@ public Map getConfigOverrides() { private UserSecretsManager userSecretsManager; private PolarisCallContext polarisContext; private RealmConfig realmConfig; + private AccessConfigProvider accessConfigProvider; private TestPolarisEventListener testPolarisEventListener; @@ -163,7 +165,8 @@ public void before(TestInfo testInfo) { metaStoreManagerFactory.getOrCreateSession(realmContext), configurationStore); realmConfig = polarisContext.getRealmConfig(); - + accessConfigProvider = + new AccessConfigProvider(storageCredentialCache, metaStoreManagerFactory); PrincipalEntity rootPrincipal = metaStoreManager.findRootPrincipal(polarisContext).orElseThrow(); PolarisPrincipal authenticatedRoot = PolarisPrincipal.of(rootPrincipal, Set.of()); @@ -208,7 +211,7 @@ public void before(TestInfo testInfo) { new PolarisPassthroughResolutionView( resolutionManifestFactory, securityContext, CATALOG_NAME); FileIOFactory fileIOFactory = - new DefaultFileIOFactory(storageCredentialCache, metaStoreManagerFactory); + new DefaultFileIOFactory(metaStoreManagerFactory, accessConfigProvider); testPolarisEventListener = (TestPolarisEventListener) polarisEventListener; testPolarisEventListener.clear(); diff --git a/runtime/service/src/test/java/org/apache/polaris/service/catalog/iceberg/IcebergCatalogHandlerAuthzTest.java b/runtime/service/src/test/java/org/apache/polaris/service/catalog/iceberg/IcebergCatalogHandlerAuthzTest.java index 568c83c7df..48b4c35a65 100644 --- a/runtime/service/src/test/java/org/apache/polaris/service/catalog/iceberg/IcebergCatalogHandlerAuthzTest.java +++ b/runtime/service/src/test/java/org/apache/polaris/service/catalog/iceberg/IcebergCatalogHandlerAuthzTest.java @@ -1899,7 +1899,7 @@ public void testSendNotificationSufficientPrivileges() { resolverFactory, managerFactory, Mockito.mock(), - new DefaultFileIOFactory(storageCredentialCache, managerFactory), + new DefaultFileIOFactory(managerFactory, accessConfigProvider), polarisEventListener) { @Override public Catalog createCallContextCatalog( diff --git a/runtime/service/src/test/java/org/apache/polaris/service/catalog/io/FileIOFactoryTest.java b/runtime/service/src/test/java/org/apache/polaris/service/catalog/io/FileIOFactoryTest.java index d36e9a74fe..65b14f476c 100644 --- a/runtime/service/src/test/java/org/apache/polaris/service/catalog/io/FileIOFactoryTest.java +++ b/runtime/service/src/test/java/org/apache/polaris/service/catalog/io/FileIOFactoryTest.java @@ -102,9 +102,9 @@ public void before(TestInfo testInfo) { // Spy FileIOFactory and check if the credentials are passed to the FileIO TestServices.FileIOFactorySupplier fileIOFactorySupplier = - (storageCredentialCache, metaStoreManagerFactory) -> + (metaStoreManagerFactory, accessConfigProvider) -> Mockito.spy( - new DefaultFileIOFactory(storageCredentialCache, metaStoreManagerFactory) { + new DefaultFileIOFactory(metaStoreManagerFactory, accessConfigProvider) { @Override FileIO loadFileIOInternal( @Nonnull String ioImplClassName, @Nonnull Map properties) { diff --git a/runtime/service/src/test/java/org/apache/polaris/service/catalog/policy/AbstractPolicyCatalogTest.java b/runtime/service/src/test/java/org/apache/polaris/service/catalog/policy/AbstractPolicyCatalogTest.java index f430e2bffd..5dd12cc3e5 100644 --- a/runtime/service/src/test/java/org/apache/polaris/service/catalog/policy/AbstractPolicyCatalogTest.java +++ b/runtime/service/src/test/java/org/apache/polaris/service/catalog/policy/AbstractPolicyCatalogTest.java @@ -79,6 +79,7 @@ import org.apache.polaris.service.admin.PolarisAdminService; import org.apache.polaris.service.catalog.PolarisPassthroughResolutionView; import org.apache.polaris.service.catalog.iceberg.IcebergCatalog; +import org.apache.polaris.service.catalog.io.AccessConfigProvider; import org.apache.polaris.service.catalog.io.DefaultFileIOFactory; import org.apache.polaris.service.catalog.io.FileIOFactory; import org.apache.polaris.service.config.ReservedProperties; @@ -146,6 +147,7 @@ public abstract class AbstractPolicyCatalogTest { private PolarisPrincipal authenticatedRoot; private PolarisEntity catalogEntity; private SecurityContext securityContext; + private AccessConfigProvider accessConfigProvider; @BeforeAll public static void setUpMocks() { @@ -177,6 +179,8 @@ public void before(TestInfo testInfo) { metaStoreManagerFactory.getOrCreateSession(realmContext), configurationStore); realmConfig = polarisContext.getRealmConfig(); + accessConfigProvider = + new AccessConfigProvider(storageCredentialCache, metaStoreManagerFactory); PrincipalEntity rootPrincipal = metaStoreManager.findRootPrincipal(polarisContext).orElseThrow(); @@ -230,7 +234,7 @@ public void before(TestInfo testInfo) { new PolarisPassthroughResolutionView( resolutionManifestFactory, securityContext, CATALOG_NAME); TaskExecutor taskExecutor = Mockito.mock(); - this.fileIOFactory = new DefaultFileIOFactory(storageCredentialCache, metaStoreManagerFactory); + this.fileIOFactory = new DefaultFileIOFactory(metaStoreManagerFactory, accessConfigProvider); StsClient stsClient = Mockito.mock(StsClient.class); when(stsClient.assumeRole(isA(AssumeRoleRequest.class))) diff --git a/runtime/service/src/testFixtures/java/org/apache/polaris/service/TestServices.java b/runtime/service/src/testFixtures/java/org/apache/polaris/service/TestServices.java index b58cdd7712..c383ee72fa 100644 --- a/runtime/service/src/testFixtures/java/org/apache/polaris/service/TestServices.java +++ b/runtime/service/src/testFixtures/java/org/apache/polaris/service/TestServices.java @@ -117,7 +117,7 @@ public record TestServices( @FunctionalInterface public interface FileIOFactorySupplier - extends BiFunction {} + extends BiFunction {} private static class MockedConfigurationStore implements PolarisConfigurationStore { private final Map defaults; @@ -242,8 +242,10 @@ public TestServices build() { PolarisCredentialManager credentialManager = new DefaultPolarisCredentialManager(realmContext, mockCredentialVendors); + AccessConfigProvider accessConfigProvider = + new AccessConfigProvider(storageCredentialCache, metaStoreManagerFactory); FileIOFactory fileIOFactory = - fileIOFactorySupplier.apply(storageCredentialCache, metaStoreManagerFactory); + fileIOFactorySupplier.apply(metaStoreManagerFactory, accessConfigProvider); TaskExecutor taskExecutor = Mockito.mock(TaskExecutor.class); @@ -257,9 +259,6 @@ public TestServices build() { fileIOFactory, polarisEventListener); - AccessConfigProvider accessConfigProvider = - new AccessConfigProvider(storageCredentialCache, metaStoreManagerFactory); - ReservedProperties reservedProperties = ReservedProperties.NONE; CatalogHandlerUtils catalogHandlerUtils = new CatalogHandlerUtils(realmConfig); diff --git a/runtime/service/src/testFixtures/java/org/apache/polaris/service/catalog/io/MeasuredFileIOFactory.java b/runtime/service/src/testFixtures/java/org/apache/polaris/service/catalog/io/MeasuredFileIOFactory.java index c4bf40ca92..05fa4b1644 100644 --- a/runtime/service/src/testFixtures/java/org/apache/polaris/service/catalog/io/MeasuredFileIOFactory.java +++ b/runtime/service/src/testFixtures/java/org/apache/polaris/service/catalog/io/MeasuredFileIOFactory.java @@ -33,7 +33,6 @@ import org.apache.polaris.core.persistence.MetaStoreManagerFactory; import org.apache.polaris.core.persistence.PolarisResolvedPathWrapper; import org.apache.polaris.core.storage.PolarisStorageActions; -import org.apache.polaris.core.storage.cache.StorageCredentialCache; /** * A FileIOFactory that measures the number of bytes read, files written, and files deleted. It can @@ -53,10 +52,8 @@ public class MeasuredFileIOFactory implements FileIOFactory { @Inject public MeasuredFileIOFactory( - StorageCredentialCache storageCredentialCache, - MetaStoreManagerFactory metaStoreManagerFactory) { - defaultFileIOFactory = - new DefaultFileIOFactory(storageCredentialCache, metaStoreManagerFactory); + MetaStoreManagerFactory metaStoreManagerFactory, AccessConfigProvider accessConfigProvider) { + defaultFileIOFactory = new DefaultFileIOFactory(metaStoreManagerFactory, accessConfigProvider); } @Override From 97823a8f871379551ad9b05920b8db86eb1c9168 Mon Sep 17 00:00:00 2001 From: Nuoya Jiang Date: Tue, 21 Oct 2025 17:29:26 -0500 Subject: [PATCH 2/3] remove unnecessary map --- .../catalog/io/DefaultFileIOFactory.java | 29 +++++++------------ 1 file changed, 11 insertions(+), 18 deletions(-) diff --git a/runtime/service/src/main/java/org/apache/polaris/service/catalog/io/DefaultFileIOFactory.java b/runtime/service/src/main/java/org/apache/polaris/service/catalog/io/DefaultFileIOFactory.java index 15f87dbf96..06ae38cd16 100644 --- a/runtime/service/src/main/java/org/apache/polaris/service/catalog/io/DefaultFileIOFactory.java +++ b/runtime/service/src/main/java/org/apache/polaris/service/catalog/io/DefaultFileIOFactory.java @@ -32,7 +32,6 @@ import org.apache.iceberg.io.FileIO; import org.apache.polaris.core.context.CallContext; import org.apache.polaris.core.context.RealmContext; -import org.apache.polaris.core.entity.PolarisEntity; import org.apache.polaris.core.persistence.MetaStoreManagerFactory; import org.apache.polaris.core.persistence.PolarisResolvedPathWrapper; import org.apache.polaris.core.storage.AccessConfig; @@ -76,28 +75,22 @@ public FileIO loadFileIO( // Get subcoped creds properties = new HashMap<>(properties); - Optional storageInfoEntity = - FileIOUtil.findStorageInfoFromHierarchy(resolvedEntityPath); - Optional accessConfig = - storageInfoEntity.map( - storageInfo -> - accessConfigProvider.getAccessConfig( - callContext, - identifier, - tableLocations, - storageActions, - Optional.empty(), - resolvedEntityPath)); + AccessConfig accessConfig = + accessConfigProvider.getAccessConfig( + callContext, + identifier, + tableLocations, + storageActions, + Optional.empty(), + resolvedEntityPath); // Update the FileIO with the subscoped credentials // Update with properties in case there are table-level overrides the credentials should // always override table-level properties, since storage configuration will be found at // whatever entity defines it - if (accessConfig.isPresent()) { - properties.putAll(accessConfig.get().credentials()); - properties.putAll(accessConfig.get().extraProperties()); - properties.putAll(accessConfig.get().internalProperties()); - } + properties.putAll(accessConfig.credentials()); + properties.putAll(accessConfig.extraProperties()); + properties.putAll(accessConfig.internalProperties()); return loadFileIOInternal(ioImplClassName, properties); } From a080b38a4b599e49e75d4c05e3c8dc85798031b9 Mon Sep 17 00:00:00 2001 From: Nuoya Jiang Date: Tue, 21 Oct 2025 19:02:59 -0500 Subject: [PATCH 3/3] remove unnecessary metaStoreManagerFactory --- .../service/catalog/io/DefaultFileIOFactory.java | 11 +---------- .../catalog/io/WasbTranslatingFileIOFactory.java | 9 ++------- .../service/admin/PolarisS3InteroperabilityTest.java | 2 +- .../AbstractPolarisGenericTableCatalogTest.java | 2 +- .../catalog/iceberg/AbstractIcebergCatalogTest.java | 11 ++++------- .../iceberg/AbstractIcebergCatalogViewTest.java | 3 +-- .../iceberg/IcebergCatalogHandlerAuthzTest.java | 2 +- .../polaris/service/catalog/io/FileIOFactoryTest.java | 4 ++-- .../catalog/policy/AbstractPolicyCatalogTest.java | 2 +- .../java/org/apache/polaris/service/TestServices.java | 11 +++++------ .../service/catalog/io/MeasuredFileIOFactory.java | 6 ++---- 11 files changed, 21 insertions(+), 42 deletions(-) diff --git a/runtime/service/src/main/java/org/apache/polaris/service/catalog/io/DefaultFileIOFactory.java b/runtime/service/src/main/java/org/apache/polaris/service/catalog/io/DefaultFileIOFactory.java index 06ae38cd16..6a70fadae2 100644 --- a/runtime/service/src/main/java/org/apache/polaris/service/catalog/io/DefaultFileIOFactory.java +++ b/runtime/service/src/main/java/org/apache/polaris/service/catalog/io/DefaultFileIOFactory.java @@ -31,11 +31,8 @@ import org.apache.iceberg.catalog.TableIdentifier; import org.apache.iceberg.io.FileIO; import org.apache.polaris.core.context.CallContext; -import org.apache.polaris.core.context.RealmContext; -import org.apache.polaris.core.persistence.MetaStoreManagerFactory; import org.apache.polaris.core.persistence.PolarisResolvedPathWrapper; import org.apache.polaris.core.storage.AccessConfig; -import org.apache.polaris.core.storage.PolarisCredentialVendor; import org.apache.polaris.core.storage.PolarisStorageActions; /** @@ -50,13 +47,10 @@ @Identifier("default") public class DefaultFileIOFactory implements FileIOFactory { - private final MetaStoreManagerFactory metaStoreManagerFactory; private final AccessConfigProvider accessConfigProvider; @Inject - public DefaultFileIOFactory( - MetaStoreManagerFactory metaStoreManagerFactory, AccessConfigProvider accessConfigProvider) { - this.metaStoreManagerFactory = metaStoreManagerFactory; + public DefaultFileIOFactory(AccessConfigProvider accessConfigProvider) { this.accessConfigProvider = accessConfigProvider; } @@ -69,9 +63,6 @@ public FileIO loadFileIO( @Nonnull Set tableLocations, @Nonnull Set storageActions, @Nonnull PolarisResolvedPathWrapper resolvedEntityPath) { - RealmContext realmContext = callContext.getRealmContext(); - PolarisCredentialVendor credentialVendor = - metaStoreManagerFactory.getOrCreateMetaStoreManager(realmContext); // Get subcoped creds properties = new HashMap<>(properties); diff --git a/runtime/service/src/main/java/org/apache/polaris/service/catalog/io/WasbTranslatingFileIOFactory.java b/runtime/service/src/main/java/org/apache/polaris/service/catalog/io/WasbTranslatingFileIOFactory.java index 2b4b90588b..ffe8cc1fd2 100644 --- a/runtime/service/src/main/java/org/apache/polaris/service/catalog/io/WasbTranslatingFileIOFactory.java +++ b/runtime/service/src/main/java/org/apache/polaris/service/catalog/io/WasbTranslatingFileIOFactory.java @@ -27,10 +27,8 @@ import org.apache.iceberg.catalog.TableIdentifier; import org.apache.iceberg.io.FileIO; import org.apache.polaris.core.context.CallContext; -import org.apache.polaris.core.persistence.MetaStoreManagerFactory; import org.apache.polaris.core.persistence.PolarisResolvedPathWrapper; import org.apache.polaris.core.storage.PolarisStorageActions; -import org.apache.polaris.core.storage.cache.StorageCredentialCache; /** A {@link FileIOFactory} that translates WASB paths to ABFS ones */ @ApplicationScoped @@ -40,11 +38,8 @@ public class WasbTranslatingFileIOFactory implements FileIOFactory { private final FileIOFactory defaultFileIOFactory; @Inject - public WasbTranslatingFileIOFactory( - StorageCredentialCache storageCredentialCache, - MetaStoreManagerFactory metaStoreManagerFactory, - AccessConfigProvider accessConfigProvider) { - defaultFileIOFactory = new DefaultFileIOFactory(metaStoreManagerFactory, accessConfigProvider); + public WasbTranslatingFileIOFactory(AccessConfigProvider accessConfigProvider) { + defaultFileIOFactory = new DefaultFileIOFactory(accessConfigProvider); } @Override diff --git a/runtime/service/src/test/java/org/apache/polaris/service/admin/PolarisS3InteroperabilityTest.java b/runtime/service/src/test/java/org/apache/polaris/service/admin/PolarisS3InteroperabilityTest.java index d7b4abc8c9..4ab75815ae 100644 --- a/runtime/service/src/test/java/org/apache/polaris/service/admin/PolarisS3InteroperabilityTest.java +++ b/runtime/service/src/test/java/org/apache/polaris/service/admin/PolarisS3InteroperabilityTest.java @@ -73,7 +73,7 @@ private static String makeTableLocation( public PolarisS3InteroperabilityTest() { TestServices.FileIOFactorySupplier fileIOFactorySupplier = - (storageCredentialCache, metaStoreManagerFactory) -> + (accessConfigProvider) -> (FileIOFactory) (callContext, ioImplClassName, diff --git a/runtime/service/src/test/java/org/apache/polaris/service/catalog/generic/AbstractPolarisGenericTableCatalogTest.java b/runtime/service/src/test/java/org/apache/polaris/service/catalog/generic/AbstractPolarisGenericTableCatalogTest.java index 5af3b1bc9d..4f2ce23afc 100644 --- a/runtime/service/src/test/java/org/apache/polaris/service/catalog/generic/AbstractPolarisGenericTableCatalogTest.java +++ b/runtime/service/src/test/java/org/apache/polaris/service/catalog/generic/AbstractPolarisGenericTableCatalogTest.java @@ -215,7 +215,7 @@ public void before(TestInfo testInfo) { new PolarisPassthroughResolutionView( resolutionManifestFactory, securityContext, CATALOG_NAME); TaskExecutor taskExecutor = Mockito.mock(); - this.fileIOFactory = new DefaultFileIOFactory(metaStoreManagerFactory, accessConfigProvider); + this.fileIOFactory = new DefaultFileIOFactory(accessConfigProvider); StsClient stsClient = Mockito.mock(StsClient.class); when(stsClient.assumeRole(isA(AssumeRoleRequest.class))) diff --git a/runtime/service/src/test/java/org/apache/polaris/service/catalog/iceberg/AbstractIcebergCatalogTest.java b/runtime/service/src/test/java/org/apache/polaris/service/catalog/iceberg/AbstractIcebergCatalogTest.java index 1212aed7b1..cc7054ff1c 100644 --- a/runtime/service/src/test/java/org/apache/polaris/service/catalog/iceberg/AbstractIcebergCatalogTest.java +++ b/runtime/service/src/test/java/org/apache/polaris/service/catalog/iceberg/AbstractIcebergCatalogTest.java @@ -355,7 +355,7 @@ public void before(TestInfo testInfo) { .build() .asCatalog(serviceIdentityProvider))); - this.fileIOFactory = new DefaultFileIOFactory(metaStoreManagerFactory, accessConfigProvider); + this.fileIOFactory = new DefaultFileIOFactory(accessConfigProvider); StsClient stsClient = Mockito.mock(StsClient.class); when(stsClient.assumeRole(isA(AssumeRoleRequest.class))) @@ -999,8 +999,7 @@ public void testValidateNotificationFailToCreateFileIO() { // filename. final String tableLocation = "s3://externally-owned-bucket/validate_table/"; final String tableMetadataLocation = tableLocation + "metadata/"; - FileIOFactory fileIOFactory = - spy(new DefaultFileIOFactory(metaStoreManagerFactory, accessConfigProvider)); + FileIOFactory fileIOFactory = spy(new DefaultFileIOFactory(accessConfigProvider)); IcebergCatalog catalog = newIcebergCatalog(catalog().name(), metaStoreManager, fileIOFactory); catalog.initialize( CATALOG_NAME, @@ -1917,8 +1916,7 @@ public void testDropTableWithPurge() { .containsEntry(StorageAccessProperty.AWS_SECRET_KEY.getPropertyName(), SECRET_ACCESS_KEY) .containsEntry(StorageAccessProperty.AWS_TOKEN.getPropertyName(), SESSION_TOKEN); FileIO fileIO = - new TaskFileIOSupplier( - new DefaultFileIOFactory(metaStoreManagerFactory, accessConfigProvider)) + new TaskFileIOSupplier(new DefaultFileIOFactory(accessConfigProvider)) .apply(taskEntity, TABLE, polarisContext); Assertions.assertThat(fileIO).isNotNull().isInstanceOf(ExceptionMappingFileIO.class); Assertions.assertThat(((ExceptionMappingFileIO) fileIO).getInnerIo()) @@ -2044,8 +2042,7 @@ static Stream testRetriableException() { @Test public void testFileIOWrapper() { - MeasuredFileIOFactory measured = - new MeasuredFileIOFactory(metaStoreManagerFactory, accessConfigProvider); + MeasuredFileIOFactory measured = new MeasuredFileIOFactory(accessConfigProvider); IcebergCatalog catalog = newIcebergCatalog(CATALOG_NAME, metaStoreManager, measured); catalog.initialize( CATALOG_NAME, diff --git a/runtime/service/src/test/java/org/apache/polaris/service/catalog/iceberg/AbstractIcebergCatalogViewTest.java b/runtime/service/src/test/java/org/apache/polaris/service/catalog/iceberg/AbstractIcebergCatalogViewTest.java index 9f2a99d422..d6fc350050 100644 --- a/runtime/service/src/test/java/org/apache/polaris/service/catalog/iceberg/AbstractIcebergCatalogViewTest.java +++ b/runtime/service/src/test/java/org/apache/polaris/service/catalog/iceberg/AbstractIcebergCatalogViewTest.java @@ -210,8 +210,7 @@ public void before(TestInfo testInfo) { PolarisPassthroughResolutionView passthroughView = new PolarisPassthroughResolutionView( resolutionManifestFactory, securityContext, CATALOG_NAME); - FileIOFactory fileIOFactory = - new DefaultFileIOFactory(metaStoreManagerFactory, accessConfigProvider); + FileIOFactory fileIOFactory = new DefaultFileIOFactory(accessConfigProvider); testPolarisEventListener = (TestPolarisEventListener) polarisEventListener; testPolarisEventListener.clear(); diff --git a/runtime/service/src/test/java/org/apache/polaris/service/catalog/iceberg/IcebergCatalogHandlerAuthzTest.java b/runtime/service/src/test/java/org/apache/polaris/service/catalog/iceberg/IcebergCatalogHandlerAuthzTest.java index 48b4c35a65..f3cd56162d 100644 --- a/runtime/service/src/test/java/org/apache/polaris/service/catalog/iceberg/IcebergCatalogHandlerAuthzTest.java +++ b/runtime/service/src/test/java/org/apache/polaris/service/catalog/iceberg/IcebergCatalogHandlerAuthzTest.java @@ -1899,7 +1899,7 @@ public void testSendNotificationSufficientPrivileges() { resolverFactory, managerFactory, Mockito.mock(), - new DefaultFileIOFactory(managerFactory, accessConfigProvider), + new DefaultFileIOFactory(accessConfigProvider), polarisEventListener) { @Override public Catalog createCallContextCatalog( diff --git a/runtime/service/src/test/java/org/apache/polaris/service/catalog/io/FileIOFactoryTest.java b/runtime/service/src/test/java/org/apache/polaris/service/catalog/io/FileIOFactoryTest.java index 65b14f476c..53ebebf7a6 100644 --- a/runtime/service/src/test/java/org/apache/polaris/service/catalog/io/FileIOFactoryTest.java +++ b/runtime/service/src/test/java/org/apache/polaris/service/catalog/io/FileIOFactoryTest.java @@ -102,9 +102,9 @@ public void before(TestInfo testInfo) { // Spy FileIOFactory and check if the credentials are passed to the FileIO TestServices.FileIOFactorySupplier fileIOFactorySupplier = - (metaStoreManagerFactory, accessConfigProvider) -> + (accessConfigProvider) -> Mockito.spy( - new DefaultFileIOFactory(metaStoreManagerFactory, accessConfigProvider) { + new DefaultFileIOFactory(accessConfigProvider) { @Override FileIO loadFileIOInternal( @Nonnull String ioImplClassName, @Nonnull Map properties) { diff --git a/runtime/service/src/test/java/org/apache/polaris/service/catalog/policy/AbstractPolicyCatalogTest.java b/runtime/service/src/test/java/org/apache/polaris/service/catalog/policy/AbstractPolicyCatalogTest.java index 5dd12cc3e5..f03afecdbe 100644 --- a/runtime/service/src/test/java/org/apache/polaris/service/catalog/policy/AbstractPolicyCatalogTest.java +++ b/runtime/service/src/test/java/org/apache/polaris/service/catalog/policy/AbstractPolicyCatalogTest.java @@ -234,7 +234,7 @@ public void before(TestInfo testInfo) { new PolarisPassthroughResolutionView( resolutionManifestFactory, securityContext, CATALOG_NAME); TaskExecutor taskExecutor = Mockito.mock(); - this.fileIOFactory = new DefaultFileIOFactory(metaStoreManagerFactory, accessConfigProvider); + this.fileIOFactory = new DefaultFileIOFactory(accessConfigProvider); StsClient stsClient = Mockito.mock(StsClient.class); when(stsClient.assumeRole(isA(AssumeRoleRequest.class))) diff --git a/runtime/service/src/testFixtures/java/org/apache/polaris/service/TestServices.java b/runtime/service/src/testFixtures/java/org/apache/polaris/service/TestServices.java index c383ee72fa..a6fa48ef85 100644 --- a/runtime/service/src/testFixtures/java/org/apache/polaris/service/TestServices.java +++ b/runtime/service/src/testFixtures/java/org/apache/polaris/service/TestServices.java @@ -34,7 +34,7 @@ import java.util.Map; import java.util.Optional; import java.util.Set; -import java.util.function.BiFunction; +import java.util.function.Function; import org.apache.polaris.core.PolarisCallContext; import org.apache.polaris.core.PolarisDefaultDiagServiceImpl; import org.apache.polaris.core.PolarisDiagnostics; @@ -116,8 +116,7 @@ public record TestServices( private static final String GCP_ACCESS_TOKEN = "abc"; @FunctionalInterface - public interface FileIOFactorySupplier - extends BiFunction {} + public interface FileIOFactorySupplier extends Function {} private static class MockedConfigurationStore implements PolarisConfigurationStore { private final Map defaults; @@ -144,7 +143,8 @@ public static class Builder { private RealmContext realmContext = TEST_REALM; private Map config = Map.of(); private StsClient stsClient; - private FileIOFactorySupplier fileIOFactorySupplier = MeasuredFileIOFactory::new; + private FileIOFactorySupplier fileIOFactorySupplier = + metaStoreManagerFactory1 -> new MeasuredFileIOFactory(metaStoreManagerFactory1); private Builder() { stsClient = Mockito.mock(StsClient.class, RETURNS_DEEP_STUBS); @@ -244,8 +244,7 @@ public TestServices build() { AccessConfigProvider accessConfigProvider = new AccessConfigProvider(storageCredentialCache, metaStoreManagerFactory); - FileIOFactory fileIOFactory = - fileIOFactorySupplier.apply(metaStoreManagerFactory, accessConfigProvider); + FileIOFactory fileIOFactory = fileIOFactorySupplier.apply(accessConfigProvider); TaskExecutor taskExecutor = Mockito.mock(TaskExecutor.class); diff --git a/runtime/service/src/testFixtures/java/org/apache/polaris/service/catalog/io/MeasuredFileIOFactory.java b/runtime/service/src/testFixtures/java/org/apache/polaris/service/catalog/io/MeasuredFileIOFactory.java index 05fa4b1644..04d6878a2e 100644 --- a/runtime/service/src/testFixtures/java/org/apache/polaris/service/catalog/io/MeasuredFileIOFactory.java +++ b/runtime/service/src/testFixtures/java/org/apache/polaris/service/catalog/io/MeasuredFileIOFactory.java @@ -30,7 +30,6 @@ import org.apache.iceberg.catalog.TableIdentifier; import org.apache.iceberg.io.FileIO; import org.apache.polaris.core.context.CallContext; -import org.apache.polaris.core.persistence.MetaStoreManagerFactory; import org.apache.polaris.core.persistence.PolarisResolvedPathWrapper; import org.apache.polaris.core.storage.PolarisStorageActions; @@ -51,9 +50,8 @@ public class MeasuredFileIOFactory implements FileIOFactory { private final FileIOFactory defaultFileIOFactory; @Inject - public MeasuredFileIOFactory( - MetaStoreManagerFactory metaStoreManagerFactory, AccessConfigProvider accessConfigProvider) { - defaultFileIOFactory = new DefaultFileIOFactory(metaStoreManagerFactory, accessConfigProvider); + public MeasuredFileIOFactory(AccessConfigProvider accessConfigProvider) { + defaultFileIOFactory = new DefaultFileIOFactory(accessConfigProvider); } @Override