diff --git a/polaris-core/src/main/java/org/apache/polaris/core/rest/PolarisEndpoints.java b/polaris-core/src/main/java/org/apache/polaris/core/rest/PolarisEndpoints.java index b389fd92f9..2bae38ff7e 100644 --- a/polaris-core/src/main/java/org/apache/polaris/core/rest/PolarisEndpoints.java +++ b/polaris-core/src/main/java/org/apache/polaris/core/rest/PolarisEndpoints.java @@ -22,7 +22,7 @@ import java.util.Set; import org.apache.iceberg.rest.Endpoint; import org.apache.polaris.core.config.FeatureConfiguration; -import org.apache.polaris.core.context.CallContext; +import org.apache.polaris.core.config.RealmConfig; public class PolarisEndpoints { // Generic table endpoints @@ -77,10 +77,9 @@ public class PolarisEndpoints { * Get the generic table endpoints. Returns GENERIC_TABLE_ENDPOINTS if ENABLE_GENERIC_TABLES is * set to true, otherwise, returns an empty set. */ - public static Set getSupportedGenericTableEndpoints(CallContext callContext) { + public static Set getSupportedGenericTableEndpoints(RealmConfig realmConfig) { // add the generic table endpoints as supported endpoints if generic table feature is enabled. - boolean genericTableEnabled = - callContext.getRealmConfig().getConfig(FeatureConfiguration.ENABLE_GENERIC_TABLES); + boolean genericTableEnabled = realmConfig.getConfig(FeatureConfiguration.ENABLE_GENERIC_TABLES); return genericTableEnabled ? GENERIC_TABLE_ENDPOINTS : ImmutableSet.of(); } @@ -89,9 +88,8 @@ public static Set getSupportedGenericTableEndpoints(CallContext callCo * Get the policy store endpoints. Returns POLICY_ENDPOINTS if ENABLE_POLICY_STORE is set to true, * otherwise, returns an empty set */ - public static Set getSupportedPolicyEndpoints(CallContext callContext) { - boolean policyStoreEnabled = - callContext.getRealmConfig().getConfig(FeatureConfiguration.ENABLE_POLICY_STORE); + public static Set getSupportedPolicyEndpoints(RealmConfig realmConfig) { + boolean policyStoreEnabled = realmConfig.getConfig(FeatureConfiguration.ENABLE_POLICY_STORE); return policyStoreEnabled ? POLICY_STORE_ENDPOINTS : ImmutableSet.of(); } } diff --git a/runtime/service/src/main/java/org/apache/polaris/service/catalog/iceberg/IcebergCatalog.java b/runtime/service/src/main/java/org/apache/polaris/service/catalog/iceberg/IcebergCatalog.java index 310a3cd328..6a6e945c33 100644 --- a/runtime/service/src/main/java/org/apache/polaris/service/catalog/iceberg/IcebergCatalog.java +++ b/runtime/service/src/main/java/org/apache/polaris/service/catalog/iceberg/IcebergCatalog.java @@ -256,7 +256,7 @@ public void initialize(String name, Map properties) { var storageConfigurationInfo = catalogEntity.getStorageConfigurationInfo(); ioImplClassName = IcebergPropertiesValidation.determineFileIOClassName( - callContext, properties, storageConfigurationInfo); + callContext.getRealmConfig(), properties, storageConfigurationInfo); if (ioImplClassName == null) { LOGGER.warn( diff --git a/runtime/service/src/main/java/org/apache/polaris/service/catalog/iceberg/IcebergCatalogAdapter.java b/runtime/service/src/main/java/org/apache/polaris/service/catalog/iceberg/IcebergCatalogAdapter.java index 99aea64d9b..5023f99f7a 100644 --- a/runtime/service/src/main/java/org/apache/polaris/service/catalog/iceberg/IcebergCatalogAdapter.java +++ b/runtime/service/src/main/java/org/apache/polaris/service/catalog/iceberg/IcebergCatalogAdapter.java @@ -61,6 +61,7 @@ import org.apache.iceberg.rest.responses.LoadTableResponse; import org.apache.polaris.core.auth.AuthenticatedPolarisPrincipal; import org.apache.polaris.core.auth.PolarisAuthorizer; +import org.apache.polaris.core.config.RealmConfig; import org.apache.polaris.core.context.CallContext; import org.apache.polaris.core.context.RealmContext; import org.apache.polaris.core.entity.PolarisEntity; @@ -135,6 +136,7 @@ public class IcebergCatalogAdapter private final RealmContext realmContext; private final CallContext callContext; + private final RealmConfig realmConfig; private final CallContextCatalogFactory catalogFactory; private final ResolutionManifestFactory resolutionManifestFactory; private final ResolverFactory resolverFactory; @@ -160,6 +162,7 @@ public IcebergCatalogAdapter( CatalogHandlerUtils catalogHandlerUtils) { this.realmContext = realmContext; this.callContext = callContext; + this.realmConfig = callContext.getRealmConfig(); this.catalogFactory = catalogFactory; this.resolutionManifestFactory = resolutionManifestFactory; this.resolverFactory = resolverFactory; @@ -214,7 +217,7 @@ public Response createNamespace( CreateNamespaceRequest createNamespaceRequest, RealmContext realmContext, SecurityContext securityContext) { - validateIcebergProperties(callContext, createNamespaceRequest.properties()); + validateIcebergProperties(realmConfig, createNamespaceRequest.properties()); return withCatalog( securityContext, prefix, @@ -306,7 +309,7 @@ public Response updateProperties( UpdateNamespacePropertiesRequest updateNamespacePropertiesRequest, RealmContext realmContext, SecurityContext securityContext) { - validateIcebergProperties(callContext, updateNamespacePropertiesRequest.updates()); + validateIcebergProperties(realmConfig, updateNamespacePropertiesRequest.updates()); Namespace ns = decodeNamespace(namespace); UpdateNamespacePropertiesRequest revisedRequest = UpdateNamespacePropertiesRequest.builder() @@ -341,7 +344,7 @@ public Response createTable( String accessDelegationMode, RealmContext realmContext, SecurityContext securityContext) { - validateIcebergProperties(callContext, createTableRequest.properties()); + validateIcebergProperties(realmConfig, createTableRequest.properties()); EnumSet delegationModes = parseAccessDelegationModes(accessDelegationMode); Namespace ns = decodeNamespace(namespace); @@ -516,7 +519,7 @@ public Response updateTable( commitTableRequest.updates().stream() .filter(MetadataUpdate.SetProperties.class::isInstance) .map(MetadataUpdate.SetProperties.class::cast) - .forEach(setProperties -> validateIcebergProperties(callContext, setProperties.updated())); + .forEach(setProperties -> validateIcebergProperties(realmConfig, setProperties.updated())); UpdateTableRequest revisedRequest = UpdateTableRequest.create( @@ -547,7 +550,7 @@ public Response createView( CreateViewRequest createViewRequest, RealmContext realmContext, SecurityContext securityContext) { - validateIcebergProperties(callContext, createViewRequest.properties()); + validateIcebergProperties(realmConfig, createViewRequest.properties()); CreateViewRequest revisedRequest = ImmutableCreateViewRequest.copyOf(createViewRequest) @@ -695,7 +698,7 @@ public Response commitTransaction( .flatMap(updateTableRequest -> updateTableRequest.updates().stream()) .filter(MetadataUpdate.SetProperties.class::isInstance) .map(MetadataUpdate.SetProperties.class::cast) - .forEach(setProperties -> validateIcebergProperties(callContext, setProperties.updated())); + .forEach(setProperties -> validateIcebergProperties(realmConfig, setProperties.updated())); CommitTransactionRequest revisedRequest = new CommitTransactionRequest( @@ -791,8 +794,8 @@ public Response getConfig( .addAll(DEFAULT_ENDPOINTS) .addAll(VIEW_ENDPOINTS) .addAll(COMMIT_ENDPOINT) - .addAll(PolarisEndpoints.getSupportedGenericTableEndpoints(callContext)) - .addAll(PolarisEndpoints.getSupportedPolicyEndpoints(callContext)) + .addAll(PolarisEndpoints.getSupportedGenericTableEndpoints(realmConfig)) + .addAll(PolarisEndpoints.getSupportedPolicyEndpoints(realmConfig)) .build()) .build()) .build(); diff --git a/runtime/service/src/main/java/org/apache/polaris/service/catalog/validation/IcebergPropertiesValidation.java b/runtime/service/src/main/java/org/apache/polaris/service/catalog/validation/IcebergPropertiesValidation.java index bc44e032d3..7be203435b 100644 --- a/runtime/service/src/main/java/org/apache/polaris/service/catalog/validation/IcebergPropertiesValidation.java +++ b/runtime/service/src/main/java/org/apache/polaris/service/catalog/validation/IcebergPropertiesValidation.java @@ -27,7 +27,7 @@ import java.util.Map; import org.apache.iceberg.CatalogProperties; import org.apache.iceberg.exceptions.ValidationException; -import org.apache.polaris.core.context.CallContext; +import org.apache.polaris.core.config.RealmConfig; import org.apache.polaris.core.storage.PolarisStorageConfigurationInfo; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -36,15 +36,14 @@ public class IcebergPropertiesValidation { private static final Logger LOGGER = LoggerFactory.getLogger(IcebergPropertiesValidation.class); public static void validateIcebergProperties( - @Nonnull CallContext callContext, @Nonnull Map properties) { - determineFileIOClassName(callContext, properties, null); + @Nonnull RealmConfig realmConfig, @Nonnull Map properties) { + determineFileIOClassName(realmConfig, properties, null); } public static String determineFileIOClassName( - @Nonnull CallContext callContext, + @Nonnull RealmConfig realmConfig, @Nonnull Map properties, @Nullable PolarisStorageConfigurationInfo storageConfigurationInfo) { - var realmConfig = callContext.getPolarisCallContext().getRealmConfig(); var ioImpl = properties.get(CatalogProperties.FILE_IO_IMPL); if (ioImpl != null) {