This is an automated email from the ASF dual-hosted git repository. yuqi1129 pushed a commit to branch feat/12166-occ-drop-cas in repository https://gitbox.apache.org/repos/asf/gravitino.git
commit dc35507336c0073d271130c4033bd957778d2e24 Author: yuqi <[email protected]> AuthorDate: Thu Jul 23 22:59:57 2026 +0800 [#12166] improvement(core): slim UPDATE WHERE to version CAS for metalake/catalog/schema/tag/user/group/role Reduce each update*Meta WHERE from a full-row compare to id + current_version + deleted_at (base + PostgreSQL providers). current_version is now monotonic, so the version check is a real compare-and-set; the field-by-field / JSON-byte match was redundant and fragile. Existing update tests exercise the slimmed predicate. Part of #12166. Remaining: table/fileset/policy/view/function slim + model migration. --- .../mapper/provider/base/CatalogMetaBaseSQLProvider.java | 10 +--------- .../mapper/provider/base/GroupMetaBaseSQLProvider.java | 5 +---- .../mapper/provider/base/MetalakeMetaBaseSQLProvider.java | 8 +------- .../mapper/provider/base/RoleMetaBaseSQLProvider.java | 4 +--- .../mapper/provider/base/SchemaMetaBaseSQLProvider.java | 9 +-------- .../mapper/provider/base/TagMetaBaseSQLProvider.java | 8 +------- .../mapper/provider/base/UserMetaBaseSQLProvider.java | 5 +---- .../provider/postgresql/CatalogMetaPostgreSQLProvider.java | 11 +---------- .../provider/postgresql/MetalakeMetaPostgreSQLProvider.java | 9 +-------- .../provider/postgresql/SchemaMetaPostgreSQLProvider.java | 10 +--------- .../mapper/provider/postgresql/TagMetaPostgreSQLProvider.java | 8 +------- 11 files changed, 11 insertions(+), 76 deletions(-) diff --git a/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/base/CatalogMetaBaseSQLProvider.java b/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/base/CatalogMetaBaseSQLProvider.java index be03900dc2..6c486db95b 100644 --- a/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/base/CatalogMetaBaseSQLProvider.java +++ b/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/base/CatalogMetaBaseSQLProvider.java @@ -205,17 +205,9 @@ public class CatalogMetaBaseSQLProvider { + " current_version = #{newCatalogMeta.currentVersion}," + " last_version = #{newCatalogMeta.lastVersion}," + " deleted_at = #{newCatalogMeta.deletedAt}" + // OCC: compare-and-set on the version alone (current_version is monotonic on update). + " WHERE catalog_id = #{oldCatalogMeta.catalogId}" - + " AND catalog_name = #{oldCatalogMeta.catalogName}" - + " AND metalake_id = #{oldCatalogMeta.metalakeId}" - + " AND type = #{oldCatalogMeta.type}" - + " AND provider = #{oldCatalogMeta.provider}" - + " AND (catalog_comment = #{oldCatalogMeta.catalogComment} " - + " OR (catalog_comment IS NULL and #{oldCatalogMeta.catalogComment} IS NULL))" - + " AND properties = #{oldCatalogMeta.properties}" - + " AND audit_info = #{oldCatalogMeta.auditInfo}" + " AND current_version = #{oldCatalogMeta.currentVersion}" - + " AND last_version = #{oldCatalogMeta.lastVersion}" + " AND deleted_at = 0"; } diff --git a/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/base/GroupMetaBaseSQLProvider.java b/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/base/GroupMetaBaseSQLProvider.java index 9e8229ec23..8b04ffc6f6 100644 --- a/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/base/GroupMetaBaseSQLProvider.java +++ b/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/base/GroupMetaBaseSQLProvider.java @@ -211,12 +211,9 @@ public class GroupMetaBaseSQLProvider { + " current_version = #{newGroupMeta.currentVersion}," + " last_version = #{newGroupMeta.lastVersion}," + " deleted_at = #{newGroupMeta.deletedAt}" + // OCC: compare-and-set on the version alone (current_version is monotonic on update). + " WHERE group_id = #{oldGroupMeta.groupId}" - + " AND group_name = #{oldGroupMeta.groupName}" - + " AND metalake_id = #{oldGroupMeta.metalakeId}" - + " AND audit_info = #{oldGroupMeta.auditInfo}" + " AND current_version = #{oldGroupMeta.currentVersion}" - + " AND last_version = #{oldGroupMeta.lastVersion}" + " AND deleted_at = 0"; } diff --git a/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/base/MetalakeMetaBaseSQLProvider.java b/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/base/MetalakeMetaBaseSQLProvider.java index 2524eda76f..4892e8816b 100644 --- a/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/base/MetalakeMetaBaseSQLProvider.java +++ b/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/base/MetalakeMetaBaseSQLProvider.java @@ -142,15 +142,9 @@ public class MetalakeMetaBaseSQLProvider { + " schema_version = #{newMetalakeMeta.schemaVersion}," + " current_version = #{newMetalakeMeta.currentVersion}," + " last_version = #{newMetalakeMeta.lastVersion}" + // OCC: compare-and-set on the version alone (current_version is monotonic on update). + " WHERE metalake_id = #{oldMetalakeMeta.metalakeId}" - + " AND metalake_name = #{oldMetalakeMeta.metalakeName}" - + " AND (metalake_comment = #{oldMetalakeMeta.metalakeComment} " - + " OR (metalake_comment IS NULL and #{oldMetalakeMeta.metalakeComment} IS NULL))" - + " AND properties = #{oldMetalakeMeta.properties}" - + " AND audit_info = #{oldMetalakeMeta.auditInfo}" - + " AND schema_version = #{oldMetalakeMeta.schemaVersion}" + " AND current_version = #{oldMetalakeMeta.currentVersion}" - + " AND last_version = #{oldMetalakeMeta.lastVersion}" + " AND deleted_at = 0"; } diff --git a/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/base/RoleMetaBaseSQLProvider.java b/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/base/RoleMetaBaseSQLProvider.java index d3a7127a32..a0d2a9165f 100644 --- a/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/base/RoleMetaBaseSQLProvider.java +++ b/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/base/RoleMetaBaseSQLProvider.java @@ -163,11 +163,9 @@ public class RoleMetaBaseSQLProvider { + " current_version = #{newRoleMeta.currentVersion}," + " last_version = #{newRoleMeta.lastVersion}," + " deleted_at = #{newRoleMeta.deletedAt}" + // OCC: compare-and-set on the version alone (current_version is monotonic on update). + " WHERE role_id = #{oldRoleMeta.roleId}" - + " AND role_name = #{oldRoleMeta.roleName}" - + " AND metalake_id = #{oldRoleMeta.metalakeId}" + " AND current_version = #{oldRoleMeta.currentVersion}" - + " AND last_version = #{oldRoleMeta.lastVersion}" + " AND deleted_at = 0"; } diff --git a/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/base/SchemaMetaBaseSQLProvider.java b/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/base/SchemaMetaBaseSQLProvider.java index 822ac3cf25..0a2f98b178 100644 --- a/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/base/SchemaMetaBaseSQLProvider.java +++ b/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/base/SchemaMetaBaseSQLProvider.java @@ -272,16 +272,9 @@ public class SchemaMetaBaseSQLProvider { + " current_version = #{newSchemaMeta.currentVersion}," + " last_version = #{newSchemaMeta.lastVersion}," + " deleted_at = #{newSchemaMeta.deletedAt}" + // OCC: compare-and-set on the version alone (current_version is monotonic on update). + " WHERE schema_id = #{oldSchemaMeta.schemaId}" - + " AND schema_name = #{oldSchemaMeta.schemaName}" - + " AND metalake_id = #{oldSchemaMeta.metalakeId}" - + " AND catalog_id = #{oldSchemaMeta.catalogId}" - + " AND (schema_comment = #{oldSchemaMeta.schemaComment}" - + " OR (schema_comment IS NULL and #{oldSchemaMeta.schemaComment} IS NULL))" - + " AND properties = #{oldSchemaMeta.properties}" - + " AND audit_info = #{oldSchemaMeta.auditInfo}" + " AND current_version = #{oldSchemaMeta.currentVersion}" - + " AND last_version = #{oldSchemaMeta.lastVersion}" + " AND deleted_at = 0"; } diff --git a/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/base/TagMetaBaseSQLProvider.java b/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/base/TagMetaBaseSQLProvider.java index 8aac66bf88..c3dbf72b61 100644 --- a/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/base/TagMetaBaseSQLProvider.java +++ b/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/base/TagMetaBaseSQLProvider.java @@ -157,15 +157,9 @@ public class TagMetaBaseSQLProvider { + " current_version = #{newTagMeta.currentVersion}," + " last_version = #{newTagMeta.lastVersion}," + " deleted_at = #{newTagMeta.deletedAt}" + // OCC: compare-and-set on the version alone (current_version is monotonic on update). + " WHERE tag_id = #{oldTagMeta.tagId}" - + " AND metalake_id = #{oldTagMeta.metalakeId}" - + " AND tag_name = #{oldTagMeta.tagName}" - + " AND (tag_comment = #{oldTagMeta.comment}" - + " OR (tag_comment IS NULL and #{oldTagMeta.comment} IS NULL))" - + " AND properties = #{oldTagMeta.properties}" - + " AND audit_info = #{oldTagMeta.auditInfo}" + " AND current_version = #{oldTagMeta.currentVersion}" - + " AND last_version = #{oldTagMeta.lastVersion}" + " AND deleted_at = 0"; } diff --git a/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/base/UserMetaBaseSQLProvider.java b/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/base/UserMetaBaseSQLProvider.java index 6c0dc22334..3b11b056dd 100644 --- a/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/base/UserMetaBaseSQLProvider.java +++ b/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/base/UserMetaBaseSQLProvider.java @@ -163,12 +163,9 @@ public class UserMetaBaseSQLProvider { + " current_version = #{newUserMeta.currentVersion}," + " last_version = #{newUserMeta.lastVersion}," + " deleted_at = #{newUserMeta.deletedAt}" + // OCC: compare-and-set on the version alone (current_version is monotonic on update). + " WHERE user_id = #{oldUserMeta.userId}" - + " AND user_name = #{oldUserMeta.userName}" - + " AND metalake_id = #{oldUserMeta.metalakeId}" - + " AND audit_info = #{oldUserMeta.auditInfo}" + " AND current_version = #{oldUserMeta.currentVersion}" - + " AND last_version = #{oldUserMeta.lastVersion}" + " AND deleted_at = 0"; } diff --git a/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/postgresql/CatalogMetaPostgreSQLProvider.java b/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/postgresql/CatalogMetaPostgreSQLProvider.java index 0482d9b330..2c79fa2060 100644 --- a/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/postgresql/CatalogMetaPostgreSQLProvider.java +++ b/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/postgresql/CatalogMetaPostgreSQLProvider.java @@ -100,18 +100,9 @@ public class CatalogMetaPostgreSQLProvider extends CatalogMetaBaseSQLProvider { + " current_version = #{newCatalogMeta.currentVersion}," + " last_version = #{newCatalogMeta.lastVersion}," + " deleted_at = #{newCatalogMeta.deletedAt}" + // OCC: compare-and-set on the version alone (current_version is monotonic on update). + " WHERE catalog_id = #{oldCatalogMeta.catalogId}" - + " AND catalog_name = #{oldCatalogMeta.catalogName}" - + " AND metalake_id = #{oldCatalogMeta.metalakeId}" - + " AND type = #{oldCatalogMeta.type}" - + " AND provider = #{oldCatalogMeta.provider}" - + " AND (catalog_comment = #{oldCatalogMeta.catalogComment} " - + " OR (CAST(catalog_comment AS VARCHAR) IS NULL AND " - + " CAST(#{oldCatalogMeta.catalogComment} AS VARCHAR) IS NULL))" - + " AND properties = #{oldCatalogMeta.properties}" - + " AND audit_info = #{oldCatalogMeta.auditInfo}" + " AND current_version = #{oldCatalogMeta.currentVersion}" - + " AND last_version = #{oldCatalogMeta.lastVersion}" + " AND deleted_at = 0"; } } diff --git a/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/postgresql/MetalakeMetaPostgreSQLProvider.java b/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/postgresql/MetalakeMetaPostgreSQLProvider.java index 5ce01e6715..2aeb5f9b67 100644 --- a/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/postgresql/MetalakeMetaPostgreSQLProvider.java +++ b/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/postgresql/MetalakeMetaPostgreSQLProvider.java @@ -74,16 +74,9 @@ public class MetalakeMetaPostgreSQLProvider extends MetalakeMetaBaseSQLProvider + " schema_version = #{newMetalakeMeta.schemaVersion}," + " current_version = #{newMetalakeMeta.currentVersion}," + " last_version = #{newMetalakeMeta.lastVersion}" + // OCC: compare-and-set on the version alone (current_version is monotonic on update). + " WHERE metalake_id = #{oldMetalakeMeta.metalakeId}" - + " AND metalake_name = #{oldMetalakeMeta.metalakeName}" - + " AND (metalake_comment = #{oldMetalakeMeta.metalakeComment} " - + " OR (CAST(metalake_comment AS VARCHAR) IS NULL AND " - + " CAST(#{oldMetalakeMeta.metalakeComment} AS VARCHAR) IS NULL))" - + " AND properties = #{oldMetalakeMeta.properties}" - + " AND audit_info = #{oldMetalakeMeta.auditInfo}" - + " AND schema_version = #{oldMetalakeMeta.schemaVersion}" + " AND current_version = #{oldMetalakeMeta.currentVersion}" - + " AND last_version = #{oldMetalakeMeta.lastVersion}" + " AND deleted_at = 0"; } diff --git a/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/postgresql/SchemaMetaPostgreSQLProvider.java b/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/postgresql/SchemaMetaPostgreSQLProvider.java index ba2087aa61..c55ca530ca 100644 --- a/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/postgresql/SchemaMetaPostgreSQLProvider.java +++ b/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/postgresql/SchemaMetaPostgreSQLProvider.java @@ -97,17 +97,9 @@ public class SchemaMetaPostgreSQLProvider extends SchemaMetaBaseSQLProvider { + " current_version = #{newSchemaMeta.currentVersion}," + " last_version = #{newSchemaMeta.lastVersion}," + " deleted_at = #{newSchemaMeta.deletedAt}" + // OCC: compare-and-set on the version alone (current_version is monotonic on update). + " WHERE schema_id = #{oldSchemaMeta.schemaId}" - + " AND schema_name = #{oldSchemaMeta.schemaName}" - + " AND metalake_id = #{oldSchemaMeta.metalakeId}" - + " AND catalog_id = #{oldSchemaMeta.catalogId}" - + " AND (schema_comment = #{oldSchemaMeta.schemaComment}" - + " OR (CAST(schema_comment AS VARCHAR) IS NULL" - + " AND CAST(#{oldSchemaMeta.schemaComment} AS VARCHAR) IS NULL))" - + " AND properties = #{oldSchemaMeta.properties}" - + " AND audit_info = #{oldSchemaMeta.auditInfo}" + " AND current_version = #{oldSchemaMeta.currentVersion}" - + " AND last_version = #{oldSchemaMeta.lastVersion}" + " AND deleted_at = 0"; } diff --git a/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/postgresql/TagMetaPostgreSQLProvider.java b/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/postgresql/TagMetaPostgreSQLProvider.java index 785e124d2c..776dd77e27 100644 --- a/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/postgresql/TagMetaPostgreSQLProvider.java +++ b/core/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/postgresql/TagMetaPostgreSQLProvider.java @@ -87,15 +87,9 @@ public class TagMetaPostgreSQLProvider extends TagMetaBaseSQLProvider { + " current_version = #{newTagMeta.currentVersion}," + " last_version = #{newTagMeta.lastVersion}," + " deleted_at = #{newTagMeta.deletedAt}" + // OCC: compare-and-set on the version alone (current_version is monotonic on update). + " WHERE tag_id = #{oldTagMeta.tagId}" - + " AND metalake_id = #{oldTagMeta.metalakeId}" - + " AND tag_name = #{oldTagMeta.tagName}" - + " AND (tag_comment = #{oldTagMeta.comment} " - + " OR (CAST(tag_comment AS VARCHAR) IS NULL AND CAST(#{oldTagMeta.comment} AS VARCHAR) IS NULL))" - + " AND properties = #{oldTagMeta.properties}" - + " AND audit_info = #{oldTagMeta.auditInfo}" + " AND current_version = #{oldTagMeta.currentVersion}" - + " AND last_version = #{oldTagMeta.lastVersion}" + " AND deleted_at = 0"; }
