You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by ch...@apache.org on 2014/02/10 21:48:11 UTC

git commit: completing registry cpi for experiment - AIRAVATA-1006

Updated Branches:
  refs/heads/master c8a68118b -> e4a12c345


completing registry cpi for experiment - AIRAVATA-1006


Project: http://git-wip-us.apache.org/repos/asf/airavata/repo
Commit: http://git-wip-us.apache.org/repos/asf/airavata/commit/e4a12c34
Tree: http://git-wip-us.apache.org/repos/asf/airavata/tree/e4a12c34
Diff: http://git-wip-us.apache.org/repos/asf/airavata/diff/e4a12c34

Branch: refs/heads/master
Commit: e4a12c3458913f5cca47a8625ca48620ae6f1735
Parents: c8a6811
Author: chathuri <ch...@apache.org>
Authored: Mon Feb 10 15:48:04 2014 -0500
Committer: chathuri <ch...@apache.org>
Committed: Mon Feb 10 15:48:04 2014 -0500

----------------------------------------------------------------------
 .../registry/jpa/impl/ExperimentRegistry.java   | 28 ++++++--
 .../registry/jpa/impl/RegistryImpl.java         | 70 +++++++++++++++++++-
 .../model/Experiment_Configuration_Data.java    | 12 +++-
 .../registry/jpa/model/Experiment_Summary.java  | 14 +++-
 .../resources/ExperimentConfigDataResource.java | 11 +++
 .../resources/ExperimentSummaryResource.java    |  2 +
 .../jpa/ExperimentMetadataResourceTest.java     | 12 ++++
 7 files changed, 138 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/airavata/blob/e4a12c34/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/impl/ExperimentRegistry.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/impl/ExperimentRegistry.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/impl/ExperimentRegistry.java
index 5369f90..c88381d 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/impl/ExperimentRegistry.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/impl/ExperimentRegistry.java
@@ -28,7 +28,6 @@ import org.apache.airavata.persistance.registry.jpa.Resource;
 import org.apache.airavata.persistance.registry.jpa.ResourceType;
 import org.apache.airavata.persistance.registry.jpa.resources.*;
 import org.apache.airavata.persistance.registry.jpa.utils.ThriftDataModelConversion;
