You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by sa...@apache.org on 2014/07/11 22:29:56 UTC
[1/3] updating to create output objects manually when experiment does
not create the output parameters
Repository: airavata
Updated Branches:
refs/heads/master 95d35adef -> 7a378a6b4
http://git-wip-us.apache.org/repos/asf/airavata/blob/8121d469/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/utils/GFacUtils.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/utils/GFacUtils.java b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/utils/GFacUtils.java
index bc43ac5..a265043 100644
--- a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/utils/GFacUtils.java
+++ b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/utils/GFacUtils.java
@@ -17,7 +17,7 @@
* specific language governing permissions and limitations
* under the License.
*
-*/
+ */
package org.apache.airavata.gfac.core.utils;
import java.io.*;
@@ -42,6 +42,7 @@ import org.apache.airavata.gfac.core.handler.GFacHandlerException;
import org.apache.airavata.gfac.core.states.GfacExperimentState;
import org.apache.airavata.gfac.core.states.GfacPluginState;
import org.apache.airavata.model.workspace.experiment.*;
+import org.apache.airavata.model.workspace.experiment.DataType;
import org.apache.airavata.persistance.registry.jpa.impl.RegistryFactory;
import org.apache.airavata.registry.api.workflow.ApplicationJob;
import org.apache.airavata.registry.api.workflow.ApplicationJob.ApplicationJobStatus;
@@ -49,6 +50,7 @@ import org.apache.airavata.registry.cpi.ChildDataType;
import org.apache.airavata.registry.cpi.CompositeIdentifier;
import org.apache.airavata.registry.cpi.Registry;
import org.apache.airavata.schemas.gfac.*;
+import org.apache.airavata.schemas.gfac.DataType.Enum;
import org.apache.axiom.om.OMElement;
import org.apache.zookeeper.*;
import org.apache.zookeeper.data.Stat;
@@ -56,831 +58,1092 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class GFacUtils {
- private final static Logger log = LoggerFactory.getLogger(GFacUtils.class);
-
- private GFacUtils() {
- }
-
- /**
- * Read data from inputStream and convert it to String.
- *
- * @param in
- * @return String read from inputStream
- * @throws java.io.IOException
- */
- public static String readFromStream(InputStream in) throws IOException {
- try {
- StringBuffer wsdlStr = new StringBuffer();
-
- int read;
-
- byte[] buf = new byte[1024];
- while ((read = in.read(buf)) > 0) {
- wsdlStr.append(new String(buf, 0, read));
- }
- return wsdlStr.toString();
- } finally {
- if (in != null) {
- try {
- in.close();
- } catch (IOException e) {
- log.warn("Cannot close InputStream: " + in.getClass().getName(), e);
- }
- }
- }
- }
-
- /**
- * this can be used to do framework opertaions specific to different modes
- *
- * @param jobExecutionContext
- * @return
- */
- public static boolean isSynchronousMode(JobExecutionContext jobExecutionContext) {
- GFacConfiguration gFacConfiguration = jobExecutionContext.getGFacConfiguration();
- if (ExecutionMode.ASYNCHRONOUS.equals(gFacConfiguration.getExecutionMode())) {
- return false;
- }
- return true;
- }
-
- public static String readFileToString(String file) throws FileNotFoundException, IOException {
- BufferedReader instream = null;
- try {
-
- instream = new BufferedReader(new FileReader(file));
- StringBuffer buff = new StringBuffer();
- String temp = null;
- while ((temp = instream.readLine()) != null) {
- buff.append(temp);
- buff.append(Constants.NEWLINE);
- }
- return buff.toString();
- } finally {
- if (instream != null) {
- try {
- instream.close();
- } catch (IOException e) {
- log.warn("Cannot close FileinputStream", e);
- }
- }
- }
- }
-
- public static boolean isLocalHost(String appHost) throws UnknownHostException {
- String localHost = InetAddress.getLocalHost().getCanonicalHostName();
- return (localHost.equals(appHost) || Constants.LOCALHOST.equals(appHost) || Constants._127_0_0_1
- .equals(appHost));
- }
-
- public static String createUniqueNameForService(String serviceName) {
- String date = new Date().toString();
- date = date.replaceAll(" ", "_");
- date = date.replaceAll(":", "_");
- return serviceName + "_" + date + "_" + UUID.randomUUID();
- }
-
-
- public static String createGsiftpURIAsString(String host, String localPath) throws URISyntaxException {
- StringBuffer buf = new StringBuffer();
- if (!host.startsWith("gsiftp://"))
- buf.append("gsiftp://");
- buf.append(host);
- if (!host.endsWith("/"))
- buf.append("/");
- buf.append(localPath);
- return buf.toString();
- }
-
- public static ActualParameter getInputActualParameter(Parameter parameter, DataObjectType element) {
- ActualParameter actualParameter = new ActualParameter();
- if ("String".equals(parameter.getParameterType().getName())) {
- actualParameter = new ActualParameter(StringParameterType.type);
- if (!"".equals(element.getValue())) {
- ((StringParameterType) actualParameter.getType()).setValue(element.getValue());
- } else {
- ((StringParameterType) actualParameter.getType()).setValue("");
- }
- } else if ("Double".equals(parameter.getParameterType().getName())) {
- actualParameter = new ActualParameter(DoubleParameterType.type);
- if (!"".equals(element.getValue())) {
- ((DoubleParameterType) actualParameter.getType()).setValue(new Double(element.getValue()));
- }
- } else if ("Integer".equals(parameter.getParameterType().getName())) {
- actualParameter = new ActualParameter(IntegerParameterType.type);
- if (!"".equals(element.getValue())) {
- ((IntegerParameterType) actualParameter.getType()).setValue(new Integer(element.getValue()));
- }
- } else if ("Float".equals(parameter.getParameterType().getName())) {
- actualParameter = new ActualParameter(FloatParameterType.type);
- if (!"".equals(element.getValue())) {
- ((FloatParameterType) actualParameter.getType()).setValue(new Float(element.getValue()));
- }
- } else if ("Boolean".equals(parameter.getParameterType().getName())) {
- actualParameter = new ActualParameter(BooleanParameterType.type);
- if (!"".equals(element.getValue())) {
- ((BooleanParameterType) actualParameter.getType()).setValue(new Boolean(element.getValue()));
- }
- } else if ("File".equals(parameter.getParameterType().getName())) {
- actualParameter = new ActualParameter(FileParameterType.type);
- if (!"".equals(element.getValue())) {
- ((FileParameterType) actualParameter.getType()).setValue(element.getValue());
- }
- } else if ("URI".equals(parameter.getParameterType().getName())) {
- actualParameter = new ActualParameter(URIParameterType.type);
- if (!"".equals(element.getValue())) {
- ((URIParameterType) actualParameter.getType()).setValue(element.getValue());
- } else {
- ((URIParameterType) actualParameter.getType()).setValue("");
- }
-
- } else if ("StdOut".equals(parameter.getParameterType().getName())) {
- actualParameter = new ActualParameter(StdOutParameterType.type);
- if (!"".equals(element.getValue())) {
- ((StdOutParameterType) actualParameter.getType()).setValue(element.getValue());
- } else {
- ((StdOutParameterType) actualParameter.getType()).setValue("");
- }
-
- } else if ("StdErr".equals(parameter.getParameterType().getName())) {
- actualParameter = new ActualParameter(StdErrParameterType.type);
- if (!"".equals(element.getValue())) {
- ((StdErrParameterType) actualParameter.getType()).setValue(element.getValue());
- } else {
- ((StdErrParameterType) actualParameter.getType()).setValue("");
- }
-
- }
- return actualParameter;
- }
-
- public static ActualParameter getInputActualParameter(Parameter parameter, OMElement element) {
- OMElement innerelement = null;
- ActualParameter actualParameter = new ActualParameter();
- if ("String".equals(parameter.getParameterType().getName())) {
- actualParameter = new ActualParameter(StringParameterType.type);
- if (!"".equals(element.getText())) {
- ((StringParameterType) actualParameter.getType()).setValue(element.getText());
- } else if (element.getChildrenWithLocalName("value").hasNext()) {
- innerelement = (OMElement) element.getChildrenWithLocalName("value").next();
- ((StringParameterType) actualParameter.getType()).setValue(innerelement.getText());
- } else {
- ((StringParameterType) actualParameter.getType()).setValue("");
- }
- } else if ("Double".equals(parameter.getParameterType().getName())) {
- actualParameter = new ActualParameter(DoubleParameterType.type);
- if (!"".equals(element.getText())) {
- ((DoubleParameterType) actualParameter.getType()).setValue(new Double(innerelement.getText()));
- } else {
- innerelement = (OMElement) element.getChildrenWithLocalName("value").next();
- ((DoubleParameterType) actualParameter.getType()).setValue(new Double(innerelement.getText()));
- }
- } else if ("Integer".equals(parameter.getParameterType().getName())) {
- actualParameter = new ActualParameter(IntegerParameterType.type);
- if (!"".equals(element.getText())) {
- ((IntegerParameterType) actualParameter.getType()).setValue(new Integer(element.getText()));
- } else {
- innerelement = (OMElement) element.getChildrenWithLocalName("value").next();
- ((IntegerParameterType) actualParameter.getType()).setValue(new Integer(innerelement.getText()));
- }
- } else if ("Float".equals(parameter.getParameterType().getName())) {
- actualParameter = new ActualParameter(FloatParameterType.type);
- if (!"".equals(element.getText())) {
- ((FloatParameterType) actualParameter.getType()).setValue(new Float(element.getText()));
- } else {
- innerelement = (OMElement) element.getChildrenWithLocalName("value").next();
- ((FloatParameterType) actualParameter.getType()).setValue(new Float(innerelement.getText()));
- }
- } else if ("Boolean".equals(parameter.getParameterType().getName())) {
- actualParameter = new ActualParameter(BooleanParameterType.type);
- if (!"".equals(element.getText())) {
- ((BooleanParameterType) actualParameter.getType()).setValue(new Boolean(element.getText()));
- } else {
- innerelement = (OMElement) element.getChildrenWithLocalName("value").next();
- ((BooleanParameterType) actualParameter.getType()).setValue(Boolean.parseBoolean(innerelement.getText()));
- }
- } else if ("File".equals(parameter.getParameterType().getName())) {
- actualParameter = new ActualParameter(FileParameterType.type);
- if (!"".equals(element.getText())) {
- ((FileParameterType) actualParameter.getType()).setValue(element.getText());
- } else {
- innerelement = (OMElement) element.getChildrenWithLocalName("value").next();
- ((FileParameterType) actualParameter.getType()).setValue(innerelement.getText());
- }
- } else if ("URI".equals(parameter.getParameterType().getName())) {
- actualParameter = new ActualParameter(URIParameterType.type);
- if (!"".equals(element.getText())) {
- ((URIParameterType) actualParameter.getType()).setValue(element.getText());
- } else if (element.getChildrenWithLocalName("value").hasNext()) {
- innerelement = (OMElement) element.getChildrenWithLocalName("value").next();
- System.out.println(actualParameter.getType().toString());
- log.debug(actualParameter.getType().toString());
- ((URIParameterType) actualParameter.getType()).setValue(innerelement.getText());
- } else {
- ((URIParameterType) actualParameter.getType()).setValue("");
- }
- } else if ("StringArray".equals(parameter.getParameterType().getName())) {
- actualParameter = new ActualParameter(StringArrayType.type);
- Iterator value = element.getChildrenWithLocalName("value");
- int i = 0;
- if (!"".equals(element.getText())) {
- String[] list = StringUtil.getElementsFromString(element.getText());
- for (String arrayValue : list) {
- ((StringArrayType) actualParameter.getType()).insertValue(i++, arrayValue);
- }
- } else {
- while (value.hasNext()) {
- innerelement = (OMElement) value.next();
- ((StringArrayType) actualParameter.getType()).insertValue(i++, innerelement.getText());
- }
- }
- } else if ("DoubleArray".equals(parameter.getParameterType().getName())) {
- actualParameter = new ActualParameter(DoubleArrayType.type);
- Iterator value = element.getChildrenWithLocalName("value");
- int i = 0;
- if (!"".equals(element.getText())) {
- String[] list = StringUtil.getElementsFromString(element.getText());
- for (String arrayValue : list) {
- ((DoubleArrayType) actualParameter.getType()).insertValue(i++, new Double(arrayValue));
- }
- } else {
- while (value.hasNext()) {
- innerelement = (OMElement) value.next();
- ((DoubleArrayType) actualParameter.getType()).insertValue(i++, new Double(innerelement.getText()));
- }
- }
-
- } else if ("IntegerArray".equals(parameter.getParameterType().getName())) {
- actualParameter = new ActualParameter(IntegerArrayType.type);
- Iterator value = element.getChildrenWithLocalName("value");
- int i = 0;
- if (!"".equals(element.getText())) {
- String[] list = StringUtil.getElementsFromString(element.getText());
- for (String arrayValue : list) {
- ((IntegerArrayType) actualParameter.getType()).insertValue(i++, new Integer(arrayValue));
- }
- } else {
- while (value.hasNext()) {
- innerelement = (OMElement) value.next();
- ((IntegerArrayType) actualParameter.getType()).insertValue(i++, new Integer(innerelement.getText()));
- }
- }
- } else if ("FloatArray".equals(parameter.getParameterType().getName())) {
- actualParameter = new ActualParameter(FloatArrayType.type);
- Iterator value = element.getChildrenWithLocalName("value");
- int i = 0;
- if (!"".equals(element.getText())) {
- String[] list = StringUtil.getElementsFromString(element.getText());
- for (String arrayValue : list) {
- ((FloatArrayType) actualParameter.getType()).insertValue(i++, new Float(arrayValue));
- }
- } else {
-
- while (value.hasNext()) {
- innerelement = (OMElement) value.next();
- ((FloatArrayType) actualParameter.getType()).insertValue(i++, new Float(innerelement.getText()));
- }
- }
- } else if ("BooleanArray".equals(parameter.getParameterType().getName())) {
- actualParameter = new ActualParameter(BooleanArrayType.type);
- Iterator value = element.getChildrenWithLocalName("value");
- int i = 0;
- if (!"".equals(element.getText())) {
- String[] list = StringUtil.getElementsFromString(element.getText());
- for (String arrayValue : list) {
- ((BooleanArrayType) actualParameter.getType()).insertValue(i++, new Boolean(arrayValue));
- }
- } else {
-
- while (value.hasNext()) {
- innerelement = (OMElement) value.next();
- ((BooleanArrayType) actualParameter.getType()).insertValue(i++, new Boolean(innerelement.getText()));
- }
- }
- } else if ("FileArray".equals(parameter.getParameterType().getName())) {
- actualParameter = new ActualParameter(FileArrayType.type);
- Iterator value = element.getChildrenWithLocalName("value");
- int i = 0;
- if (!"".equals(element.getText())) {
- String[] list = StringUtil.getElementsFromString(element.getText());
- for (String arrayValue : list) {
- ((FileArrayType) actualParameter.getType()).insertValue(i++, arrayValue);
- }
- } else {
-
- while (value.hasNext()) {
- innerelement = (OMElement) value.next();
- ((FileArrayType) actualParameter.getType()).insertValue(i++, innerelement.getText());
- }
- }
- } else if ("URIArray".equals(parameter.getParameterType().getName())) {
- actualParameter = new ActualParameter(URIArrayType.type);
- Iterator value = element.getChildrenWithLocalName("value");
- int i = 0;
- if (!"".equals(element.getText())) {
- String[] list = StringUtil.getElementsFromString(element.getText());
- for (String arrayValue : list) {
- ((URIArrayType) actualParameter.getType()).insertValue(i++, arrayValue);
- }
- } else {
-
- while (value.hasNext()) {
- innerelement = (OMElement) value.next();
- ((URIArrayType) actualParameter.getType()).insertValue(i++, innerelement.getText());
- }
- }
- }
- return actualParameter;
- }
-
- public static ActualParameter getInputActualParameter(Parameter parameter, String inputVal) throws GFacException {
- OMElement innerelement = null;
- ActualParameter actualParameter = new ActualParameter();
- if ("String".equals(parameter.getParameterType().getName())) {
- actualParameter = new ActualParameter(StringParameterType.type);
- ((StringParameterType) actualParameter.getType()).setValue(inputVal);
- } else if ("Double".equals(parameter.getParameterType().getName())) {
- actualParameter = new ActualParameter(DoubleParameterType.type);
- ((DoubleParameterType) actualParameter.getType()).setValue(new Double(inputVal));
- } else if ("Integer".equals(parameter.getParameterType().getName())) {
- actualParameter = new ActualParameter(IntegerParameterType.type);
- ((IntegerParameterType) actualParameter.getType()).setValue(new Integer(inputVal));
- } else if ("Float".equals(parameter.getParameterType().getName())) {
- actualParameter = new ActualParameter(FloatParameterType.type);
- ((FloatParameterType) actualParameter.getType()).setValue(new Float(inputVal));
- } else if ("Boolean".equals(parameter.getParameterType().getName())) {
- actualParameter = new ActualParameter(BooleanParameterType.type);
- ((BooleanParameterType) actualParameter.getType()).setValue(new Boolean(inputVal));
- } else if ("File".equals(parameter.getParameterType().getName())) {
- actualParameter = new ActualParameter(FileParameterType.type);
- ((FileParameterType) actualParameter.getType()).setValue(inputVal);
- } else if ("URI".equals(parameter.getParameterType().getName())) {
- actualParameter = new ActualParameter(URIParameterType.type);
- ((URIParameterType) actualParameter.getType()).setValue(inputVal);
- } else if ("StringArray".equals(parameter.getParameterType().getName())) {
- actualParameter = new ActualParameter(StringArrayType.type);
- Iterator iterator = Arrays.asList(StringUtil.getElementsFromString(inputVal)).iterator();
- int i = 0;
- while (iterator.hasNext()) {
- innerelement = (OMElement) iterator.next();
- ((StringArrayType) actualParameter.getType()).insertValue(i++, innerelement.getText());
- }
- } else if ("DoubleArray".equals(parameter.getParameterType().getName())) {
- actualParameter = new ActualParameter(DoubleArrayType.type);
- Iterator value = Arrays.asList(StringUtil.getElementsFromString(inputVal)).iterator();
- int i = 0;
- while (value.hasNext()) {
- innerelement = (OMElement) value.next();
- ((DoubleArrayType) actualParameter.getType()).insertValue(i++, new Double(innerelement.getText()));
- }
- } else if ("IntegerArray".equals(parameter.getParameterType().getName())) {
- actualParameter = new ActualParameter(IntegerArrayType.type);
- Iterator value = Arrays.asList(StringUtil.getElementsFromString(inputVal)).iterator();
- int i = 0;
- while (value.hasNext()) {
- innerelement = (OMElement) value.next();
- ((IntegerArrayType) actualParameter.getType()).insertValue(i++, new Integer(innerelement.getText()));
- }
- } else if ("FloatArray".equals(parameter.getParameterType().getName())) {
- actualParameter = new ActualParameter(FloatArrayType.type);
- Iterator value = Arrays.asList(StringUtil.getElementsFromString(inputVal)).iterator();
- int i = 0;
- while (value.hasNext()) {
- innerelement = (OMElement) value.next();
- ((FloatArrayType) actualParameter.getType()).insertValue(i++, new Float(innerelement.getText()));
- }
- } else if ("BooleanArray".equals(parameter.getParameterType().getName())) {
- actualParameter = new ActualParameter(BooleanArrayType.type);
- Iterator value = Arrays.asList(StringUtil.getElementsFromString(inputVal)).iterator();
- int i = 0;
- while (value.hasNext()) {
- innerelement = (OMElement) value.next();
- ((BooleanArrayType) actualParameter.getType()).insertValue(i++, new Boolean(innerelement.getText()));
- }
- } else if ("FileArray".equals(parameter.getParameterType().getName())) {
- actualParameter = new ActualParameter(FileArrayType.type);
- Iterator value = Arrays.asList(StringUtil.getElementsFromString(inputVal)).iterator();
- int i = 0;
- while (value.hasNext()) {
- innerelement = (OMElement) value.next();
- ((FileArrayType) actualParameter.getType()).insertValue(i++, innerelement.getText());
- }
- } else if ("URIArray".equals(parameter.getParameterType().getName())) {
- actualParameter = new ActualParameter(URIArrayType.type);
- Iterator value = Arrays.asList(StringUtil.getElementsFromString(inputVal)).iterator();
- int i = 0;
- while (value.hasNext()) {
- innerelement = (OMElement) value.next();
- ((URIArrayType) actualParameter.getType()).insertValue(i++, innerelement.getText());
- }
- } else {
- throw new GFacException("Input parameters are not configured properly ");
- }
- return actualParameter;
- }
-
-
- public static ApplicationJob createApplicationJob(
- JobExecutionContext jobExecutionContext) {
- ApplicationJob appJob = new ApplicationJob();
- appJob.setExperimentId((String) jobExecutionContext.getProperty(Constants.PROP_TOPIC));
- appJob.setWorkflowExecutionId(appJob.getExperimentId());
- appJob.setNodeId((String) jobExecutionContext.getProperty(Constants.PROP_WORKFLOW_NODE_ID));
- appJob.setServiceDescriptionId(jobExecutionContext.getApplicationContext().getServiceDescription().getType().getName());
- appJob.setHostDescriptionId(jobExecutionContext.getApplicationContext().getHostDescription().getType().getHostName());
- appJob.setApplicationDescriptionId(jobExecutionContext.getApplicationContext().getApplicationDeploymentDescription().getType().getApplicationName().getStringValue());
- return appJob;
- }
-
- public static void updateApplicationJobStatusUpdateTime(JobExecutionContext context, String jobId, Date statusUpdateTime) {
- AiravataAPI airavataAPI = context.getGFacConfiguration().getAiravataAPI();
- try {
- airavataAPI.getProvenanceManager().updateApplicationJobStatusUpdateTime(jobId, statusUpdateTime);
- } catch (AiravataAPIInvocationException e) {
- log.error("Error in updating application job status time " + statusUpdateTime.toString() + " for job Id " + jobId + "!!!", e);
- }
- }
-
- public static void updateApplicationJobStatus(JobExecutionContext context, String jobId, ApplicationJobStatus status, Date statusUpdateTime) {
- AiravataAPI airavataAPI = context.getGFacConfiguration().getAiravataAPI();
- try {
- airavataAPI.getProvenanceManager().updateApplicationJobStatus(jobId, status, statusUpdateTime);
- } catch (AiravataAPIInvocationException e) {
- log.error("Error in updating application job status " + status.toString() + " for job Id " + jobId + "!!!", e);
- }
- }
-
- /**
- * Gets the job ids given experiment id.
- *
- * @param context The job execution context.
- * @param experimentId The experiment id.
- * @return List of job ids relevant to given experiment id.
- */
- public static List<ApplicationJob> getJobIds(JobExecutionContext context, String experimentId) {
-
- AiravataAPI airavataAPI = context.getGFacConfiguration().getAiravataAPI();
- try {
- return airavataAPI.getProvenanceManager().getApplicationJobs(experimentId, null, null);
- } catch (AiravataAPIInvocationException e) {
- log.error("Error retrieving application jobs for experiment id " + experimentId, e);
- }
-
- return new ArrayList<ApplicationJob>(0);
- }
-
- /**
- * Gets the job ids given experiment id and workflow id.
- *
- * @param context The job execution context.
- * @param experimentId The experiment id.
- * @param workflowId The workflow id
- * @return List of job ids relevant to given experiment id and workflow id.
- */
- public static List<ApplicationJob> getJobIds(JobExecutionContext context, String experimentId, String workflowId) {
-
- AiravataAPI airavataAPI = context.getGFacConfiguration().getAiravataAPI();
- try {
- return airavataAPI.getProvenanceManager().getApplicationJobs(experimentId, workflowId, null);
- } catch (AiravataAPIInvocationException e) {
- log.error("Error retrieving application jobs for experiment id " + experimentId, " workflow id " +
- workflowId, e);
- }
-
- return new ArrayList<ApplicationJob>(0);
- }
-
- /**
- * Gets the job ids given experiment id and workflow id.
- *
- * @param context The job execution context.
- * @param experimentId The experiment id.
- * @param workflowId The workflow id
- * @return List of job ids relevant to given experiment id and workflow id.
- */
- public static List<ApplicationJob> getJobIds(JobExecutionContext context, String experimentId,
- String workflowId, String nodeId) {
-
- AiravataAPI airavataAPI = context.getGFacConfiguration().getAiravataAPI();
- try {
- return airavataAPI.getProvenanceManager().getApplicationJobs(experimentId, workflowId, nodeId);
- } catch (AiravataAPIInvocationException e) {
- log.error("Error retrieving application jobs for experiment id " + experimentId, " workflow id " +
- workflowId, e);
- }
-
- return new ArrayList<ApplicationJob>(0);
- }
-
- /*public static RequestData getRequestData(Properties configurationProperties) {
-
- RequestData requestData = new RequestData();
-
- requestData.setMyProxyServerUrl(configurationProperties.getProperty(Constants.MYPROXY_SERVER));
- requestData.setMyProxyUserName(configurationProperties.getProperty(Constants.MYPROXY_USER));
- requestData.setMyProxyPassword(configurationProperties.getProperty(Constants.MYPROXY_PASS));
-
- int lifeTime;
- String sLife = configurationProperties.getProperty(Constants.MYPROXY_LIFE);
- if (sLife != null) {
- lifeTime = Integer.parseInt(sLife);
- requestData.setMyProxyLifeTime(lifeTime);
- } else {
- log.info("The configuration does not specify a default life time");
- }
-
-
-
- }
-*/
-
-
- public static void recordApplicationJob(JobExecutionContext context, ApplicationJob job) {
- AiravataAPI airavataAPI = context.getGFacConfiguration().getAiravataAPI();
- try {
- airavataAPI.getProvenanceManager().addApplicationJob(job);
- } catch (AiravataAPIInvocationException e) {
- log.error("Error in persisting application job data for application job " + job.getJobId() + "!!!", e);
- }
- }
-
- public static void saveJobStatus(JobExecutionContext jobExecutionContext, JobDetails details, JobState state) throws GFacException {
- try {
- Registry registry = jobExecutionContext.getRegistry();
- JobStatus status = new JobStatus();
- status.setJobState(state);
- details.setJobStatus(status);
- registry.add(ChildDataType.JOB_DETAIL, details, new CompositeIdentifier(jobExecutionContext.getTaskData().getTaskID(), details.getJobID()));
- } catch (Exception e) {
- throw new GFacException("Error persisting job status" + e.getLocalizedMessage(), e);
- }
- }
-
- public static void updateJobStatus(JobExecutionContext jobExecutionContext, JobDetails details, JobState state) throws GFacException {
- try {
- Registry registry = jobExecutionContext.getRegistry();
- JobStatus status = new JobStatus();
- status.setJobState(state);
- status.setTimeOfStateChange(Calendar.getInstance().getTimeInMillis());
- details.setJobStatus(status);
- registry.update(org.apache.airavata.registry.cpi.RegistryModelType.JOB_DETAIL, details, details.getJobID());
- } catch (Exception e) {
- throw new GFacException("Error persisting job status" + e.getLocalizedMessage(), e);
- }
- }
-
- public static void saveErrorDetails(JobExecutionContext jobExecutionContext, String errorMessage, CorrectiveAction action, ErrorCategory errorCatogory) throws GFacException {
- try {
- Registry registry = RegistryFactory.getDefaultRegistry();
- ErrorDetails details = new ErrorDetails();
- details.setActualErrorMessage(errorMessage);
- details.setCorrectiveAction(action);
- details.setActionableGroup(ActionableGroup.GATEWAYS_ADMINS);
- details.setCreationTime(Calendar.getInstance().getTimeInMillis());
- details.setErrorCategory(errorCatogory);
- registry.add(ChildDataType.ERROR_DETAIL, details, jobExecutionContext.getTaskData().getTaskID());
- } catch (Exception e) {
- throw new GFacException("Error persisting job status" + e.getLocalizedMessage(), e);
- }
- }
-
-
- public static Map<String, Object> getMessageContext(List<DataObjectType> experimentData,
- Parameter[] parameters) throws GFacException {
- HashMap<String, Object> stringObjectHashMap = new HashMap<String, Object>();
- Map<String, DataObjectType> map = new HashMap<String, DataObjectType>();
- for (DataObjectType objectType : experimentData) {
- map.put(objectType.getKey(), objectType);
- }
- for (int i = 0; i < parameters.length; i++) {
- DataObjectType input = map.get(parameters[i].getParameterName());
- if (input != null) {
- stringObjectHashMap.put(parameters[i].getParameterName(), GFacUtils.getInputActualParameter(parameters[i], input));
- } else {
- throw new GFacException("Error finding the parameter: parameter Name" + parameters[i].getParameterName());
- }
- }
- return stringObjectHashMap;
- }
-
- public static GfacExperimentState getZKExperimentState(ZooKeeper zk, JobExecutionContext jobExecutionContext)
- throws ApplicationSettingsException, KeeperException, InterruptedException {
- String expState = AiravataZKUtils.getExpState(zk, jobExecutionContext.getExperimentID(),
- jobExecutionContext.getTaskData().getTaskID());
- return GfacExperimentState.findByValue(Integer.parseInt(expState));
- }
-
- public static int getZKExperimentStateValue(ZooKeeper zk, JobExecutionContext jobExecutionContext)
- throws ApplicationSettingsException, KeeperException, InterruptedException {
- String expState = AiravataZKUtils.getExpState(zk, jobExecutionContext.getExperimentID(),
- jobExecutionContext.getTaskData().getTaskID());
- if (expState == null) {
- return -1;
- }
- return Integer.parseInt(expState);
- }
-
-
- public static boolean createPluginZnode(ZooKeeper zk, JobExecutionContext jobExecutionContext, String className)
- throws ApplicationSettingsException, KeeperException, InterruptedException {
- String expState = AiravataZKUtils.getExpZnodeHandlerPath(jobExecutionContext.getExperimentID(),
- jobExecutionContext.getTaskData().getTaskID(), className);
- Stat exists = zk.exists(expState, false);
- if (exists == null) {
- zk.create(expState, new byte[0], ZooDefs.Ids.OPEN_ACL_UNSAFE,
- CreateMode.PERSISTENT);
-
- zk.create(expState + File.separator + AiravataZKUtils.ZK_EXPERIMENT_STATE_NODE,
- new byte[0], ZooDefs.Ids.OPEN_ACL_UNSAFE,
- CreateMode.PERSISTENT);
- } else {
- exists = zk.exists(expState + File.separator + AiravataZKUtils.ZK_EXPERIMENT_STATE_NODE, false);
- if (exists == null) {
- zk.create(expState + File.separator + AiravataZKUtils.ZK_EXPERIMENT_STATE_NODE,
- new byte[0], ZooDefs.Ids.OPEN_ACL_UNSAFE,
- CreateMode.PERSISTENT);
- }
- }
-
- exists = zk.exists(expState + File.separator + AiravataZKUtils.ZK_EXPERIMENT_STATE_NODE, false);
- if (exists != null) {
- zk.setData(expState + File.separator + AiravataZKUtils.ZK_EXPERIMENT_STATE_NODE, String.valueOf(GfacPluginState.INVOKING.getValue()).getBytes(),
- exists.getVersion());
- }
- return true;
- }
-
- public static boolean createPluginZnode(ZooKeeper zk, JobExecutionContext jobExecutionContext, String className,
- GfacPluginState state) throws ApplicationSettingsException, KeeperException, InterruptedException {
- String expState = AiravataZKUtils.getExpZnodeHandlerPath(jobExecutionContext.getExperimentID(),
- jobExecutionContext.getTaskData().getTaskID(), className);
- Stat exists = zk.exists(expState, false);
- if (exists == null) {
- zk.create(expState, new byte[0], ZooDefs.Ids.OPEN_ACL_UNSAFE,
- CreateMode.PERSISTENT);
-
- zk.create(expState + File.separator + AiravataZKUtils.ZK_EXPERIMENT_STATE_NODE,
- new byte[0], ZooDefs.Ids.OPEN_ACL_UNSAFE,
- CreateMode.PERSISTENT);
- } else {
- exists = zk.exists(expState + File.separator + AiravataZKUtils.ZK_EXPERIMENT_STATE_NODE, false);
- if (exists == null) {
- zk.create(expState + File.separator + AiravataZKUtils.ZK_EXPERIMENT_STATE_NODE,
- new byte[0], ZooDefs.Ids.OPEN_ACL_UNSAFE,
- CreateMode.PERSISTENT);
- }
- }
-
- exists = zk.exists(expState + File.separator + AiravataZKUtils.ZK_EXPERIMENT_STATE_NODE, false);
- if (exists != null) {
- zk.setData(expState + File.separator +
- AiravataZKUtils.ZK_EXPERIMENT_STATE_NODE, String.valueOf(state.getValue()).getBytes(),
- exists.getVersion()
- );
- }
- return true;
- }
-
- public static boolean updatePluginState(ZooKeeper zk, JobExecutionContext jobExecutionContext, String className,
- GfacPluginState state)
- throws ApplicationSettingsException, KeeperException, InterruptedException {
- String expState = AiravataZKUtils.getExpZnodeHandlerPath(jobExecutionContext.getExperimentID(),
- jobExecutionContext.getTaskData().getTaskID(), className);
-
- Stat exists = zk.exists(expState + File.separator + AiravataZKUtils.ZK_EXPERIMENT_STATE_NODE, false);
- if (exists != null) {
- zk.setData(expState + File.separator + AiravataZKUtils.ZK_EXPERIMENT_STATE_NODE, String.valueOf(state.getValue()).getBytes(),
- exists.getVersion());
- } else {
- createPluginZnode(zk, jobExecutionContext, className, state);
- }
- return true;
- }
-
- public static String getPluginState(ZooKeeper zk, JobExecutionContext jobExecutionContext, String className) {
- try {
- String expState = AiravataZKUtils.getExpZnodeHandlerPath(jobExecutionContext.getExperimentID(),
- jobExecutionContext.getTaskData().getTaskID(), className);
-
- Stat exists = zk.exists(expState + File.separator + AiravataZKUtils.ZK_EXPERIMENT_STATE_NODE, false);
- if (exists != null) {
- return new String(zk.getData(expState + File.separator + AiravataZKUtils.ZK_EXPERIMENT_STATE_NODE, false, exists));
- }
- return null; // if the node doesn't exist or any other error we return false
- } catch (Exception e) {
- e.printStackTrace();
- return null;
- }
- }
-
- // This method is dangerous because of moving the experiment data
- public static boolean createExperimentEntry(String experimentID, String taskID, ZooKeeper zk, String experimentNode, String pickedChild,String tokenId) throws KeeperException, InterruptedException {
- String experimentPath = experimentNode + File.separator + pickedChild;
- String newExpNode = experimentPath + File.separator + experimentID + "+" + taskID;
- Stat exists1 = zk.exists(newExpNode, false);
- String foundExperimentPath = null;
- if (exists1 == null) {
- List<String> runningGfacNodeNames = AiravataZKUtils.getAllGfacNodeNames(zk); // here we take old gfac servers too
- for (String gfacServerNode : runningGfacNodeNames) {
- if (!gfacServerNode.equals(pickedChild)) {
- foundExperimentPath = experimentNode + File.separator + gfacServerNode +
- File.separator + experimentID + "+" + taskID;
- exists1 = zk.exists(foundExperimentPath, false);
- if (exists1 != null) { // when the experiment is found we break the loop
- break;
- }
- }
- }
- if (exists1 == null) { // OK this is a pretty new experiment so we are going to create a new node
- log.info("This is a new Job, so creating all the experiment docs from the scratch");
- zk.create(newExpNode, new byte[0], ZooDefs.Ids.OPEN_ACL_UNSAFE,
- CreateMode.PERSISTENT);
-
- Stat expParent = zk.exists(newExpNode, false);
- if(tokenId != null && expParent != null) {
- zk.setData(newExpNode, tokenId.getBytes(),expParent.getVersion());
- }
- zk.create(newExpNode + File.separator + "state", String.valueOf(GfacExperimentState.LAUNCHED.getValue()).getBytes(),
- ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
-
- } else {
- // ohhh this node exists in some other failed gfac folder, we have to move it to this gfac experiment list,safely
- log.info("This is an old Job, so copying data from old experiment location");
- zk.create(newExpNode, zk.getData(foundExperimentPath, false, exists1), ZooDefs.Ids.OPEN_ACL_UNSAFE,
- CreateMode.PERSISTENT);
-
- List<String> children = zk.getChildren(foundExperimentPath, false);
- for (String childNode1 : children) {
- String level1 = foundExperimentPath + File.separator + childNode1;
- Stat exists2 = zk.exists(level1, false); // no need to check exists
- String newLeve1 = newExpNode + File.separator + childNode1;
- log.info("Creating new znode: " + newLeve1); // these has to be info logs
- zk.create(newLeve1, zk.getData(
- level1, false, exists2), ZooDefs.Ids.OPEN_ACL_UNSAFE,
- CreateMode.PERSISTENT
- );
- for (String childNode2 : zk.getChildren(level1, false)) {
- String level2 = level1 + File.separator + childNode2;
- Stat exists3 = zk.exists(level2, false); // no need to check exists
- String newLeve2 = newLeve1 + File.separator + childNode2;
- log.info("Creating new znode: " + newLeve2);
- zk.create(newLeve2, zk.getData(level2, false, exists3), ZooDefs.Ids.OPEN_ACL_UNSAFE,
- CreateMode.PERSISTENT);
- }
- }
- // After all the files are successfully transfered we delete the old experiment,otherwise we do
- // not delete a single file
- log.info("After a successful copying of experiment data for an old experiment we delete the old data");
- log.info("Deleting experiment data: " + foundExperimentPath);
- ZKUtil.deleteRecursive(zk, foundExperimentPath);
- }
- } else {
- log.error("ExperimentID: " + experimentID + " taskID: " + taskID + " is already running by this Gfac instance");
- List<String> runningGfacNodeNames = AiravataZKUtils.getAllGfacNodeNames(zk); // here we take old gfac servers too
- for (String gfacServerNode : runningGfacNodeNames) {
- if (!gfacServerNode.equals(pickedChild)) {
- foundExperimentPath = experimentNode + File.separator + gfacServerNode +
- File.separator + experimentID + "+" + taskID;
- break;
- }
- }
- ZKUtil.deleteRecursive(zk, foundExperimentPath);
- return false;
- }
- return true;
- }
-
- public static void savePluginData(JobExecutionContext jobExecutionContext, StringBuffer data, String className) throws GFacHandlerException {
- try {
- ZooKeeper zk = jobExecutionContext.getZk();
- if (zk != null) {
- String expZnodeHandlerPath = AiravataZKUtils.getExpZnodeHandlerPath(jobExecutionContext.getExperimentID(),
- jobExecutionContext.getTaskData().getTaskID(), className);
- Stat exists = zk.exists(expZnodeHandlerPath, false);
- zk.setData(expZnodeHandlerPath, data.toString().getBytes(), exists.getVersion());
- }
- } catch (Exception e) {
- throw new GFacHandlerException(e);
- }
- }
-
- public static String getPluginData(JobExecutionContext jobExecutionContext, String className) throws ApplicationSettingsException, KeeperException, InterruptedException {
- ZooKeeper zk = jobExecutionContext.getZk();
- if (zk != null) {
- String expZnodeHandlerPath = AiravataZKUtils.getExpZnodeHandlerPath(jobExecutionContext.getExperimentID(),
- jobExecutionContext.getTaskData().getTaskID(), className);
- Stat exists = zk.exists(expZnodeHandlerPath, false);
- return new String(jobExecutionContext.getZk().getData(expZnodeHandlerPath, false, exists));
- }
- return null;
- }
-
- public static CredentialReader getCredentialReader() throws ApplicationSettingsException, IllegalAccessException, ClassNotFoundException, InstantiationException {
- String jdbcUrl = ServerSettings.getCredentialStoreDBURL();
- String jdbcUsr = ServerSettings.getCredentialStoreDBUser();
- String jdbcPass = ServerSettings.getCredentialStoreDBPassword();
- String driver = ServerSettings.getCredentialStoreDBDriver();
- return new CredentialReaderImpl(new DBUtil(jdbcUrl, jdbcUsr, jdbcPass, driver));
- }
+ private final static Logger log = LoggerFactory.getLogger(GFacUtils.class);
+
+ private GFacUtils() {
+ }
+
+ /**
+ * Read data from inputStream and convert it to String.
+ *
+ * @param in
+ * @return String read from inputStream
+ * @throws java.io.IOException
+ */
+ public static String readFromStream(InputStream in) throws IOException {
+ try {
+ StringBuffer wsdlStr = new StringBuffer();
+
+ int read;
+
+ byte[] buf = new byte[1024];
+ while ((read = in.read(buf)) > 0) {
+ wsdlStr.append(new String(buf, 0, read));
+ }
+ return wsdlStr.toString();
+ } finally {
+ if (in != null) {
+ try {
+ in.close();
+ } catch (IOException e) {
+ log.warn("Cannot close InputStream: "
+ + in.getClass().getName(), e);
+ }
+ }
+ }
+ }
+
+ /**
+ * this can be used to do framework opertaions specific to different modes
+ *
+ * @param jobExecutionContext
+ * @return
+ */
+ public static boolean isSynchronousMode(
+ JobExecutionContext jobExecutionContext) {
+ GFacConfiguration gFacConfiguration = jobExecutionContext
+ .getGFacConfiguration();
+ if (ExecutionMode.ASYNCHRONOUS.equals(gFacConfiguration
+ .getExecutionMode())) {
+ return false;
+ }
+ return true;
+ }
+
+ public static String readFileToString(String file)
+ throws FileNotFoundException, IOException {
+ BufferedReader instream = null;
+ try {
+
+ instream = new BufferedReader(new FileReader(file));
+ StringBuffer buff = new StringBuffer();
+ String temp = null;
+ while ((temp = instream.readLine()) != null) {
+ buff.append(temp);
+ buff.append(Constants.NEWLINE);
+ }
+ return buff.toString();
+ } finally {
+ if (instream != null) {
+ try {
+ instream.close();
+ } catch (IOException e) {
+ log.warn("Cannot close FileinputStream", e);
+ }
+ }
+ }
+ }
+
+ public static boolean isLocalHost(String appHost)
+ throws UnknownHostException {
+ String localHost = InetAddress.getLocalHost().getCanonicalHostName();
+ return (localHost.equals(appHost)
+ || Constants.LOCALHOST.equals(appHost) || Constants._127_0_0_1
+ .equals(appHost));
+ }
+
+ public static String createUniqueNameForService(String serviceName) {
+ String date = new Date().toString();
+ date = date.replaceAll(" ", "_");
+ date = date.replaceAll(":", "_");
+ return serviceName + "_" + date + "_" + UUID.randomUUID();
+ }
+
+ public static String createGsiftpURIAsString(String host, String localPath)
+ throws URISyntaxException {
+ StringBuffer buf = new StringBuffer();
+ if (!host.startsWith("gsiftp://"))
+ buf.append("gsiftp://");
+ buf.append(host);
+ if (!host.endsWith("/"))
+ buf.append("/");
+ buf.append(localPath);
+ return buf.toString();
+ }
+
+ public static ActualParameter getInputActualParameter(Parameter parameter,
+ DataObjectType element) {
+ ActualParameter actualParameter = new ActualParameter();
+ if ("String".equals(parameter.getParameterType().getName())) {
+ actualParameter = new ActualParameter(StringParameterType.type);
+ if (!"".equals(element.getValue())) {
+ ((StringParameterType) actualParameter.getType())
+ .setValue(element.getValue());
+ } else {
+ ((StringParameterType) actualParameter.getType()).setValue("");
+ }
+ } else if ("Double".equals(parameter.getParameterType().getName())) {
+ actualParameter = new ActualParameter(DoubleParameterType.type);
+ if (!"".equals(element.getValue())) {
+ ((DoubleParameterType) actualParameter.getType())
+ .setValue(new Double(element.getValue()));
+ }
+ } else if ("Integer".equals(parameter.getParameterType().getName())) {
+ actualParameter = new ActualParameter(IntegerParameterType.type);
+ if (!"".equals(element.getValue())) {
+ ((IntegerParameterType) actualParameter.getType())
+ .setValue(new Integer(element.getValue()));
+ }
+ } else if ("Float".equals(parameter.getParameterType().getName())) {
+ actualParameter = new ActualParameter(FloatParameterType.type);
+ if (!"".equals(element.getValue())) {
+ ((FloatParameterType) actualParameter.getType())
+ .setValue(new Float(element.getValue()));
+ }
+ } else if ("Boolean".equals(parameter.getParameterType().getName())) {
+ actualParameter = new ActualParameter(BooleanParameterType.type);
+ if (!"".equals(element.getValue())) {
+ ((BooleanParameterType) actualParameter.getType())
+ .setValue(new Boolean(element.getValue()));
+ }
+ } else if ("File".equals(parameter.getParameterType().getName())) {
+ actualParameter = new ActualParameter(FileParameterType.type);
+ if (!"".equals(element.getValue())) {
+ ((FileParameterType) actualParameter.getType())
+ .setValue(element.getValue());
+ }
+ } else if ("URI".equals(parameter.getParameterType().getName())) {
+ actualParameter = new ActualParameter(URIParameterType.type);
+ if (!"".equals(element.getValue())) {
+ ((URIParameterType) actualParameter.getType()).setValue(element
+ .getValue());
+ } else {
+ ((URIParameterType) actualParameter.getType()).setValue("");
+ }
+
+ } else if ("StdOut".equals(parameter.getParameterType().getName())) {
+ actualParameter = new ActualParameter(StdOutParameterType.type);
+ if (!"".equals(element.getValue())) {
+ ((StdOutParameterType) actualParameter.getType())
+ .setValue(element.getValue());
+ } else {
+ ((StdOutParameterType) actualParameter.getType()).setValue("");
+ }
+
+ } else if ("StdErr".equals(parameter.getParameterType().getName())) {
+ actualParameter = new ActualParameter(StdErrParameterType.type);
+ if (!"".equals(element.getValue())) {
+ ((StdErrParameterType) actualParameter.getType())
+ .setValue(element.getValue());
+ } else {
+ ((StdErrParameterType) actualParameter.getType()).setValue("");
+ }
+
+ }
+ return actualParameter;
+ }
+
+ public static ActualParameter getInputActualParameter(Parameter parameter,
+ OMElement element) {
+ OMElement innerelement = null;
+ ActualParameter actualParameter = new ActualParameter();
+ if ("String".equals(parameter.getParameterType().getName())) {
+ actualParameter = new ActualParameter(StringParameterType.type);
+ if (!"".equals(element.getText())) {
+ ((StringParameterType) actualParameter.getType())
+ .setValue(element.getText());
+ } else if (element.getChildrenWithLocalName("value").hasNext()) {
+ innerelement = (OMElement) element.getChildrenWithLocalName(
+ "value").next();
+ ((StringParameterType) actualParameter.getType())
+ .setValue(innerelement.getText());
+ } else {
+ ((StringParameterType) actualParameter.getType()).setValue("");
+ }
+ } else if ("Double".equals(parameter.getParameterType().getName())) {
+ actualParameter = new ActualParameter(DoubleParameterType.type);
+ if (!"".equals(element.getText())) {
+ ((DoubleParameterType) actualParameter.getType())
+ .setValue(new Double(innerelement.getText()));
+ } else {
+ innerelement = (OMElement) element.getChildrenWithLocalName(
+ "value").next();
+ ((DoubleParameterType) actualParameter.getType())
+ .setValue(new Double(innerelement.getText()));
+ }
+ } else if ("Integer".equals(parameter.getParameterType().getName())) {
+ actualParameter = new ActualParameter(IntegerParameterType.type);
+ if (!"".equals(element.getText())) {
+ ((IntegerParameterType) actualParameter.getType())
+ .setValue(new Integer(element.getText()));
+ } else {
+ innerelement = (OMElement) element.getChildrenWithLocalName(
+ "value").next();
+ ((IntegerParameterType) actualParameter.getType())
+ .setValue(new Integer(innerelement.getText()));
+ }
+ } else if ("Float".equals(parameter.getParameterType().getName())) {
+ actualParameter = new ActualParameter(FloatParameterType.type);
+ if (!"".equals(element.getText())) {
+ ((FloatParameterType) actualParameter.getType())
+ .setValue(new Float(element.getText()));
+ } else {
+ innerelement = (OMElement) element.getChildrenWithLocalName(
+ "value").next();
+ ((FloatParameterType) actualParameter.getType())
+ .setValue(new Float(innerelement.getText()));
+ }
+ } else if ("Boolean".equals(parameter.getParameterType().getName())) {
+ actualParameter = new ActualParameter(BooleanParameterType.type);
+ if (!"".equals(element.getText())) {
+ ((BooleanParameterType) actualParameter.getType())
+ .setValue(new Boolean(element.getText()));
+ } else {
+ innerelement = (OMElement) element.getChildrenWithLocalName(
+ "value").next();
+ ((BooleanParameterType) actualParameter.getType())
+ .setValue(Boolean.parseBoolean(innerelement.getText()));
+ }
+ } else if ("File".equals(parameter.getParameterType().getName())) {
+ actualParameter = new ActualParameter(FileParameterType.type);
+ if (!"".equals(element.getText())) {
+ ((FileParameterType) actualParameter.getType())
+ .setValue(element.getText());
+ } else {
+ innerelement = (OMElement) element.getChildrenWithLocalName(
+ "value").next();
+ ((FileParameterType) actualParameter.getType())
+ .setValue(innerelement.getText());
+ }
+ } else if ("URI".equals(parameter.getParameterType().getName())) {
+ actualParameter = new ActualParameter(URIParameterType.type);
+ if (!"".equals(element.getText())) {
+ ((URIParameterType) actualParameter.getType()).setValue(element
+ .getText());
+ } else if (element.getChildrenWithLocalName("value").hasNext()) {
+ innerelement = (OMElement) element.getChildrenWithLocalName(
+ "value").next();
+ System.out.println(actualParameter.getType().toString());
+ log.debug(actualParameter.getType().toString());
+ ((URIParameterType) actualParameter.getType())
+ .setValue(innerelement.getText());
+ } else {
+ ((URIParameterType) actualParameter.getType()).setValue("");
+ }
+ } else if ("StringArray".equals(parameter.getParameterType().getName())) {
+ actualParameter = new ActualParameter(StringArrayType.type);
+ Iterator value = element.getChildrenWithLocalName("value");
+ int i = 0;
+ if (!"".equals(element.getText())) {
+ String[] list = StringUtil.getElementsFromString(element
+ .getText());
+ for (String arrayValue : list) {
+ ((StringArrayType) actualParameter.getType()).insertValue(
+ i++, arrayValue);
+ }
+ } else {
+ while (value.hasNext()) {
+ innerelement = (OMElement) value.next();
+ ((StringArrayType) actualParameter.getType()).insertValue(
+ i++, innerelement.getText());
+ }
+ }
+ } else if ("DoubleArray".equals(parameter.getParameterType().getName())) {
+ actualParameter = new ActualParameter(DoubleArrayType.type);
+ Iterator value = element.getChildrenWithLocalName("value");
+ int i = 0;
+ if (!"".equals(element.getText())) {
+ String[] list = StringUtil.getElementsFromString(element
+ .getText());
+ for (String arrayValue : list) {
+ ((DoubleArrayType) actualParameter.getType()).insertValue(
+ i++, new Double(arrayValue));
+ }
+ } else {
+ while (value.hasNext()) {
+ innerelement = (OMElement) value.next();
+ ((DoubleArrayType) actualParameter.getType()).insertValue(
+ i++, new Double(innerelement.getText()));
+ }
+ }
+
+ } else if ("IntegerArray"
+ .equals(parameter.getParameterType().getName())) {
+ actualParameter = new ActualParameter(IntegerArrayType.type);
+ Iterator value = element.getChildrenWithLocalName("value");
+ int i = 0;
+ if (!"".equals(element.getText())) {
+ String[] list = StringUtil.getElementsFromString(element
+ .getText());
+ for (String arrayValue : list) {
+ ((IntegerArrayType) actualParameter.getType()).insertValue(
+ i++, new Integer(arrayValue));
+ }
+ } else {
+ while (value.hasNext()) {
+ innerelement = (OMElement) value.next();
+ ((IntegerArrayType) actualParameter.getType()).insertValue(
+ i++, new Integer(innerelement.getText()));
+ }
+ }
+ } else if ("FloatArray".equals(parameter.getParameterType().getName())) {
+ actualParameter = new ActualParameter(FloatArrayType.type);
+ Iterator value = element.getChildrenWithLocalName("value");
+ int i = 0;
+ if (!"".equals(element.getText())) {
+ String[] list = StringUtil.getElementsFromString(element
+ .getText());
+ for (String arrayValue : list) {
+ ((FloatArrayType) actualParameter.getType()).insertValue(
+ i++, new Float(arrayValue));
+ }
+ } else {
+
+ while (value.hasNext()) {
+ innerelement = (OMElement) value.next();
+ ((FloatArrayType) actualParameter.getType()).insertValue(
+ i++, new Float(innerelement.getText()));
+ }
+ }
+ } else if ("BooleanArray"
+ .equals(parameter.getParameterType().getName())) {
+ actualParameter = new ActualParameter(BooleanArrayType.type);
+ Iterator value = element.getChildrenWithLocalName("value");
+ int i = 0;
+ if (!"".equals(element.getText())) {
+ String[] list = StringUtil.getElementsFromString(element
+ .getText());
+ for (String arrayValue : list) {
+ ((BooleanArrayType) actualParameter.getType()).insertValue(
+ i++, new Boolean(arrayValue));
+ }
+ } else {
+
+ while (value.hasNext()) {
+ innerelement = (OMElement) value.next();
+ ((BooleanArrayType) actualParameter.getType()).insertValue(
+ i++, new Boolean(innerelement.getText()));
+ }
+ }
+ } else if ("FileArray".equals(parameter.getParameterType().getName())) {
+ actualParameter = new ActualParameter(FileArrayType.type);
+ Iterator value = element.getChildrenWithLocalName("value");
+ int i = 0;
+ if (!"".equals(element.getText())) {
+ String[] list = StringUtil.getElementsFromString(element
+ .getText());
+ for (String arrayValue : list) {
+ ((FileArrayType) actualParameter.getType()).insertValue(
+ i++, arrayValue);
+ }
+ } else {
+
+ while (value.hasNext()) {
+ innerelement = (OMElement) value.next();
+ ((FileArrayType) actualParameter.getType()).insertValue(
+ i++, innerelement.getText());
+ }
+ }
+ } else if ("URIArray".equals(parameter.getParameterType().getName())) {
+ actualParameter = new ActualParameter(URIArrayType.type);
+ Iterator value = element.getChildrenWithLocalName("value");
+ int i = 0;
+ if (!"".equals(element.getText())) {
+ String[] list = StringUtil.getElementsFromString(element
+ .getText());
+ for (String arrayValue : list) {
+ ((URIArrayType) actualParameter.getType()).insertValue(i++,
+ arrayValue);
+ }
+ } else {
+
+ while (value.hasNext()) {
+ innerelement = (OMElement) value.next();
+ ((URIArrayType) actualParameter.getType()).insertValue(i++,
+ innerelement.getText());
+ }
+ }
+ }
+ return actualParameter;
+ }
+
+ public static ActualParameter getInputActualParameter(Parameter parameter,
+ String inputVal) throws GFacException {
+ OMElement innerelement = null;
+ ActualParameter actualParameter = new ActualParameter();
+ if ("String".equals(parameter.getParameterType().getName())) {
+ actualParameter = new ActualParameter(StringParameterType.type);
+ ((StringParameterType) actualParameter.getType())
+ .setValue(inputVal);
+ } else if ("Double".equals(parameter.getParameterType().getName())) {
+ actualParameter = new ActualParameter(DoubleParameterType.type);
+ ((DoubleParameterType) actualParameter.getType())
+ .setValue(new Double(inputVal));
+ } else if ("Integer".equals(parameter.getParameterType().getName())) {
+ actualParameter = new ActualParameter(IntegerParameterType.type);
+ ((IntegerParameterType) actualParameter.getType())
+ .setValue(new Integer(inputVal));
+ } else if ("Float".equals(parameter.getParameterType().getName())) {
+ actualParameter = new ActualParameter(FloatParameterType.type);
+ ((FloatParameterType) actualParameter.getType())
+ .setValue(new Float(inputVal));
+ } else if ("Boolean".equals(parameter.getParameterType().getName())) {
+ actualParameter = new ActualParameter(BooleanParameterType.type);
+ ((BooleanParameterType) actualParameter.getType())
+ .setValue(new Boolean(inputVal));
+ } else if ("File".equals(parameter.getParameterType().getName())) {
+ actualParameter = new ActualParameter(FileParameterType.type);
+ ((FileParameterType) actualParameter.getType()).setValue(inputVal);
+ } else if ("URI".equals(parameter.getParameterType().getName())) {
+ actualParameter = new ActualParameter(URIParameterType.type);
+ ((URIParameterType) actualParameter.getType()).setValue(inputVal);
+ } else if ("StringArray".equals(parameter.getParameterType().getName())) {
+ actualParameter = new ActualParameter(StringArrayType.type);
+ Iterator iterator = Arrays.asList(
+ StringUtil.getElementsFromString(inputVal)).iterator();
+ int i = 0;
+ while (iterator.hasNext()) {
+ innerelement = (OMElement) iterator.next();
+ ((StringArrayType) actualParameter.getType()).insertValue(i++,
+ innerelement.getText());
+ }
+ } else if ("DoubleArray".equals(parameter.getParameterType().getName())) {
+ actualParameter = new ActualParameter(DoubleArrayType.type);
+ Iterator value = Arrays.asList(
+ StringUtil.getElementsFromString(inputVal)).iterator();
+ int i = 0;
+ while (value.hasNext()) {
+ innerelement = (OMElement) value.next();
+ ((DoubleArrayType) actualParameter.getType()).insertValue(i++,
+ new Double(innerelement.getText()));
+ }
+ } else if ("IntegerArray"
+ .equals(parameter.getParameterType().getName())) {
+ actualParameter = new ActualParameter(IntegerArrayType.type);
+ Iterator value = Arrays.asList(
+ StringUtil.getElementsFromString(inputVal)).iterator();
+ int i = 0;
+ while (value.hasNext()) {
+ innerelement = (OMElement) value.next();
+ ((IntegerArrayType) actualParameter.getType()).insertValue(i++,
+ new Integer(innerelement.getText()));
+ }
+ } else if ("FloatArray".equals(parameter.getParameterType().getName())) {
+ actualParameter = new ActualParameter(FloatArrayType.type);
+ Iterator value = Arrays.asList(
+ StringUtil.getElementsFromString(inputVal)).iterator();
+ int i = 0;
+ while (value.hasNext()) {
+ innerelement = (OMElement) value.next();
+ ((FloatArrayType) actualParameter.getType()).insertValue(i++,
+ new Float(innerelement.getText()));
+ }
+ } else if ("BooleanArray"
+ .equals(parameter.getParameterType().getName())) {
+ actualParameter = new ActualParameter(BooleanArrayType.type);
+ Iterator value = Arrays.asList(
+ StringUtil.getElementsFromString(inputVal)).iterator();
+ int i = 0;
+ while (value.hasNext()) {
+ innerelement = (OMElement) value.next();
+ ((BooleanArrayType) actualParameter.getType()).insertValue(i++,
+ new Boolean(innerelement.getText()));
+ }
+ } else if ("FileArray".equals(parameter.getParameterType().getName())) {
+ actualParameter = new ActualParameter(FileArrayType.type);
+ Iterator value = Arrays.asList(
+ StringUtil.getElementsFromString(inputVal)).iterator();
+ int i = 0;
+ while (value.hasNext()) {
+ innerelement = (OMElement) value.next();
+ ((FileArrayType) actualParameter.getType()).insertValue(i++,
+ innerelement.getText());
+ }
+ } else if ("URIArray".equals(parameter.getParameterType().getName())) {
+ actualParameter = new ActualParameter(URIArrayType.type);
+ Iterator value = Arrays.asList(
+ StringUtil.getElementsFromString(inputVal)).iterator();
+ int i = 0;
+ while (value.hasNext()) {
+ innerelement = (OMElement) value.next();
+ ((URIArrayType) actualParameter.getType()).insertValue(i++,
+ innerelement.getText());
+ }
+ } else {
+ throw new GFacException(
+ "Input parameters are not configured properly ");
+ }
+ return actualParameter;
+ }
+
+ public static ApplicationJob createApplicationJob(
+ JobExecutionContext jobExecutionContext) {
+ ApplicationJob appJob = new ApplicationJob();
+ appJob.setExperimentId((String) jobExecutionContext
+ .getProperty(Constants.PROP_TOPIC));
+ appJob.setWorkflowExecutionId(appJob.getExperimentId());
+ appJob.setNodeId((String) jobExecutionContext
+ .getProperty(Constants.PROP_WORKFLOW_NODE_ID));
+ appJob.setServiceDescriptionId(jobExecutionContext
+ .getApplicationContext().getServiceDescription().getType()
+ .getName());
+ appJob.setHostDescriptionId(jobExecutionContext.getApplicationContext()
+ .getHostDescription().getType().getHostName());
+ appJob.setApplicationDescriptionId(jobExecutionContext
+ .getApplicationContext().getApplicationDeploymentDescription()
+ .getType().getApplicationName().getStringValue());
+ return appJob;
+ }
+
+ public static void updateApplicationJobStatusUpdateTime(
+ JobExecutionContext context, String jobId, Date statusUpdateTime) {
+ AiravataAPI airavataAPI = context.getGFacConfiguration()
+ .getAiravataAPI();
+ try {
+ airavataAPI.getProvenanceManager()
+ .updateApplicationJobStatusUpdateTime(jobId,
+ statusUpdateTime);
+ } catch (AiravataAPIInvocationException e) {
+ log.error("Error in updating application job status time "
+ + statusUpdateTime.toString() + " for job Id " + jobId
+ + "!!!", e);
+ }
+ }
+
+ public static void updateApplicationJobStatus(JobExecutionContext context,
+ String jobId, ApplicationJobStatus status, Date statusUpdateTime) {
+ AiravataAPI airavataAPI = context.getGFacConfiguration()
+ .getAiravataAPI();
+ try {
+ airavataAPI.getProvenanceManager().updateApplicationJobStatus(
+ jobId, status, statusUpdateTime);
+ } catch (AiravataAPIInvocationException e) {
+ log.error(
+ "Error in updating application job status "
+ + status.toString() + " for job Id " + jobId
+ + "!!!", e);
+ }
+ }
+
+ /**
+ * Gets the job ids given experiment id.
+ *
+ * @param context
+ * The job execution context.
+ * @param experimentId
+ * The experiment id.
+ * @return List of job ids relevant to given experiment id.
+ */
+ public static List<ApplicationJob> getJobIds(JobExecutionContext context,
+ String experimentId) {
+
+ AiravataAPI airavataAPI = context.getGFacConfiguration()
+ .getAiravataAPI();
+ try {
+ return airavataAPI.getProvenanceManager().getApplicationJobs(
+ experimentId, null, null);
+ } catch (AiravataAPIInvocationException e) {
+ log.error("Error retrieving application jobs for experiment id "
+ + experimentId, e);
+ }
+
+ return new ArrayList<ApplicationJob>(0);
+ }
+
+ /**
+ * Gets the job ids given experiment id and workflow id.
+ *
+ * @param context
+ * The job execution context.
+ * @param experimentId
+ * The experiment id.
+ * @param workflowId
+ * The workflow id
+ * @return List of job ids relevant to given experiment id and workflow id.
+ */
+ public static List<ApplicationJob> getJobIds(JobExecutionContext context,
+ String experimentId, String workflowId) {
+
+ AiravataAPI airavataAPI = context.getGFacConfiguration()
+ .getAiravataAPI();
+ try {
+ return airavataAPI.getProvenanceManager().getApplicationJobs(
+ experimentId, workflowId, null);
+ } catch (AiravataAPIInvocationException e) {
+ log.error("Error retrieving application jobs for experiment id "
+ + experimentId, " workflow id " + workflowId, e);
+ }
+
+ return new ArrayList<ApplicationJob>(0);
+ }
+
+ /**
+ * Gets the job ids given experiment id and workflow id.
+ *
+ * @param context
+ * The job execution context.
+ * @param experimentId
+ * The experiment id.
+ * @param workflowId
+ * The workflow id
+ * @return List of job ids relevant to given experiment id and workflow id.
+ */
+ public static List<ApplicationJob> getJobIds(JobExecutionContext context,
+ String experimentId, String workflowId, String nodeId) {
+
+ AiravataAPI airavataAPI = context.getGFacConfiguration()
+ .getAiravataAPI();
+ try {
+ return airavataAPI.getProvenanceManager().getApplicationJobs(
+ experimentId, workflowId, nodeId);
+ } catch (AiravataAPIInvocationException e) {
+ log.error("Error retrieving application jobs for experiment id "
+ + experimentId, " workflow id " + workflowId, e);
+ }
+
+ return new ArrayList<ApplicationJob>(0);
+ }
+
+ /*
+ * public static RequestData getRequestData(Properties
+ * configurationProperties) {
+ *
+ * RequestData requestData = new RequestData();
+ *
+ * requestData.setMyProxyServerUrl(configurationProperties.getProperty(Constants
+ * .MYPROXY_SERVER));
+ * requestData.setMyProxyUserName(configurationProperties.
+ * getProperty(Constants.MYPROXY_USER));
+ * requestData.setMyProxyPassword(configurationProperties
+ * .getProperty(Constants.MYPROXY_PASS));
+ *
+ * int lifeTime; String sLife =
+ * configurationProperties.getProperty(Constants.MYPROXY_LIFE); if (sLife !=
+ * null) { lifeTime = Integer.parseInt(sLife);
+ * requestData.setMyProxyLifeTime(lifeTime); } else {
+ * log.info("The configuration does not specify a default life time"); }
+ *
+ *
+ *
+ * }
+ */
+
+ public static void recordApplicationJob(JobExecutionContext context,
+ ApplicationJob job) {
+ AiravataAPI airavataAPI = context.getGFacConfiguration()
+ .getAiravataAPI();
+ try {
+ airavataAPI.getProvenanceManager().addApplicationJob(job);
+ } catch (AiravataAPIInvocationException e) {
+ log.error(
+ "Error in persisting application job data for application job "
+ + job.getJobId() + "!!!", e);
+ }
+ }
+
+ public static void saveJobStatus(JobExecutionContext jobExecutionContext,
+ JobDetails details, JobState state) throws GFacException {
+ try {
+ Registry registry = jobExecutionContext.getRegistry();
+ JobStatus status = new JobStatus();
+ status.setJobState(state);
+ details.setJobStatus(status);
+ registry.add(ChildDataType.JOB_DETAIL, details,
+ new CompositeIdentifier(jobExecutionContext.getTaskData()
+ .getTaskID(), details.getJobID()));
+ } catch (Exception e) {
+ throw new GFacException("Error persisting job status"
+ + e.getLocalizedMessage(), e);
+ }
+ }
+
+ public static void updateJobStatus(JobExecutionContext jobExecutionContext,
+ JobDetails details, JobState state) throws GFacException {
+ try {
+ Registry registry = jobExecutionContext.getRegistry();
+ JobStatus status = new JobStatus();
+ status.setJobState(state);
+ status.setTimeOfStateChange(Calendar.getInstance()
+ .getTimeInMillis());
+ details.setJobStatus(status);
+ registry.update(
+ org.apache.airavata.registry.cpi.RegistryModelType.JOB_DETAIL,
+ details, details.getJobID());
+ } catch (Exception e) {
+ throw new GFacException("Error persisting job status"
+ + e.getLocalizedMessage(), e);
+ }
+ }
+
+ public static void saveErrorDetails(
+ JobExecutionContext jobExecutionContext, String errorMessage,
+ CorrectiveAction action, ErrorCategory errorCatogory)
+ throws GFacException {
+ try {
+ Registry registry = RegistryFactory.getDefaultRegistry();
+ ErrorDetails details = new ErrorDetails();
+ details.setActualErrorMessage(errorMessage);
+ details.setCorrectiveAction(action);
+ details.setActionableGroup(ActionableGroup.GATEWAYS_ADMINS);
+ details.setCreationTime(Calendar.getInstance().getTimeInMillis());
+ details.setErrorCategory(errorCatogory);
+ registry.add(ChildDataType.ERROR_DETAIL, details,
+ jobExecutionContext.getTaskData().getTaskID());
+ } catch (Exception e) {
+ throw new GFacException("Error persisting job status"
+ + e.getLocalizedMessage(), e);
+ }
+ }
+
+ public static Map<String, Object> getInMessageContext(
+ List<DataObjectType> experimentData, Parameter[] parameters)
+ throws GFacException {
+ HashMap<String, Object> stringObjectHashMap = new HashMap<String, Object>();
+ Map<String, DataObjectType> map = new HashMap<String, DataObjectType>();
+ for (DataObjectType objectType : experimentData) {
+ map.put(objectType.getKey(), objectType);
+ }
+ for (int i = 0; i < parameters.length; i++) {
+ DataObjectType input = map.get(parameters[i].getParameterName());
+ if (input != null) {
+ DataType t = DataType.STRING;
+ String type = parameters[i].getParameterType().getType().toString().toUpperCase();
+ if (type.equals("STRING")){
+ t=DataType.STRING;
+ }else if (type.equals("INTEGER")){
+ t=DataType.INTEGER;
+ }else if (type.equals("FLOAT")){
+ //FIXME
+ t=DataType.INTEGER;
+ }else if (type.equals("URI")){
+ t=DataType.URI;
+ }
+ input.setType(t);
+ stringObjectHashMap
+ .put(parameters[i].getParameterName(), GFacUtils
+ .getInputActualParameter(parameters[i], input));
+ } else {
+ throw new GFacException(
+ "Error finding the parameter: parameter Name"
+ + parameters[i].getParameterName());
+ }
+ }
+ return stringObjectHashMap;
+ }
+
+ public static Map<String, Object> getOutMessageContext(
+ List<DataObjectType> experimentData, Parameter[] parameters)
+ throws GFacException {
+ HashMap<String, Object> stringObjectHashMap = new HashMap<String, Object>();
+ Map<String, DataObjectType> map = new HashMap<String, DataObjectType>();
+ for (DataObjectType objectType : experimentData) {
+ map.put(objectType.getKey(), objectType);
+ }
+ for (int i = 0; i < parameters.length; i++) {
+ DataObjectType output = map.get(parameters[i].getParameterName());
+ if (output==null){
+ output=new DataObjectType();
+ output.setKey(parameters[i].getParameterName());
+ output.setValue("");
+ String type = parameters[i].getParameterType().getType().toString().toUpperCase();
+ DataType t = DataType.STRING;
+ if (type.equals("STRING")){
+ t=DataType.STRING;
+ }else if (type.equals("INTEGER")){
+ t=DataType.INTEGER;
+ }else if (type.equals("FLOAT")){
+ //FIXME
+ t=DataType.INTEGER;
+ }else if (type.equals("URI")){
+ t=DataType.URI;
+ }
+ output.setType(t);
+ }
+ stringObjectHashMap
+ .put(parameters[i].getParameterName(), GFacUtils
+ .getInputActualParameter(parameters[i], output));
+ }
+ return stringObjectHashMap;
+ }
+
+ public static GfacExperimentState getZKExperimentState(ZooKeeper zk,
+ JobExecutionContext jobExecutionContext)
+ throws ApplicationSettingsException, KeeperException,
+ InterruptedException {
+ String expState = AiravataZKUtils.getExpState(zk, jobExecutionContext
+ .getExperimentID(), jobExecutionContext.getTaskData()
+ .getTaskID());
+ return GfacExperimentState.findByValue(Integer.parseInt(expState));
+ }
+
+ public static int getZKExperimentStateValue(ZooKeeper zk,
+ JobExecutionContext jobExecutionContext)
+ throws ApplicationSettingsException, KeeperException,
+ InterruptedException {
+ String expState = AiravataZKUtils.getExpState(zk, jobExecutionContext
+ .getExperimentID(), jobExecutionContext.getTaskData()
+ .getTaskID());
+ if (expState == null) {
+ return -1;
+ }
+ return Integer.parseInt(expState);
+ }
+
+ public static boolean createPluginZnode(ZooKeeper zk,
+ JobExecutionContext jobExecutionContext, String className)
+ throws ApplicationSettingsException, KeeperException,
+ InterruptedException {
+ String expState = AiravataZKUtils.getExpZnodeHandlerPath(
+ jobExecutionContext.getExperimentID(), jobExecutionContext
+ .getTaskData().getTaskID(), className);
+ Stat exists = zk.exists(expState, false);
+ if (exists == null) {
+ zk.create(expState, new byte[0], ZooDefs.Ids.OPEN_ACL_UNSAFE,
+ CreateMode.PERSISTENT);
+
+ zk.create(expState + File.separator
+ + AiravataZKUtils.ZK_EXPERIMENT_STATE_NODE, new byte[0],
+ ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
+ } else {
+ exists = zk.exists(expState + File.separator
+ + AiravataZKUtils.ZK_EXPERIMENT_STATE_NODE, false);
+ if (exists == null) {
+ zk.create(expState + File.separator
+ + AiravataZKUtils.ZK_EXPERIMENT_STATE_NODE,
+ new byte[0], ZooDefs.Ids.OPEN_ACL_UNSAFE,
+ CreateMode.PERSISTENT);
+ }
+ }
+
+ exists = zk.exists(expState + File.separator
+ + AiravataZKUtils.ZK_EXPERIMENT_STATE_NODE, false);
+ if (exists != null) {
+ zk.setData(expState + File.separator
+ + AiravataZKUtils.ZK_EXPERIMENT_STATE_NODE,
+ String.valueOf(GfacPluginState.INVOKING.getValue())
+ .getBytes(), exists.getVersion());
+ }
+ return true;
+ }
+
+ public static boolean createPluginZnode(ZooKeeper zk,
+ JobExecutionContext jobExecutionContext, String className,
+ GfacPluginState state) throws ApplicationSettingsException,
+ KeeperException, InterruptedException {
+ String expState = AiravataZKUtils.getExpZnodeHandlerPath(
+ jobExecutionContext.getExperimentID(), jobExecutionContext
+ .getTaskData().getTaskID(), className);
+ Stat exists = zk.exists(expState, false);
+ if (exists == null) {
+ zk.create(expState, new byte[0], ZooDefs.Ids.OPEN_ACL_UNSAFE,
+ CreateMode.PERSISTENT);
+
+ zk.create(expState + File.separator
+ + AiravataZKUtils.ZK_EXPERIMENT_STATE_NODE, new byte[0],
+ ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
+ } else {
+ exists = zk.exists(expState + File.separator
+ + AiravataZKUtils.ZK_EXPERIMENT_STATE_NODE, false);
+ if (exists == null) {
+ zk.create(expState + File.separator
+ + AiravataZKUtils.ZK_EXPERIMENT_STATE_NODE,
+ new byte[0], ZooDefs.Ids.OPEN_ACL_UNSAFE,
+ CreateMode.PERSISTENT);
+ }
+ }
+
+ exists = zk.exists(expState + File.separator
+ + AiravataZKUtils.ZK_EXPERIMENT_STATE_NODE, false);
+ if (exists != null) {
+ zk.setData(expState + File.separator
+ + AiravataZKUtils.ZK_EXPERIMENT_STATE_NODE,
+ String.valueOf(state.getValue()).getBytes(),
+ exists.getVersion());
+ }
+ return true;
+ }
+
+ public static boolean updatePluginState(ZooKeeper zk,
+ JobExecutionContext jobExecutionContext, String className,
+ GfacPluginState state) throws ApplicationSettingsException,
+ KeeperException, InterruptedException {
+ String expState = AiravataZKUtils.getExpZnodeHandlerPath(
+ jobExecutionContext.getExperimentID(), jobExecutionContext
+ .getTaskData().getTaskID(), className);
+
+ Stat exists = zk.exists(expState + File.separator
+ + AiravataZKUtils.ZK_EXPERIMENT_STATE_NODE, false);
+ if (exists != null) {
+ zk.setData(expState + File.separator
+ + AiravataZKUtils.ZK_EXPERIMENT_STATE_NODE,
+ String.valueOf(state.getValue()).getBytes(),
+ exists.getVersion());
+ } else {
+ createPluginZnode(zk, jobExecutionContext, className, state);
+ }
+ return true;
+ }
+
+ public static String getPluginState(ZooKeeper zk,
+ JobExecutionContext jobExecutionContext, String className) {
+ try {
+ String expState = AiravataZKUtils.getExpZnodeHandlerPath(
+ jobExecutionContext.getExperimentID(), jobExecutionContext
+ .getTaskData().getTaskID(), className);
+
+ Stat exists = zk.exists(expState + File.separator
+ + AiravataZKUtils.ZK_EXPERIMENT_STATE_NODE, false);
+ if (exists != null) {
+ return new String(zk.getData(expState + File.separator
+ + AiravataZKUtils.ZK_EXPERIMENT_STATE_NODE, false,
+ exists));
+ }
+ return null; // if the node doesn't exist or any other error we
+ // return false
+ } catch (Exception e) {
+ e.printStackTrace();
+ return null;
+ }
+ }
+
+ // This method is dangerous because of moving the experiment data
+ public static boolean createExperimentEntry(String experimentID,
+ String taskID, ZooKeeper zk, String experimentNode,
+ String pickedChild, String tokenId) throws KeeperException,
+ InterruptedException {
+ String experimentPath = experimentNode + File.separator + pickedChild;
+ String newExpNode = experimentPath + File.separator + experimentID
+ + "+" + taskID;
+ Stat exists1 = zk.exists(newExpNode, false);
+ String foundExperimentPath = null;
+ if (exists1 == null) {
+ List<String> runningGfacNodeNames = AiravataZKUtils
+ .getAllGfacNodeNames(zk); // here we take old gfac servers
+ // too
+ for (String gfacServerNode : runningGfacNodeNames) {
+ if (!gfacServerNode.equals(pickedChild)) {
+ foundExperimentPath = experimentNode + File.separator
+ + gfacServerNode + File.separator + experimentID
+ + "+" + taskID;
+ exists1 = zk.exists(foundExperimentPath, false);
+ if (exists1 != null) { // when the experiment is found we
+ // break the loop
+ break;
+ }
+ }
+ }
+ if (exists1 == null) { // OK this is a pretty new experiment so we
+ // are going to create a new node
+ log.info("This is a new Job, so creating all the experiment docs from the scratch");
+ zk.create(newExpNode, new byte[0], ZooDefs.Ids.OPEN_ACL_UNSAFE,
+ CreateMode.PERSISTENT);
+
+ Stat expParent = zk.exists(newExpNode, false);
+ if (tokenId != null && expParent != null) {
+ zk.setData(newExpNode, tokenId.getBytes(),
+ expParent.getVersion());
+ }
+ zk.create(newExpNode + File.separator + "state", String
+ .valueOf(GfacExperimentState.LAUNCHED.getValue())
+ .getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE,
+ CreateMode.PERSISTENT);
+
+ } else {
+ // ohhh this node exists in some other failed gfac folder, we
+ // have to move it to this gfac experiment list,safely
+ log.info("This is an old Job, so copying data from old experiment location");
+ zk.create(newExpNode,
+ zk.getData(foundExperimentPath, false, exists1),
+ ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
+
+ List<String> children = zk.getChildren(foundExperimentPath,
+ false);
+ for (String childNode1 : children) {
+ String level1 = foundExperimentPath + File.separator
+ + childNode1;
+ Stat exists2 = zk.exists(level1, false); // no need to check
+ // exists
+ String newLeve1 = newExpNode + File.separator + childNode1;
+ log.info("Creating new znode: " + newLeve1); // these has to
+ // be info
+ // logs
+ zk.create(newLeve1, zk.getData(level1, false, exists2),
+ ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
+ for (String childNode2 : zk.getChildren(level1, false)) {
+ String level2 = level1 + File.separator + childNode2;
+ Stat exists3 = zk.exists(level2, false); // no need to
+ // check
+ // exists
+ String newLeve2 = newLeve1 + File.separator
+ + childNode2;
+ log.info("Creating new znode: " + newLeve2);
+ zk.create(newLeve2, zk.getData(level2, false, exists3),
+ ZooDefs.Ids.OPEN_ACL_UNSAFE,
+ CreateMode.PERSISTENT);
+ }
+ }
+ // After all the files are successfully transfered we delete the
+ // old experiment,otherwise we do
+ // not delete a single file
+ log.info("After a successful copying of experiment data for an old experiment we delete the old data");
+ log.info("Deleting experiment data: " + foundExperimentPath);
+ ZKUtil.deleteRecursive(zk, foundExperimentPath);
+ }
+ } else {
+ log.error("ExperimentID: " + experimentID + " taskID: " + taskID
+ + " is already running by this Gfac instance");
+ List<String> runningGfacNodeNames = AiravataZKUtils
+ .getAllGfacNodeNames(zk); // here we take old gfac servers
+ // too
+ for (String gfacServerNode : runningGfacNodeNames) {
+ if (!gfacServerNode.equals(pickedChild)) {
+ foundExperimentPath = experimentNode + File.separator
+ + gfacServerNode + File.separator + experimentID
+ + "+" + taskID;
+ break;
+ }
+ }
+ ZKUtil.deleteRecursive(zk, foundExperimentPath);
+ return false;
+ }
+ return true;
+ }
+
+ public static void savePluginData(JobExecutionContext jobExecutionContext,
+ StringBuffer data, String className) throws GFacHandlerException {
+ try {
+ ZooKeeper zk = jobExecutionContext.getZk();
+ if (zk != null) {
+ String expZnodeHandlerPath = AiravataZKUtils
+ .getExpZnodeHandlerPath(
+ jobExecutionContext.getExperimentID(),
+ jobExecutionContext.getTaskData().getTaskID(),
+ className);
+ Stat exists = zk.exists(expZnodeHandlerPath, false);
+ zk.setData(expZnodeHandlerPath, data.toString().getBytes(),
+ exists.getVersion());
+ }
+ } catch (Exception e) {
+ throw new GFacHandlerException(e);
+ }
+ }
+
+ public static String getPluginData(JobExecutionContext jobExecutionContext,
+ String className) throws ApplicationSettingsException,
+ KeeperException, InterruptedException {
+ ZooKeeper zk = jobExecutionContext.getZk();
+ if (zk != null) {
+ String expZnodeHandlerPath = AiravataZKUtils
+ .getExpZnodeHandlerPath(
+ jobExecutionContext.getExperimentID(),
+ jobExecutionContext.getTaskData().getTaskID(),
+ className);
+ Stat exists = zk.exists(expZnodeHandlerPath, false);
+ return new String(jobExecutionContext.getZk().getData(
+ expZnodeHandlerPath, false, exists));
+ }
+ return null;
+ }
+
+ public static CredentialReader getCredentialReader()
+ throws ApplicationSettingsException, IllegalAccessException,
+ ClassNotFoundException, InstantiationException {
+ String jdbcUrl = ServerSettings.getCredentialStoreDBURL();
+ String jdbcUsr = ServerSettings.getCredentialStoreDBUser();
+ String jdbcPass = ServerSettings.getCredentialStoreDBPassword();
+ String driver = ServerSettings.getCredentialStoreDBDriver();
+ return new CredentialReaderImpl(new DBUtil(jdbcUrl, jdbcUsr, jdbcPass,
+ driver));
+ }
}
[3/3] git commit: Merge branch 'master' of
https://git-wip-us.apache.org/repos/asf/airavata
Posted by sa...@apache.org.
Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/airavata
Project: http://git-wip-us.apache.org/repos/asf/airavata/repo
Commit: http://git-wip-us.apache.org/repos/asf/airavata/commit/7a378a6b
Tree: http://git-wip-us.apache.org/repos/asf/airavata/tree/7a378a6b
Diff: http://git-wip-us.apache.org/repos/asf/airavata/diff/7a378a6b
Branch: refs/heads/master
Commit: 7a378a6b430135d3d11f754e08364630a7e43a85
Parents: 8121d46 95d35ad
Author: Saminda Wijeratne <sa...@gmail.com>
Authored: Fri Jul 11 16:29:28 2014 -0400
Committer: Saminda Wijeratne <sa...@gmail.com>
Committed: Fri Jul 11 16:29:28 2014 -0400
----------------------------------------------------------------------
.../client/samples/CreateLaunchExperiment.java | 161 ++++++++++++++++++-
.../client/tools/DocumentCreatorNew.java | 85 ++++++++++
2 files changed, 244 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
[2/3] git commit: updating to create output objects manually when
experiment does not create the output parameters
Posted by sa...@apache.org.
updating to create output objects manually when experiment does not create the output parameters
Project: http://git-wip-us.apache.org/repos/asf/airavata/repo
Commit: http://git-wip-us.apache.org/repos/asf/airavata/commit/8121d469
Tree: http://git-wip-us.apache.org/repos/asf/airavata/tree/8121d469
Diff: http://git-wip-us.apache.org/repos/asf/airavata/diff/8121d469
Branch: refs/heads/master
Commit: 8121d469966b944ea2e74d5134bf9e6d6a43b57d
Parents: 0714710
Author: Saminda Wijeratne <sa...@gmail.com>
Authored: Fri Jul 11 16:27:40 2014 -0400
Committer: Saminda Wijeratne <sa...@gmail.com>
Committed: Fri Jul 11 16:27:40 2014 -0400
----------------------------------------------------------------------
.../airavata/gfac/core/cpi/BetterGfacImpl.java | 4 +-
.../apache/airavata/gfac/core/cpi/GFacImpl.java | 4 +-
.../airavata/gfac/core/utils/GFacUtils.java | 1917 ++++++++++--------
3 files changed, 1094 insertions(+), 831 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/airavata/blob/8121d469/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/cpi/BetterGfacImpl.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/cpi/BetterGfacImpl.java b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/cpi/BetterGfacImpl.java
index 3eab643..d1ccdf3 100644
--- a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/cpi/BetterGfacImpl.java
+++ b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/cpi/BetterGfacImpl.java
@@ -454,11 +454,11 @@ public class BetterGfacImpl implements GFac {
jobExecutionContext.setApplicationContext(applicationContext);
List<DataObjectType> experimentInputs = taskData.getApplicationInputs();
- jobExecutionContext.setInMessageContext(new MessageContext(GFacUtils.getMessageContext(experimentInputs,
+ jobExecutionContext.setInMessageContext(new MessageContext(GFacUtils.getInMessageContext(experimentInputs,
legacyServiceDescType.getInputParametersArray())));
List<DataObjectType> outputData = taskData.getApplicationOutputs();
- jobExecutionContext.setOutMessageContext(new MessageContext(GFacUtils.getMessageContext(outputData,
+ jobExecutionContext.setOutMessageContext(new MessageContext(GFacUtils.getOutMessageContext(outputData,
legacyServiceDescType.getOutputParametersArray())));
jobExecutionContext.setProperty(Constants.PROP_TOPIC, experimentID);
http://git-wip-us.apache.org/repos/asf/airavata/blob/8121d469/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/cpi/GFacImpl.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/cpi/GFacImpl.java b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/cpi/GFacImpl.java
index c1ab92b..34800e9 100644
--- a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/cpi/GFacImpl.java
+++ b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/cpi/GFacImpl.java
@@ -268,11 +268,11 @@ public class GFacImpl implements GFac {
jobExecutionContext.setApplicationContext(applicationContext);
List<DataObjectType> experimentInputs = taskData.getApplicationInputs();
- jobExecutionContext.setInMessageContext(new MessageContext(GFacUtils.getMessageContext(experimentInputs,
+ jobExecutionContext.setInMessageContext(new MessageContext(GFacUtils.getInMessageContext(experimentInputs,
serviceDescription.getType().getInputParametersArray())));
List<DataObjectType> outputData = taskData.getApplicationOutputs();
- jobExecutionContext.setOutMessageContext(new MessageContext(GFacUtils.getMessageContext(outputData,
+ jobExecutionContext.setOutMessageContext(new MessageContext(GFacUtils.getInMessageContext(outputData,
serviceDescription.getType().getOutputParametersArray())));
jobExecutionContext.setProperty(Constants.PROP_TOPIC, experimentID);