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 a69410a94f..7f4368c364 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 @@ -83,10 +83,9 @@ public class JdbcMetaStoreManagerFactory implements MetaStoreManagerFactory { protected JdbcMetaStoreManagerFactory() {} protected PrincipalSecretsGenerator secretsGenerator( - RealmContext realmContext, @Nullable RootCredentialsSet rootCredentialsSet) { + String realmId, @Nullable RootCredentialsSet rootCredentialsSet) { if (rootCredentialsSet != null) { - return PrincipalSecretsGenerator.bootstrap( - realmContext.getRealmIdentifier(), rootCredentialsSet); + return PrincipalSecretsGenerator.bootstrap(realmId, rootCredentialsSet); } else { return PrincipalSecretsGenerator.RANDOM_SECRETS; } @@ -100,17 +99,20 @@ private void initializeForRealm( DatasourceOperations datasourceOperations, RealmContext realmContext, RootCredentialsSet rootCredentialsSet) { + // Materialize realmId so that background tasks that don't have an active + // RealmContext (request-scoped bean) can still create a JdbcBasePersistenceImpl + String realmId = realmContext.getRealmIdentifier(); sessionSupplierMap.put( - realmContext.getRealmIdentifier(), + realmId, () -> new JdbcBasePersistenceImpl( datasourceOperations, - secretsGenerator(realmContext, rootCredentialsSet), + secretsGenerator(realmId, rootCredentialsSet), storageIntegrationProvider, - realmContext.getRealmIdentifier())); + realmId)); PolarisMetaStoreManager metaStoreManager = createNewMetaStoreManager(); - metaStoreManagerMap.put(realmContext.getRealmIdentifier(), metaStoreManager); + metaStoreManagerMap.put(realmId, metaStoreManager); } public DatasourceOperations getDatasourceOperations() {