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>

Reply via email to