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 {