This is an automated email from the ASF dual-hosted git repository.
lahirujayathilake pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/airavata-data-catalog.git
The following commit(s) were added to refs/heads/main by this push:
new 203e9e2 Fix FrameworkConfig cache: use content equality instead of
reference comparison for schema change detection, included indexes
203e9e2 is described below
commit 203e9e2653001fba1387e78c78045e1eff5eab4b
Author: lahiruj <[email protected]>
AuthorDate: Mon Mar 2 14:27:37 2026 -0500
Fix FrameworkConfig cache: use content equality instead of reference
comparison for schema change detection, included indexes
---
.../impl/MetadataSchemaQueryExecutorImpl.java | 23 +++++++------
.../2026/02/2026-02-25-performance-indexes.xml | 40 ++++++++++++++++++++++
2 files changed, 53 insertions(+), 10 deletions(-)
diff --git
a/data-catalog-api/server/service/src/main/java/org/apache/airavata/datacatalog/api/query/impl/MetadataSchemaQueryExecutorImpl.java
b/data-catalog-api/server/service/src/main/java/org/apache/airavata/datacatalog/api/query/impl/MetadataSchemaQueryExecutorImpl.java
index d73f6c3..e4ca109 100644
---
a/data-catalog-api/server/service/src/main/java/org/apache/airavata/datacatalog/api/query/impl/MetadataSchemaQueryExecutorImpl.java
+++
b/data-catalog-api/server/service/src/main/java/org/apache/airavata/datacatalog/api/query/impl/MetadataSchemaQueryExecutorImpl.java
@@ -1,11 +1,6 @@
package org.apache.airavata.datacatalog.api.query.impl;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
+import jakarta.persistence.EntityManager;
import org.apache.airavata.datacatalog.api.DataProduct;
import org.apache.airavata.datacatalog.api.FieldValueType;
import
org.apache.airavata.datacatalog.api.exception.MetadataSchemaSqlParseException;
@@ -49,7 +44,11 @@ import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
-import jakarta.persistence.EntityManager;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
@Component
public class MetadataSchemaQueryExecutorImpl implements
MetadataSchemaQueryExecutor {
@@ -69,12 +68,16 @@ public class MetadataSchemaQueryExecutorImpl implements
MetadataSchemaQueryExecu
DataProductMapper dataProductMapper;
private volatile FrameworkConfig cachedConfig = null;
- private volatile List<MetadataSchemaEntity> lastSchemas = null;
+ private volatile List<String> lastSchemaNames = null;
private synchronized FrameworkConfig
getOrBuildConfig(List<MetadataSchemaEntity> schemas) {
- if (cachedConfig == null || lastSchemas != schemas) {
+ List<String> currentNames = schemas.stream()
+ .map(MetadataSchemaEntity::getSchemaName)
+ .toList();
+ if (cachedConfig == null || !currentNames.equals(lastSchemaNames)) {
+ logger.debug("Rebuilding FrameworkConfig for schemas: {}",
currentNames);
cachedConfig = buildFrameworkConfig(schemas);
- lastSchemas = schemas;
+ lastSchemaNames = currentNames;
}
return cachedConfig;
}
diff --git
a/data-catalog-api/server/service/src/main/resources/db/changelog/2026/02/2026-02-25-performance-indexes.xml
b/data-catalog-api/server/service/src/main/resources/db/changelog/2026/02/2026-02-25-performance-indexes.xml
new file mode 100644
index 0000000..cdb3e3e
--- /dev/null
+++
b/data-catalog-api/server/service/src/main/resources/db/changelog/2026/02/2026-02-25-performance-indexes.xml
@@ -0,0 +1,40 @@
+<?xml version="1.1" encoding="UTF-8" standalone="no"?>
+<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
+ xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
+ xmlns:pro="http://www.liquibase.org/xml/ns/pro"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog-ext
http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd
+ http://www.liquibase.org/xml/ns/pro
http://www.liquibase.org/xml/ns/pro/liquibase-pro-latest.xsd
+ http://www.liquibase.org/xml/ns/dbchangelog
http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-latest.xsd">
+
+ <changeSet id="2026-02-25-idx-dpms-schema-id" author="performance">
+ <!-- CRITICAL: Speeds up the CTE inner join that filters by schema on
every search -->
+ <createIndex tableName="data_product_metadata_schema"
indexName="idx_dpms_schema_id">
+ <column name="metadata_schema_id"/>
+ </createIndex>
+ </changeSet>
+
+ <changeSet id="2026-02-25-idx-sus-user-perm" author="performance">
+ <!-- HIGH: Speeds up user permission lookups in the recursive CTE -->
+ <createIndex tableName="simple_user_sharing"
indexName="idx_sus_user_perm">
+ <column name="simple_user_id"/>
+ <column name="permission_id"/>
+ </createIndex>
+ </changeSet>
+
+ <changeSet id="2026-02-25-idx-sgs-group-perm" author="performance">
+ <!-- HIGH: Speeds up group permission lookups -->
+ <createIndex tableName="simple_group_sharing"
indexName="idx_sgs_group_perm">
+ <column name="simple_group_id"/>
+ <column name="permission_id"/>
+ </createIndex>
+ </changeSet>
+
+ <changeSet id="2026-02-25-idx-sg-external-id" author="performance">
+ <!-- MEDIUM: Speeds up group ID lookups for token-based group
filtering -->
+ <createIndex tableName="simple_group" indexName="idx_sg_external_id">
+ <column name="external_id"/>
+ </createIndex>
+ </changeSet>
+
+</databaseChangeLog>