From d96540be009e9487953dfe86a8ed6cddbcfc0153 Mon Sep 17 00:00:00 2001 From: Dmitri Bourlatchkov Date: Fri, 9 Jan 2026 21:47:13 -0500 Subject: [PATCH 1/2] Use injected RealmConfig in JdbcMetaStoreManagerFactory * Improve code isolation by using `RealmConfig` (like most other code) instead of the lower-level `PolarisConfigurationStore` * This also enabled proper CDI request-scoped injection in concert with #3411 * Additionally, this enables further code cleanup in `PolarisConfigurationStore` as discussed in #3324 with the goal of using this interface for the backend configuration code, while `RealmConfig` becomes the corresponding frontend interface. * Fix `ServiceProducers.realmConfig()` to make a `RealmConfigImpl` directly from its dependencies (not from `CallContext`) to avoid cycles in CDI. --- .../relational/jdbc/JdbcMetaStoreManagerFactory.java | 11 +++-------- .../polaris/admintool/config/AdminToolProducers.java | 8 ++++++++ .../polaris/service/config/ServiceProducers.java | 6 ++++-- 3 files changed, 15 insertions(+), 10 deletions(-) diff --git a/persistence/relational-jdbc/src/main/java/org/apache/polaris/persistence/relational/jdbc/JdbcMetaStoreManagerFactory.java b/persistence/relational-jdbc/src/main/java/org/apache/polaris/persistence/relational/jdbc/JdbcMetaStoreManagerFactory.java index e46cc7277e..690eb5ae3f 100644 --- a/persistence/relational-jdbc/src/main/java/org/apache/polaris/persistence/relational/jdbc/JdbcMetaStoreManagerFactory.java +++ b/persistence/relational-jdbc/src/main/java/org/apache/polaris/persistence/relational/jdbc/JdbcMetaStoreManagerFactory.java @@ -33,7 +33,6 @@ import org.apache.polaris.core.PolarisCallContext; import org.apache.polaris.core.PolarisDiagnostics; import org.apache.polaris.core.config.BehaviorChangeConfiguration; -import org.apache.polaris.core.config.PolarisConfigurationStore; import org.apache.polaris.core.config.RealmConfig; import org.apache.polaris.core.context.RealmContext; import org.apache.polaris.core.entity.PrincipalEntity; @@ -75,7 +74,7 @@ public class JdbcMetaStoreManagerFactory implements MetaStoreManagerFactory { @Inject PolarisStorageIntegrationProvider storageIntegrationProvider; @Inject Instance dataSource; @Inject RelationalJdbcConfiguration relationalJdbcConfiguration; - @Inject PolarisConfigurationStore configurationStore; + @Inject RealmConfig realmConfig; protected JdbcMetaStoreManagerFactory() {} @@ -103,8 +102,7 @@ private void initializeForRealm( final int schemaVersion = JdbcBasePersistenceImpl.loadSchemaVersion( datasourceOperations, - configurationStore.getConfiguration( - realmContext, BehaviorChangeConfiguration.SCHEMA_VERSION_FALL_BACK_ON_DNE)); + realmConfig.getConfig(BehaviorChangeConfiguration.SCHEMA_VERSION_FALL_BACK_ON_DNE)); sessionSupplierMap.put( realmId, () -> @@ -155,10 +153,7 @@ public synchronized Map bootstrapRealms( if (!metaStoreManagerMap.containsKey(realm)) { DatasourceOperations datasourceOperations = getDatasourceOperations(); int currentSchemaVersion = - JdbcBasePersistenceImpl.loadSchemaVersion( - datasourceOperations, - configurationStore.getConfiguration( - realmContext, BehaviorChangeConfiguration.SCHEMA_VERSION_FALL_BACK_ON_DNE)); + JdbcBasePersistenceImpl.loadSchemaVersion(datasourceOperations, true); int requestedSchemaVersion = JdbcBootstrapUtils.getRequestedSchemaVersion(bootstrapOptions); int effectiveSchemaVersion = JdbcBootstrapUtils.getRealmBootstrapSchemaVersion( diff --git a/runtime/admin/src/main/java/org/apache/polaris/admintool/config/AdminToolProducers.java b/runtime/admin/src/main/java/org/apache/polaris/admintool/config/AdminToolProducers.java index 28a43a6c37..c2a7a0a327 100644 --- a/runtime/admin/src/main/java/org/apache/polaris/admintool/config/AdminToolProducers.java +++ b/runtime/admin/src/main/java/org/apache/polaris/admintool/config/AdminToolProducers.java @@ -28,6 +28,8 @@ import org.apache.polaris.core.PolarisDefaultDiagServiceImpl; import org.apache.polaris.core.PolarisDiagnostics; import org.apache.polaris.core.config.PolarisConfigurationStore; +import org.apache.polaris.core.config.RealmConfig; +import org.apache.polaris.core.config.RealmConfigImpl; import org.apache.polaris.core.persistence.MetaStoreManagerFactory; import org.apache.polaris.core.storage.PolarisStorageConfigurationInfo; import org.apache.polaris.core.storage.PolarisStorageIntegration; @@ -75,4 +77,10 @@ public PolarisConfigurationStore configurationStore() { // A configuration store is not required when running the admin tool. return new PolarisConfigurationStore() {}; } + + @Produces + public RealmConfig dummyRealmConfig(PolarisConfigurationStore configurationStore) { + // Use "unknown" realm ID for RealmConfig since the PolarisConfigurationStore is empty anyway + return new RealmConfigImpl(configurationStore, () -> "unknown"); + } } diff --git a/runtime/service/src/main/java/org/apache/polaris/service/config/ServiceProducers.java b/runtime/service/src/main/java/org/apache/polaris/service/config/ServiceProducers.java index 840b3fb80a..121eb382c1 100644 --- a/runtime/service/src/main/java/org/apache/polaris/service/config/ServiceProducers.java +++ b/runtime/service/src/main/java/org/apache/polaris/service/config/ServiceProducers.java @@ -40,6 +40,7 @@ import org.apache.polaris.core.auth.PolarisAuthorizerFactory; import org.apache.polaris.core.config.PolarisConfigurationStore; import org.apache.polaris.core.config.RealmConfig; +import org.apache.polaris.core.config.RealmConfigImpl; import org.apache.polaris.core.context.CallContext; import org.apache.polaris.core.context.RealmContext; import org.apache.polaris.core.credentials.PolarisCredentialManager; @@ -130,8 +131,9 @@ public CallContext polarisCallContext( @Produces @RequestScoped - public RealmConfig realmConfig(CallContext callContext) { - return callContext.getRealmConfig(); + public RealmConfig realmConfig( + RealmContext realmContext, PolarisConfigurationStore configurationStore) { + return new RealmConfigImpl(configurationStore, realmContext); } @Produces From bb601239e607e5c92ddd10919b4e60ea45b22395 Mon Sep 17 00:00:00 2001 From: Dmitri Bourlatchkov Date: Wed, 14 Jan 2026 10:31:20 -0500 Subject: [PATCH 2/2] review: random realm ID --- .../apache/polaris/admintool/config/AdminToolProducers.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/runtime/admin/src/main/java/org/apache/polaris/admintool/config/AdminToolProducers.java b/runtime/admin/src/main/java/org/apache/polaris/admintool/config/AdminToolProducers.java index c2a7a0a327..236325a588 100644 --- a/runtime/admin/src/main/java/org/apache/polaris/admintool/config/AdminToolProducers.java +++ b/runtime/admin/src/main/java/org/apache/polaris/admintool/config/AdminToolProducers.java @@ -25,6 +25,7 @@ import jakarta.enterprise.inject.Instance; import jakarta.enterprise.inject.Produces; import java.time.Clock; +import java.util.UUID; import org.apache.polaris.core.PolarisDefaultDiagServiceImpl; import org.apache.polaris.core.PolarisDiagnostics; import org.apache.polaris.core.config.PolarisConfigurationStore; @@ -80,7 +81,8 @@ public PolarisConfigurationStore configurationStore() { @Produces public RealmConfig dummyRealmConfig(PolarisConfigurationStore configurationStore) { - // Use "unknown" realm ID for RealmConfig since the PolarisConfigurationStore is empty anyway - return new RealmConfigImpl(configurationStore, () -> "unknown"); + // Use a random realm ID for RealmConfig since the PolarisConfigurationStore is empty anyway + String absentId = UUID.randomUUID().toString(); + return new RealmConfigImpl(configurationStore, () -> absentId); } }