This is an automated email from the ASF dual-hosted git repository. yufei 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 fcd629a4d Generic Table/Policy Store: Move feature config check to Adapter and some small refactoring (#1465) fcd629a4d is described below commit fcd629a4dc325465651ec96154c510416d570720 Author: Honah (Jonas) J. <hon...@apache.org> AuthorDate: Fri Apr 25 15:29:16 2025 -0500 Generic Table/Policy Store: Move feature config check to Adapter and some small refactoring (#1465) --- .../service/catalog/common/CatalogAdapter.java | 10 ++++++++++ .../generic/GenericTableCatalogAdapter.java | 23 +++++++++++++--------- .../generic/GenericTableCatalogHandler.java | 14 ------------- .../catalog/iceberg/IcebergCatalogAdapter.java | 6 +----- .../catalog/policy/PolicyCatalogAdapter.java | 10 ++++------ .../catalog/policy/PolicyCatalogHandler.java | 3 --- 6 files changed, 29 insertions(+), 37 deletions(-) diff --git a/service/common/src/main/java/org/apache/polaris/service/catalog/common/CatalogAdapter.java b/service/common/src/main/java/org/apache/polaris/service/catalog/common/CatalogAdapter.java index 56be4d925..c2b60fbff 100644 --- a/service/common/src/main/java/org/apache/polaris/service/catalog/common/CatalogAdapter.java +++ b/service/common/src/main/java/org/apache/polaris/service/catalog/common/CatalogAdapter.java @@ -18,10 +18,13 @@ */ package org.apache.polaris.service.catalog.common; +import jakarta.ws.rs.core.SecurityContext; import java.net.URLEncoder; import java.nio.charset.Charset; import org.apache.iceberg.catalog.Namespace; +import org.apache.iceberg.exceptions.NotAuthorizedException; import org.apache.iceberg.rest.RESTUtil; +import org.apache.polaris.core.auth.AuthenticatedPolarisPrincipal; /** * A common interface for adapters between the REST interface and {@link CatalogHandler} @@ -31,4 +34,11 @@ public interface CatalogAdapter { default Namespace decodeNamespace(String namespace) { return RESTUtil.decodeNamespace(URLEncoder.encode(namespace, Charset.defaultCharset())); } + + default void validatePrincipal(SecurityContext securityContext) { + var authenticatedPrincipal = (AuthenticatedPolarisPrincipal) securityContext.getUserPrincipal(); + if (authenticatedPrincipal == null) { + throw new NotAuthorizedException("Failed to find authenticatedPrincipal in SecurityContext"); + } + } } diff --git a/service/common/src/main/java/org/apache/polaris/service/catalog/generic/GenericTableCatalogAdapter.java b/service/common/src/main/java/org/apache/polaris/service/catalog/generic/GenericTableCatalogAdapter.java index bfd296904..f7e325b07 100644 --- a/service/common/src/main/java/org/apache/polaris/service/catalog/generic/GenericTableCatalogAdapter.java +++ b/service/common/src/main/java/org/apache/polaris/service/catalog/generic/GenericTableCatalogAdapter.java @@ -23,13 +23,13 @@ import jakarta.inject.Inject; import jakarta.ws.rs.core.Response; import jakarta.ws.rs.core.SecurityContext; import org.apache.iceberg.catalog.TableIdentifier; -import org.apache.iceberg.exceptions.NotAuthorizedException; -import org.apache.polaris.core.auth.AuthenticatedPolarisPrincipal; import org.apache.polaris.core.auth.PolarisAuthorizer; +import org.apache.polaris.core.config.FeatureConfiguration; import org.apache.polaris.core.context.CallContext; import org.apache.polaris.core.context.RealmContext; import org.apache.polaris.core.persistence.PolarisEntityManager; import org.apache.polaris.core.persistence.PolarisMetaStoreManager; +import org.apache.polaris.service.catalog.CatalogPrefixParser; import org.apache.polaris.service.catalog.api.PolarisCatalogGenericTableApiService; import org.apache.polaris.service.catalog.common.CatalogAdapter; import org.apache.polaris.service.types.CreateGenericTableRequest; @@ -44,36 +44,41 @@ public class GenericTableCatalogAdapter private static final Logger LOGGER = LoggerFactory.getLogger(GenericTableCatalogAdapter.class); + private final RealmContext realmContext; private final CallContext callContext; private final PolarisEntityManager entityManager; private final PolarisMetaStoreManager metaStoreManager; private final PolarisAuthorizer polarisAuthorizer; + private final CatalogPrefixParser prefixParser; @Inject public GenericTableCatalogAdapter( + RealmContext realmContext, CallContext callContext, PolarisEntityManager entityManager, PolarisMetaStoreManager metaStoreManager, - PolarisAuthorizer polarisAuthorizer) { + PolarisAuthorizer polarisAuthorizer, + CatalogPrefixParser prefixParser) { + this.realmContext = realmContext; this.callContext = callContext; this.entityManager = entityManager; this.metaStoreManager = metaStoreManager; this.polarisAuthorizer = polarisAuthorizer; + this.prefixParser = prefixParser; } private GenericTableCatalogHandler newHandlerWrapper( - SecurityContext securityContext, String catalogName) { - var authenticatedPrincipal = (AuthenticatedPolarisPrincipal) securityContext.getUserPrincipal(); - if (authenticatedPrincipal == null) { - throw new NotAuthorizedException("Failed to find authenticatedPrincipal in SecurityContext"); - } + SecurityContext securityContext, String prefix) { + FeatureConfiguration.enforceFeatureEnabledOrThrow( + callContext, FeatureConfiguration.ENABLE_GENERIC_TABLES); + validatePrincipal(securityContext); return new GenericTableCatalogHandler( callContext, entityManager, metaStoreManager, securityContext, - catalogName, + prefixParser.prefixToCatalogName(realmContext, prefix), polarisAuthorizer); } diff --git a/service/common/src/main/java/org/apache/polaris/service/catalog/generic/GenericTableCatalogHandler.java b/service/common/src/main/java/org/apache/polaris/service/catalog/generic/GenericTableCatalogHandler.java index b1f2648f1..7f6d48cc6 100644 --- a/service/common/src/main/java/org/apache/polaris/service/catalog/generic/GenericTableCatalogHandler.java +++ b/service/common/src/main/java/org/apache/polaris/service/catalog/generic/GenericTableCatalogHandler.java @@ -25,7 +25,6 @@ import org.apache.iceberg.catalog.Namespace; import org.apache.iceberg.catalog.TableIdentifier; import org.apache.polaris.core.auth.PolarisAuthorizableOperation; import org.apache.polaris.core.auth.PolarisAuthorizer; -import org.apache.polaris.core.config.FeatureConfiguration; import org.apache.polaris.core.context.CallContext; import org.apache.polaris.core.entity.PolarisEntitySubType; import org.apache.polaris.core.entity.table.GenericTableEntity; @@ -53,21 +52,8 @@ public class GenericTableCatalogHandler extends CatalogHandler { this.metaStoreManager = metaStoreManager; } - public void enforceGenericTablesEnabledOrThrow() { - boolean enabled = - callContext - .getPolarisCallContext() - .getConfigurationStore() - .getConfiguration( - callContext.getPolarisCallContext(), FeatureConfiguration.ENABLE_GENERIC_TABLES); - if (!enabled) { - throw new UnsupportedOperationException("Generic table support is not enabled"); - } - } - @Override protected void initializeCatalog() { - enforceGenericTablesEnabledOrThrow(); this.genericTableCatalog = new GenericTableCatalog(metaStoreManager, callContext, this.resolutionManifest); } diff --git a/service/common/src/main/java/org/apache/polaris/service/catalog/iceberg/IcebergCatalogAdapter.java b/service/common/src/main/java/org/apache/polaris/service/catalog/iceberg/IcebergCatalogAdapter.java index e2dcefc0b..d1c930bf4 100644 --- a/service/common/src/main/java/org/apache/polaris/service/catalog/iceberg/IcebergCatalogAdapter.java +++ b/service/common/src/main/java/org/apache/polaris/service/catalog/iceberg/IcebergCatalogAdapter.java @@ -182,11 +182,7 @@ public class IcebergCatalogAdapter private IcebergCatalogHandler newHandlerWrapper( SecurityContext securityContext, String catalogName) { - AuthenticatedPolarisPrincipal authenticatedPrincipal = - (AuthenticatedPolarisPrincipal) securityContext.getUserPrincipal(); - if (authenticatedPrincipal == null) { - throw new NotAuthorizedException("Failed to find authenticatedPrincipal in SecurityContext"); - } + validatePrincipal(securityContext); return new IcebergCatalogHandler( callContext, diff --git a/service/common/src/main/java/org/apache/polaris/service/catalog/policy/PolicyCatalogAdapter.java b/service/common/src/main/java/org/apache/polaris/service/catalog/policy/PolicyCatalogAdapter.java index fe70d00a8..ef000add5 100644 --- a/service/common/src/main/java/org/apache/polaris/service/catalog/policy/PolicyCatalogAdapter.java +++ b/service/common/src/main/java/org/apache/polaris/service/catalog/policy/PolicyCatalogAdapter.java @@ -23,10 +23,9 @@ import jakarta.inject.Inject; import jakarta.ws.rs.core.Response; import jakarta.ws.rs.core.SecurityContext; import org.apache.iceberg.catalog.Namespace; -import org.apache.iceberg.exceptions.NotAuthorizedException; import org.apache.iceberg.rest.RESTUtil; -import org.apache.polaris.core.auth.AuthenticatedPolarisPrincipal; import org.apache.polaris.core.auth.PolarisAuthorizer; +import org.apache.polaris.core.config.FeatureConfiguration; import org.apache.polaris.core.context.CallContext; import org.apache.polaris.core.context.RealmContext; import org.apache.polaris.core.persistence.PolarisEntityManager; @@ -74,10 +73,9 @@ public class PolicyCatalogAdapter implements PolarisCatalogPolicyApiService, Cat } private PolicyCatalogHandler newHandlerWrapper(SecurityContext securityContext, String prefix) { - var authenticatedPrincipal = (AuthenticatedPolarisPrincipal) securityContext.getUserPrincipal(); - if (authenticatedPrincipal == null) { - throw new NotAuthorizedException("Failed to find authenticatedPrincipal in SecurityContext"); - } + FeatureConfiguration.enforceFeatureEnabledOrThrow( + callContext, FeatureConfiguration.ENABLE_POLICY_STORE); + validatePrincipal(securityContext); return new PolicyCatalogHandler( callContext, diff --git a/service/common/src/main/java/org/apache/polaris/service/catalog/policy/PolicyCatalogHandler.java b/service/common/src/main/java/org/apache/polaris/service/catalog/policy/PolicyCatalogHandler.java index 8273256ba..f4dea27b4 100644 --- a/service/common/src/main/java/org/apache/polaris/service/catalog/policy/PolicyCatalogHandler.java +++ b/service/common/src/main/java/org/apache/polaris/service/catalog/policy/PolicyCatalogHandler.java @@ -32,7 +32,6 @@ import org.apache.iceberg.exceptions.NotFoundException; import org.apache.polaris.core.auth.PolarisAuthorizableOperation; import org.apache.polaris.core.auth.PolarisAuthorizer; import org.apache.polaris.core.catalog.PolarisCatalogHelpers; -import org.apache.polaris.core.config.FeatureConfiguration; import org.apache.polaris.core.context.CallContext; import org.apache.polaris.core.entity.PolarisEntitySubType; import org.apache.polaris.core.entity.PolarisEntityType; @@ -73,8 +72,6 @@ public class PolicyCatalogHandler extends CatalogHandler { @Override protected void initializeCatalog() { - FeatureConfiguration.enforceFeatureEnabledOrThrow( - callContext, FeatureConfiguration.ENABLE_POLICY_STORE); this.policyCatalog = new PolicyCatalog(metaStoreManager, callContext, this.resolutionManifest); }