Class DefaultAccessDelegationModeResolver
java.lang.Object
org.apache.polaris.service.catalog.DefaultAccessDelegationModeResolver
- All Implemented Interfaces:
AccessDelegationModeResolver
@ApplicationScoped
public class DefaultAccessDelegationModeResolver
extends Object
implements AccessDelegationModeResolver
Default implementation of
AccessDelegationModeResolver that resolves the optimal access
delegation mode based on catalog capabilities and configuration.
The resolution logic:
- If no delegation mode is requested, returns empty.
- If exactly one delegation mode is requested:
- If
AccessDelegationMode.VENDED_CREDENTIALSis requested on an external catalog where credential vending is disabled (viaFeatureConfiguration.ALLOW_EXTERNAL_CATALOG_CREDENTIAL_VENDINGorFeatureConfiguration.ALLOW_FEDERATED_CATALOGS_CREDENTIAL_VENDING), throwsIllegalArgumentException. - Otherwise returns that mode as-is.
- If
- If both
AccessDelegationMode.VENDED_CREDENTIALSandAccessDelegationMode.REMOTE_SIGNINGare requested, picks the best viable mode:- If the catalog is external and
FeatureConfiguration.ALLOW_EXTERNAL_CATALOG_CREDENTIAL_VENDINGis disabled, returnsAccessDelegationMode.REMOTE_SIGNING(graceful degradation). - If the catalog is external/federated and
FeatureConfiguration.ALLOW_FEDERATED_CATALOGS_CREDENTIAL_VENDINGis disabled, returnsAccessDelegationMode.REMOTE_SIGNING. - If credential subscoping is skipped, returns
AccessDelegationMode.REMOTE_SIGNING. - If STS is unavailable for the catalog's AWS storage, returns
AccessDelegationMode.REMOTE_SIGNING. - Otherwise returns
AccessDelegationMode.VENDED_CREDENTIALS.
- If the catalog is external and
-
Constructor Summary
ConstructorsConstructorDescriptionDefaultAccessDelegationModeResolver(org.apache.polaris.core.config.RealmConfig realmConfig) -
Method Summary
Modifier and TypeMethodDescription@NonNull Optional<AccessDelegationMode> resolve(@NonNull EnumSet<AccessDelegationMode> requestedModes, @Nullable org.apache.polaris.core.entity.CatalogEntity catalogEntity) Resolves the optimal access delegation mode based on the requested modes and catalog capabilities.
-
Constructor Details
-
DefaultAccessDelegationModeResolver
@Inject public DefaultAccessDelegationModeResolver(org.apache.polaris.core.config.RealmConfig realmConfig)
-
-
Method Details
-
resolve
public @NonNull Optional<AccessDelegationMode> resolve(@NonNull EnumSet<AccessDelegationMode> requestedModes, @Nullable org.apache.polaris.core.entity.CatalogEntity catalogEntity) Description copied from interface:AccessDelegationModeResolverResolves the optimal access delegation mode based on the requested modes and catalog capabilities.- Specified by:
resolvein interfaceAccessDelegationModeResolver- Parameters:
requestedModes- The set of delegation modes requested by the clientcatalogEntity- The catalog entity, used to determine storage configuration and capabilities- Returns:
- The resolved access delegation mode, or empty if no suitable mode is available.
-