From 9fb3c3649f6fb867ad85f71de4e4042dd6e8ee4e Mon Sep 17 00:00:00 2001 From: Eric Maynard Date: Fri, 25 Apr 2025 13:02:44 -0700 Subject: [PATCH 01/15] wip --- .../quarkus/config/CatalogModeConfig.java | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 quarkus/service/src/main/java/org/apache/polaris/service/quarkus/config/CatalogModeConfig.java diff --git a/quarkus/service/src/main/java/org/apache/polaris/service/quarkus/config/CatalogModeConfig.java b/quarkus/service/src/main/java/org/apache/polaris/service/quarkus/config/CatalogModeConfig.java new file mode 100644 index 0000000000..8894edfb2c --- /dev/null +++ b/quarkus/service/src/main/java/org/apache/polaris/service/quarkus/config/CatalogModeConfig.java @@ -0,0 +1,33 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.polaris.service.quarkus.config; + +import io.smallrye.config.ConfigMapping; + +import java.util.Map; + +@ConfigMapping(prefix = "polaris.catalog-mode") +public interface CatalogModeConfig { + + String mode(); + + @ConfigItem(name = "property") + Map properties(); +} From 260897982b7c7ba30c91ee1c289a11e338bf0843 Mon Sep 17 00:00:00 2001 From: Eric Maynard Date: Fri, 25 Apr 2025 13:26:41 -0700 Subject: [PATCH 02/15] quarkus fixes --- .../config/QuarkusPolarisWrapperConfig.java | 37 +++++++++++++++++++ .../quarkus/config/QuarkusProducers.java | 9 +++++ .../quarkus/admin/PolarisAuthzTestBase.java | 4 +- .../IcebergCatalogHandlerAuthzTest.java | 4 +- .../iceberg/IcebergCatalogAdapter.java | 2 +- .../iceberg/IcebergCatalogHandler.java | 2 +- .../service/config/PolarisWrapperConfig.java | 14 ++----- .../CallContextCatalogFactory.java | 2 +- .../PolarisCallContextCatalogFactory.java | 4 +- .../apache/polaris/service/TestServices.java | 4 +- 10 files changed, 62 insertions(+), 20 deletions(-) create mode 100644 quarkus/service/src/main/java/org/apache/polaris/service/quarkus/config/QuarkusPolarisWrapperConfig.java rename quarkus/service/src/main/java/org/apache/polaris/service/quarkus/config/CatalogModeConfig.java => service/common/src/main/java/org/apache/polaris/service/config/PolarisWrapperConfig.java (75%) rename service/common/src/main/java/org/apache/polaris/service/context/{ => catalog}/CallContextCatalogFactory.java (96%) rename service/common/src/main/java/org/apache/polaris/service/context/{ => catalog}/PolarisCallContextCatalogFactory.java (97%) diff --git a/quarkus/service/src/main/java/org/apache/polaris/service/quarkus/config/QuarkusPolarisWrapperConfig.java b/quarkus/service/src/main/java/org/apache/polaris/service/quarkus/config/QuarkusPolarisWrapperConfig.java new file mode 100644 index 0000000000..92e64dee28 --- /dev/null +++ b/quarkus/service/src/main/java/org/apache/polaris/service/quarkus/config/QuarkusPolarisWrapperConfig.java @@ -0,0 +1,37 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.polaris.service.quarkus.config; + +import io.smallrye.config.ConfigMapping; +import java.util.Map; + +import io.smallrye.config.WithDefault; +import org.apache.polaris.service.config.PolarisWrapperConfig; +import org.eclipse.microprofile.config.inject.ConfigProperty; + +@ConfigMapping(prefix = "polaris.wrapper") +public interface QuarkusPolarisWrapperConfig extends PolarisWrapperConfig { + + @Override + @WithDefault("none") + String type(); + + @Override + Map property(); +} diff --git a/quarkus/service/src/main/java/org/apache/polaris/service/quarkus/config/QuarkusProducers.java b/quarkus/service/src/main/java/org/apache/polaris/service/quarkus/config/QuarkusProducers.java index 625e57e45d..65de000ecf 100644 --- a/quarkus/service/src/main/java/org/apache/polaris/service/quarkus/config/QuarkusProducers.java +++ b/quarkus/service/src/main/java/org/apache/polaris/service/quarkus/config/QuarkusProducers.java @@ -54,10 +54,12 @@ import org.apache.polaris.service.auth.TokenBrokerFactory; import org.apache.polaris.service.catalog.api.IcebergRestOAuth2ApiService; import org.apache.polaris.service.catalog.io.FileIOFactory; +import org.apache.polaris.service.config.PolarisWrapperConfig; import org.apache.polaris.service.config.RealmEntityManagerFactory; import org.apache.polaris.service.context.RealmContextConfiguration; import org.apache.polaris.service.context.RealmContextFilter; import org.apache.polaris.service.context.RealmContextResolver; +import org.apache.polaris.service.context.catalog.CallContextCatalogFactory; import org.apache.polaris.service.quarkus.auth.QuarkusAuthenticationConfiguration; import org.apache.polaris.service.quarkus.catalog.io.QuarkusFileIOConfiguration; import org.apache.polaris.service.quarkus.context.QuarkusRealmContextConfiguration; @@ -258,6 +260,13 @@ public ActiveRolesProvider activeRolesProvider( return activeRolesProviders.select(Identifier.Literal.of(persistenceType)).get(); } + @Produces + @ApplicationScoped + public CallContextCatalogFactory callContextCatalogFactory( + PolarisWrapperConfig config, @Any Instance factories) { + return factories.select(Identifier.Literal.of(config.type())).get(); + } + public void closeTaskExecutor(@Disposes @Identifier("task-executor") ManagedExecutor executor) { executor.close(); } diff --git a/quarkus/service/src/test/java/org/apache/polaris/service/quarkus/admin/PolarisAuthzTestBase.java b/quarkus/service/src/test/java/org/apache/polaris/service/quarkus/admin/PolarisAuthzTestBase.java index 6f3498d319..31ae6220f2 100644 --- a/quarkus/service/src/test/java/org/apache/polaris/service/quarkus/admin/PolarisAuthzTestBase.java +++ b/quarkus/service/src/test/java/org/apache/polaris/service/quarkus/admin/PolarisAuthzTestBase.java @@ -86,8 +86,8 @@ import org.apache.polaris.service.catalog.policy.PolicyCatalog; import org.apache.polaris.service.config.DefaultConfigurationStore; import org.apache.polaris.service.config.RealmEntityManagerFactory; -import org.apache.polaris.service.context.CallContextCatalogFactory; -import org.apache.polaris.service.context.PolarisCallContextCatalogFactory; +import org.apache.polaris.service.context.catalog.CallContextCatalogFactory; +import org.apache.polaris.service.context.catalog.PolarisCallContextCatalogFactory; import org.apache.polaris.service.storage.PolarisStorageIntegrationProviderImpl; import org.apache.polaris.service.task.TaskExecutor; import org.apache.polaris.service.types.PolicyIdentifier; diff --git a/quarkus/service/src/test/java/org/apache/polaris/service/quarkus/catalog/IcebergCatalogHandlerAuthzTest.java b/quarkus/service/src/test/java/org/apache/polaris/service/quarkus/catalog/IcebergCatalogHandlerAuthzTest.java index 11a938f316..af07e1d4f5 100644 --- a/quarkus/service/src/test/java/org/apache/polaris/service/quarkus/catalog/IcebergCatalogHandlerAuthzTest.java +++ b/quarkus/service/src/test/java/org/apache/polaris/service/quarkus/catalog/IcebergCatalogHandlerAuthzTest.java @@ -68,8 +68,8 @@ import org.apache.polaris.service.catalog.iceberg.IcebergCatalogHandler; import org.apache.polaris.service.catalog.io.DefaultFileIOFactory; import org.apache.polaris.service.config.RealmEntityManagerFactory; -import org.apache.polaris.service.context.CallContextCatalogFactory; -import org.apache.polaris.service.context.PolarisCallContextCatalogFactory; +import org.apache.polaris.service.context.catalog.CallContextCatalogFactory; +import org.apache.polaris.service.context.catalog.PolarisCallContextCatalogFactory; import org.apache.polaris.service.http.IfNoneMatch; import org.apache.polaris.service.quarkus.admin.PolarisAuthzTestBase; import org.apache.polaris.service.types.NotificationRequest; 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 6895351395..99737bf8f1 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 @@ -72,7 +72,7 @@ import org.apache.polaris.service.catalog.api.IcebergRestCatalogApiService; import org.apache.polaris.service.catalog.api.IcebergRestConfigurationApiService; import org.apache.polaris.service.catalog.common.CatalogAdapter; -import org.apache.polaris.service.context.CallContextCatalogFactory; +import org.apache.polaris.service.context.catalog.CallContextCatalogFactory; import org.apache.polaris.service.http.IcebergHttpUtil; import org.apache.polaris.service.http.IfNoneMatch; import org.apache.polaris.service.types.CommitTableRequest; diff --git a/service/common/src/main/java/org/apache/polaris/service/catalog/iceberg/IcebergCatalogHandler.java b/service/common/src/main/java/org/apache/polaris/service/catalog/iceberg/IcebergCatalogHandler.java index 2785e004cf..6ce6268a54 100644 --- a/service/common/src/main/java/org/apache/polaris/service/catalog/iceberg/IcebergCatalogHandler.java +++ b/service/common/src/main/java/org/apache/polaris/service/catalog/iceberg/IcebergCatalogHandler.java @@ -94,7 +94,7 @@ import org.apache.polaris.core.storage.PolarisStorageActions; import org.apache.polaris.service.catalog.SupportsNotifications; import org.apache.polaris.service.catalog.common.CatalogHandler; -import org.apache.polaris.service.context.CallContextCatalogFactory; +import org.apache.polaris.service.context.catalog.CallContextCatalogFactory; import org.apache.polaris.service.http.IcebergHttpUtil; import org.apache.polaris.service.http.IfNoneMatch; import org.apache.polaris.service.types.NotificationRequest; diff --git a/quarkus/service/src/main/java/org/apache/polaris/service/quarkus/config/CatalogModeConfig.java b/service/common/src/main/java/org/apache/polaris/service/config/PolarisWrapperConfig.java similarity index 75% rename from quarkus/service/src/main/java/org/apache/polaris/service/quarkus/config/CatalogModeConfig.java rename to service/common/src/main/java/org/apache/polaris/service/config/PolarisWrapperConfig.java index 8894edfb2c..d02c901f41 100644 --- a/quarkus/service/src/main/java/org/apache/polaris/service/quarkus/config/CatalogModeConfig.java +++ b/service/common/src/main/java/org/apache/polaris/service/config/PolarisWrapperConfig.java @@ -16,18 +16,12 @@ * specific language governing permissions and limitations * under the License. */ - -package org.apache.polaris.service.quarkus.config; - -import io.smallrye.config.ConfigMapping; +package org.apache.polaris.service.config; import java.util.Map; -@ConfigMapping(prefix = "polaris.catalog-mode") -public interface CatalogModeConfig { - - String mode(); +public interface PolarisWrapperConfig { + String type(); - @ConfigItem(name = "property") - Map properties(); + Map property(); } diff --git a/service/common/src/main/java/org/apache/polaris/service/context/CallContextCatalogFactory.java b/service/common/src/main/java/org/apache/polaris/service/context/catalog/CallContextCatalogFactory.java similarity index 96% rename from service/common/src/main/java/org/apache/polaris/service/context/CallContextCatalogFactory.java rename to service/common/src/main/java/org/apache/polaris/service/context/catalog/CallContextCatalogFactory.java index 7c812d6d36..1dd67a2e25 100644 --- a/service/common/src/main/java/org/apache/polaris/service/context/CallContextCatalogFactory.java +++ b/service/common/src/main/java/org/apache/polaris/service/context/catalog/CallContextCatalogFactory.java @@ -16,7 +16,7 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.polaris.service.context; +package org.apache.polaris.service.context.catalog; import jakarta.ws.rs.core.SecurityContext; import org.apache.iceberg.catalog.Catalog; diff --git a/service/common/src/main/java/org/apache/polaris/service/context/PolarisCallContextCatalogFactory.java b/service/common/src/main/java/org/apache/polaris/service/context/catalog/PolarisCallContextCatalogFactory.java similarity index 97% rename from service/common/src/main/java/org/apache/polaris/service/context/PolarisCallContextCatalogFactory.java rename to service/common/src/main/java/org/apache/polaris/service/context/catalog/PolarisCallContextCatalogFactory.java index 94fe197609..9eb94fdb29 100644 --- a/service/common/src/main/java/org/apache/polaris/service/context/PolarisCallContextCatalogFactory.java +++ b/service/common/src/main/java/org/apache/polaris/service/context/catalog/PolarisCallContextCatalogFactory.java @@ -16,8 +16,9 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.polaris.service.context; +package org.apache.polaris.service.context.catalog; +import io.smallrye.common.annotation.Identifier; import jakarta.enterprise.context.ApplicationScoped; import jakarta.inject.Inject; import jakarta.ws.rs.core.SecurityContext; @@ -43,6 +44,7 @@ import org.slf4j.LoggerFactory; @ApplicationScoped +@Identifier("none") public class PolarisCallContextCatalogFactory implements CallContextCatalogFactory { private static final Logger LOGGER = LoggerFactory.getLogger(PolarisCallContextCatalogFactory.class); diff --git a/service/common/src/testFixtures/java/org/apache/polaris/service/TestServices.java b/service/common/src/testFixtures/java/org/apache/polaris/service/TestServices.java index 88406b8954..3b9cd85116 100644 --- a/service/common/src/testFixtures/java/org/apache/polaris/service/TestServices.java +++ b/service/common/src/testFixtures/java/org/apache/polaris/service/TestServices.java @@ -54,8 +54,8 @@ import org.apache.polaris.service.catalog.io.MeasuredFileIOFactory; import org.apache.polaris.service.config.DefaultConfigurationStore; import org.apache.polaris.service.config.RealmEntityManagerFactory; -import org.apache.polaris.service.context.CallContextCatalogFactory; -import org.apache.polaris.service.context.PolarisCallContextCatalogFactory; +import org.apache.polaris.service.context.catalog.CallContextCatalogFactory; +import org.apache.polaris.service.context.catalog.PolarisCallContextCatalogFactory; import org.apache.polaris.service.persistence.InMemoryPolarisMetaStoreManagerFactory; import org.apache.polaris.service.secrets.UnsafeInMemorySecretsManagerFactory; import org.apache.polaris.service.storage.PolarisStorageIntegrationProviderImpl; From 7d995aee3416369d119845450b978c8422f74432 Mon Sep 17 00:00:00 2001 From: Eric Maynard Date: Fri, 25 Apr 2025 13:26:44 -0700 Subject: [PATCH 03/15] autolint --- .../service/quarkus/config/QuarkusPolarisWrapperConfig.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/quarkus/service/src/main/java/org/apache/polaris/service/quarkus/config/QuarkusPolarisWrapperConfig.java b/quarkus/service/src/main/java/org/apache/polaris/service/quarkus/config/QuarkusPolarisWrapperConfig.java index 92e64dee28..5aa57a9d04 100644 --- a/quarkus/service/src/main/java/org/apache/polaris/service/quarkus/config/QuarkusPolarisWrapperConfig.java +++ b/quarkus/service/src/main/java/org/apache/polaris/service/quarkus/config/QuarkusPolarisWrapperConfig.java @@ -19,11 +19,9 @@ package org.apache.polaris.service.quarkus.config; import io.smallrye.config.ConfigMapping; -import java.util.Map; - import io.smallrye.config.WithDefault; +import java.util.Map; import org.apache.polaris.service.config.PolarisWrapperConfig; -import org.eclipse.microprofile.config.inject.ConfigProperty; @ConfigMapping(prefix = "polaris.wrapper") public interface QuarkusPolarisWrapperConfig extends PolarisWrapperConfig { From e88b96897dbe0e836d6d1e0bee56671b7a41470c Mon Sep 17 00:00:00 2001 From: Eric Maynard Date: Fri, 25 Apr 2025 13:35:37 -0700 Subject: [PATCH 04/15] hadoop impl --- .../catalog/CallContextCatalogFactory.java | 4 + .../HadoopCallContextCatalogFactory.java | 85 +++++++++++++++++++ .../PolarisCallContextCatalogFactory.java | 3 - 3 files changed, 89 insertions(+), 3 deletions(-) create mode 100644 service/common/src/main/java/org/apache/polaris/service/context/catalog/HadoopCallContextCatalogFactory.java diff --git a/service/common/src/main/java/org/apache/polaris/service/context/catalog/CallContextCatalogFactory.java b/service/common/src/main/java/org/apache/polaris/service/context/catalog/CallContextCatalogFactory.java index 1dd67a2e25..6f10438c70 100644 --- a/service/common/src/main/java/org/apache/polaris/service/context/catalog/CallContextCatalogFactory.java +++ b/service/common/src/main/java/org/apache/polaris/service/context/catalog/CallContextCatalogFactory.java @@ -25,6 +25,10 @@ import org.apache.polaris.core.persistence.resolver.PolarisResolutionManifest; public interface CallContextCatalogFactory { + + static final String WAREHOUSE_LOCATION_BASEDIR = + "/tmp/iceberg_rest_server_warehouse_data/"; + Catalog createCallContextCatalog( CallContext context, AuthenticatedPolarisPrincipal authenticatedPrincipal, diff --git a/service/common/src/main/java/org/apache/polaris/service/context/catalog/HadoopCallContextCatalogFactory.java b/service/common/src/main/java/org/apache/polaris/service/context/catalog/HadoopCallContextCatalogFactory.java new file mode 100644 index 0000000000..6f9c2f4862 --- /dev/null +++ b/service/common/src/main/java/org/apache/polaris/service/context/catalog/HadoopCallContextCatalogFactory.java @@ -0,0 +1,85 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.polaris.service.context.catalog; + +import io.smallrye.common.annotation.Identifier; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.ws.rs.core.SecurityContext; +import org.apache.iceberg.CatalogProperties; +import org.apache.iceberg.catalog.Catalog; +import org.apache.iceberg.hadoop.HadoopCatalog; +import org.apache.polaris.core.auth.AuthenticatedPolarisPrincipal; +import org.apache.polaris.core.context.CallContext; +import org.apache.polaris.core.entity.CatalogEntity; +import org.apache.polaris.core.entity.PolarisBaseEntity; +import org.apache.polaris.core.persistence.PolarisEntityManager; +import org.apache.polaris.core.persistence.resolver.PolarisResolutionManifest; +import org.apache.polaris.service.catalog.iceberg.IcebergCatalog; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.nio.file.Paths; +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; + +@ApplicationScoped +@Identifier("hadoop") +public class HadoopCallContextCatalogFactory implements CallContextCatalogFactory { + private static final Logger LOGGER = + LoggerFactory.getLogger(PolarisCallContextCatalogFactory.class); + + @Override + public Catalog createCallContextCatalog( + CallContext context, + AuthenticatedPolarisPrincipal authenticatedPrincipal, + SecurityContext securityContext, + PolarisResolutionManifest resolvedManifest) { + + PolarisBaseEntity baseCatalogEntity = + resolvedManifest.getResolvedReferenceCatalogEntity().getRawLeafEntity(); + String catalogName = baseCatalogEntity.getName(); + + String realm = context.getRealmContext().getRealmIdentifier(); + String catalogKey = realm + "/" + catalogName; + LOGGER.debug("Initializing new BasePolarisCatalog for key: {}", catalogKey); + + Catalog catalogInstance = new HadoopCatalog(); + + context.contextVariables().put(CallContext.REQUEST_PATH_CATALOG_INSTANCE_KEY, catalogInstance); + + CatalogEntity catalog = CatalogEntity.of(baseCatalogEntity); + Map catalogProperties = new HashMap<>(catalog.getPropertiesAsMap()); + String defaultBaseLocation = catalog.getDefaultBaseLocation(); + LOGGER.debug( + "Looked up defaultBaseLocation {} for catalog {}", defaultBaseLocation, catalogKey); + catalogProperties.put( + CatalogProperties.WAREHOUSE_LOCATION, + Objects.requireNonNullElseGet( + defaultBaseLocation, + () -> Paths.get(WAREHOUSE_LOCATION_BASEDIR, catalogKey).toString())); + + // TODO: The initialize properties might need to take more from CallContext and the + // CatalogEntity. + catalogInstance.initialize(catalogName, catalogProperties); + + return catalogInstance; + } +} diff --git a/service/common/src/main/java/org/apache/polaris/service/context/catalog/PolarisCallContextCatalogFactory.java b/service/common/src/main/java/org/apache/polaris/service/context/catalog/PolarisCallContextCatalogFactory.java index 9eb94fdb29..56566199f3 100644 --- a/service/common/src/main/java/org/apache/polaris/service/context/catalog/PolarisCallContextCatalogFactory.java +++ b/service/common/src/main/java/org/apache/polaris/service/context/catalog/PolarisCallContextCatalogFactory.java @@ -49,9 +49,6 @@ public class PolarisCallContextCatalogFactory implements CallContextCatalogFacto private static final Logger LOGGER = LoggerFactory.getLogger(PolarisCallContextCatalogFactory.class); - private static final String WAREHOUSE_LOCATION_BASEDIR = - "/tmp/iceberg_rest_server_warehouse_data/"; - private final RealmEntityManagerFactory entityManagerFactory; private final TaskExecutor taskExecutor; private final FileIOFactory fileIOFactory; From 90cc0063ac0c70f15fecfeacefb20eb74a8f5877 Mon Sep 17 00:00:00 2001 From: Eric Maynard Date: Fri, 25 Apr 2025 13:35:41 -0700 Subject: [PATCH 05/15] autolint --- .../catalog/CallContextCatalogFactory.java | 3 +- .../HadoopCallContextCatalogFactory.java | 74 +++++++++---------- 2 files changed, 36 insertions(+), 41 deletions(-) diff --git a/service/common/src/main/java/org/apache/polaris/service/context/catalog/CallContextCatalogFactory.java b/service/common/src/main/java/org/apache/polaris/service/context/catalog/CallContextCatalogFactory.java index 6f10438c70..5a89ed49d4 100644 --- a/service/common/src/main/java/org/apache/polaris/service/context/catalog/CallContextCatalogFactory.java +++ b/service/common/src/main/java/org/apache/polaris/service/context/catalog/CallContextCatalogFactory.java @@ -26,8 +26,7 @@ public interface CallContextCatalogFactory { - static final String WAREHOUSE_LOCATION_BASEDIR = - "/tmp/iceberg_rest_server_warehouse_data/"; + static final String WAREHOUSE_LOCATION_BASEDIR = "/tmp/iceberg_rest_server_warehouse_data/"; Catalog createCallContextCatalog( CallContext context, diff --git a/service/common/src/main/java/org/apache/polaris/service/context/catalog/HadoopCallContextCatalogFactory.java b/service/common/src/main/java/org/apache/polaris/service/context/catalog/HadoopCallContextCatalogFactory.java index 6f9c2f4862..d275545857 100644 --- a/service/common/src/main/java/org/apache/polaris/service/context/catalog/HadoopCallContextCatalogFactory.java +++ b/service/common/src/main/java/org/apache/polaris/service/context/catalog/HadoopCallContextCatalogFactory.java @@ -16,12 +16,15 @@ * specific language governing permissions and limitations * under the License. */ - package org.apache.polaris.service.context.catalog; import io.smallrye.common.annotation.Identifier; import jakarta.enterprise.context.ApplicationScoped; import jakarta.ws.rs.core.SecurityContext; +import java.nio.file.Paths; +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; import org.apache.iceberg.CatalogProperties; import org.apache.iceberg.catalog.Catalog; import org.apache.iceberg.hadoop.HadoopCatalog; @@ -29,57 +32,50 @@ import org.apache.polaris.core.context.CallContext; import org.apache.polaris.core.entity.CatalogEntity; import org.apache.polaris.core.entity.PolarisBaseEntity; -import org.apache.polaris.core.persistence.PolarisEntityManager; import org.apache.polaris.core.persistence.resolver.PolarisResolutionManifest; -import org.apache.polaris.service.catalog.iceberg.IcebergCatalog; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.nio.file.Paths; -import java.util.HashMap; -import java.util.Map; -import java.util.Objects; - @ApplicationScoped @Identifier("hadoop") public class HadoopCallContextCatalogFactory implements CallContextCatalogFactory { - private static final Logger LOGGER = - LoggerFactory.getLogger(PolarisCallContextCatalogFactory.class); + private static final Logger LOGGER = + LoggerFactory.getLogger(PolarisCallContextCatalogFactory.class); - @Override - public Catalog createCallContextCatalog( - CallContext context, - AuthenticatedPolarisPrincipal authenticatedPrincipal, - SecurityContext securityContext, - PolarisResolutionManifest resolvedManifest) { + @Override + public Catalog createCallContextCatalog( + CallContext context, + AuthenticatedPolarisPrincipal authenticatedPrincipal, + SecurityContext securityContext, + PolarisResolutionManifest resolvedManifest) { - PolarisBaseEntity baseCatalogEntity = - resolvedManifest.getResolvedReferenceCatalogEntity().getRawLeafEntity(); - String catalogName = baseCatalogEntity.getName(); + PolarisBaseEntity baseCatalogEntity = + resolvedManifest.getResolvedReferenceCatalogEntity().getRawLeafEntity(); + String catalogName = baseCatalogEntity.getName(); - String realm = context.getRealmContext().getRealmIdentifier(); - String catalogKey = realm + "/" + catalogName; - LOGGER.debug("Initializing new BasePolarisCatalog for key: {}", catalogKey); + String realm = context.getRealmContext().getRealmIdentifier(); + String catalogKey = realm + "/" + catalogName; + LOGGER.debug("Initializing new BasePolarisCatalog for key: {}", catalogKey); - Catalog catalogInstance = new HadoopCatalog(); + Catalog catalogInstance = new HadoopCatalog(); - context.contextVariables().put(CallContext.REQUEST_PATH_CATALOG_INSTANCE_KEY, catalogInstance); + context.contextVariables().put(CallContext.REQUEST_PATH_CATALOG_INSTANCE_KEY, catalogInstance); - CatalogEntity catalog = CatalogEntity.of(baseCatalogEntity); - Map catalogProperties = new HashMap<>(catalog.getPropertiesAsMap()); - String defaultBaseLocation = catalog.getDefaultBaseLocation(); - LOGGER.debug( - "Looked up defaultBaseLocation {} for catalog {}", defaultBaseLocation, catalogKey); - catalogProperties.put( - CatalogProperties.WAREHOUSE_LOCATION, - Objects.requireNonNullElseGet( - defaultBaseLocation, - () -> Paths.get(WAREHOUSE_LOCATION_BASEDIR, catalogKey).toString())); + CatalogEntity catalog = CatalogEntity.of(baseCatalogEntity); + Map catalogProperties = new HashMap<>(catalog.getPropertiesAsMap()); + String defaultBaseLocation = catalog.getDefaultBaseLocation(); + LOGGER.debug( + "Looked up defaultBaseLocation {} for catalog {}", defaultBaseLocation, catalogKey); + catalogProperties.put( + CatalogProperties.WAREHOUSE_LOCATION, + Objects.requireNonNullElseGet( + defaultBaseLocation, + () -> Paths.get(WAREHOUSE_LOCATION_BASEDIR, catalogKey).toString())); - // TODO: The initialize properties might need to take more from CallContext and the - // CatalogEntity. - catalogInstance.initialize(catalogName, catalogProperties); + // TODO: The initialize properties might need to take more from CallContext and the + // CatalogEntity. + catalogInstance.initialize(catalogName, catalogProperties); - return catalogInstance; - } + return catalogInstance; + } } From cefc3ed9cab475327c5e761dc7fb4eca16396e39 Mon Sep 17 00:00:00 2001 From: Eric Maynard Date: Fri, 25 Apr 2025 23:10:02 -0700 Subject: [PATCH 06/15] Refactors --- .../AuthenticationParametersDpo.java | 1 + .../connection/ConnectionConfigInfoDpo.java | 19 +++- .../core/connection/ConnectionType.java | 1 + .../hadoop/HadoopConnectionConfigInfoDpo.java | 88 +++++++++++++++++++ .../IcebergCatalogPropertiesProvider.java | 2 +- .../IcebergRestConnectionConfigInfoDpo.java | 5 +- .../config/QuarkusPolarisWrapperConfig.java | 35 -------- .../quarkus/config/QuarkusProducers.java | 9 -- .../iceberg/IcebergCatalogHandler.java | 10 ++- .../service/config/PolarisWrapperConfig.java | 27 ------ .../HadoopCallContextCatalogFactory.java | 2 - .../PolarisCallContextCatalogFactory.java | 2 - spec/polaris-management-service.yml | 12 +++ 13 files changed, 134 insertions(+), 79 deletions(-) create mode 100644 polaris-core/src/main/java/org/apache/polaris/core/connection/hadoop/HadoopConnectionConfigInfoDpo.java rename polaris-core/src/main/java/org/apache/polaris/core/connection/{ => iceberg}/IcebergCatalogPropertiesProvider.java (96%) rename polaris-core/src/main/java/org/apache/polaris/core/connection/{ => iceberg}/IcebergRestConnectionConfigInfoDpo.java (93%) delete mode 100644 quarkus/service/src/main/java/org/apache/polaris/service/quarkus/config/QuarkusPolarisWrapperConfig.java delete mode 100644 service/common/src/main/java/org/apache/polaris/service/config/PolarisWrapperConfig.java diff --git a/polaris-core/src/main/java/org/apache/polaris/core/connection/AuthenticationParametersDpo.java b/polaris-core/src/main/java/org/apache/polaris/core/connection/AuthenticationParametersDpo.java index bf07c4b79a..f2267b12a5 100644 --- a/polaris-core/src/main/java/org/apache/polaris/core/connection/AuthenticationParametersDpo.java +++ b/polaris-core/src/main/java/org/apache/polaris/core/connection/AuthenticationParametersDpo.java @@ -25,6 +25,7 @@ import org.apache.polaris.core.admin.model.AuthenticationParameters; import org.apache.polaris.core.admin.model.BearerAuthenticationParameters; import org.apache.polaris.core.admin.model.OAuthClientCredentialsParameters; +import org.apache.polaris.core.connection.iceberg.IcebergCatalogPropertiesProvider; import org.apache.polaris.core.secrets.UserSecretReference; /** diff --git a/polaris-core/src/main/java/org/apache/polaris/core/connection/ConnectionConfigInfoDpo.java b/polaris-core/src/main/java/org/apache/polaris/core/connection/ConnectionConfigInfoDpo.java index 482dc00fce..a2a6fb8570 100644 --- a/polaris-core/src/main/java/org/apache/polaris/core/connection/ConnectionConfigInfoDpo.java +++ b/polaris-core/src/main/java/org/apache/polaris/core/connection/ConnectionConfigInfoDpo.java @@ -33,7 +33,10 @@ import java.util.Map; import org.apache.polaris.core.PolarisDiagnostics; import org.apache.polaris.core.admin.model.ConnectionConfigInfo; +import org.apache.polaris.core.admin.model.HadoopConnectionConfigInfo; import org.apache.polaris.core.admin.model.IcebergRestConnectionConfigInfo; +import org.apache.polaris.core.connection.iceberg.IcebergCatalogPropertiesProvider; +import org.apache.polaris.core.connection.iceberg.IcebergRestConnectionConfigInfoDpo; import org.apache.polaris.core.secrets.UserSecretReference; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -140,11 +143,12 @@ public static ConnectionConfigInfoDpo fromConnectionConfigInfoModelWithSecrets( ConnectionConfigInfo connectionConfigurationModel, Map secretReferences) { ConnectionConfigInfoDpo config = null; + final AuthenticationParametersDpo authenticationParameters; switch (connectionConfigurationModel.getConnectionType()) { case ICEBERG_REST: IcebergRestConnectionConfigInfo icebergRestConfigModel = (IcebergRestConnectionConfigInfo) connectionConfigurationModel; - AuthenticationParametersDpo authenticationParameters = + authenticationParameters = AuthenticationParametersDpo.fromAuthenticationParametersModelWithSecrets( icebergRestConfigModel.getAuthenticationParameters(), secretReferences); config = @@ -153,6 +157,19 @@ public static ConnectionConfigInfoDpo fromConnectionConfigInfoModelWithSecrets( authenticationParameters, icebergRestConfigModel.getRemoteCatalogName()); break; + case HADOOP: + HadoopConnectionConfigInfo hadoopConfigModel = + (HadoopConnectionConfigInfo) connectionConfigurationModel; + authenticationParameters = + AuthenticationParametersDpo.fromAuthenticationParametersModelWithSecrets( + hadoopConfigModel.getAuthenticationParameters(), secretReferences); + // config = new HadoopConnectionConfigInfo( + // hadoopConfigModel.getUri(), + // config.asConnectionConfigInfoModel().getConnectionType(), + // authenticationParameters, + // hadoopConfigModel.getWarehouse() + // ); + break; default: throw new IllegalStateException( "Unsupported connection type: " + connectionConfigurationModel.getConnectionType()); diff --git a/polaris-core/src/main/java/org/apache/polaris/core/connection/ConnectionType.java b/polaris-core/src/main/java/org/apache/polaris/core/connection/ConnectionType.java index 6d4a419a5f..3c2d4430a9 100644 --- a/polaris-core/src/main/java/org/apache/polaris/core/connection/ConnectionType.java +++ b/polaris-core/src/main/java/org/apache/polaris/core/connection/ConnectionType.java @@ -32,6 +32,7 @@ public enum ConnectionType { NULL_TYPE(0), ICEBERG_REST(1), + HADOOP(2), ; private static final ConnectionType[] REVERSE_MAPPING_ARRAY; diff --git a/polaris-core/src/main/java/org/apache/polaris/core/connection/hadoop/HadoopConnectionConfigInfoDpo.java b/polaris-core/src/main/java/org/apache/polaris/core/connection/hadoop/HadoopConnectionConfigInfoDpo.java new file mode 100644 index 0000000000..5f29482c15 --- /dev/null +++ b/polaris-core/src/main/java/org/apache/polaris/core/connection/hadoop/HadoopConnectionConfigInfoDpo.java @@ -0,0 +1,88 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.polaris.core.connection.hadoop; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.google.common.base.MoreObjects; +import jakarta.annotation.Nonnull; +import jakarta.annotation.Nullable; +import java.util.HashMap; +import java.util.Map; +import org.apache.iceberg.CatalogProperties; +import org.apache.polaris.core.admin.model.ConnectionConfigInfo; +import org.apache.polaris.core.admin.model.HadoopConnectionConfigInfo; +import org.apache.polaris.core.connection.AuthenticationParametersDpo; +import org.apache.polaris.core.connection.ConnectionConfigInfoDpo; +import org.apache.polaris.core.connection.ConnectionType; +import org.apache.polaris.core.secrets.UserSecretsManager; + +/** + * The internal persistence-object counterpart to {@link + * org.apache.polaris.core.admin.model.HadoopConnectionConfigInfo} defined in the API model. + */ +public class HadoopConnectionConfigInfoDpo extends ConnectionConfigInfoDpo { + + private final String warehouse; + + public HadoopConnectionConfigInfoDpo( + @JsonProperty(value = "uri", required = true) @Nonnull String uri, + @JsonProperty(value = "authenticationParameters", required = true) @Nonnull + AuthenticationParametersDpo authenticationParameters, + @JsonProperty(value = "warehouse", required = false) @Nullable String remoteCatalogName) { + super(ConnectionType.HADOOP.getCode(), uri, authenticationParameters); + this.warehouse = remoteCatalogName; + } + + public String getWarehouse() { + return warehouse; + } + + @Override + public String toString() { + return MoreObjects.toStringHelper(this) + .add("connectionTypeCode", getConnectionTypeCode()) + .add("uri", getUri()) + .add("warehouse", getWarehouse()) + .add("authenticationParameters", getAuthenticationParameters().toString()) + .toString(); + } + + @Override + public @Nonnull Map asIcebergCatalogProperties( + UserSecretsManager secretsManager) { + HashMap properties = new HashMap<>(); + properties.put(CatalogProperties.URI, getUri()); + if (getWarehouse() != null) { + properties.put(CatalogProperties.WAREHOUSE_LOCATION, getWarehouse()); + } + properties.putAll(getAuthenticationParameters().asIcebergCatalogProperties(secretsManager)); + return properties; + } + + @Override + public ConnectionConfigInfo asConnectionConfigInfoModel() { + return HadoopConnectionConfigInfo.builder() + .setConnectionType(ConnectionConfigInfo.ConnectionTypeEnum.HADOOP) + .setUri(getUri()) + .setWarehouse(getWarehouse()) + .setAuthenticationParameters( + getAuthenticationParameters().asAuthenticationParametersModel()) + .build(); + } +} diff --git a/polaris-core/src/main/java/org/apache/polaris/core/connection/IcebergCatalogPropertiesProvider.java b/polaris-core/src/main/java/org/apache/polaris/core/connection/iceberg/IcebergCatalogPropertiesProvider.java similarity index 96% rename from polaris-core/src/main/java/org/apache/polaris/core/connection/IcebergCatalogPropertiesProvider.java rename to polaris-core/src/main/java/org/apache/polaris/core/connection/iceberg/IcebergCatalogPropertiesProvider.java index e7955bc61a..75af01100f 100644 --- a/polaris-core/src/main/java/org/apache/polaris/core/connection/IcebergCatalogPropertiesProvider.java +++ b/polaris-core/src/main/java/org/apache/polaris/core/connection/iceberg/IcebergCatalogPropertiesProvider.java @@ -16,7 +16,7 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.polaris.core.connection; +package org.apache.polaris.core.connection.iceberg; import jakarta.annotation.Nonnull; import java.util.Map; diff --git a/polaris-core/src/main/java/org/apache/polaris/core/connection/IcebergRestConnectionConfigInfoDpo.java b/polaris-core/src/main/java/org/apache/polaris/core/connection/iceberg/IcebergRestConnectionConfigInfoDpo.java similarity index 93% rename from polaris-core/src/main/java/org/apache/polaris/core/connection/IcebergRestConnectionConfigInfoDpo.java rename to polaris-core/src/main/java/org/apache/polaris/core/connection/iceberg/IcebergRestConnectionConfigInfoDpo.java index 11fac0e22a..236dcee293 100644 --- a/polaris-core/src/main/java/org/apache/polaris/core/connection/IcebergRestConnectionConfigInfoDpo.java +++ b/polaris-core/src/main/java/org/apache/polaris/core/connection/iceberg/IcebergRestConnectionConfigInfoDpo.java @@ -16,7 +16,7 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.polaris.core.connection; +package org.apache.polaris.core.connection.iceberg; import com.fasterxml.jackson.annotation.JsonProperty; import com.google.common.base.MoreObjects; @@ -27,6 +27,9 @@ import org.apache.iceberg.CatalogProperties; import org.apache.polaris.core.admin.model.ConnectionConfigInfo; import org.apache.polaris.core.admin.model.IcebergRestConnectionConfigInfo; +import org.apache.polaris.core.connection.AuthenticationParametersDpo; +import org.apache.polaris.core.connection.ConnectionConfigInfoDpo; +import org.apache.polaris.core.connection.ConnectionType; import org.apache.polaris.core.secrets.UserSecretsManager; /** diff --git a/quarkus/service/src/main/java/org/apache/polaris/service/quarkus/config/QuarkusPolarisWrapperConfig.java b/quarkus/service/src/main/java/org/apache/polaris/service/quarkus/config/QuarkusPolarisWrapperConfig.java deleted file mode 100644 index 5aa57a9d04..0000000000 --- a/quarkus/service/src/main/java/org/apache/polaris/service/quarkus/config/QuarkusPolarisWrapperConfig.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.polaris.service.quarkus.config; - -import io.smallrye.config.ConfigMapping; -import io.smallrye.config.WithDefault; -import java.util.Map; -import org.apache.polaris.service.config.PolarisWrapperConfig; - -@ConfigMapping(prefix = "polaris.wrapper") -public interface QuarkusPolarisWrapperConfig extends PolarisWrapperConfig { - - @Override - @WithDefault("none") - String type(); - - @Override - Map property(); -} diff --git a/quarkus/service/src/main/java/org/apache/polaris/service/quarkus/config/QuarkusProducers.java b/quarkus/service/src/main/java/org/apache/polaris/service/quarkus/config/QuarkusProducers.java index 65de000ecf..625e57e45d 100644 --- a/quarkus/service/src/main/java/org/apache/polaris/service/quarkus/config/QuarkusProducers.java +++ b/quarkus/service/src/main/java/org/apache/polaris/service/quarkus/config/QuarkusProducers.java @@ -54,12 +54,10 @@ import org.apache.polaris.service.auth.TokenBrokerFactory; import org.apache.polaris.service.catalog.api.IcebergRestOAuth2ApiService; import org.apache.polaris.service.catalog.io.FileIOFactory; -import org.apache.polaris.service.config.PolarisWrapperConfig; import org.apache.polaris.service.config.RealmEntityManagerFactory; import org.apache.polaris.service.context.RealmContextConfiguration; import org.apache.polaris.service.context.RealmContextFilter; import org.apache.polaris.service.context.RealmContextResolver; -import org.apache.polaris.service.context.catalog.CallContextCatalogFactory; import org.apache.polaris.service.quarkus.auth.QuarkusAuthenticationConfiguration; import org.apache.polaris.service.quarkus.catalog.io.QuarkusFileIOConfiguration; import org.apache.polaris.service.quarkus.context.QuarkusRealmContextConfiguration; @@ -260,13 +258,6 @@ public ActiveRolesProvider activeRolesProvider( return activeRolesProviders.select(Identifier.Literal.of(persistenceType)).get(); } - @Produces - @ApplicationScoped - public CallContextCatalogFactory callContextCatalogFactory( - PolarisWrapperConfig config, @Any Instance factories) { - return factories.select(Identifier.Literal.of(config.type())).get(); - } - public void closeTaskExecutor(@Disposes @Identifier("task-executor") ManagedExecutor executor) { executor.close(); } diff --git a/service/common/src/main/java/org/apache/polaris/service/catalog/iceberg/IcebergCatalogHandler.java b/service/common/src/main/java/org/apache/polaris/service/catalog/iceberg/IcebergCatalogHandler.java index 6ce6268a54..dd54a06ca1 100644 --- a/service/common/src/main/java/org/apache/polaris/service/catalog/iceberg/IcebergCatalogHandler.java +++ b/service/common/src/main/java/org/apache/polaris/service/catalog/iceberg/IcebergCatalogHandler.java @@ -54,6 +54,7 @@ import org.apache.iceberg.exceptions.CommitFailedException; import org.apache.iceberg.exceptions.ForbiddenException; import org.apache.iceberg.exceptions.NoSuchTableException; +import org.apache.iceberg.hadoop.HadoopCatalog; import org.apache.iceberg.rest.CatalogHandlers; import org.apache.iceberg.rest.HTTPClient; import org.apache.iceberg.rest.RESTCatalog; @@ -79,7 +80,8 @@ import org.apache.polaris.core.config.PolarisConfigurationStore; import org.apache.polaris.core.connection.ConnectionConfigInfoDpo; import org.apache.polaris.core.connection.ConnectionType; -import org.apache.polaris.core.connection.IcebergRestConnectionConfigInfoDpo; +import org.apache.polaris.core.connection.hadoop.HadoopConnectionConfigInfoDpo; +import org.apache.polaris.core.connection.iceberg.IcebergRestConnectionConfigInfoDpo; import org.apache.polaris.core.context.CallContext; import org.apache.polaris.core.entity.CatalogEntity; import org.apache.polaris.core.entity.PolarisEntitySubType; @@ -203,6 +205,12 @@ protected void initializeCatalog() { ((IcebergRestConnectionConfigInfoDpo) connectionConfigInfoDpo).getRemoteCatalogName(), connectionConfigInfoDpo.asIcebergCatalogProperties(getUserSecretsManager())); break; + case HADOOP: + federatedCatalog = new HadoopCatalog(); + federatedCatalog.initialize( + ((HadoopConnectionConfigInfoDpo) connectionConfigInfoDpo).getWarehouse(), + connectionConfigInfoDpo.asIcebergCatalogProperties(getUserSecretsManager())); + break; default: throw new UnsupportedOperationException( "Connection type not supported: " + connectionType); diff --git a/service/common/src/main/java/org/apache/polaris/service/config/PolarisWrapperConfig.java b/service/common/src/main/java/org/apache/polaris/service/config/PolarisWrapperConfig.java deleted file mode 100644 index d02c901f41..0000000000 --- a/service/common/src/main/java/org/apache/polaris/service/config/PolarisWrapperConfig.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.polaris.service.config; - -import java.util.Map; - -public interface PolarisWrapperConfig { - String type(); - - Map property(); -} diff --git a/service/common/src/main/java/org/apache/polaris/service/context/catalog/HadoopCallContextCatalogFactory.java b/service/common/src/main/java/org/apache/polaris/service/context/catalog/HadoopCallContextCatalogFactory.java index d275545857..8c98cb49e1 100644 --- a/service/common/src/main/java/org/apache/polaris/service/context/catalog/HadoopCallContextCatalogFactory.java +++ b/service/common/src/main/java/org/apache/polaris/service/context/catalog/HadoopCallContextCatalogFactory.java @@ -18,7 +18,6 @@ */ package org.apache.polaris.service.context.catalog; -import io.smallrye.common.annotation.Identifier; import jakarta.enterprise.context.ApplicationScoped; import jakarta.ws.rs.core.SecurityContext; import java.nio.file.Paths; @@ -37,7 +36,6 @@ import org.slf4j.LoggerFactory; @ApplicationScoped -@Identifier("hadoop") public class HadoopCallContextCatalogFactory implements CallContextCatalogFactory { private static final Logger LOGGER = LoggerFactory.getLogger(PolarisCallContextCatalogFactory.class); diff --git a/service/common/src/main/java/org/apache/polaris/service/context/catalog/PolarisCallContextCatalogFactory.java b/service/common/src/main/java/org/apache/polaris/service/context/catalog/PolarisCallContextCatalogFactory.java index 56566199f3..5a320b7bd6 100644 --- a/service/common/src/main/java/org/apache/polaris/service/context/catalog/PolarisCallContextCatalogFactory.java +++ b/service/common/src/main/java/org/apache/polaris/service/context/catalog/PolarisCallContextCatalogFactory.java @@ -18,7 +18,6 @@ */ package org.apache.polaris.service.context.catalog; -import io.smallrye.common.annotation.Identifier; import jakarta.enterprise.context.ApplicationScoped; import jakarta.inject.Inject; import jakarta.ws.rs.core.SecurityContext; @@ -44,7 +43,6 @@ import org.slf4j.LoggerFactory; @ApplicationScoped -@Identifier("none") public class PolarisCallContextCatalogFactory implements CallContextCatalogFactory { private static final Logger LOGGER = LoggerFactory.getLogger(PolarisCallContextCatalogFactory.class); diff --git a/spec/polaris-management-service.yml b/spec/polaris-management-service.yml index 318f17a6c6..795dd61ffc 100644 --- a/spec/polaris-management-service.yml +++ b/spec/polaris-management-service.yml @@ -862,6 +862,7 @@ components: type: string enum: - ICEBERG_REST + - HADOOP description: The type of remote catalog service represented by this connection uri: type: string @@ -874,6 +875,7 @@ components: propertyName: connectionType mapping: ICEBERG_REST: "#/components/schemas/IcebergRestConnectionConfigInfo" + HADOOP: "#/components/schemas/HadoopConnectionConfigInfo" IcebergRestConnectionConfigInfo: type: object @@ -887,6 +889,16 @@ components: this is specified as the 'warehouse' when multiple logical catalogs are served under the same base uri, and often translates into a 'prefix' added to all REST resource paths + HadoopConnectionConfigInfo: + type: object + description: Configuration necessary for connecting to a Hadoop Catalog + allOf: + - $ref: '#/components/schemas/ConnectionConfigInfo' + properties: + warehouse: + type: string + description: The file path to where this catalog should store tables + AuthenticationParameters: type: object description: Authentication-specific information for a REST connection From 497eb0e4db8be9c721b82ea3d17b09b3ccc13780 Mon Sep 17 00:00:00 2001 From: Eric Maynard Date: Fri, 25 Apr 2025 23:19:44 -0700 Subject: [PATCH 07/15] refactored --- .../HadoopCallContextCatalogFactory.java | 79 ------------------- 1 file changed, 79 deletions(-) delete mode 100644 service/common/src/main/java/org/apache/polaris/service/context/catalog/HadoopCallContextCatalogFactory.java diff --git a/service/common/src/main/java/org/apache/polaris/service/context/catalog/HadoopCallContextCatalogFactory.java b/service/common/src/main/java/org/apache/polaris/service/context/catalog/HadoopCallContextCatalogFactory.java deleted file mode 100644 index 8c98cb49e1..0000000000 --- a/service/common/src/main/java/org/apache/polaris/service/context/catalog/HadoopCallContextCatalogFactory.java +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.polaris.service.context.catalog; - -import jakarta.enterprise.context.ApplicationScoped; -import jakarta.ws.rs.core.SecurityContext; -import java.nio.file.Paths; -import java.util.HashMap; -import java.util.Map; -import java.util.Objects; -import org.apache.iceberg.CatalogProperties; -import org.apache.iceberg.catalog.Catalog; -import org.apache.iceberg.hadoop.HadoopCatalog; -import org.apache.polaris.core.auth.AuthenticatedPolarisPrincipal; -import org.apache.polaris.core.context.CallContext; -import org.apache.polaris.core.entity.CatalogEntity; -import org.apache.polaris.core.entity.PolarisBaseEntity; -import org.apache.polaris.core.persistence.resolver.PolarisResolutionManifest; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -@ApplicationScoped -public class HadoopCallContextCatalogFactory implements CallContextCatalogFactory { - private static final Logger LOGGER = - LoggerFactory.getLogger(PolarisCallContextCatalogFactory.class); - - @Override - public Catalog createCallContextCatalog( - CallContext context, - AuthenticatedPolarisPrincipal authenticatedPrincipal, - SecurityContext securityContext, - PolarisResolutionManifest resolvedManifest) { - - PolarisBaseEntity baseCatalogEntity = - resolvedManifest.getResolvedReferenceCatalogEntity().getRawLeafEntity(); - String catalogName = baseCatalogEntity.getName(); - - String realm = context.getRealmContext().getRealmIdentifier(); - String catalogKey = realm + "/" + catalogName; - LOGGER.debug("Initializing new BasePolarisCatalog for key: {}", catalogKey); - - Catalog catalogInstance = new HadoopCatalog(); - - context.contextVariables().put(CallContext.REQUEST_PATH_CATALOG_INSTANCE_KEY, catalogInstance); - - CatalogEntity catalog = CatalogEntity.of(baseCatalogEntity); - Map catalogProperties = new HashMap<>(catalog.getPropertiesAsMap()); - String defaultBaseLocation = catalog.getDefaultBaseLocation(); - LOGGER.debug( - "Looked up defaultBaseLocation {} for catalog {}", defaultBaseLocation, catalogKey); - catalogProperties.put( - CatalogProperties.WAREHOUSE_LOCATION, - Objects.requireNonNullElseGet( - defaultBaseLocation, - () -> Paths.get(WAREHOUSE_LOCATION_BASEDIR, catalogKey).toString())); - - // TODO: The initialize properties might need to take more from CallContext and the - // CatalogEntity. - catalogInstance.initialize(catalogName, catalogProperties); - - return catalogInstance; - } -} From 7ea31bcbc73540f748df1a3bc31b1588cbb043a3 Mon Sep 17 00:00:00 2001 From: Eric Maynard Date: Mon, 28 Apr 2025 10:15:12 -0700 Subject: [PATCH 08/15] autolint --- .../core/connection/ConnectionConfigInfoDpo.java | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/polaris-core/src/main/java/org/apache/polaris/core/connection/ConnectionConfigInfoDpo.java b/polaris-core/src/main/java/org/apache/polaris/core/connection/ConnectionConfigInfoDpo.java index a2a6fb8570..4313ede124 100644 --- a/polaris-core/src/main/java/org/apache/polaris/core/connection/ConnectionConfigInfoDpo.java +++ b/polaris-core/src/main/java/org/apache/polaris/core/connection/ConnectionConfigInfoDpo.java @@ -35,6 +35,7 @@ import org.apache.polaris.core.admin.model.ConnectionConfigInfo; import org.apache.polaris.core.admin.model.HadoopConnectionConfigInfo; import org.apache.polaris.core.admin.model.IcebergRestConnectionConfigInfo; +import org.apache.polaris.core.connection.hadoop.HadoopConnectionConfigInfoDpo; import org.apache.polaris.core.connection.iceberg.IcebergCatalogPropertiesProvider; import org.apache.polaris.core.connection.iceberg.IcebergRestConnectionConfigInfoDpo; import org.apache.polaris.core.secrets.UserSecretReference; @@ -51,6 +52,7 @@ property = "connectionTypeCode") @JsonSubTypes({ @JsonSubTypes.Type(value = IcebergRestConnectionConfigInfoDpo.class, name = "1"), + @JsonSubTypes.Type(value = HadoopConnectionConfigInfoDpo.class, name = "2"), }) public abstract class ConnectionConfigInfoDpo implements IcebergCatalogPropertiesProvider { private static final Logger logger = LoggerFactory.getLogger(ConnectionConfigInfoDpo.class); @@ -163,12 +165,11 @@ public static ConnectionConfigInfoDpo fromConnectionConfigInfoModelWithSecrets( authenticationParameters = AuthenticationParametersDpo.fromAuthenticationParametersModelWithSecrets( hadoopConfigModel.getAuthenticationParameters(), secretReferences); - // config = new HadoopConnectionConfigInfo( - // hadoopConfigModel.getUri(), - // config.asConnectionConfigInfoModel().getConnectionType(), - // authenticationParameters, - // hadoopConfigModel.getWarehouse() - // ); + config = + new HadoopConnectionConfigInfoDpo( + hadoopConfigModel.getUri(), + authenticationParameters, + hadoopConfigModel.getWarehouse()); break; default: throw new IllegalStateException( From 3dc4f7bc15f85f3344af788a991338d0dd9b6ccd Mon Sep 17 00:00:00 2001 From: Eric Maynard Date: Tue, 29 Apr 2025 01:15:55 -0700 Subject: [PATCH 09/15] add config --- .../polaris/core/config/FeatureConfiguration.java | 11 +++++++++++ .../catalog/iceberg/IcebergCatalogHandler.java | 14 ++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/polaris-core/src/main/java/org/apache/polaris/core/config/FeatureConfiguration.java b/polaris-core/src/main/java/org/apache/polaris/core/config/FeatureConfiguration.java index f857d03acd..13cde7c360 100644 --- a/polaris-core/src/main/java/org/apache/polaris/core/config/FeatureConfiguration.java +++ b/polaris-core/src/main/java/org/apache/polaris/core/config/FeatureConfiguration.java @@ -21,6 +21,7 @@ import java.util.List; import java.util.Optional; import org.apache.polaris.core.admin.model.StorageConfigInfo; +import org.apache.polaris.core.connection.ConnectionType; import org.apache.polaris.core.context.CallContext; import org.apache.polaris.core.persistence.cache.EntityWeigher; @@ -227,4 +228,14 @@ public static void enforceFeatureEnabledOrThrow( + " to perform federation to remote catalogs.") .defaultValue(false) .buildFeatureConfiguration(); + + public static final FeatureConfiguration> SUPPORTED_CATALOG_CONNECTION_TYPES = + PolarisConfiguration.>builder() + .key("SUPPORTED_CATALOG_CONNECTION_TYPES") + .description("The list of supported catalog connection types for federation") + .defaultValue( + List.of( + ConnectionType.ICEBERG_REST.name(), + ConnectionType.HADOOP.name())) + .buildFeatureConfiguration(); } diff --git a/service/common/src/main/java/org/apache/polaris/service/catalog/iceberg/IcebergCatalogHandler.java b/service/common/src/main/java/org/apache/polaris/service/catalog/iceberg/IcebergCatalogHandler.java index dd54a06ca1..bb75e7e68c 100644 --- a/service/common/src/main/java/org/apache/polaris/service/catalog/iceberg/IcebergCatalogHandler.java +++ b/service/common/src/main/java/org/apache/polaris/service/catalog/iceberg/IcebergCatalogHandler.java @@ -29,6 +29,7 @@ import java.util.Arrays; import java.util.HashSet; import java.util.List; +import java.util.Locale; import java.util.Map; import java.util.Optional; import java.util.Set; @@ -191,6 +192,19 @@ protected void initializeCatalog() { Catalog federatedCatalog; ConnectionType connectionType = ConnectionType.fromCode(connectionConfigInfoDpo.getConnectionTypeCode()); + + List supportedConnectionTypes = callContext + .getPolarisCallContext() + .getConfigurationStore() + .getConfiguration(callContext.getPolarisCallContext(), FeatureConfiguration.SUPPORTED_CATALOG_STORAGE_TYPES) + .stream() + .map(s -> s.toUpperCase(Locale.ROOT)) + .map(ConnectionType::valueOf) + .toList(); + if (!supportedConnectionTypes.contains(connectionType)) { + throw new IllegalStateException("Unsupported connection type: " + connectionType); + } + switch (connectionType) { case ICEBERG_REST: SessionCatalog.SessionContext context = SessionCatalog.SessionContext.createEmpty(); From 10ed9c7c756306a17f3106f8fc8e3ef9fa5f44b9 Mon Sep 17 00:00:00 2001 From: Eric Maynard Date: Tue, 29 Apr 2025 01:16:07 -0700 Subject: [PATCH 10/15] autolint --- .../core/config/FeatureConfiguration.java | 5 +---- .../iceberg/IcebergCatalogHandler.java | 19 +++++++++++-------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/polaris-core/src/main/java/org/apache/polaris/core/config/FeatureConfiguration.java b/polaris-core/src/main/java/org/apache/polaris/core/config/FeatureConfiguration.java index 13cde7c360..d60653ae80 100644 --- a/polaris-core/src/main/java/org/apache/polaris/core/config/FeatureConfiguration.java +++ b/polaris-core/src/main/java/org/apache/polaris/core/config/FeatureConfiguration.java @@ -233,9 +233,6 @@ public static void enforceFeatureEnabledOrThrow( PolarisConfiguration.>builder() .key("SUPPORTED_CATALOG_CONNECTION_TYPES") .description("The list of supported catalog connection types for federation") - .defaultValue( - List.of( - ConnectionType.ICEBERG_REST.name(), - ConnectionType.HADOOP.name())) + .defaultValue(List.of(ConnectionType.ICEBERG_REST.name(), ConnectionType.HADOOP.name())) .buildFeatureConfiguration(); } diff --git a/service/common/src/main/java/org/apache/polaris/service/catalog/iceberg/IcebergCatalogHandler.java b/service/common/src/main/java/org/apache/polaris/service/catalog/iceberg/IcebergCatalogHandler.java index bb75e7e68c..270484a410 100644 --- a/service/common/src/main/java/org/apache/polaris/service/catalog/iceberg/IcebergCatalogHandler.java +++ b/service/common/src/main/java/org/apache/polaris/service/catalog/iceberg/IcebergCatalogHandler.java @@ -193,14 +193,17 @@ protected void initializeCatalog() { ConnectionType connectionType = ConnectionType.fromCode(connectionConfigInfoDpo.getConnectionTypeCode()); - List supportedConnectionTypes = callContext - .getPolarisCallContext() - .getConfigurationStore() - .getConfiguration(callContext.getPolarisCallContext(), FeatureConfiguration.SUPPORTED_CATALOG_STORAGE_TYPES) - .stream() - .map(s -> s.toUpperCase(Locale.ROOT)) - .map(ConnectionType::valueOf) - .toList(); + List supportedConnectionTypes = + callContext + .getPolarisCallContext() + .getConfigurationStore() + .getConfiguration( + callContext.getPolarisCallContext(), + FeatureConfiguration.SUPPORTED_CATALOG_STORAGE_TYPES) + .stream() + .map(s -> s.toUpperCase(Locale.ROOT)) + .map(ConnectionType::valueOf) + .toList(); if (!supportedConnectionTypes.contains(connectionType)) { throw new IllegalStateException("Unsupported connection type: " + connectionType); } From 76fda06318f2fcf44171cbdcb6efbddb915fa23a Mon Sep 17 00:00:00 2001 From: Eric Maynard Date: Tue, 29 Apr 2025 01:31:28 -0700 Subject: [PATCH 11/15] stable --- .../polaris/service/it/env/ManagementApi.java | 3 ++ .../service/admin/PolarisServiceImpl.java | 30 ++++++++++--------- 2 files changed, 19 insertions(+), 14 deletions(-) diff --git a/integration-tests/src/main/java/org/apache/polaris/service/it/env/ManagementApi.java b/integration-tests/src/main/java/org/apache/polaris/service/it/env/ManagementApi.java index 83ec020388..47e1d69528 100644 --- a/integration-tests/src/main/java/org/apache/polaris/service/it/env/ManagementApi.java +++ b/integration-tests/src/main/java/org/apache/polaris/service/it/env/ManagementApi.java @@ -173,6 +173,9 @@ public void createCatalog(String principalRoleName, Catalog catalog) { public void createCatalog(Catalog catalog) { try (Response response = request("v1/catalogs").post(Entity.json(catalog))) { + if (response.getStatus() == 500) { + System.out.println("hm"); + } assertThat(response.getStatus()).isEqualTo(CREATED.getStatusCode()); } } diff --git a/service/common/src/main/java/org/apache/polaris/service/admin/PolarisServiceImpl.java b/service/common/src/main/java/org/apache/polaris/service/admin/PolarisServiceImpl.java index 1963c374f3..95738f704c 100644 --- a/service/common/src/main/java/org/apache/polaris/service/admin/PolarisServiceImpl.java +++ b/service/common/src/main/java/org/apache/polaris/service/admin/PolarisServiceImpl.java @@ -164,20 +164,22 @@ private void validateStorageConfig(StorageConfigInfo storageConfigInfo) { private void validateConnectionConfigInfo(Catalog catalog) { if (catalog.getType() == Catalog.TypeEnum.EXTERNAL) { if (catalog instanceof ExternalCatalog externalCatalog) { - String connectionType = - externalCatalog.getConnectionConfigInfo().getConnectionType().name(); - List supportedConnectionTypes = - callContext - .getPolarisCallContext() - .getConfigurationStore() - .getConfiguration( - callContext.getPolarisCallContext(), - FeatureConfiguration.SUPPORTED_CATALOG_CONNECTION_TYPES) - .stream() - .map(s -> s.toUpperCase(Locale.ROOT)) - .toList(); - if (!supportedConnectionTypes.contains(connectionType)) { - throw new IllegalStateException("Unsupported connection type: " + connectionType); + if (externalCatalog.getConnectionConfigInfo() != null) { + String connectionType = + externalCatalog.getConnectionConfigInfo().getConnectionType().name(); + List supportedConnectionTypes = + callContext + .getPolarisCallContext() + .getConfigurationStore() + .getConfiguration( + callContext.getPolarisCallContext(), + FeatureConfiguration.SUPPORTED_CATALOG_CONNECTION_TYPES) + .stream() + .map(s -> s.toUpperCase(Locale.ROOT)) + .toList(); + if (!supportedConnectionTypes.contains(connectionType)) { + throw new IllegalStateException("Unsupported connection type: " + connectionType); + } } } } From 5067e8eb928c2e8fc0c89a4745984553291152bc Mon Sep 17 00:00:00 2001 From: Eric Maynard Date: Tue, 29 Apr 2025 17:47:37 -0700 Subject: [PATCH 12/15] Remove breakpoint anchor --- .../java/org/apache/polaris/service/it/env/ManagementApi.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/integration-tests/src/main/java/org/apache/polaris/service/it/env/ManagementApi.java b/integration-tests/src/main/java/org/apache/polaris/service/it/env/ManagementApi.java index 47e1d69528..83ec020388 100644 --- a/integration-tests/src/main/java/org/apache/polaris/service/it/env/ManagementApi.java +++ b/integration-tests/src/main/java/org/apache/polaris/service/it/env/ManagementApi.java @@ -173,9 +173,6 @@ public void createCatalog(String principalRoleName, Catalog catalog) { public void createCatalog(Catalog catalog) { try (Response response = request("v1/catalogs").post(Entity.json(catalog))) { - if (response.getStatus() == 500) { - System.out.println("hm"); - } assertThat(response.getStatus()).isEqualTo(CREATED.getStatusCode()); } } From a7854d7f6ddc8616c9d6cdf587c476faed1d5e28 Mon Sep 17 00:00:00 2001 From: Eric Maynard Date: Tue, 6 May 2025 10:13:16 -0700 Subject: [PATCH 13/15] add line to application.properties --- quarkus/defaults/src/main/resources/application.properties | 1 + 1 file changed, 1 insertion(+) diff --git a/quarkus/defaults/src/main/resources/application.properties b/quarkus/defaults/src/main/resources/application.properties index c7676b2ba0..c9024ecdd9 100644 --- a/quarkus/defaults/src/main/resources/application.properties +++ b/quarkus/defaults/src/main/resources/application.properties @@ -98,6 +98,7 @@ polaris.realm-context.require-header=false polaris.features.defaults."ENFORCE_PRINCIPAL_CREDENTIAL_ROTATION_REQUIRED_CHECKING"=false polaris.features.defaults."SUPPORTED_CATALOG_STORAGE_TYPES"=["S3","GCS","AZURE","FILE"] # polaris.features.defaults."ENABLE_CATALOG_FEDERATION"=true +polaris.features.defaults."SUPPORTED_CATALOG_CONNECTION_TYPES"=["ICEBERG_REST","HADOOP"] # realm overrides # polaris.features.realm-overrides."my-realm"."INITIALIZE_DEFAULT_CATALOG_FILEIO_FOR_TEST"=true From 84b3eb39dadfbebdacf79307181128648ed14dfc Mon Sep 17 00:00:00 2001 From: Eric Maynard Date: Tue, 6 May 2025 10:15:22 -0700 Subject: [PATCH 14/15] yank HADOOP --- .../org/apache/polaris/core/config/FeatureConfiguration.java | 2 +- quarkus/defaults/src/main/resources/application.properties | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/polaris-core/src/main/java/org/apache/polaris/core/config/FeatureConfiguration.java b/polaris-core/src/main/java/org/apache/polaris/core/config/FeatureConfiguration.java index f68044182d..ed3b017ec7 100644 --- a/polaris-core/src/main/java/org/apache/polaris/core/config/FeatureConfiguration.java +++ b/polaris-core/src/main/java/org/apache/polaris/core/config/FeatureConfiguration.java @@ -240,6 +240,6 @@ public static void enforceFeatureEnabledOrThrow( PolarisConfiguration.>builder() .key("SUPPORTED_CATALOG_CONNECTION_TYPES") .description("The list of supported catalog connection types for federation") - .defaultValue(List.of(ConnectionType.ICEBERG_REST.name(), ConnectionType.HADOOP.name())) + .defaultValue(List.of(ConnectionType.ICEBERG_REST.name())) .buildFeatureConfiguration(); } diff --git a/quarkus/defaults/src/main/resources/application.properties b/quarkus/defaults/src/main/resources/application.properties index c9024ecdd9..2e3b76edaf 100644 --- a/quarkus/defaults/src/main/resources/application.properties +++ b/quarkus/defaults/src/main/resources/application.properties @@ -98,7 +98,7 @@ polaris.realm-context.require-header=false polaris.features.defaults."ENFORCE_PRINCIPAL_CREDENTIAL_ROTATION_REQUIRED_CHECKING"=false polaris.features.defaults."SUPPORTED_CATALOG_STORAGE_TYPES"=["S3","GCS","AZURE","FILE"] # polaris.features.defaults."ENABLE_CATALOG_FEDERATION"=true -polaris.features.defaults."SUPPORTED_CATALOG_CONNECTION_TYPES"=["ICEBERG_REST","HADOOP"] +polaris.features.defaults."SUPPORTED_CATALOG_CONNECTION_TYPES"=["ICEBERG_REST"] # realm overrides # polaris.features.realm-overrides."my-realm"."INITIALIZE_DEFAULT_CATALOG_FILEIO_FOR_TEST"=true From dcd309f566a7ccf60f940f9c7c94fa84683fd4e3 Mon Sep 17 00:00:00 2001 From: Eric Maynard Date: Fri, 9 May 2025 14:47:58 -0700 Subject: [PATCH 15/15] autolint --- .../polaris/service/quarkus/admin/PolarisAuthzTestBase.java | 2 +- .../polaris/service/catalog/iceberg/IcebergCatalogAdapter.java | 2 +- .../polaris/service/catalog/iceberg/IcebergCatalogHandler.java | 2 +- .../java/org/apache/polaris/service/TestServices.java | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/quarkus/service/src/test/java/org/apache/polaris/service/quarkus/admin/PolarisAuthzTestBase.java b/quarkus/service/src/test/java/org/apache/polaris/service/quarkus/admin/PolarisAuthzTestBase.java index f25282b5bd..91f0a33d61 100644 --- a/quarkus/service/src/test/java/org/apache/polaris/service/quarkus/admin/PolarisAuthzTestBase.java +++ b/quarkus/service/src/test/java/org/apache/polaris/service/quarkus/admin/PolarisAuthzTestBase.java @@ -86,9 +86,9 @@ import org.apache.polaris.service.catalog.policy.PolicyCatalog; import org.apache.polaris.service.config.DefaultConfigurationStore; import org.apache.polaris.service.config.RealmEntityManagerFactory; +import org.apache.polaris.service.config.ReservedProperties; import org.apache.polaris.service.context.catalog.CallContextCatalogFactory; import org.apache.polaris.service.context.catalog.PolarisCallContextCatalogFactory; -import org.apache.polaris.service.config.ReservedProperties; import org.apache.polaris.service.events.PolarisEventListener; import org.apache.polaris.service.storage.PolarisStorageIntegrationProviderImpl; import org.apache.polaris.service.task.TaskExecutor; 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 7a392b9656..4484dc1291 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 @@ -74,8 +74,8 @@ import org.apache.polaris.service.catalog.api.IcebergRestCatalogApiService; import org.apache.polaris.service.catalog.api.IcebergRestConfigurationApiService; import org.apache.polaris.service.catalog.common.CatalogAdapter; -import org.apache.polaris.service.context.catalog.CallContextCatalogFactory; import org.apache.polaris.service.config.ReservedProperties; +import org.apache.polaris.service.context.catalog.CallContextCatalogFactory; import org.apache.polaris.service.http.IcebergHttpUtil; import org.apache.polaris.service.http.IfNoneMatch; import org.apache.polaris.service.types.CommitTableRequest; diff --git a/service/common/src/main/java/org/apache/polaris/service/catalog/iceberg/IcebergCatalogHandler.java b/service/common/src/main/java/org/apache/polaris/service/catalog/iceberg/IcebergCatalogHandler.java index d3e9e8c0e6..aca12eb6fb 100644 --- a/service/common/src/main/java/org/apache/polaris/service/catalog/iceberg/IcebergCatalogHandler.java +++ b/service/common/src/main/java/org/apache/polaris/service/catalog/iceberg/IcebergCatalogHandler.java @@ -98,8 +98,8 @@ import org.apache.polaris.core.storage.PolarisStorageActions; import org.apache.polaris.service.catalog.SupportsNotifications; import org.apache.polaris.service.catalog.common.CatalogHandler; -import org.apache.polaris.service.context.catalog.CallContextCatalogFactory; import org.apache.polaris.service.config.ReservedProperties; +import org.apache.polaris.service.context.catalog.CallContextCatalogFactory; import org.apache.polaris.service.http.IcebergHttpUtil; import org.apache.polaris.service.http.IfNoneMatch; import org.apache.polaris.service.types.NotificationRequest; diff --git a/service/common/src/testFixtures/java/org/apache/polaris/service/TestServices.java b/service/common/src/testFixtures/java/org/apache/polaris/service/TestServices.java index e523c15295..34a3caf454 100644 --- a/service/common/src/testFixtures/java/org/apache/polaris/service/TestServices.java +++ b/service/common/src/testFixtures/java/org/apache/polaris/service/TestServices.java @@ -54,9 +54,9 @@ import org.apache.polaris.service.catalog.io.MeasuredFileIOFactory; import org.apache.polaris.service.config.DefaultConfigurationStore; import org.apache.polaris.service.config.RealmEntityManagerFactory; +import org.apache.polaris.service.config.ReservedProperties; import org.apache.polaris.service.context.catalog.CallContextCatalogFactory; import org.apache.polaris.service.context.catalog.PolarisCallContextCatalogFactory; -import org.apache.polaris.service.config.ReservedProperties; import org.apache.polaris.service.events.PolarisEventListener; import org.apache.polaris.service.events.TestPolarisEventListener; import org.apache.polaris.service.persistence.InMemoryPolarisMetaStoreManagerFactory;