You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by is...@apache.org on 2022/05/24 20:35:43 UTC

[airavata-data-lake] branch master updated: Add neo4j indexes and constraints

This is an automated email from the ASF dual-hosted git repository.

isjarana pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/airavata-data-lake.git


The following commit(s) were added to refs/heads/master by this push:
     new a90c21d  Add neo4j indexes and constraints
     new b916a9c  Merge pull request #100 from isururanawaka/master
a90c21d is described below

commit a90c21d01679266084234cfc2e42d058dfc6643a
Author: Isuru Ranawaka <ir...@gmail.com>
AuthorDate: Tue May 24 16:34:57 2022 -0400

    Add neo4j indexes and constraints
---
 .../drms/api/dboperation/Neo4jIndexCreator.java    | 55 ++++++++++++++++++++++
 .../drms/api/handlers/ResourceServiceHandler.java  |  4 +-
 2 files changed, 57 insertions(+), 2 deletions(-)

diff --git a/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/dboperation/Neo4jIndexCreator.java b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/dboperation/Neo4jIndexCreator.java
new file mode 100644
index 0000000..a6a95ad
--- /dev/null
+++ b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/dboperation/Neo4jIndexCreator.java
@@ -0,0 +1,55 @@
+package org.apache.airavata.drms.api.dboperation;
+
+import org.apache.airavata.drms.api.handlers.ResourceServiceHandler;
+import org.apache.airavata.drms.core.Neo4JConnector;
+import org.apache.custos.clients.CustosClientProvider;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.context.event.ApplicationReadyEvent;
+import org.springframework.context.event.EventListener;
+import org.springframework.stereotype.Component;
+
+@Component
+public class Neo4jIndexCreator {
+
+    private static final Logger logger = LoggerFactory.getLogger(ResourceServiceHandler.class);
+
+    @Autowired
+    private Neo4JConnector neo4JConnector;
+
+    @Autowired
+    private CustosClientProvider custosClientProvider;
+
+    @EventListener(ApplicationReadyEvent.class)
+    public void createIndexes() {
+        logger.info("Running neo4j Index creation..........");
+        String userIndex = "CREATE INDEX user_index_username IF NOT EXISTS FOR (n:User) ON (n.username, n.tenantId)";
+        String fileIndex = "CREATE INDEX user_index_username IF NOT EXISTS FOR (n:FILE) ON (n.entityId, n.tenantId)";
+        String collectionIndex = "CREATE INDEX collection_index_username IF NOT EXISTS FOR (n:COLLECTION) ON (n.entityId, n.tenantId)";
+        String storageIndex = "CREATE INDEX storage_index IF NOT EXISTS FOR (n:Storage) ON (n.entityId, n.tenantId)";
+
+        neo4JConnector.runTransactionalQuery(userIndex);
+        neo4JConnector.runTransactionalQuery(fileIndex);
+        neo4JConnector.runTransactionalQuery(collectionIndex);
+        neo4JConnector.runTransactionalQuery(storageIndex);
+    }
+
+    @EventListener(ApplicationReadyEvent.class)
+    public void createConstraints() {
+        logger.info("Running neo4j constraints creation..........");
+        String userConstraint = "CREATE CONSTRAINT IF NOT EXISTS ON   (n:User)  ASSERT n.username   IS UNIQUE";
+        String groupConstraint = "CREATE CONSTRAINT IF NOT EXISTS ON   (n:Group)  ASSERT n.groupId   IS UNIQUE";
+        String resourceConstraint = "CREATE CONSTRAINT IF NOT EXISTS ON   (n:COLLECTION)  ASSERT n.entityId   IS UNIQUE";
+        String fileConstraint = "CREATE CONSTRAINT IF NOT EXISTS ON   (n:FILE)  ASSERT n.entityId   IS UNIQUE";
+        String storageConstraint = "CREATE CONSTRAINT IF NOT EXISTS ON   (n:Storage)  ASSERT n.entityId   IS UNIQUE";
+        String storagePreferenceConstraint = "CREATE CONSTRAINT IF NOT EXISTS ON   (n:StoragePreference)  ASSERT n.entityId   IS UNIQUE";
+        neo4JConnector.runTransactionalQuery(userConstraint);
+        neo4JConnector.runTransactionalQuery(groupConstraint);
+        neo4JConnector.runTransactionalQuery(resourceConstraint);
+        neo4JConnector.runTransactionalQuery(fileConstraint);
+        neo4JConnector.runTransactionalQuery(storageConstraint);
+        neo4JConnector.runTransactionalQuery(storagePreferenceConstraint);
+    }
+
+}
diff --git a/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/ResourceServiceHandler.java b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/ResourceServiceHandler.java
index fb8f49b..220e4d6 100644
--- a/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/ResourceServiceHandler.java
+++ b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/handlers/ResourceServiceHandler.java
@@ -196,7 +196,7 @@ public class ResourceServiceHandler extends ResourceServiceGrpc.ResourceServiceI
 
             String query = " MATCH (u:User),  (r:" + type + ") where u.username = $username AND u.tenantId = $tenantId AND " +
                     " r.entityId = $entityId AND r.tenantId = $tenantId" +
-                    "  OPTIONAL MATCH (g:Group)<-[:MEMBER_OF]-(u) " +
+                    " OPTIONAL MATCH (g:Group)<-[:MEMBER_OF]-(u) " +
                     " OPTIONAL MATCH (cg:Group)-[:CHILD_OF]->(g)" +
                     " return case when  exists((u)<-[:SHARED_WITH]-(r)) OR  exists((g)<-[:SHARED_WITH]-(r)) OR   " +
                     "exists((cg)<-[:SHARED_WITH]-(r)) then r  else NULL end as value";
@@ -363,7 +363,7 @@ public class ResourceServiceHandler extends ResourceServiceGrpc.ResourceServiceI
 
             String query = " MATCH (u:User),  (r:" + type + ") where u.username = $username AND u.tenantId = $tenantId AND " +
                     " r.entityId = $entityId AND r.tenantId = $tenantId" +
-                    "  OPTIONAL MATCH (g:Group)<-[:MEMBER_OF]-(u) " +
+                    " OPTIONAL MATCH (g:Group)<-[:MEMBER_OF]-(u) " +
                     " OPTIONAL MATCH (cg:Group)-[:CHILD_OF]->(g)" +
                     " return case when  exists((u)<-[:SHARED_WITH]-(r)) OR  exists((g)<-[:SHARED_WITH]-(r)) OR   " +
                     "exists((cg)<-[:SHARED_WITH]-(r)) then r  else NULL end as value";