-import org.apache.airavata.registry.cpi.DependentDataType;
 import org.apache.airavata.registry.cpi.utils.Constants;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -236,7 +235,7 @@ public class ExperimentRegistry {
                 exConfigData.setNumberOfRetries(qosParams.getNumberofRetries());
                 exConfigData.save();
             }else if (fieldName.equals(Constants.FieldConstants.ConfigurationDataConstants.EXPERIMENT_INPUTS)){
-                if (value instanceof HashMap){
+                if (value instanceof Map){
                     Map<String, String> experimentInputs = (HashMap<String, String>)value;
                     List<Resource> exInputs = exBasicData.get(ResourceType.EXPERIMENT_INPUT);
                     int i = 0;
@@ -349,7 +348,7 @@ public class ExperimentRegistry {
         try {
             if (fieldName.equals(Constants.FieldConstants.BasicMetadataConstants.USER_NAME)){
                 UserReg userRegistry = new UserReg();
-                WorkerResource worker = userRegistry.getSysteUser();
+                WorkerResource worker = userRegistry.getExistingUser(ServerSettings.getSystemUserGateway(), (String)value);
                 List<Resource> resources = worker.get(ResourceType.EXPERIMENT_METADATA);
                 for (Resource resource : resources){
                     ExperimentMetadataResource ex =  (ExperimentMetadataResource)resource;
@@ -372,7 +371,7 @@ public class ExperimentRegistry {
             gatewayRegistry = new GatewayRegistry();
             GatewayResource gateway = gatewayRegistry.getDefaultGateway();
             if (fieldName.equals(Constants.FieldConstants.ConfigurationDataConstants.EXPERIMENT_ID)){
-                ExperimentMetadataResource exBasicData = (ExperimentMetadataResource) gateway.get(ResourceType.EXPERIMENT_METADATA, (String)value);
+                ExperimentMetadataResource exBasicData = (ExperimentMetadataResource) gateway.get(ResourceType.EXPERIMENT_METADATA, value);
                 List<Resource> resources = exBasicData.get(ResourceType.EXPERIMENT_CONFIG_DATA);
                 for (Resource resource : resources){
                     ExperimentConfigDataResource configDataResource = (ExperimentConfigDataResource)resource;
@@ -501,7 +500,26 @@ public class ExperimentRegistry {
         }
     }
 
-    public boolean isExist(DependentDataType dataType, Object identifier) {
+    public boolean isExperimentBasicDataExist(String expID) {
+        try{
+            GatewayResource defaultGateway = gatewayRegistry.getDefaultGateway();
+            defaultGateway.isExists(ResourceType.EXPERIMENT_METADATA, expID);
+            return true;
+        } catch (ApplicationSettingsException e) {
+            logger.error("Unable to read airavata-server properties..", e.getMessage());
+        }
+        return false;
+    }
+
+    public boolean isExperimentConfigDataExist(String expID) {
+        try {
+            GatewayResource defaultGateway = gatewayRegistry.getDefaultGateway();
+            ExperimentMetadataResource exBasicData = (ExperimentMetadataResource)defaultGateway.get(ResourceType.EXPERIMENT_METADATA, expID);
+            exBasicData.isExists(ResourceType.EXPERIMENT_CONFIG_DATA, expID);
+            return true;
+        } catch (ApplicationSettingsException e) {
+            logger.error("Unable to read airavata-server properties..", e.getMessage());
+        }
         return false;
     }
 

http://git-wip-us.apache.org/repos/asf/airavata/blob/e4a12c34/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/impl/RegistryImpl.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/impl/RegistryImpl.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/impl/RegistryImpl.java
index 9105ac1..d2e661d 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/impl/RegistryImpl.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/impl/RegistryImpl.java
@@ -37,6 +37,16 @@ public class RegistryImpl implements Registry {
     private final static Logger logger = LoggerFactory.getLogger(RegistryImpl.class);
     ExperimentRegistry experimentRegistry = new ExperimentRegistry();
 
+    /**
+     * This method is to add an object in to the registry
+     * @param dataType Data type is a predefined type which the programmer should choose according to the object he
+     *                 is going to save in to registry
+     * @param newObjectToAdd Object which contains the fields that need to be saved in to registry. This object is a
+     *                       thrift model object. In experiment case this object can be BasicMetadata, ConfigurationData
+     *                       etc
+     * @return return the identifier to identify the object
+     */
+    @Override
     public Object add(TopLevelDataType dataType, Object newObjectToAdd) {
         switch (dataType){
             case EXPERIMENT_BASIC_DATA:
@@ -47,6 +57,17 @@ public class RegistryImpl implements Registry {
         }
     }
 
+    /**
+     * This method is to add an object in to the registry
+     * @param dataType Data type is a predefined type which the programmer should choose according to the object he
+     *                 is going to save in to registry
+     * @param newObjectToAdd Object which contains the fields that need to be saved in to registry. This object is a
+     *                       thrift model object. In experiment case this object can be BasicMetadata, ConfigurationData
+     *                       etc
+     * @param dependentIdentifier Object which contains the identifier if the object that is going to add is not a top
+     *                            level object in the data model. If it is a top level object, programmer can pass it as
+     *                            null
+     */
     @Override
     public void add(DependentDataType dataType, Object newObjectToAdd, Object dependentIdentifier) {
         switch (dataType){
@@ -69,6 +90,16 @@ public class RegistryImpl implements Registry {
 
     }
 
+    /**
+     * This method is to update the whole object in registry
+     * @param dataType Data type is a predefined type which the programmer should choose according to the object he
+     *                 is going to save in to registry
+     * @param newObjectToUpdate Object which contains the fields that need to be updated in to registry. This object is a
+     *                       thrift model object. In experiment case this object can be BasicMetadata, ConfigurationData
+     *                       etc. CPI programmer can only fill necessary fields that need to be updated. He does not
+     *                       have to fill the whole object. He needs to only fill the mandatory fields and whatever the
+     *                       other fields that need to be updated.
+     */
     @Override
     public void update(DataType dataType, Object newObjectToUpdate, Object identifier) {
         switch (dataType){
@@ -85,14 +116,26 @@ public class RegistryImpl implements Registry {
 
     }
 
+    /**
+     * This method is to update a specific field of the data model
+     * @param dataType Data type is a predefined type which the programmer should choose according to the object he
+     *                 is going to save in to registry
+     * @param identifier Identifier which will uniquely identify the data model. For example, in Experiment_Basic_Type,
+     *                   identifier will be generated experimentID
+     * @param fieldName Field which need to be updated in the registry. In Experiment_Basic_Type, if you want to update the
+     *              description, field will be "description". Field names are defined in
+     *              org.apache.airavata.registry.cpi.utils.Constants
+     * @param value Value by which the given field need to be updated. If the field is "description", that field will be
+     *              updated by given value
+     */
     @Override
-    public void update(DataType dataType, Object identifier, String field, Object value) {
+    public void update(DataType dataType, Object identifier, String fieldName, Object value) {
         switch (dataType){
             case EXPERIMENT_BASIC_DATA:
-                experimentRegistry.updateExpBasicMetadataField((String) identifier, field, value);
+                experimentRegistry.updateExpBasicMetadataField((String) identifier, fieldName, value);
                 break;
             case EXPERIMENT_CONFIGURATION_DATA:
-                experimentRegistry.updateExpConfigDataField((String) identifier, field, value);
+                experimentRegistry.updateExpConfigDataField((String) identifier, fieldName, value);
                 break;
             default:
                 logger.error("Unsupported data type...", new UnsupportedOperationException());
@@ -202,6 +245,13 @@ public class RegistryImpl implements Registry {
         }
     }
 
+    /**
+     * This method is to remove a item from the registry
+     * @param dataType Data type is a predefined type which the programmer should choose according to the object he
+     *                 is going to save in to registry
+     * @param identifier Identifier which will uniquely identify the data model. For example, in Experiment_Basic_Type,
+     *                   identifier will be generated experimentID
+     */
     @Override
     public void remove(DataType dataType, Object identifier) {
         switch (dataType){
@@ -216,8 +266,22 @@ public class RegistryImpl implements Registry {
         }
     }
 
+    /**
+     * This method will check whether a given data type which can be identified with the identifier exists or not
+     * @param dataType Data type is a predefined type which the programmer should choose according to the object he
+     *                 is going to save in to registry
+     * @param identifier Identifier which will uniquely identify the data model. For example, in Experiment_Basic_Type,
+     *                   identifier will be generated experimentID
+     * @return whether the given data type exists or not
+     */
     @Override
     public boolean isExist(DataType dataType, Object identifier) {
+        switch (dataType){
+            case EXPERIMENT_BASIC_DATA:
+                return experimentRegistry.isExperimentBasicDataExist((String)identifier);
+            case EXPERIMENT_CONFIGURATION_DATA:
+                return experimentRegistry.isExperimentConfigDataExist((String)identifier);
+        }
         return false;
     }
 }

http://git-wip-us.apache.org/repos/asf/airavata/blob/e4a12c34/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/Experiment_Configuration_Data.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/Experiment_Configuration_Data.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/Experiment_Configuration_Data.java
index dc68cb3..509f8f4 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/Experiment_Configuration_Data.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/Experiment_Configuration_Data.java
@@ -28,7 +28,9 @@ import java.sql.Timestamp;
 @Table(name ="EXPERIMENT_CONFIGURATION_DATA")
 public class Experiment_Configuration_Data {
     @Id
-    @ManyToOne(cascade= CascadeType.MERGE)
+    @Column(name = "EXPERIMENT_ID")
+    private String experiment_id;
+    @ManyToOne
     @JoinColumn(name = "EXPERIMENT_ID")
     private Experiment_Metadata experiment_metadata;
     @Column(name = "RESOURCE_HOST_ID")
@@ -301,4 +303,12 @@ public class Experiment_Configuration_Data {
     public void setNumber_of_retries(int number_of_retries) {
         this.number_of_retries = number_of_retries;
     }
+
+    public String getExperiment_id() {
+        return experiment_id;
+    }
+
+    public void setExperiment_id(String experiment_id) {
+        this.experiment_id = experiment_id;
+    }
 }

http://git-wip-us.apache.org/repos/asf/airavata/blob/e4a12c34/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/Experiment_Summary.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/Experiment_Summary.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/Experiment_Summary.java
index 1a04a5e..e06cfc8 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/Experiment_Summary.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/model/Experiment_Summary.java
@@ -28,9 +28,11 @@ import java.sql.Timestamp;
 @Entity
 @Table(name ="EXPERIMENT_SUMMARY")
 public class Experiment_Summary {
-
     @Id
-    @ManyToOne(cascade= CascadeType.MERGE)
+    @Column(name = "EXPERIMENT_ID")
+    private String experimentID;
+
+    @ManyToOne
     @JoinColumn(name = "EXPERIMENT_ID")
     private Experiment_Metadata experiment_metadata;
     @Column(name = "STATUS")
@@ -61,4 +63,12 @@ public class Experiment_Summary {
     public void setLast_update_time(Timestamp last_update_time) {
         this.last_update_time = last_update_time;
     }
+
+    public String getExperimentID() {
+        return experimentID;
+    }
+
+    public void setExperimentID(String experimentID) {
+        this.experimentID = experimentID;
+    }
 }

http://git-wip-us.apache.org/repos/asf/airavata/blob/e4a12c34/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ExperimentConfigDataResource.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ExperimentConfigDataResource.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ExperimentConfigDataResource.java
index 72b2ef6..07057b8 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ExperimentConfigDataResource.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ExperimentConfigDataResource.java
@@ -36,6 +36,7 @@ import java.util.List;
 public class ExperimentConfigDataResource extends AbstractResource {
     private static final Logger logger = LoggerFactory.getLogger(ExperimentConfigDataResource.class);
     private ExperimentMetadataResource exMetadata;
+    private String expID;
     private String resourceHostID;
     private int cpuCount;
     private int nodeCount;
@@ -64,6 +65,14 @@ public class ExperimentConfigDataResource extends AbstractResource {
 
     private byte[] request;
 
+    public String getExpID() {
+        return expID;
+    }
+
+    public void setExpID(String expID) {
+        this.expID = expID;
+    }
+
     public ExperimentMetadataResource getExMetadata() {
         return exMetadata;
     }
@@ -316,6 +325,7 @@ public class ExperimentConfigDataResource extends AbstractResource {
         exconfig.setExperiment_config_data(request);
         Experiment_Metadata metadata = em.find(Experiment_Metadata.class, exMetadata.getExpID());
         exconfig.setExperiment_metadata(metadata);
+        exconfig.setExperiment_id(metadata.getExperiment_id());
         exconfig.setJob_start_time(jobStartTime);
         exconfig.setNode_count(nodeCount);
         exconfig.setNumber_of_threads(numberOfThreads);
@@ -345,6 +355,7 @@ public class ExperimentConfigDataResource extends AbstractResource {
             existingConfig.setData_reg_url(dataRegURL);
             existingConfig.setExperiment_config_data(request);
             existingConfig.setExperiment_metadata(metadata);
+            existingConfig.setExperiment_id(metadata.getExperiment_id());
             existingConfig.setJob_start_time(jobStartTime);
             existingConfig.setNode_count(nodeCount);
             existingConfig.setNumber_of_threads(numberOfThreads);

http://git-wip-us.apache.org/repos/asf/airavata/blob/e4a12c34/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ExperimentSummaryResource.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ExperimentSummaryResource.java b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ExperimentSummaryResource.java
index 8555006..6e841b9 100644
--- a/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ExperimentSummaryResource.java
+++ b/modules/registry/airavata-jpa-registry/src/main/java/org/apache/airavata/persistance/registry/jpa/resources/ExperimentSummaryResource.java
@@ -95,11 +95,13 @@ public class ExperimentSummaryResource extends AbstractResource {
         exSummary.setStatus(status);
         Experiment_Metadata metadata = em.find(Experiment_Metadata.class, experimentMetadataResource.getExpID());
         exSummary.setExperiment_metadata(metadata);
+        exSummary.setExperimentID(metadata.getExperiment_id());
 
         if (existingExSummary != null){
             existingExSummary.setLast_update_time(lastUpdateTime);
             existingExSummary.setStatus(status);
             existingExSummary.setExperiment_metadata(metadata);
+            existingExSummary.setExperimentID(metadata.getExperiment_id());
             exSummary = em.merge(existingExSummary);
         }  else {
             em.persist(exSummary);

http://git-wip-us.apache.org/repos/asf/airavata/blob/e4a12c34/modules/registry/airavata-jpa-registry/src/test/java/org/apache/airavata/persistance/registry/jpa/ExperimentMetadataResourceTest.java
----------------------------------------------------------------------
diff --git a/modules/registry/airavata-jpa-registry/src/test/java/org/apache/airavata/persistance/registry/jpa/ExperimentMetadataResourceTest.java b/modules/registry/airavata-jpa-registry/src/test/java/org/apache/airavata/persistance/registry/jpa/ExperimentMetadataResourceTest.java
index 351cc04..a07f981 100644
--- a/modules/registry/airavata-jpa-registry/src/test/java/org/apache/airavata/persistance/registry/jpa/ExperimentMetadataResourceTest.java
+++ b/modules/registry/airavata-jpa-registry/src/test/java/org/apache/airavata/persistance/registry/jpa/ExperimentMetadataResourceTest.java
@@ -49,6 +49,14 @@ public class ExperimentMetadataResourceTest extends AbstractResourceTest {
         experimentResource.setShareExp(true);
         experimentResource.save();
 
+        ExperimentConfigDataResource exConfig = (ExperimentConfigDataResource)experimentResource.create(ResourceType.EXPERIMENT_CONFIG_DATA);
+        exConfig.setExpID("testExpID");
+        exConfig.setNodeCount(5);
+        exConfig.setCpuCount(10);
+        exConfig.setApplicationID("testApp");
+        exConfig.setApplicationVersion("testAppVersion");
+        exConfig.save();
+
         workflowDataResource = experimentResource.createWorkflowInstanceResource("testWFInstance");
         workflowDataResource.setExperimentID("testExpID");
         workflowDataResource.setStatus("testStatus");
@@ -68,6 +76,10 @@ public class ExperimentMetadataResourceTest extends AbstractResourceTest {
         assertTrue("workflow data resource removed successfully", !experimentResource.isExists(ResourceType.WORKFLOW_DATA, "testWFInstance"));
     }
 
+    public void testGet() throws Exception {
+        assertNotNull("experiment configuration retrieved successfully...", experimentResource.get(ResourceType.EXPERIMENT_CONFIG_DATA, "testExpID"));
+    }
+
     @Override
     public void tearDown() throws Exception {
         super.tearDown();