This is an automated email from the ASF dual-hosted git repository. emaynard 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 d3b24d2d1 JDBC: Optimize writeEntity calls (#1496) d3b24d2d1 is described below commit d3b24d2d1ce04d850f345ff947eb46093f663885 Author: Prashant Singh <35593236+singhpk...@users.noreply.github.com> AuthorDate: Wed Apr 30 14:42:47 2025 -0700 JDBC: Optimize writeEntity calls (#1496) * Remove transaction from atomic writes * remove if-else --- .../relational/jdbc/JdbcBasePersistenceImpl.java | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/extension/persistence/relational-jdbc/src/main/java/org/apache/polaris/extension/persistence/relational/jdbc/JdbcBasePersistenceImpl.java b/extension/persistence/relational-jdbc/src/main/java/org/apache/polaris/extension/persistence/relational/jdbc/JdbcBasePersistenceImpl.java index 5ffce813f..f58101b91 100644 --- a/extension/persistence/relational-jdbc/src/main/java/org/apache/polaris/extension/persistence/relational/jdbc/JdbcBasePersistenceImpl.java +++ b/extension/persistence/relational-jdbc/src/main/java/org/apache/polaris/extension/persistence/relational/jdbc/JdbcBasePersistenceImpl.java @@ -93,11 +93,7 @@ public class JdbcBasePersistenceImpl implements BasePersistence, IntegrationPers boolean nameOrParentChanged, PolarisBaseEntity originalEntity) { try { - datasourceOperations.runWithinTransaction( - statement -> { - persistEntity(callCtx, entity, originalEntity, statement); - return true; - }); + persistEntity(callCtx, entity, originalEntity, datasourceOperations::executeUpdate); } catch (SQLException e) { throw new RuntimeException("Error persisting entity", e); } @@ -115,7 +111,6 @@ public class JdbcBasePersistenceImpl implements BasePersistence, IntegrationPers PolarisBaseEntity entity = entities.get(i); PolarisBaseEntity originalEntity = originalEntities != null ? originalEntities.get(i) : null; - // first, check if the entity has already been created, in which case we will simply // return it. PolarisBaseEntity entityFound = @@ -127,7 +122,7 @@ public class JdbcBasePersistenceImpl implements BasePersistence, IntegrationPers // already been updated after the creation. continue; } - persistEntity(callCtx, entity, originalEntity, statement); + persistEntity(callCtx, entity, originalEntity, statement::executeUpdate); } return true; }); @@ -143,12 +138,12 @@ public class JdbcBasePersistenceImpl implements BasePersistence, IntegrationPers @Nonnull PolarisCallContext callCtx, @Nonnull PolarisBaseEntity entity, PolarisBaseEntity originalEntity, - Statement statement) + QueryAction queryAction) throws SQLException { ModelEntity modelEntity = ModelEntity.fromEntity(entity); if (originalEntity == null) { try { - statement.executeUpdate(generateInsertQuery(modelEntity, realmId)); + queryAction.apply(generateInsertQuery(modelEntity, realmId)); } catch (SQLException e) { if (datasourceOperations.isConstraintViolation(e)) { PolarisBaseEntity existingEntity = @@ -176,7 +171,7 @@ public class JdbcBasePersistenceImpl implements BasePersistence, IntegrationPers "realm_id", realmId); try { - int rowsUpdated = statement.executeUpdate(generateUpdateQuery(modelEntity, params)); + int rowsUpdated = queryAction.apply(generateUpdateQuery(modelEntity, params)); if (rowsUpdated == 0) { throw new RetryOnConcurrencyException( "Entity '%s' id '%s' concurrently modified; expected version %s", @@ -923,4 +918,9 @@ public class JdbcBasePersistenceImpl implements BasePersistence, IntegrationPers BaseMetaStoreManager.extractStorageConfiguration(callContext, entity); return storageIntegrationProvider.getStorageIntegrationForConfig(storageConfig); } + + @FunctionalInterface + private interface QueryAction { + Integer apply(String query) throws SQLException; + } }