From ea89eaf2ec31f8866a6bdc5a0fc25fb5a5a801eb Mon Sep 17 00:00:00 2001 From: Eric Maynard Date: Thu, 1 Aug 2024 10:12:15 -0700 Subject: [PATCH 01/13] initial commit --- .../LocalPolarisMetaStoreManagerFactory.java | 27 ++++++++++++++++--- .../persistence/MetaStoreManagerFactory.java | 2 +- .../service/BootstrapRealmsCommand.java | 14 +++++++++- ...nMemoryPolarisMetaStoreManagerFactory.java | 2 +- .../catalog/BasePolarisCatalogTest.java | 2 +- 5 files changed, 40 insertions(+), 7 deletions(-) diff --git a/polaris-core/src/main/java/io/polaris/core/persistence/LocalPolarisMetaStoreManagerFactory.java b/polaris-core/src/main/java/io/polaris/core/persistence/LocalPolarisMetaStoreManagerFactory.java index 70a92331a8..ee97830af2 100644 --- a/polaris-core/src/main/java/io/polaris/core/persistence/LocalPolarisMetaStoreManagerFactory.java +++ b/polaris-core/src/main/java/io/polaris/core/persistence/LocalPolarisMetaStoreManagerFactory.java @@ -73,7 +73,7 @@ private void initializeForRealm(RealmContext realmContext) { @Override public synchronized Map bootstrapRealms( - List realms) { + List realms, boolean overwrite) { Map results = new HashMap<>(); for (String realm : realms) { @@ -82,7 +82,7 @@ public synchronized Map initializeForRealm(realmContext); PolarisMetaStoreManager.PrincipalSecretsResult secretsResult = bootstrapServiceAndCreatePolarisPrincipalForRealm( - realmContext, metaStoreManagerMap.get(realmContext.getRealmIdentifier())); + realmContext, metaStoreManagerMap.get(realmContext.getRealmIdentifier()), overwrite); results.put(realmContext.getRealmIdentifier(), secretsResult); } } @@ -143,7 +143,9 @@ public void setStorageIntegrationProvider(PolarisStorageIntegrationProvider stor */ private PolarisMetaStoreManager.PrincipalSecretsResult bootstrapServiceAndCreatePolarisPrincipalForRealm( - RealmContext realmContext, PolarisMetaStoreManager metaStoreManager) { + RealmContext realmContext, + PolarisMetaStoreManager metaStoreManager, + boolean overwrite) { // While bootstrapping we need to act as a fake privileged context since the real // CallContext hasn't even been resolved yet. PolarisCallContext polarisContext = @@ -151,6 +153,25 @@ public void setStorageIntegrationProvider(PolarisStorageIntegrationProvider stor sessionSupplierMap.get(realmContext.getRealmIdentifier()).get(), diagServices); CallContext.setCurrentContext(CallContext.of(realmContext, polarisContext)); + if (!overwrite) { + PolarisMetaStoreManager.EntityResult preliminaryRootPrincipalLookup = + metaStoreManager.readEntityByName( + polarisContext, + null, + PolarisEntityType.PRINCIPAL, + PolarisEntitySubType.NULL_SUBTYPE, + PolarisEntityConstants.getRootPrincipalName()); + if (preliminaryRootPrincipalLookup.isSuccess()) { + String overrideMessage = "It appears this metastore manager has already been bootstrapped." + + " To continue bootstrapping and purge any existing Polaris entities from the metastore manager, please" + + " re-run this command with the flag `--overwrite`."; + logger.error( + "\n\n {} \n\n", + overrideMessage); + throw new IllegalArgumentException(overrideMessage); + } + } + metaStoreManager.bootstrapPolarisService(polarisContext); PolarisMetaStoreManager.EntityResult rootPrincipalLookup = diff --git a/polaris-core/src/main/java/io/polaris/core/persistence/MetaStoreManagerFactory.java b/polaris-core/src/main/java/io/polaris/core/persistence/MetaStoreManagerFactory.java index 199778dedb..b00c7d7d22 100644 --- a/polaris-core/src/main/java/io/polaris/core/persistence/MetaStoreManagerFactory.java +++ b/polaris-core/src/main/java/io/polaris/core/persistence/MetaStoreManagerFactory.java @@ -42,5 +42,5 @@ public interface MetaStoreManagerFactory extends Discoverable { void setMetricRegistry(PolarisMetricRegistry metricRegistry); - Map bootstrapRealms(List realms); + Map bootstrapRealms(List realms, boolean overwrite); } diff --git a/polaris-service/src/main/java/io/polaris/service/BootstrapRealmsCommand.java b/polaris-service/src/main/java/io/polaris/service/BootstrapRealmsCommand.java index cf17edcf77..2a8cac6957 100644 --- a/polaris-service/src/main/java/io/polaris/service/BootstrapRealmsCommand.java +++ b/polaris-service/src/main/java/io/polaris/service/BootstrapRealmsCommand.java @@ -23,7 +23,9 @@ import io.polaris.service.config.PolarisApplicationConfig; import io.polaris.service.config.RealmEntityManagerFactory; import io.polaris.service.context.CallContextResolver; +import net.sourceforge.argparse4j.impl.Arguments; import net.sourceforge.argparse4j.inf.Namespace; +import net.sourceforge.argparse4j.inf.Subparser; /** * Command for bootstrapping root level service principals for each realm. This command will invoke @@ -35,12 +37,22 @@ public BootstrapRealmsCommand() { super("bootstrap", "bootstraps principal credentials for all realms and prints them to log"); } + @Override + public void configure(Subparser subparser) { + super.configure(subparser); + subparser.addArgument("--overwrite") + .action(Arguments.storeTrue()) + .help("If set, overwrite existing entities during bootstrapping. This may be irreversible."); + } + @Override protected void run( Bootstrap bootstrap, Namespace namespace, PolarisApplicationConfig configuration) throws Exception { + boolean overwrite = namespace.getBoolean("overwrite"); + MetaStoreManagerFactory metaStoreManagerFactory = configuration.getMetaStoreManagerFactory(); PolarisConfigurationStore configurationStore = configuration.getConfigurationStore(); @@ -55,6 +67,6 @@ protected void run( csa.setConfigurationStore(configurationStore); } - metaStoreManagerFactory.bootstrapRealms(configuration.getDefaultRealms()); + metaStoreManagerFactory.bootstrapRealms(configuration.getDefaultRealms(), overwrite); } } diff --git a/polaris-service/src/main/java/io/polaris/service/persistence/InMemoryPolarisMetaStoreManagerFactory.java b/polaris-service/src/main/java/io/polaris/service/persistence/InMemoryPolarisMetaStoreManagerFactory.java index d9f93dd196..056b86dd95 100644 --- a/polaris-service/src/main/java/io/polaris/service/persistence/InMemoryPolarisMetaStoreManagerFactory.java +++ b/polaris-service/src/main/java/io/polaris/service/persistence/InMemoryPolarisMetaStoreManagerFactory.java @@ -69,7 +69,7 @@ public synchronized Supplier getOrCreateSessionSupplier private void bootstrapRealmAndPrintCredentials(String realmId) { Map results = - this.bootstrapRealms(Arrays.asList(realmId)); + this.bootstrapRealms(Arrays.asList(realmId), false); bootstrappedRealms.add(realmId); PolarisMetaStoreManager.PrincipalSecretsResult principalSecrets = results.get(realmId); diff --git a/polaris-service/src/test/java/io/polaris/service/catalog/BasePolarisCatalogTest.java b/polaris-service/src/test/java/io/polaris/service/catalog/BasePolarisCatalogTest.java index 6ca1957230..63edd8a326 100644 --- a/polaris-service/src/test/java/io/polaris/service/catalog/BasePolarisCatalogTest.java +++ b/polaris-service/src/test/java/io/polaris/service/catalog/BasePolarisCatalogTest.java @@ -1099,7 +1099,7 @@ public void setMetricRegistry(PolarisMetricRegistry metricRegistry) {} @Override public Map - bootstrapRealms(List realms) { + bootstrapRealms(List realms, boolean overwrite) { throw new NotImplementedException("Bootstrapping realms is not supported"); } From 7bb0f01059eeb95f8e56fe793849cc95f0e3f925 Mon Sep 17 00:00:00 2001 From: Eric Maynard Date: Fri, 2 Aug 2024 12:07:02 -0700 Subject: [PATCH 02/13] style --- .../java/io/polaris/service/BootstrapRealmsCommand.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/polaris-service/src/main/java/io/polaris/service/BootstrapRealmsCommand.java b/polaris-service/src/main/java/io/polaris/service/BootstrapRealmsCommand.java index 2a8cac6957..52ce10754c 100644 --- a/polaris-service/src/main/java/io/polaris/service/BootstrapRealmsCommand.java +++ b/polaris-service/src/main/java/io/polaris/service/BootstrapRealmsCommand.java @@ -40,9 +40,11 @@ public BootstrapRealmsCommand() { @Override public void configure(Subparser subparser) { super.configure(subparser); - subparser.addArgument("--overwrite") + subparser + .addArgument("--overwrite") .action(Arguments.storeTrue()) - .help("If set, overwrite existing entities during bootstrapping. This may be irreversible."); + .help( + "If set, overwrite existing entities during bootstrapping. This may be irreversible."); } @Override From 897dc5b0fc348edf11d7b19c1dae7b5279105332 Mon Sep 17 00:00:00 2001 From: Eric Maynard Date: Mon, 5 Aug 2024 00:11:25 -0700 Subject: [PATCH 03/13] preserve old interface --- .../io/polaris/core/persistence/MetaStoreManagerFactory.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/polaris-core/src/main/java/io/polaris/core/persistence/MetaStoreManagerFactory.java b/polaris-core/src/main/java/io/polaris/core/persistence/MetaStoreManagerFactory.java index b00c7d7d22..ae70e35535 100644 --- a/polaris-core/src/main/java/io/polaris/core/persistence/MetaStoreManagerFactory.java +++ b/polaris-core/src/main/java/io/polaris/core/persistence/MetaStoreManagerFactory.java @@ -43,4 +43,8 @@ public interface MetaStoreManagerFactory extends Discoverable { void setMetricRegistry(PolarisMetricRegistry metricRegistry); Map bootstrapRealms(List realms, boolean overwrite); + + default Map bootstrapRealms(List realms) { + return bootstrapRealms(realms, false); + } } From 94d42329b79a4cb58fd69432a4d4f3f49f5c9c77 Mon Sep 17 00:00:00 2001 From: Eric Maynard Date: Mon, 5 Aug 2024 00:32:11 -0700 Subject: [PATCH 04/13] lint --- .../LocalPolarisMetaStoreManagerFactory.java | 19 +++++++++---------- .../persistence/MetaStoreManagerFactory.java | 6 ++++-- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/polaris-core/src/main/java/io/polaris/core/persistence/LocalPolarisMetaStoreManagerFactory.java b/polaris-core/src/main/java/io/polaris/core/persistence/LocalPolarisMetaStoreManagerFactory.java index ee97830af2..fb54ee007f 100644 --- a/polaris-core/src/main/java/io/polaris/core/persistence/LocalPolarisMetaStoreManagerFactory.java +++ b/polaris-core/src/main/java/io/polaris/core/persistence/LocalPolarisMetaStoreManagerFactory.java @@ -82,7 +82,9 @@ public synchronized Map initializeForRealm(realmContext); PolarisMetaStoreManager.PrincipalSecretsResult secretsResult = bootstrapServiceAndCreatePolarisPrincipalForRealm( - realmContext, metaStoreManagerMap.get(realmContext.getRealmIdentifier()), overwrite); + realmContext, + metaStoreManagerMap.get(realmContext.getRealmIdentifier()), + overwrite); results.put(realmContext.getRealmIdentifier(), secretsResult); } } @@ -143,9 +145,7 @@ public void setStorageIntegrationProvider(PolarisStorageIntegrationProvider stor */ private PolarisMetaStoreManager.PrincipalSecretsResult bootstrapServiceAndCreatePolarisPrincipalForRealm( - RealmContext realmContext, - PolarisMetaStoreManager metaStoreManager, - boolean overwrite) { + RealmContext realmContext, PolarisMetaStoreManager metaStoreManager, boolean overwrite) { // While bootstrapping we need to act as a fake privileged context since the real // CallContext hasn't even been resolved yet. PolarisCallContext polarisContext = @@ -162,12 +162,11 @@ public void setStorageIntegrationProvider(PolarisStorageIntegrationProvider stor PolarisEntitySubType.NULL_SUBTYPE, PolarisEntityConstants.getRootPrincipalName()); if (preliminaryRootPrincipalLookup.isSuccess()) { - String overrideMessage = "It appears this metastore manager has already been bootstrapped." + - " To continue bootstrapping and purge any existing Polaris entities from the metastore manager, please" + - " re-run this command with the flag `--overwrite`."; - logger.error( - "\n\n {} \n\n", - overrideMessage); + String overrideMessage = + "It appears this metastore manager has already been bootstrapped." + + " To continue bootstrapping and purge any existing Polaris entities from the metastore manager, please" + + " re-run this command with the flag `--overwrite`."; + logger.error("\n\n {} \n\n", overrideMessage); throw new IllegalArgumentException(overrideMessage); } } diff --git a/polaris-core/src/main/java/io/polaris/core/persistence/MetaStoreManagerFactory.java b/polaris-core/src/main/java/io/polaris/core/persistence/MetaStoreManagerFactory.java index ae70e35535..9968ddf1e8 100644 --- a/polaris-core/src/main/java/io/polaris/core/persistence/MetaStoreManagerFactory.java +++ b/polaris-core/src/main/java/io/polaris/core/persistence/MetaStoreManagerFactory.java @@ -42,9 +42,11 @@ public interface MetaStoreManagerFactory extends Discoverable { void setMetricRegistry(PolarisMetricRegistry metricRegistry); - Map bootstrapRealms(List realms, boolean overwrite); + Map bootstrapRealms( + List realms, boolean overwrite); - default Map bootstrapRealms(List realms) { + default Map bootstrapRealms( + List realms) { return bootstrapRealms(realms, false); } } From 02caf5b1811845c08c19f1a9adbe3ddc98d74cee Mon Sep 17 00:00:00 2001 From: Eric Maynard Date: Mon, 5 Aug 2024 18:09:25 -0700 Subject: [PATCH 05/13] start implementing purge command --- .../LocalPolarisMetaStoreManagerFactory.java | 51 +++++++++------- .../persistence/MetaStoreManagerFactory.java | 8 +-- .../service/BootstrapRealmsCommand.java | 16 +---- .../polaris/service/PurgeRealmsCommand.java | 60 +++++++++++++++++++ ...nMemoryPolarisMetaStoreManagerFactory.java | 2 +- .../catalog/BasePolarisCatalogTest.java | 7 ++- 6 files changed, 100 insertions(+), 44 deletions(-) create mode 100644 polaris-service/src/main/java/io/polaris/service/PurgeRealmsCommand.java diff --git a/polaris-core/src/main/java/io/polaris/core/persistence/LocalPolarisMetaStoreManagerFactory.java b/polaris-core/src/main/java/io/polaris/core/persistence/LocalPolarisMetaStoreManagerFactory.java index fb54ee007f..7245fce9fd 100644 --- a/polaris-core/src/main/java/io/polaris/core/persistence/LocalPolarisMetaStoreManagerFactory.java +++ b/polaris-core/src/main/java/io/polaris/core/persistence/LocalPolarisMetaStoreManagerFactory.java @@ -73,7 +73,7 @@ private void initializeForRealm(RealmContext realmContext) { @Override public synchronized Map bootstrapRealms( - List realms, boolean overwrite) { + List realms) { Map results = new HashMap<>(); for (String realm : realms) { @@ -82,9 +82,7 @@ public synchronized Map initializeForRealm(realmContext); PolarisMetaStoreManager.PrincipalSecretsResult secretsResult = bootstrapServiceAndCreatePolarisPrincipalForRealm( - realmContext, - metaStoreManagerMap.get(realmContext.getRealmIdentifier()), - overwrite); + realmContext, metaStoreManagerMap.get(realmContext.getRealmIdentifier())); results.put(realmContext.getRealmIdentifier(), secretsResult); } } @@ -92,6 +90,20 @@ public synchronized Map return results; } + @Override + public void purgeRealms(List realms) { + for (String realm : realms) { + metaStoreManagerMap.remove(realm); + storageCredentialCacheMap.remove(realm); + backingStoreMap.remove(realm); + + PolarisMetaStoreSession session = sessionSupplierMap.get(realm).get(); + PolarisCallContext realmContext = new PolarisCallContext(session, diagServices); + session.deleteAll(realmContext); + sessionSupplierMap.remove(realm); + } + } + @Override public synchronized PolarisMetaStoreManager getOrCreateMetaStoreManager( RealmContext realmContext) { @@ -145,7 +157,7 @@ public void setStorageIntegrationProvider(PolarisStorageIntegrationProvider stor */ private PolarisMetaStoreManager.PrincipalSecretsResult bootstrapServiceAndCreatePolarisPrincipalForRealm( - RealmContext realmContext, PolarisMetaStoreManager metaStoreManager, boolean overwrite) { + RealmContext realmContext, PolarisMetaStoreManager metaStoreManager) { // While bootstrapping we need to act as a fake privileged context since the real // CallContext hasn't even been resolved yet. PolarisCallContext polarisContext = @@ -153,22 +165,19 @@ public void setStorageIntegrationProvider(PolarisStorageIntegrationProvider stor sessionSupplierMap.get(realmContext.getRealmIdentifier()).get(), diagServices); CallContext.setCurrentContext(CallContext.of(realmContext, polarisContext)); - if (!overwrite) { - PolarisMetaStoreManager.EntityResult preliminaryRootPrincipalLookup = - metaStoreManager.readEntityByName( - polarisContext, - null, - PolarisEntityType.PRINCIPAL, - PolarisEntitySubType.NULL_SUBTYPE, - PolarisEntityConstants.getRootPrincipalName()); - if (preliminaryRootPrincipalLookup.isSuccess()) { - String overrideMessage = - "It appears this metastore manager has already been bootstrapped." - + " To continue bootstrapping and purge any existing Polaris entities from the metastore manager, please" - + " re-run this command with the flag `--overwrite`."; - logger.error("\n\n {} \n\n", overrideMessage); - throw new IllegalArgumentException(overrideMessage); - } + PolarisMetaStoreManager.EntityResult preliminaryRootPrincipalLookup = + metaStoreManager.readEntityByName( + polarisContext, + null, + PolarisEntityType.PRINCIPAL, + PolarisEntitySubType.NULL_SUBTYPE, + PolarisEntityConstants.getRootPrincipalName()); + if (preliminaryRootPrincipalLookup.isSuccess()) { + String overrideMessage = + "It appears this metastore manager has already been bootstrapped." + + " To continue bootstrapping, please first purge the metastore manager with the `purge` command."; + logger.error("\n\n {} \n\n", overrideMessage); + throw new IllegalArgumentException(overrideMessage); } metaStoreManager.bootstrapPolarisService(polarisContext); diff --git a/polaris-core/src/main/java/io/polaris/core/persistence/MetaStoreManagerFactory.java b/polaris-core/src/main/java/io/polaris/core/persistence/MetaStoreManagerFactory.java index 9968ddf1e8..ff5dcbe95a 100644 --- a/polaris-core/src/main/java/io/polaris/core/persistence/MetaStoreManagerFactory.java +++ b/polaris-core/src/main/java/io/polaris/core/persistence/MetaStoreManagerFactory.java @@ -42,11 +42,7 @@ public interface MetaStoreManagerFactory extends Discoverable { void setMetricRegistry(PolarisMetricRegistry metricRegistry); - Map bootstrapRealms( - List realms, boolean overwrite); + Map bootstrapRealms(List realms); - default Map bootstrapRealms( - List realms) { - return bootstrapRealms(realms, false); - } + void purgeRealms(List realms); } diff --git a/polaris-service/src/main/java/io/polaris/service/BootstrapRealmsCommand.java b/polaris-service/src/main/java/io/polaris/service/BootstrapRealmsCommand.java index 52ce10754c..cf17edcf77 100644 --- a/polaris-service/src/main/java/io/polaris/service/BootstrapRealmsCommand.java +++ b/polaris-service/src/main/java/io/polaris/service/BootstrapRealmsCommand.java @@ -23,9 +23,7 @@ import io.polaris.service.config.PolarisApplicationConfig; import io.polaris.service.config.RealmEntityManagerFactory; import io.polaris.service.context.CallContextResolver; -import net.sourceforge.argparse4j.impl.Arguments; import net.sourceforge.argparse4j.inf.Namespace; -import net.sourceforge.argparse4j.inf.Subparser; /** * Command for bootstrapping root level service principals for each realm. This command will invoke @@ -37,24 +35,12 @@ public BootstrapRealmsCommand() { super("bootstrap", "bootstraps principal credentials for all realms and prints them to log"); } - @Override - public void configure(Subparser subparser) { - super.configure(subparser); - subparser - .addArgument("--overwrite") - .action(Arguments.storeTrue()) - .help( - "If set, overwrite existing entities during bootstrapping. This may be irreversible."); - } - @Override protected void run( Bootstrap bootstrap, Namespace namespace, PolarisApplicationConfig configuration) throws Exception { - boolean overwrite = namespace.getBoolean("overwrite"); - MetaStoreManagerFactory metaStoreManagerFactory = configuration.getMetaStoreManagerFactory(); PolarisConfigurationStore configurationStore = configuration.getConfigurationStore(); @@ -69,6 +55,6 @@ protected void run( csa.setConfigurationStore(configurationStore); } - metaStoreManagerFactory.bootstrapRealms(configuration.getDefaultRealms(), overwrite); + metaStoreManagerFactory.bootstrapRealms(configuration.getDefaultRealms()); } } diff --git a/polaris-service/src/main/java/io/polaris/service/PurgeRealmsCommand.java b/polaris-service/src/main/java/io/polaris/service/PurgeRealmsCommand.java new file mode 100644 index 0000000000..a25fed5f8e --- /dev/null +++ b/polaris-service/src/main/java/io/polaris/service/PurgeRealmsCommand.java @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2024 Snowflake Computing Inc. + * + * Licensed 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 io.polaris.service; + +import io.dropwizard.core.cli.ConfiguredCommand; +import io.dropwizard.core.setup.Bootstrap; +import io.polaris.core.PolarisConfigurationStore; +import io.polaris.core.persistence.MetaStoreManagerFactory; +import io.polaris.service.config.ConfigurationStoreAware; +import io.polaris.service.config.PolarisApplicationConfig; +import io.polaris.service.config.RealmEntityManagerFactory; +import io.polaris.service.context.CallContextResolver; +import net.sourceforge.argparse4j.inf.Namespace; + +/** + * Command for purging root level service principals for a realm. This command will invoke a default + * implementation which generates random user id and secret. These credentials will be printed out + * to the log and standard output (stdout). + */ +public class PurgeRealmsCommand extends ConfiguredCommand { + public PurgeRealmsCommand() { + super("purge", "purge principal credentials for all realms and prints them to log"); + } + + @Override + protected void run( + Bootstrap bootstrap, + Namespace namespace, + PolarisApplicationConfig configuration) + throws Exception { + MetaStoreManagerFactory metaStoreManagerFactory = configuration.getMetaStoreManagerFactory(); + + PolarisConfigurationStore configurationStore = configuration.getConfigurationStore(); + if (metaStoreManagerFactory instanceof ConfigurationStoreAware) { + ((ConfigurationStoreAware) metaStoreManagerFactory).setConfigurationStore(configurationStore); + } + RealmEntityManagerFactory entityManagerFactory = + new RealmEntityManagerFactory(metaStoreManagerFactory); + CallContextResolver callContextResolver = configuration.getCallContextResolver(); + callContextResolver.setEntityManagerFactory(entityManagerFactory); + if (callContextResolver instanceof ConfigurationStoreAware csa) { + csa.setConfigurationStore(configurationStore); + } + + metaStoreManagerFactory.purgeRealms(configuration.getDefaultRealms()); + } +} diff --git a/polaris-service/src/main/java/io/polaris/service/persistence/InMemoryPolarisMetaStoreManagerFactory.java b/polaris-service/src/main/java/io/polaris/service/persistence/InMemoryPolarisMetaStoreManagerFactory.java index 056b86dd95..d9f93dd196 100644 --- a/polaris-service/src/main/java/io/polaris/service/persistence/InMemoryPolarisMetaStoreManagerFactory.java +++ b/polaris-service/src/main/java/io/polaris/service/persistence/InMemoryPolarisMetaStoreManagerFactory.java @@ -69,7 +69,7 @@ public synchronized Supplier getOrCreateSessionSupplier private void bootstrapRealmAndPrintCredentials(String realmId) { Map results = - this.bootstrapRealms(Arrays.asList(realmId), false); + this.bootstrapRealms(Arrays.asList(realmId)); bootstrappedRealms.add(realmId); PolarisMetaStoreManager.PrincipalSecretsResult principalSecrets = results.get(realmId); diff --git a/polaris-service/src/test/java/io/polaris/service/catalog/BasePolarisCatalogTest.java b/polaris-service/src/test/java/io/polaris/service/catalog/BasePolarisCatalogTest.java index 63edd8a326..7f8ce8b9aa 100644 --- a/polaris-service/src/test/java/io/polaris/service/catalog/BasePolarisCatalogTest.java +++ b/polaris-service/src/test/java/io/polaris/service/catalog/BasePolarisCatalogTest.java @@ -1099,10 +1099,15 @@ public void setMetricRegistry(PolarisMetricRegistry metricRegistry) {} @Override public Map - bootstrapRealms(List realms, boolean overwrite) { + bootstrapRealms(List realms) { throw new NotImplementedException("Bootstrapping realms is not supported"); } + @Override + public void purgeRealms(List realms) { + throw new NotImplementedException("Purging realms is not supported"); + } + @Override public void setStorageIntegrationProvider( PolarisStorageIntegrationProvider storageIntegrationProvider) {} From 8b5ae700009a36fc6c08543e5df0e2b0e1560067 Mon Sep 17 00:00:00 2001 From: Eric Maynard Date: Mon, 5 Aug 2024 18:16:32 -0700 Subject: [PATCH 06/13] check in --- .../core/persistence/LocalPolarisMetaStoreManagerFactory.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/polaris-core/src/main/java/io/polaris/core/persistence/LocalPolarisMetaStoreManagerFactory.java b/polaris-core/src/main/java/io/polaris/core/persistence/LocalPolarisMetaStoreManagerFactory.java index 7245fce9fd..65936468b6 100644 --- a/polaris-core/src/main/java/io/polaris/core/persistence/LocalPolarisMetaStoreManagerFactory.java +++ b/polaris-core/src/main/java/io/polaris/core/persistence/LocalPolarisMetaStoreManagerFactory.java @@ -174,8 +174,8 @@ public void setStorageIntegrationProvider(PolarisStorageIntegrationProvider stor PolarisEntityConstants.getRootPrincipalName()); if (preliminaryRootPrincipalLookup.isSuccess()) { String overrideMessage = - "It appears this metastore manager has already been bootstrapped." - + " To continue bootstrapping, please first purge the metastore manager with the `purge` command."; + "It appears this metastore manager has already been bootstrapped. " + + "To continue bootstrapping, please first purge the metastore with the `purge` command."; logger.error("\n\n {} \n\n", overrideMessage); throw new IllegalArgumentException(overrideMessage); } From 4cb00799d47299e5ee6e8ee82010913b7fca86db Mon Sep 17 00:00:00 2001 From: Eric Maynard Date: Mon, 5 Aug 2024 18:51:06 -0700 Subject: [PATCH 07/13] check in --- .../LocalPolarisMetaStoreManagerFactory.java | 13 +++++++------ .../persistence/PolarisMetaStoreManager.java | 16 +++++++++++++--- .../persistence/PolarisMetaStoreManagerImpl.java | 12 ++++++++++++ polaris-server.yml | 6 +++--- .../polaris/service/BootstrapRealmsCommand.java | 5 +++++ .../io/polaris/service/PolarisApplication.java | 3 +++ .../io/polaris/service/PurgeRealmsCommand.java | 5 +++++ 7 files changed, 48 insertions(+), 12 deletions(-) diff --git a/polaris-core/src/main/java/io/polaris/core/persistence/LocalPolarisMetaStoreManagerFactory.java b/polaris-core/src/main/java/io/polaris/core/persistence/LocalPolarisMetaStoreManagerFactory.java index a0788894d0..c66f67e73d 100644 --- a/polaris-core/src/main/java/io/polaris/core/persistence/LocalPolarisMetaStoreManagerFactory.java +++ b/polaris-core/src/main/java/io/polaris/core/persistence/LocalPolarisMetaStoreManagerFactory.java @@ -74,7 +74,6 @@ private void initializeForRealm(RealmContext realmContext) { public synchronized Map bootstrapRealms( List realms) { Map results = new HashMap<>(); - for (String realm : realms) { RealmContext realmContext = () -> realm; if (!metaStoreManagerMap.containsKey(realmContext.getRealmIdentifier())) { @@ -92,14 +91,16 @@ public synchronized Map @Override public void purgeRealms(List realms) { for (String realm : realms) { - metaStoreManagerMap.remove(realm); + PolarisMetaStoreManager metaStoreManager = getOrCreateMetaStoreManager(() -> realm); + PolarisMetaStoreSession session = getOrCreateSessionSupplier(() -> realm).get(); + + PolarisCallContext callContext = new PolarisCallContext(session, diagServices); + metaStoreManager.purge(callContext); + storageCredentialCacheMap.remove(realm); backingStoreMap.remove(realm); - - PolarisMetaStoreSession session = sessionSupplierMap.get(realm).get(); - PolarisCallContext realmContext = new PolarisCallContext(session, diagServices); - session.deleteAll(realmContext); sessionSupplierMap.remove(realm); + metaStoreManagerMap.remove(realm); } } diff --git a/polaris-core/src/main/java/io/polaris/core/persistence/PolarisMetaStoreManager.java b/polaris-core/src/main/java/io/polaris/core/persistence/PolarisMetaStoreManager.java index 278dea10af..755ac51f9d 100644 --- a/polaris-core/src/main/java/io/polaris/core/persistence/PolarisMetaStoreManager.java +++ b/polaris-core/src/main/java/io/polaris/core/persistence/PolarisMetaStoreManager.java @@ -176,8 +176,18 @@ public boolean alreadyExists() { } /** - * Bootstrap the Polaris service, will remove ALL existing persisted entities, then will create - * the root catalog, root principal and associated service admin role. + * Bootstrap the Polaris service, creating the root catalog, root principal, and associated + * service admin role. Will fail if the service has already been bootstrapped. + * + * @param callCtx call context + * @return always success or unexpected error + */ + @NotNull + BaseResult bootstrapPolarisService(@NotNull PolarisCallContext callCtx); + + /** + * Purge all metadata associated with the Polaris service, resetting the metastore to the state it + * was in prior to bootstrapping. * *

*************************** WARNING ************************ * @@ -187,7 +197,7 @@ public boolean alreadyExists() { * @return always success or unexpected error */ @NotNull - BaseResult bootstrapPolarisService(@NotNull PolarisCallContext callCtx); + BaseResult purge(@NotNull PolarisCallContext callCtx); /** the return for an entity lookup call */ class EntityResult extends BaseResult { diff --git a/polaris-core/src/main/java/io/polaris/core/persistence/PolarisMetaStoreManagerImpl.java b/polaris-core/src/main/java/io/polaris/core/persistence/PolarisMetaStoreManagerImpl.java index 710fbed1d3..a68e2c8861 100644 --- a/polaris-core/src/main/java/io/polaris/core/persistence/PolarisMetaStoreManagerImpl.java +++ b/polaris-core/src/main/java/io/polaris/core/persistence/PolarisMetaStoreManagerImpl.java @@ -706,6 +706,18 @@ private void bootstrapPolarisService( return new BaseResult(ReturnStatus.SUCCESS); } + @Override + public @NotNull BaseResult purge(@NotNull PolarisCallContext callCtx) { + // get meta store we should be using + PolarisMetaStoreSession ms = callCtx.getMetaStore(); + + // run operation in a read/write transaction + ms.runActionInTransaction(callCtx, () -> ms.deleteAll(callCtx)); + + // all good + return new BaseResult(ReturnStatus.SUCCESS); + } + /** * See {@link #readEntityByName(PolarisCallContext, List, PolarisEntityType, PolarisEntitySubType, * String)} diff --git a/polaris-server.yml b/polaris-server.yml index cdfeb7027b..3582cfe1ec 100644 --- a/polaris-server.yml +++ b/polaris-server.yml @@ -88,9 +88,9 @@ defaultRealms: - default-realm metaStoreManager: - type: in-memory - # type: eclipse-link # uncomment to use eclipse-link as metastore - # persistence-unit: polaris-dev + # type: in-memory + type: eclipse-link # uncomment to use eclipse-link as metastore + persistence-unit: polaris-dev # TODO - avoid duplicating token broker config oauth2: diff --git a/polaris-service/src/main/java/io/polaris/service/BootstrapRealmsCommand.java b/polaris-service/src/main/java/io/polaris/service/BootstrapRealmsCommand.java index cf17edcf77..270a9335f4 100644 --- a/polaris-service/src/main/java/io/polaris/service/BootstrapRealmsCommand.java +++ b/polaris-service/src/main/java/io/polaris/service/BootstrapRealmsCommand.java @@ -24,6 +24,7 @@ import io.polaris.service.config.RealmEntityManagerFactory; import io.polaris.service.context.CallContextResolver; import net.sourceforge.argparse4j.inf.Namespace; +import org.slf4j.Logger; /** * Command for bootstrapping root level service principals for each realm. This command will invoke @@ -31,6 +32,8 @@ * printed out to the log and standard output (stdout). */ public class BootstrapRealmsCommand extends ConfiguredCommand { + private Logger LOGGER = org.slf4j.LoggerFactory.getLogger(BootstrapRealmsCommand.class); + public BootstrapRealmsCommand() { super("bootstrap", "bootstraps principal credentials for all realms and prints them to log"); } @@ -56,5 +59,7 @@ protected void run( } metaStoreManagerFactory.bootstrapRealms(configuration.getDefaultRealms()); + + LOGGER.info("Bootstrap completed successfully."); } } diff --git a/polaris-service/src/main/java/io/polaris/service/PolarisApplication.java b/polaris-service/src/main/java/io/polaris/service/PolarisApplication.java index e218e60c37..d5cd3e3fa3 100644 --- a/polaris-service/src/main/java/io/polaris/service/PolarisApplication.java +++ b/polaris-service/src/main/java/io/polaris/service/PolarisApplication.java @@ -137,6 +137,7 @@ public void initialize(Bootstrap bootstrap) { bootstrap.setConfigurationSourceProvider(provider); bootstrap.addCommand(new BootstrapRealmsCommand()); + bootstrap.addCommand(new PurgeRealmsCommand()); } @Override @@ -300,6 +301,8 @@ public void run(PolarisApplicationConfig configuration, Environment environment) if (metaStoreManagerFactory instanceof InMemoryPolarisMetaStoreManagerFactory) { metaStoreManagerFactory.getOrCreateMetaStoreManager(configuration::getDefaultRealm); } + + LOGGER.info("Server started successfully."); } private static OpenTelemetry setupTracing() { diff --git a/polaris-service/src/main/java/io/polaris/service/PurgeRealmsCommand.java b/polaris-service/src/main/java/io/polaris/service/PurgeRealmsCommand.java index a25fed5f8e..9f61dc1f4c 100644 --- a/polaris-service/src/main/java/io/polaris/service/PurgeRealmsCommand.java +++ b/polaris-service/src/main/java/io/polaris/service/PurgeRealmsCommand.java @@ -24,6 +24,7 @@ import io.polaris.service.config.RealmEntityManagerFactory; import io.polaris.service.context.CallContextResolver; import net.sourceforge.argparse4j.inf.Namespace; +import org.slf4j.Logger; /** * Command for purging root level service principals for a realm. This command will invoke a default @@ -31,6 +32,8 @@ * to the log and standard output (stdout). */ public class PurgeRealmsCommand extends ConfiguredCommand { + private Logger LOGGER = org.slf4j.LoggerFactory.getLogger(PurgeRealmsCommand.class); + public PurgeRealmsCommand() { super("purge", "purge principal credentials for all realms and prints them to log"); } @@ -56,5 +59,7 @@ protected void run( } metaStoreManagerFactory.purgeRealms(configuration.getDefaultRealms()); + + LOGGER.info("Purge completed successfully."); } } From 7c27efe2a83f88ba0edf54b1499e292866ef5cde Mon Sep 17 00:00:00 2001 From: Eric Maynard Date: Mon, 5 Aug 2024 18:58:38 -0700 Subject: [PATCH 08/13] edits --- .../core/persistence/LocalPolarisMetaStoreManagerFactory.java | 1 + .../io/polaris/core/persistence/PolarisMetaStoreManager.java | 2 +- .../polaris/core/persistence/PolarisMetaStoreManagerImpl.java | 3 --- 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/polaris-core/src/main/java/io/polaris/core/persistence/LocalPolarisMetaStoreManagerFactory.java b/polaris-core/src/main/java/io/polaris/core/persistence/LocalPolarisMetaStoreManagerFactory.java index c66f67e73d..b7cd481360 100644 --- a/polaris-core/src/main/java/io/polaris/core/persistence/LocalPolarisMetaStoreManagerFactory.java +++ b/polaris-core/src/main/java/io/polaris/core/persistence/LocalPolarisMetaStoreManagerFactory.java @@ -74,6 +74,7 @@ private void initializeForRealm(RealmContext realmContext) { public synchronized Map bootstrapRealms( List realms) { Map results = new HashMap<>(); + for (String realm : realms) { RealmContext realmContext = () -> realm; if (!metaStoreManagerMap.containsKey(realmContext.getRealmIdentifier())) { diff --git a/polaris-core/src/main/java/io/polaris/core/persistence/PolarisMetaStoreManager.java b/polaris-core/src/main/java/io/polaris/core/persistence/PolarisMetaStoreManager.java index 755ac51f9d..7ea9b93d63 100644 --- a/polaris-core/src/main/java/io/polaris/core/persistence/PolarisMetaStoreManager.java +++ b/polaris-core/src/main/java/io/polaris/core/persistence/PolarisMetaStoreManager.java @@ -191,7 +191,7 @@ public boolean alreadyExists() { * *

*************************** WARNING ************************ * - *

This will destroy whatever Polaris metadata exists in this account + *

This will destroy whatever Polaris metadata exists in the metastore * * @param callCtx call context * @return always success or unexpected error diff --git a/polaris-core/src/main/java/io/polaris/core/persistence/PolarisMetaStoreManagerImpl.java b/polaris-core/src/main/java/io/polaris/core/persistence/PolarisMetaStoreManagerImpl.java index a68e2c8861..0d92e67648 100644 --- a/polaris-core/src/main/java/io/polaris/core/persistence/PolarisMetaStoreManagerImpl.java +++ b/polaris-core/src/main/java/io/polaris/core/persistence/PolarisMetaStoreManagerImpl.java @@ -634,9 +634,6 @@ private void revokeGrantRecord( private void bootstrapPolarisService( @NotNull PolarisCallContext callCtx, @NotNull PolarisMetaStoreSession ms) { - // cleanup everything, start from a blank slate - ms.deleteAll(callCtx); - // Create a root container entity that can represent the securable for any top-level grants. PolarisBaseEntity rootContainer = new PolarisBaseEntity( From 0837987ae7ef04fa031d8ac3644d1fbc7e5fb4a9 Mon Sep 17 00:00:00 2001 From: Eric Maynard Date: Tue, 6 Aug 2024 14:51:45 -0700 Subject: [PATCH 09/13] revert a file --- polaris-server.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/polaris-server.yml b/polaris-server.yml index 3582cfe1ec..cdfeb7027b 100644 --- a/polaris-server.yml +++ b/polaris-server.yml @@ -88,9 +88,9 @@ defaultRealms: - default-realm metaStoreManager: - # type: in-memory - type: eclipse-link # uncomment to use eclipse-link as metastore - persistence-unit: polaris-dev + type: in-memory + # type: eclipse-link # uncomment to use eclipse-link as metastore + # persistence-unit: polaris-dev # TODO - avoid duplicating token broker config oauth2: From e66fcd34f0984fb2a17b30081e937a67865fdd00 Mon Sep 17 00:00:00 2001 From: Eric Maynard Date: Wed, 7 Aug 2024 16:40:43 -0700 Subject: [PATCH 10/13] changes per review --- .../persistence/MetaStoreManagerFactory.java | 1 + .../persistence/PolarisMetaStoreManager.java | 2 +- .../PolarisMetaStoreManagerImpl.java | 5 +++++ .../service/BootstrapRealmsCommand.java | 22 +++++++++++++++++-- .../polaris/service/PurgeRealmsCommand.java | 4 +--- 5 files changed, 28 insertions(+), 6 deletions(-) diff --git a/polaris-core/src/main/java/io/polaris/core/persistence/MetaStoreManagerFactory.java b/polaris-core/src/main/java/io/polaris/core/persistence/MetaStoreManagerFactory.java index ff5dcbe95a..059e193085 100644 --- a/polaris-core/src/main/java/io/polaris/core/persistence/MetaStoreManagerFactory.java +++ b/polaris-core/src/main/java/io/polaris/core/persistence/MetaStoreManagerFactory.java @@ -44,5 +44,6 @@ public interface MetaStoreManagerFactory extends Discoverable { Map bootstrapRealms(List realms); + /** Purge all metadata for the realms provided */ void purgeRealms(List realms); } diff --git a/polaris-core/src/main/java/io/polaris/core/persistence/PolarisMetaStoreManager.java b/polaris-core/src/main/java/io/polaris/core/persistence/PolarisMetaStoreManager.java index 7ea9b93d63..bed140383d 100644 --- a/polaris-core/src/main/java/io/polaris/core/persistence/PolarisMetaStoreManager.java +++ b/polaris-core/src/main/java/io/polaris/core/persistence/PolarisMetaStoreManager.java @@ -180,7 +180,7 @@ public boolean alreadyExists() { * service admin role. Will fail if the service has already been bootstrapped. * * @param callCtx call context - * @return always success or unexpected error + * @return the result of the bootstrap attempt */ @NotNull BaseResult bootstrapPolarisService(@NotNull PolarisCallContext callCtx); diff --git a/polaris-core/src/main/java/io/polaris/core/persistence/PolarisMetaStoreManagerImpl.java b/polaris-core/src/main/java/io/polaris/core/persistence/PolarisMetaStoreManagerImpl.java index 0d92e67648..9429556122 100644 --- a/polaris-core/src/main/java/io/polaris/core/persistence/PolarisMetaStoreManagerImpl.java +++ b/polaris-core/src/main/java/io/polaris/core/persistence/PolarisMetaStoreManagerImpl.java @@ -52,6 +52,8 @@ import java.util.stream.Collectors; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * Default implementation of the Polaris Meta Store Manager. Uses the underlying meta store to store @@ -59,6 +61,7 @@ */ @SuppressFBWarnings("NP_NULL_ON_SOME_PATH_FROM_RETURN_VALUE") public class PolarisMetaStoreManagerImpl implements PolarisMetaStoreManager { + private static final Logger LOGGER = LoggerFactory.getLogger(PolarisMetaStoreManagerImpl.class); /** mapper, allows to serialize/deserialize properties to/from JSON */ private static final ObjectMapper MAPPER = new ObjectMapper(); @@ -709,7 +712,9 @@ private void bootstrapPolarisService( PolarisMetaStoreSession ms = callCtx.getMetaStore(); // run operation in a read/write transaction + LOGGER.warn("Deleting all metadata in the metastore..."); ms.runActionInTransaction(callCtx, () -> ms.deleteAll(callCtx)); + LOGGER.warn("Finished deleting all metadata in the metastore"); // all good return new BaseResult(ReturnStatus.SUCCESS); diff --git a/polaris-service/src/main/java/io/polaris/service/BootstrapRealmsCommand.java b/polaris-service/src/main/java/io/polaris/service/BootstrapRealmsCommand.java index 270a9335f4..707498b451 100644 --- a/polaris-service/src/main/java/io/polaris/service/BootstrapRealmsCommand.java +++ b/polaris-service/src/main/java/io/polaris/service/BootstrapRealmsCommand.java @@ -19,6 +19,7 @@ import io.dropwizard.core.setup.Bootstrap; import io.polaris.core.PolarisConfigurationStore; import io.polaris.core.persistence.MetaStoreManagerFactory; +import io.polaris.core.persistence.PolarisMetaStoreManager; import io.polaris.service.config.ConfigurationStoreAware; import io.polaris.service.config.PolarisApplicationConfig; import io.polaris.service.config.RealmEntityManagerFactory; @@ -26,6 +27,8 @@ import net.sourceforge.argparse4j.inf.Namespace; import org.slf4j.Logger; +import java.util.Map; + /** * Command for bootstrapping root level service principals for each realm. This command will invoke * a default implementation which generates random user id and secret. These credentials will be @@ -58,8 +61,23 @@ protected void run( csa.setConfigurationStore(configurationStore); } - metaStoreManagerFactory.bootstrapRealms(configuration.getDefaultRealms()); + // Execute the bootstrap + Map results = + metaStoreManagerFactory.bootstrapRealms(configuration.getDefaultRealms()); + + // Log any errors: + boolean success = true; + for (Map.Entry result: results.entrySet()) { + if (!result.getValue().isSuccess()) { + LOGGER.warn("Bootstrapping `{}` failed: {}", result.getKey(), result.getValue().getReturnStatus().toString()); + success = false; + } + } - LOGGER.info("Bootstrap completed successfully."); + if (success) { + LOGGER.info("Bootstrap completed successfully."); + } else { + LOGGER.warn("Bootstrap encountered errors during operation."); + } } } diff --git a/polaris-service/src/main/java/io/polaris/service/PurgeRealmsCommand.java b/polaris-service/src/main/java/io/polaris/service/PurgeRealmsCommand.java index 9f61dc1f4c..57ca7f7f9e 100644 --- a/polaris-service/src/main/java/io/polaris/service/PurgeRealmsCommand.java +++ b/polaris-service/src/main/java/io/polaris/service/PurgeRealmsCommand.java @@ -27,9 +27,7 @@ import org.slf4j.Logger; /** - * Command for purging root level service principals for a realm. This command will invoke a default - * implementation which generates random user id and secret. These credentials will be printed out - * to the log and standard output (stdout). + * Command for purging all metadata associated with a realm */ public class PurgeRealmsCommand extends ConfiguredCommand { private Logger LOGGER = org.slf4j.LoggerFactory.getLogger(PurgeRealmsCommand.class); From 9b89b1c51c0647ab8a026d368ae67632ca538604 Mon Sep 17 00:00:00 2001 From: Eric Maynard Date: Wed, 7 Aug 2024 16:41:29 -0700 Subject: [PATCH 11/13] lint --- .../io/polaris/service/BootstrapRealmsCommand.java | 11 +++++++---- .../java/io/polaris/service/PurgeRealmsCommand.java | 4 +--- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/polaris-service/src/main/java/io/polaris/service/BootstrapRealmsCommand.java b/polaris-service/src/main/java/io/polaris/service/BootstrapRealmsCommand.java index 707498b451..41e5f285c7 100644 --- a/polaris-service/src/main/java/io/polaris/service/BootstrapRealmsCommand.java +++ b/polaris-service/src/main/java/io/polaris/service/BootstrapRealmsCommand.java @@ -24,11 +24,10 @@ import io.polaris.service.config.PolarisApplicationConfig; import io.polaris.service.config.RealmEntityManagerFactory; import io.polaris.service.context.CallContextResolver; +import java.util.Map; import net.sourceforge.argparse4j.inf.Namespace; import org.slf4j.Logger; -import java.util.Map; - /** * Command for bootstrapping root level service principals for each realm. This command will invoke * a default implementation which generates random user id and secret. These credentials will be @@ -67,9 +66,13 @@ protected void run( // Log any errors: boolean success = true; - for (Map.Entry result: results.entrySet()) { + for (Map.Entry result : + results.entrySet()) { if (!result.getValue().isSuccess()) { - LOGGER.warn("Bootstrapping `{}` failed: {}", result.getKey(), result.getValue().getReturnStatus().toString()); + LOGGER.warn( + "Bootstrapping `{}` failed: {}", + result.getKey(), + result.getValue().getReturnStatus().toString()); success = false; } } diff --git a/polaris-service/src/main/java/io/polaris/service/PurgeRealmsCommand.java b/polaris-service/src/main/java/io/polaris/service/PurgeRealmsCommand.java index 57ca7f7f9e..ed26f5a9fd 100644 --- a/polaris-service/src/main/java/io/polaris/service/PurgeRealmsCommand.java +++ b/polaris-service/src/main/java/io/polaris/service/PurgeRealmsCommand.java @@ -26,9 +26,7 @@ import net.sourceforge.argparse4j.inf.Namespace; import org.slf4j.Logger; -/** - * Command for purging all metadata associated with a realm - */ +/** Command for purging all metadata associated with a realm */ public class PurgeRealmsCommand extends ConfiguredCommand { private Logger LOGGER = org.slf4j.LoggerFactory.getLogger(PurgeRealmsCommand.class); From ef8fbe7110bfddfdc94285d47842694b2b410a4c Mon Sep 17 00:00:00 2001 From: Eric Maynard Date: Fri, 9 Aug 2024 13:42:14 -0400 Subject: [PATCH 12/13] warn -> error --- .../main/java/io/polaris/service/BootstrapRealmsCommand.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/polaris-service/src/main/java/io/polaris/service/BootstrapRealmsCommand.java b/polaris-service/src/main/java/io/polaris/service/BootstrapRealmsCommand.java index 41e5f285c7..c4c9969a1e 100644 --- a/polaris-service/src/main/java/io/polaris/service/BootstrapRealmsCommand.java +++ b/polaris-service/src/main/java/io/polaris/service/BootstrapRealmsCommand.java @@ -69,7 +69,7 @@ protected void run( for (Map.Entry result : results.entrySet()) { if (!result.getValue().isSuccess()) { - LOGGER.warn( + LOGGER.error( "Bootstrapping `{}` failed: {}", result.getKey(), result.getValue().getReturnStatus().toString()); @@ -80,7 +80,7 @@ protected void run( if (success) { LOGGER.info("Bootstrap completed successfully."); } else { - LOGGER.warn("Bootstrap encountered errors during operation."); + LOGGER.error("Bootstrap encountered errors during operation."); } } } From 5829aa6a5ea22eb574efc392c7a2c6d41cc0924b Mon Sep 17 00:00:00 2001 From: Eric Maynard Date: Tue, 13 Aug 2024 16:54:09 -0400 Subject: [PATCH 13/13] fix test --- .../io/polaris/core/persistence/PolarisTestMetaStoreManager.java | 1 + 1 file changed, 1 insertion(+) diff --git a/polaris-core/src/testFixtures/java/io/polaris/core/persistence/PolarisTestMetaStoreManager.java b/polaris-core/src/testFixtures/java/io/polaris/core/persistence/PolarisTestMetaStoreManager.java index 5d3f5afe88..ffa7b56349 100644 --- a/polaris-core/src/testFixtures/java/io/polaris/core/persistence/PolarisTestMetaStoreManager.java +++ b/polaris-core/src/testFixtures/java/io/polaris/core/persistence/PolarisTestMetaStoreManager.java @@ -65,6 +65,7 @@ public PolarisTestMetaStoreManager( this.doRetry = false; // bootstrap the Polaris service + polarisMetaStoreManager.purge(polarisCallContext); polarisMetaStoreManager.bootstrapPolarisService(polarisCallContext); }