This is an automated email from the ASF dual-hosted git repository.
snazy pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/polaris.git
The following commit(s) were added to refs/heads/main by this push:
new af69d9f96 JdbcMetaStoreManagerFactory determines schemaVersion once
per realm (#2217)
af69d9f96 is described below
commit af69d9f9699d8a0cae1b70839e1b5c1bfc9ba511
Author: Christopher Lambert <[email protected]>
AuthorDate: Tue Aug 5 15:30:51 2025 +0200
JdbcMetaStoreManagerFactory determines schemaVersion once per realm (#2217)
otherwise every call to `MetaStoreManagerFactory.getOrCreateSession` was
running the query.
---
.../persistence/relational/jdbc/JdbcBasePersistenceImpl.java | 11 ++++++-----
.../relational/jdbc/JdbcMetaStoreManagerFactory.java | 5 ++++-
...AtomicMetastoreManagerWithJdbcBasePersistenceImplTest.java | 6 ++++--
3 files changed, 14 insertions(+), 8 deletions(-)
diff --git
a/persistence/relational-jdbc/src/main/java/org/apache/polaris/persistence/relational/jdbc/JdbcBasePersistenceImpl.java
b/persistence/relational-jdbc/src/main/java/org/apache/polaris/persistence/relational/jdbc/JdbcBasePersistenceImpl.java
index 7391d1d5e..76da5fa92 100644
---
a/persistence/relational-jdbc/src/main/java/org/apache/polaris/persistence/relational/jdbc/JdbcBasePersistenceImpl.java
+++
b/persistence/relational-jdbc/src/main/java/org/apache/polaris/persistence/relational/jdbc/JdbcBasePersistenceImpl.java
@@ -80,7 +80,7 @@ public class JdbcBasePersistenceImpl implements
BasePersistence, IntegrationPers
private final PrincipalSecretsGenerator secretsGenerator;
private final PolarisStorageIntegrationProvider storageIntegrationProvider;
private final String realmId;
- private final int version;
+ private final int schemaVersion;
// The max number of components a location can have before the optimized
sibling check is not used
private static final int MAX_LOCATION_COMPONENTS = 40;
@@ -89,12 +89,13 @@ public class JdbcBasePersistenceImpl implements
BasePersistence, IntegrationPers
DatasourceOperations databaseOperations,
PrincipalSecretsGenerator secretsGenerator,
PolarisStorageIntegrationProvider storageIntegrationProvider,
- String realmId) {
+ String realmId,
+ int schemaVersion) {
this.datasourceOperations = databaseOperations;
this.secretsGenerator = secretsGenerator;
this.storageIntegrationProvider = storageIntegrationProvider;
this.realmId = realmId;
- this.version = loadVersion();
+ this.schemaVersion = schemaVersion;
}
@Override
@@ -651,7 +652,7 @@ public class JdbcBasePersistenceImpl implements
BasePersistence, IntegrationPers
}
}
- private int loadVersion() {
+ static int loadSchemaVersion(DatasourceOperations datasourceOperations) {
PreparedQuery query = QueryGenerator.generateVersionQuery();
try {
List<SchemaVersion> schemaVersion =
@@ -671,7 +672,7 @@ public class JdbcBasePersistenceImpl implements
BasePersistence, IntegrationPers
public <T extends PolarisEntity & LocationBasedEntity>
Optional<Optional<String>> hasOverlappingSiblings(
@Nonnull PolarisCallContext callContext, T entity) {
- if (this.version < 2) {
+ if (this.schemaVersion < 2) {
return Optional.empty();
}
if (entity.getBaseLocation().chars().filter(ch -> ch == '/').count()
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 f57b158e9..83da6009b 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
@@ -96,6 +96,8 @@ public class JdbcMetaStoreManagerFactory implements
MetaStoreManagerFactory {
// 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();
+ // determine schemaVersion once per realm
+ final int schemaVersion =
JdbcBasePersistenceImpl.loadSchemaVersion(datasourceOperations);
sessionSupplierMap.put(
realmId,
() ->
@@ -103,7 +105,8 @@ public class JdbcMetaStoreManagerFactory implements
MetaStoreManagerFactory {
datasourceOperations,
secretsGenerator(realmId, rootCredentialsSet),
storageIntegrationProvider,
- realmId));
+ realmId,
+ schemaVersion));
PolarisMetaStoreManager metaStoreManager = createNewMetaStoreManager();
metaStoreManagerMap.put(realmId, metaStoreManager);
diff --git
a/persistence/relational-jdbc/src/test/java/org/apache/polaris/persistence/relational/jdbc/AtomicMetastoreManagerWithJdbcBasePersistenceImplTest.java
b/persistence/relational-jdbc/src/test/java/org/apache/polaris/persistence/relational/jdbc/AtomicMetastoreManagerWithJdbcBasePersistenceImplTest.java
index bbb57e68b..a9c77bb74 100644
---
a/persistence/relational-jdbc/src/test/java/org/apache/polaris/persistence/relational/jdbc/AtomicMetastoreManagerWithJdbcBasePersistenceImplTest.java
+++
b/persistence/relational-jdbc/src/test/java/org/apache/polaris/persistence/relational/jdbc/AtomicMetastoreManagerWithJdbcBasePersistenceImplTest.java
@@ -45,6 +45,7 @@ public class
AtomicMetastoreManagerWithJdbcBasePersistenceImplTest
@Override
protected PolarisTestMetaStoreManager createPolarisTestMetaStoreManager() {
+ int schemaVersion = 2;
PolarisDiagnostics diagServices = new PolarisDefaultDiagServiceImpl();
DatasourceOperations datasourceOperations;
try {
@@ -53,7 +54,7 @@ public class
AtomicMetastoreManagerWithJdbcBasePersistenceImplTest
ClassLoader classLoader = DatasourceOperations.class.getClassLoader();
InputStream scriptStream =
classLoader.getResourceAsStream(
- String.format("%s/schema-v2.sql",
DatabaseType.H2.getDisplayName()));
+ String.format("%s/schema-v%s.sql",
DatabaseType.H2.getDisplayName(), schemaVersion));
datasourceOperations.executeScript(scriptStream);
} catch (SQLException e) {
throw new RuntimeException(
@@ -68,7 +69,8 @@ public class
AtomicMetastoreManagerWithJdbcBasePersistenceImplTest
datasourceOperations,
RANDOM_SECRETS,
Mockito.mock(),
- realmContext.getRealmIdentifier());
+ realmContext.getRealmIdentifier(),
+ schemaVersion);
return new PolarisTestMetaStoreManager(
new AtomicOperationMetaStoreManager(),
new PolarisCallContext(