You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by di...@apache.org on 2021/06/01 03:03:24 UTC

[airavata-data-lake] 17/42: Fetching resource level metadata

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

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

commit f3683725276e410fb0c55ff5096a71c773375b3d
Author: Dimuthu Wannipurage <di...@gmail.com>
AuthorDate: Wed Mar 24 13:52:43 2021 -0400

    Fetching resource level metadata
---
 .../drms/api/handlers/ResourceServiceHandler.java  | 19 +++++++-
 .../drms/core/constants/MetadataConstants.java     | 22 +++++++++
 .../core/deserializer/MetadataDeserializer.java    | 54 ++++++++++++++++++++++
 .../main/proto/resource/DRMSResourceService.proto  |  6 ++-
 4 files changed, 99 insertions(+), 2 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 34efc05..9917ee8 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
@@ -32,6 +32,7 @@ import org.apache.airavata.drms.core.constants.ResourceConstants;
 import org.apache.airavata.drms.core.constants.StorageConstants;
 import org.apache.airavata.drms.core.deserializer.AnyStoragePreferenceDeserializer;
 import org.apache.airavata.drms.core.deserializer.GenericResourceDeserializer;
+import org.apache.airavata.drms.core.deserializer.MetadataDeserializer;
 import org.lognet.springboot.grpc.GRpcService;
 import org.neo4j.driver.Record;
 import org.slf4j.Logger;
@@ -140,6 +141,22 @@ public class ResourceServiceHandler extends ResourceServiceGrpc.ResourceServiceI
 
     @Override
     public void fetchResourceMetadata(FetchResourceMetadataRequest request, StreamObserver<FetchResourceMetadataResponse> responseObserver) {
-        super.fetchResourceMetadata(request, responseObserver);
+        User callUser = getUser(request.getAuthToken());
+        List<Record> records = neo4JConnector.searchNodes("match (u:User)-[MEMBER_OF]->(g:Group)<-[SHARED_WITH]-(res:Resource)-[r:HAS_METADATA]->(m:Metadata) " +
+                "where u.userId ='" + callUser.getUserId()+ "' and res.resourceId = '" + request.getResourceId() + "' return distinct m");
+        try {
+            List<MetadataNode> metadataNodes = MetadataDeserializer.deserializeList(records);
+            if (metadataNodes.size() == 1) {
+                responseObserver.onNext(FetchResourceMetadataResponse.newBuilder().setMetadataNode(metadataNodes.get(0)).build());
+                responseObserver.onCompleted();
+            } else {
+                logger.error("No metadata entry for resource {}", request.getResourceId());
+                responseObserver.onError(new Exception("No metadata entry for resource " + request.getResourceId()));
+            }
+        } catch (Exception e) {
+            logger.error("Errored while fetching metadata for resource with id {}", request.getResourceId(), e);
+            responseObserver.onError(new Exception("Errored while fetching metadata for resource with id "
+                    + request.getResourceId() + ". Msg " + e.getMessage()));
+        }
     }
 }
diff --git a/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/constants/MetadataConstants.java b/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/constants/MetadataConstants.java
new file mode 100644
index 0000000..da573e8
--- /dev/null
+++ b/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/constants/MetadataConstants.java
@@ -0,0 +1,22 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.airavata.drms.core.constants;
+
+public final class MetadataConstants {
+    public static final String METADATA_LABEL = "Metadata";
+}
diff --git a/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/deserializer/MetadataDeserializer.java b/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/deserializer/MetadataDeserializer.java
new file mode 100644
index 0000000..e87d4f6
--- /dev/null
+++ b/data-resource-management-service/drms-core/src/main/java/org/apache/airavata/drms/core/deserializer/MetadataDeserializer.java
@@ -0,0 +1,54 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.airavata.drms.core.deserializer;
+
+import org.apache.airavata.datalake.drms.storage.Metadata;
+import org.apache.airavata.datalake.drms.storage.MetadataNode;
+import org.apache.airavata.drms.core.constants.MetadataConstants;
+import org.neo4j.driver.Record;
+import org.neo4j.driver.Value;
+import org.neo4j.driver.internal.InternalRecord;
+import org.neo4j.driver.types.Node;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+public class MetadataDeserializer {
+
+    public static List<MetadataNode> deserializeList(List<Record> neo4jRecords) throws Exception {
+        List<MetadataNode> metadataNodeList = new ArrayList<>();
+        for (Record record : neo4jRecords) {
+            InternalRecord internalRecord = (InternalRecord) record;
+            List<Value> values = internalRecord.values();
+
+            if (values.size() == 1) {
+                Value metadataValue = values.get(0);
+                Node metadataNode = metadataValue.asNode();
+                if (metadataNode.hasLabel(MetadataConstants.METADATA_LABEL)) {
+                    MetadataNode.Builder metadataNodeBuilder = MetadataNode.newBuilder();
+                    Map<String, Object> propertiesMap = metadataNode.asMap();
+                    propertiesMap.forEach((key, val) ->
+                    metadataNodeBuilder.addMetadata(Metadata.newBuilder().setKey(key).setValue(val.toString()).build()));
+                    metadataNodeList.add(metadataNodeBuilder.build());
+                }
+            }
+        }
+        return metadataNodeList;
+    }
+}
diff --git a/data-resource-management-service/drms-stubs/src/main/proto/resource/DRMSResourceService.proto b/data-resource-management-service/drms-stubs/src/main/proto/resource/DRMSResourceService.proto
index 7251f12..fa3a24a 100644
--- a/data-resource-management-service/drms-stubs/src/main/proto/resource/DRMSResourceService.proto
+++ b/data-resource-management-service/drms-stubs/src/main/proto/resource/DRMSResourceService.proto
@@ -91,10 +91,14 @@ message FetchResourceMetadataRequest {
   string resourceId = 2;
 }
 
-message FetchResourceMetadataResponse {
+message MetadataNode {
   repeated Metadata metadata = 1;
 }
 
+message FetchResourceMetadataResponse {
+  MetadataNode metadataNode = 1;
+}
+
 
 service ResourceService {