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 2021/07/08 01:59:52 UTC

[airavata-data-lake] branch master updated: bug fix

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 3d06484  bug fix
     new cc50fea  Merge pull request #19 from isururanawaka/workflow_invocation
3d06484 is described below

commit 3d064847c87121f9f02079a7e51a583267bfa152
Author: Isuru Ranawaka <ir...@gmail.com>
AuthorDate: Wed Jul 7 21:59:03 2021 -0400

    bug fix
---
 .../drms/api/handlers/ResourceServiceHandler.java  | 83 +++++++++++++++++++++-
 .../org/apache/airavata/drms/api/utils/Utils.java  |  4 +-
 2 files changed, 83 insertions(+), 4 deletions(-)

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 b2f2ccb..214a6d7 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
@@ -90,7 +90,7 @@ public class ResourceServiceHandler extends ResourceServiceGrpc.ResourceServiceI
                 List<GenericResource> genericResourceList = GenericResourceDeserializer.deserializeList(records);
                 ResourceFetchResponse.Builder builder = ResourceFetchResponse.newBuilder();
                 if (!genericResourceList.isEmpty()) {
-                     // TODO: Move to Storage
+                    // TODO: Move to Storage
                     String searchQuery = "Match (srcStr:Storage)<-[:CHILD_OF]-" +
                             "(srcSp:StoragePreference)-[:TRANSFER_OUT]->(t:TransferMapping" +
                             "{scope:'GLOBAL', tenantId:$tenantId})-[:TRANSFER_IN]->(dstSp:StoragePreference)-[:CHILD_OF]->(dstStr:Storage)" +
@@ -279,7 +279,86 @@ public class ResourceServiceHandler extends ResourceServiceGrpc.ResourceServiceI
     @Override
     public void updateResource(ResourceUpdateRequest
                                        request, StreamObserver<ResourceUpdateResponse> responseObserver) {
-        super.updateResource(request, responseObserver);
+        try {
+            AuthenticatedUser callUser = request.getAuthToken().getAuthenticatedUser();
+
+            String type = request.getResource().getType();
+
+            Map<String, Object> userProps = new HashMap<>();
+            userProps.put("username", callUser.getUsername());
+            userProps.put("tenantId", callUser.getTenantId());
+
+            String parentId = request.getResource().getParentId();
+
+            String entityId = request.getResource().getResourceId();
+            Map<String, Object> serializedMap = GenericResourceSerializer.serializeToMap(request.getResource());
+            Optional<Entity> exEntity = CustosUtils.mergeResourceEntity(custosClientProvider, callUser.getTenantId(),
+                    parentId, type, entityId,
+                    request.getResource().getResourceName(), request.getResource().getResourceName(),
+                    callUser.getUsername());
+
+            if (exEntity.isPresent()) {
+                serializedMap.put("description", exEntity.get().getDescription());
+                serializedMap.put("resourceName", exEntity.get().getName());
+                serializedMap.put("createdTime", String.valueOf(exEntity.get().getCreatedAt()));
+                serializedMap.put("tenantId", callUser.getTenantId());
+                serializedMap.put("entityId", exEntity.get().getId());
+                serializedMap.put("entityType", exEntity.get().getType());
+                serializedMap.put("lastModifiedTime", exEntity.get().getCreatedAt());
+                serializedMap.put("owner", exEntity.get().getOwnerId());
+                serializedMap.putAll(request.getResource().getPropertiesMap());
+
+                if (!parentId.isEmpty()) {
+                    this.neo4JConnector.mergeNodesWithParentChildRelationShip(serializedMap, new HashMap<>(),
+                            request.getResource().getType(), StoragePreferenceConstants.STORAGE_PREFERENCE_LABEL,
+                            callUser.getUsername(), entityId, parentId, callUser.getTenantId());
+                } else {
+                    this.neo4JConnector.mergeNode(serializedMap, request.getResource().getType(),
+                            callUser.getUsername(), entityId, callUser.getTenantId());
+                }
+            } else {
+                logger.error("Error occurred while creating resource entity in Custos {}", request.getResource().getResourceId());
+                String msg = "Error occurred while creating resource entity in Custos with id"
+                        + request.getResource().getResourceId();
+                responseObserver.onError(Status.INTERNAL.withDescription(msg).asRuntimeException());
+                return;
+            }
+            Map<String, Object> exProps = new HashMap<>();
+            exProps.put("username", callUser.getUsername());
+            exProps.put("tenantId", callUser.getTenantId());
+            exProps.put("entityId", exEntity.get().getId());
+
+            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 (cg:Group)-[:CHILD_OF*]->(g:Group)<-[:MEMBER_OF]-(u)" +
+                    " 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";
+
+
+            List<Record> records = this.neo4JConnector.searchNodes(exProps, query);
+
+            List<GenericResource> genericResourceList = GenericResourceDeserializer.deserializeList(records);
+            GenericResource genericResource = genericResourceList.get(0);
+            if (genericResource.getPropertiesMap().containsKey("name")) {
+                genericResource = genericResource.toBuilder()
+                        .setResourceName(genericResource.getPropertiesMap().get("name")).build();
+            } else if (genericResource.getPropertiesMap().containsKey("resourceName")) {
+                genericResource = genericResource.toBuilder()
+                        .setResourceName(genericResource.getPropertiesMap().get("resourceName")).build();
+            }
+            ResourceUpdateResponse response = ResourceUpdateResponse
+                    .newBuilder()
+                    .setResource(genericResource)
+                    .build();
+            responseObserver.onNext(response);
+            responseObserver.onCompleted();
+
+
+        } catch (Exception ex) {
+            logger.error("Error occurred while creating resource {}", request.getResource().getResourceId());
+            String msg = "Error occurred while creating resource" + ex.getMessage();
+            responseObserver.onError(Status.INTERNAL.withDescription(msg).asRuntimeException());
+        }
     }
 
     @Override
diff --git a/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/utils/Utils.java b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/utils/Utils.java
index 5d4725f..a1729e5 100644
--- a/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/utils/Utils.java
+++ b/data-resource-management-service/drms-api/src/main/java/org/apache/airavata/drms/api/utils/Utils.java
@@ -49,8 +49,8 @@ public class Utils {
     public static Optional<String> getPropertySearchQuery(List<ResourceSearchQuery> resourceSearchQueries, String type) {
         if (!resourceSearchQueries.isEmpty()) {
             for (ResourceSearchQuery qry : resourceSearchQueries) {
-                String query = " MATCH (r:" + type + "{`" + qry.getField() + "`: '" + qry.getValue() + "'})" +
-                        " Return r ";
+                String query = " MATCH (r:" + type +
+                        ") where r." + qry.getField() + " contains  '" + qry.getValue() + "' Return r ";
                 return Optional.ofNullable(query);
             }
         }