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 <[email protected]> Authored: Mon Feb 10 15:48:04 2014 -0500 Committer: chathuri <[email protected]> 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();
