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

[07/13] Moving Airavata-API to top level as discussed in - http://markmail.org/thread/73wntnqlvy6konir

http://git-wip-us.apache.org/repos/asf/airavata/blob/3070c3d9/airavata-api/thrift-interface-descriptions/airavataAPI.thrift
----------------------------------------------------------------------
diff --git a/airavata-api/thrift-interface-descriptions/airavataAPI.thrift b/airavata-api/thrift-interface-descriptions/airavataAPI.thrift
new file mode 100644
index 0000000..1b804d3
--- /dev/null
+++ b/airavata-api/thrift-interface-descriptions/airavataAPI.thrift
@@ -0,0 +1,413 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+
+/*
+ * Application Programming Interface definition for Apache Airavata Services.
+ *   this parent thrift file is contains all service interfaces. The data models are 
+ *   described in respective thrift files.
+*/
+
+include "airavataErrors.thrift"
+include "airavataDataModel.thrift"
+include "experimentModel.thrift"
+
+namespace java org.apache.airavata.api
+namespace php Airavata.API
+namespace cpp airavata.api
+namespace perl AiravataAPI
+namespace py airavata.api
+namespace js AiravataAPI
+
+/*
+ * Airavata Interface Versions depend upon this Thrift Interface File. When Making changes, please edit the
+ *  Version Constants according to Semantic Versioning Specification (SemVer) http://semver.org.
+ *
+ * Note: The Airavata API version may be different from the Airavata software release versions.
+ *
+ * The Airavata API version is composed as a dot delimited string with major, minor, and patch level components.
+ *
+ *  - Major: Incremented for backward incompatible changes. An example would be changes to interfaces.
+ *  - Minor: Incremented for backward compatible changes. An example would be the addition of a new optional methods.
+ *  - Patch: Incremented for bug fixes. The patch level should be increased for every edit that doesn't result
+ *              in a change to major/minor version numbers.
+*/
+const string VERSION = "0.12.0"
+
+service Airavata {
+
+/*
+ * Apache Airavata API Service Methods. For data structures associated in the signatures, please see included thrift files
+*/
+
+  /** Query Airavata to fetch the API version */
+  string GetAPIVersion(),
+  
+  /**
+   * Create an experiment for the specified user belonging to the gateway. The gateway identity is not explicitly passed
+   *   but inferred from the authentication header. This experiment is just a persistent place holder. The client
+   *   has to subsequently configure and launch the created experiment. No action is taken on Airavata Server except
+   *   registering the experiment in a persistent store.
+   *
+   * @param basicExperimentMetadata
+   *    The create experiment will require the basic experiment metadata like the name and description, intended user,
+   *      the gateway identifer and if the experiment should be shared public by defualt. During the creation of an experiment
+   *      the ExperimentMetadata is a required field.
+   *
+   * @return
+   *   The server-side generated airavata experiment globally unique identifier.
+   *
+   * @throws org.apache.airavata.api.error.InvalidRequestException
+   *    For any incorrect forming of the request itself.
+   *
+   * @throws org.apache.airavata.api.error.AiravataClientException
+   *    The following list of exceptions are thrown which Airavata Client can take corrective actions to resolve:
+   *
+   *      UNKNOWN_GATEWAY_ID - If a Gateway is not registered with Airavata as a one time administrative
+   *         step, then Airavata Registry will not have a provenance area setup. The client has to follow
+   *         gateway registration steps and retry this request.
+   *
+   *      AUTHENTICATION_FAILURE - How Authentication will be implemented is yet to be determined.
+   *         For now this is a place holder.
+   *
+   *      INVALID_AUTHORIZATION - This will throw an authorization exception. When a more robust security hand-shake
+   *         is implemented, the authorization will be more substantial.
+   *
+   * @throws org.apache.airavata.api.error.AiravataSystemException
+   *    This exception will be thrown for any Airavata Server side issues and if the problem cannot be corrected by the client
+   *       rather an Airavata Administrator will be notified to take corrective action.
+   *
+  */
+  string createExperiment(1: experimentModel.BasicMetadata basicExperimentMetadata)
+    throws (1: airavataErrors.InvalidRequestException ire,
+            2: airavataErrors.AiravataClientException ace,
+            3: airavataErrors.AiravataSystemException ase)
+
+  /**
+   * Fetch previously created experiment metadata.
+   *
+   * @param airavataExperimentId
+   *    The identifier for the requested experiment. This is returned during the create experiment step.
+   *
+   * @return experimentMetada
+   *   This method will return the previously stored experiment metadata.
+   *
+   * @throws org.apache.airavata.api.error.InvalidRequestException
+   *    For any incorrect forming of the request itself.
+   * 
+   * @throws org.apache.airavata.api.error.ExperimentNotFoundException
+   *    If the specified experiment is not previously created, then an Experiment Not Found Exception is thrown.
+   * 
+   * @throws org.apache.airavata.api.error.AiravataClientException
+   *    The following list of exceptions are thrown which Airavata Client can take corrective actions to resolve:
+   *      
+   *      UNKNOWN_GATEWAY_ID - If a Gateway is not registered with Airavata as a one time administrative
+   *         step, then Airavata Registry will not have a provenance area setup. The client has to follow
+   *         gateway registration steps and retry this request.
+   *
+   *      AUTHENTICATION_FAILURE - How Authentication will be implemented is yet to be determined.
+   *         For now this is a place holder.
+   *
+   *      INVALID_AUTHORIZATION - This will throw an authorization exception. When a more robust security hand-shake
+   *         is implemented, the authorization will be more substantial.
+   *
+   * @throws org.apache.airavata.api.error.AiravataSystemException
+   *    This exception will be thrown for any Airavata Server side issues and if the problem cannot be corrected by the client
+   *       rather an Airavata Administrator will be notified to take corrective action.
+   *
+  */
+  experimentModel.BasicMetadata getBasicExperimentMetadata(1: string airavataExperimentId)
+    throws (1: airavataErrors.InvalidRequestException ire,
+            2: airavataErrors.ExperimentNotFoundException enf,
+            3: airavataErrors.AiravataClientException ace,
+            4: airavataErrors.AiravataSystemException ase)
+
+  /**
+   * Configure a previously created experiment with required inputs, scheduling and other quality of service
+   *   parameters. This method only updates the experiment object within the registry. The experiment has to be launched
+   *   to make it actionable by the server.
+   *
+   * @param airavataExperimentId
+   *    The identifier for the requested experiment. This is returned during the create experiment step.
+   *
+   * @param experimentConfigurationData
+   *    The configuration information of the experiment with application input parameters, computational resource scheduling
+   *      information, special input output handling and additional quality of service parameters.
+   *
+   * @return
+   *   This method call does not have a return value.
+   *
+   * @throws org.apache.airavata.api.error.InvalidRequestException
+   *    For any incorrect forming of the request itself.
+   * 
+   * @throws org.apache.airavata.api.error.ExperimentNotFoundException
+   *    If the specified experiment is not previously created, then an Experiment Not Found Exception is thrown.
+   * 
+   * @throws org.apache.airavata.api.error.AiravataClientException
+   *    The following list of exceptions are thrown which Airavata Client can take corrective actions to resolve:
+   *      
+   *      UNKNOWN_GATEWAY_ID - If a Gateway is not registered with Airavata as a one time administrative
+   *         step, then Airavata Registry will not have a provenance area setup. The client has to follow
+   *         gateway registration steps and retry this request.
+   *
+   *      AUTHENTICATION_FAILURE - How Authentication will be implemented is yet to be determined.
+   *         For now this is a place holder.
+   *
+   *      INVALID_AUTHORIZATION - This will throw an authorization exception. When a more robust security hand-shake
+   *         is implemented, the authorization will be more substantial.
+   *
+   * @throws org.apache.airavata.api.error.AiravataSystemException
+   *    This exception will be thrown for any Airavata Server side issues and if the problem cannot be corrected by the client
+   *       rather an Airavata Administrator will be notified to take corrective action.
+   *
+  */
+  void configureExperiment(1: string airavataExperimentId,
+                           2: experimentModel.ConfigurationData experimentConfigurationData)
+    throws (1: airavataErrors.InvalidRequestException ire,
+            2: airavataErrors.ExperimentNotFoundException enf,
+            3: airavataErrors.AiravataClientException ace,
+            4: airavataErrors.AiravataSystemException ase)
+
+  /**
+   * Fetch the previously configured experiment configuration information.
+   *
+   * @param airavataExperimentId
+   *    The identifier for the requested experiment. This is returned during the create experiment step.
+   *
+   * @return
+   *   This method returns the previously configured experiment configuration data.
+   *
+   * @throws org.apache.airavata.api.error.InvalidRequestException
+   *    For any incorrect forming of the request itself.
+   * 
+   * @throws org.apache.airavata.api.error.ExperimentNotFoundException
+   *    If the specified experiment is not previously created, then an Experiment Not Found Exception is thrown.
+   * 
+   * @throws org.apache.airavata.api.error.AiravataClientException
+   *    The following list of exceptions are thrown which Airavata Client can take corrective actions to resolve:
+   *      
+   *      UNKNOWN_GATEWAY_ID - If a Gateway is not registered with Airavata as a one time administrative
+   *         step, then Airavata Registry will not have a provenance area setup. The client has to follow
+   *         gateway registration steps and retry this request.
+   *
+   *      AUTHENTICATION_FAILURE - How Authentication will be implemented is yet to be determined.
+   *         For now this is a place holder.
+   *
+   *      INVALID_AUTHORIZATION - This will throw an authorization exception. When a more robust security hand-shake
+   *         is implemented, the authorization will be more substantial.
+   *
+   * @throws org.apache.airavata.api.error.AiravataSystemException
+   *    This exception will be thrown for any Airavata Server side issues and if the problem cannot be corrected by the client
+   *       rather an Airavata Administrator will be notified to take corrective action.
+   *
+  */
+  experimentModel.ConfigurationData getExperimentConfiguration(1: string airavataExperimentId)
+    throws (1: airavataErrors.InvalidRequestException ire,
+            2: airavataErrors.ExperimentNotFoundException enf,
+            3: airavataErrors.AiravataClientException ace,
+            4: airavataErrors.AiravataSystemException ase)
+
+  /**
+   * Launch a previously created and configured experiment. Airavata Server will then start processing the request and appropriate
+   *   notifications and intermediate and output data will be subsequently available for this experiment.
+   *
+   * @param airavataExperimentId
+   *    The identifier for the requested experiment. This is returned during the create experiment step.
+   *
+   * @param airavataCredStoreToken:
+   *   A requirement to execute experiments within Airavata is to first register the targeted remote computational account
+   *     credentials with Airavata Credential Store. The administrative API (related to credential store) will return a
+   *     generated token associated with the registered credentials. The client has to security posses this token id and is
+   *     required to pass it to Airavata Server for all execution requests.
+   *   Note: At this point only the credential store token is required so the string is directly passed here. In future if 
+   *     if more security credentials are enables, then the structure ExecutionSecurityParameters should be used.
+   *   Note: This parameter is not persisted within Airavata Registry for security reasons.
+   *
+   * @return
+   *   This method call does not have a return value.
+   *
+   * @throws org.apache.airavata.api.error.InvalidRequestException
+   *    For any incorrect forming of the request itself.
+   * 
+   * @throws org.apache.airavata.api.error.ExperimentNotFoundException
+   *    If the specified experiment is not previously created, then an Experiment Not Found Exception is thrown.
+   * 
+   * @throws org.apache.airavata.api.error.AiravataClientException
+   *    The following list of exceptions are thrown which Airavata Client can take corrective actions to resolve:
+   *      
+   *      UNKNOWN_GATEWAY_ID - If a Gateway is not registered with Airavata as a one time administrative
+   *         step, then Airavata Registry will not have a provenance area setup. The client has to follow
+   *         gateway registration steps and retry this request.
+   *
+   *      AUTHENTICATION_FAILURE - How Authentication will be implemented is yet to be determined.
+   *         For now this is a place holder.
+   *
+   *      INVALID_AUTHORIZATION - This will throw an authorization exception. When a more robust security hand-shake
+   *         is implemented, the authorization will be more substantial.
+   *
+   * @throws org.apache.airavata.api.error.AiravataSystemException
+   *    This exception will be thrown for any Airavata Server side issues and if the problem cannot be corrected by the client
+   *       rather an Airavata Administrator will be notified to take corrective action.
+   *
+  */
+  void launchConfiguredExperiment(1: string airavataExperimentId
+                                  2: string airavataCredStoreToken)
+    throws (1: airavataErrors.InvalidRequestException ire,
+            2: airavataErrors.ExperimentNotFoundException enf,
+            3: airavataErrors.AiravataClientException ace,
+            4: airavataErrors.AiravataSystemException ase)
+            
+  /**
+   * Configure and Launch a previously created experiment with required inputs, scheduling, security and other quality of service
+   *   parameters. This method also launches the experiment after it is configured. If you would like to configure only 
+   *   and launch at a later time or partially configure then ConfigureExperiment should be used.
+   *
+   * @param airavataExperimentId
+   *    The identifier for the requested experiment. This is returned during the create experiment step.
+   * 
+   * @param experimentConfigurationData
+   *    The configuration information of the experiment with application input parameters, computational resource scheduling
+   *      information, special input output handling and additional quality of service parameters.
+   *
+   * @param airavataCredStoreToken:
+   *   A requirement to execute experiments within Airavata is to first register the targeted remote computational account
+   *     credentials with Airavata Credential Store. The administrative API (related to credential store) will return a
+   *     generated token associated with the registered credentials. The client has to security posses this token id and is
+   *     required to pass it to Airavata Server for all execution requests.
+   *   Note: At this point only the credential store token is required so the string is directly passed here. In future if 
+   *     if more security credentials are enables, then the structure ExecutionSecurityParameters should be used.
+   *
+   * @return
+   *   The server-side generated experiment GUID.
+   *
+   * @throws org.apache.airavata.api.error.InvalidRequestException
+   *    For any incorrect forming of the request itself.
+   * 
+   * @throws org.apache.airavata.api.error.AiravataClientException
+   *    The following list of exceptions are thrown which Airavata Client can take corrective actions to resolve:
+   *      
+   *      UNKNOWN_GATEWAY_ID - If a Gateway is not registered with Airavata as a one time administrative
+   *         step, then Airavata Registry will not have a provenance area setup. The client has to follow
+   *         gateway registration steps and retry this request.
+   *
+   *      AUTHENTICATION_FAILURE - How Authentication will be implemented is yet to be determined.
+   *         For now this is a place holder.
+   *
+   *      INVALID_AUTHORIZATION - This will throw an authorization exception. When a more robust security hand-shake
+   *         is implemented, the authorization will be more substantial.
+   *
+   * @throws org.apache.airavata.api.error.AiravataSystemException
+   *    This exception will be thrown for any Airavata Server side issues and if the problem cannot be corrected by the client
+   *       rather an Airavata Administrator will be notified to take corrective action.
+   *
+  */
+  string configureAndLaunchExperiment (1: string airavataExperimentId
+                                       2: experimentModel.ConfigurationData experimentConfigurationData,
+                                       3: string airavataCredStoreToken)
+    throws (1: airavataErrors.InvalidRequestException ire,
+            2: airavataErrors.ExperimentNotFoundException enf,
+            3: airavataErrors.AiravataClientException ace,
+            4: airavataErrors.AiravataSystemException ase)
+
+  /**
+   * Clone an specified experiment with a new name. A copy of the experiment configuration is made and is persisted with new metadata.
+   *   The client has to subsequently update this configuration if needed and launch the cloned experiment. 
+   *
+   * @param airavataExperimentIdToBeCloned
+   *    This is the experiment identifier that is to be cloned.
+   *
+   * @param basicExperimentMetadata
+   *    Once an experiment is cloned, to disambiguate, the users are suggested to provide new metadata. This will again require
+   *      the basic experiment metadata like the name and description, intended user, the gateway identifier and if the experiment
+   *      should be shared public by default.
+   *
+   * @return
+   *   The server-side generated airavata experiment globally unique identifier for the newly cloned experiment.
+   *
+   * @throws org.apache.airavata.api.error.InvalidRequestException
+   *    For any incorrect forming of the request itself.
+   * 
+   * @throws org.apache.airavata.api.error.ExperimentNotFoundException
+   *    If the specified experiment is not previously created, then an Experiment Not Found Exception is thrown.
+   * 
+   * @throws org.apache.airavata.api.error.AiravataClientException
+   *    The following list of exceptions are thrown which Airavata Client can take corrective actions to resolve:
+   *      
+   *      UNKNOWN_GATEWAY_ID - If a Gateway is not registered with Airavata as a one time administrative
+   *         step, then Airavata Registry will not have a provenance area setup. The client has to follow
+   *         gateway registration steps and retry this request.
+   *
+   *      AUTHENTICATION_FAILURE - How Authentication will be implemented is yet to be determined.
+   *         For now this is a place holder.
+   *
+   *      INVALID_AUTHORIZATION - This will throw an authorization exception. When a more robust security hand-shake
+   *         is implemented, the authorization will be more substantial.
+   *
+   * @throws org.apache.airavata.api.error.AiravataSystemException
+   *    This exception will be thrown for any Airavata Server side issues and if the problem cannot be corrected by the client
+   *       rather an Airavata Administrator will be notified to take corrective action.
+   *
+  */
+  string cloneExperimentConfiguration(1: string airavataExperimentIdToBeCloned,
+                                      2: experimentModel.BasicMetadata basicExperimentMetadata)
+    throws (1: airavataErrors.InvalidRequestException ire,
+            2: airavataErrors.ExperimentNotFoundException enf,
+            3: airavataErrors.AiravataClientException ace,
+            4: airavataErrors.AiravataSystemException ase)
+
+  /**
+   * Terminate a running experiment.
+   *
+   * @param airavataExperimentId
+   *    The identifier for the requested experiment. This is returned during the create experiment step.
+   *
+   * @return
+   *   This method call does not have a return value.
+   *
+   * @throws org.apache.airavata.api.error.InvalidRequestException
+   *    For any incorrect forming of the request itself.
+   * 
+   * @throws org.apache.airavata.api.error.ExperimentNotFoundException
+   *    If the specified experiment is not previously created, then an Experiment Not Found Exception is thrown.
+   * 
+   * @throws org.apache.airavata.api.error.AiravataClientException
+   *    The following list of exceptions are thrown which Airavata Client can take corrective actions to resolve:
+   *      
+   *      UNKNOWN_GATEWAY_ID - If a Gateway is not registered with Airavata as a one time administrative
+   *         step, then Airavata Registry will not have a provenance area setup. The client has to follow
+   *         gateway registration steps and retry this request.
+   *
+   *      AUTHENTICATION_FAILURE - How Authentication will be implemented is yet to be determined.
+   *         For now this is a place holder.
+   *
+   *      INVALID_AUTHORIZATION - This will throw an authorization exception. When a more robust security hand-shake
+   *         is implemented, the authorization will be more substantial.
+   *
+   * @throws org.apache.airavata.api.error.AiravataSystemException
+   *    This exception will be thrown for any Airavata Server side issues and if the problem cannot be corrected by the client
+   *       rather an Airavata Administrator will be notified to take corrective action.
+   *
+  */
+  void terminateExperiment(1: string airavataExperimentId)
+    throws (1: airavataErrors.InvalidRequestException ire,
+            2: airavataErrors.ExperimentNotFoundException enf,
+            3: airavataErrors.AiravataClientException ace,
+            4: airavataErrors.AiravataSystemException ase)
+
+}

http://git-wip-us.apache.org/repos/asf/airavata/blob/3070c3d9/airavata-api/thrift-interface-descriptions/airavataDataModel.thrift
----------------------------------------------------------------------
diff --git a/airavata-api/thrift-interface-descriptions/airavataDataModel.thrift b/airavata-api/thrift-interface-descriptions/airavataDataModel.thrift
new file mode 100644
index 0000000..080676e
--- /dev/null
+++ b/airavata-api/thrift-interface-descriptions/airavataDataModel.thrift
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+
+include "experimentModel.thrift"
+
+namespace java org.apache.airavata.model
+
+/*
+ * This file describes the definitions of the Airavata Execution Data Structures. Each of the
+ *   language specific Airavata Client SDK's will translate this neutral data model into an
+ *   appropriate form for passing to the Airavata Server Execution API Calls.
+*/

http://git-wip-us.apache.org/repos/asf/airavata/blob/3070c3d9/airavata-api/thrift-interface-descriptions/airavataErrors.thrift
----------------------------------------------------------------------
diff --git a/airavata-api/thrift-interface-descriptions/airavataErrors.thrift b/airavata-api/thrift-interface-descriptions/airavataErrors.thrift
new file mode 100644
index 0000000..a3b4490
--- /dev/null
+++ b/airavata-api/thrift-interface-descriptions/airavataErrors.thrift
@@ -0,0 +1,148 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+
+/*
+* This file describes the definitions of the Error Messages that can occur
+*  when invoking Apache Airavata Services through the API. In addition Thrift provides
+*  built in funcationality to raise TApplicationException for all internal server errors.
+*/
+
+namespace java org.apache.airavata.api.error
+namespace php Airavata.API.Error
+namespace cpp airavata.api.error
+namespace perl AiravataAPIError
+namespace py airavata.api.error
+namespace js AiravataAPIError
+
+/**
+ * A list of Airavata API Error Message Types
+ *
+ *  UNKNOWN: No information available about the error
+ *   
+ *  PERMISSION_DENIED: Not permitted to perform action
+ * 
+ *  INTERNAL_ERROR: Unexpected problem with the service
+ * 
+ *  AUTHENTICATION_FAILURE: The client failed to authenticate.
+ *
+ *  INVALID_AUTHORIZATION: Security Token and/or Username and/or password is incorrect
+ *   
+ *  AUTHORIZATION_EXPIRED: Authentication token expired
+ *  
+ *  UNKNOWN_GATEWAY_ID: The gateway is not registered with Airavata.
+ * 
+ *  UNSUPPORTED_OPERATION: Operation denied because it is currently unsupported.
+ */
+enum AiravataErrorType {
+  UNKNOWN,
+  PERMISSION_DENIED,
+  INTERNAL_ERROR,
+  AUTHENTICATION_FAILURE,
+  INVALID_AUTHORIZATION,
+  AUTHORIZATION_EXPIRED,
+  UNKNOWN_GATEWAY_ID,
+  UNSUPPORTED_OPERATION
+}
+
+/**
+ * This exception is thrown when a client asks to perform an operation on an experiment that does not exist.
+ *
+ * identifier:  A description of the experiment that was not found on the server.
+ *
+ * key:  The value passed from the client in the identifier, which was not found.
+ */
+exception ExperimentNotFoundException {
+  1:  optional  string identifier,
+  2:  optional  string key
+}
+
+/** 
+* This exception is thrown for invalid requests that occur from any reasons like required input parameters are missing, 
+*  or a parameter is malformed.
+* 
+*  message: contains the associated error message.
+*/
+exception InvalidRequestException {
+    1: required string message
+}
+
+
+/** 
+*  This exception is thrown when RPC timeout gets exceeded. 
+*/
+exception TimedOutException {
+}
+
+/** 
+* This exception is thrown for invalid authentication requests.
+* 
+*  message: contains the cause of the authorization failure.
+*/
+exception AuthenticationException {
+    1: required string message
+}
+
+/** 
+* This exception is thrown for invalid authorization requests such user does not have acces to an aplication or resource.
+*
+*  message: contains the authorization failure message
+*/
+exception AuthorizationException {
+    1: required string message
+}
+
+
+/**
+ * This exception is thrown by Airavata Services when a call fails as a result of
+ * a problem that a client may be able to resolve.  For example, if the user
+ * attempts to execute an application on a resource gateway does not have access to.
+ *
+ * This exception would not be used for internal system errors that do not
+ * reflect user actions, but rather reflect a problem within the service that
+ * the client cannot resolve.
+ *
+ * airavataErrorType:  The message type indicating the error that occurred.
+ *   must be one of the values of AiravataErrorType.
+ *
+ * parameter:  If the error applied to a particular input parameter, this will
+ *   indicate which parameter.
+ */
+exception AiravataClientException {
+  1:  required  AiravataErrorType airavataErrorType,
+  2:  optional  string parameter
+}
+
+
+/**
+ * This exception is thrown by Airavata Services when a call fails as a result of
+ * a problem in the service that could not be changed through client's action.
+ *
+ * airavataErrorType:  The message type indicating the error that occurred.
+ *   must be one of the values of AiravataErrorType.
+ *
+ * message:  This may contain additional information about the error
+ *
+ */
+exception AiravataSystemException {
+  1:  required  AiravataErrorType airavataErrorType,
+  2:  optional  string message,
+}
+
+

http://git-wip-us.apache.org/repos/asf/airavata/blob/3070c3d9/airavata-api/thrift-interface-descriptions/experimentModel.thrift
----------------------------------------------------------------------
diff --git a/airavata-api/thrift-interface-descriptions/experimentModel.thrift b/airavata-api/thrift-interface-descriptions/experimentModel.thrift
new file mode 100644
index 0000000..71e9e6a
--- /dev/null
+++ b/airavata-api/thrift-interface-descriptions/experimentModel.thrift
@@ -0,0 +1,139 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+
+namespace java org.apache.airavata.model.experiment
+
+/*
+ * This file describes the definitions of the Airavata Experiment Data Structures. Each of the
+ *   language specific Airavata Client SDK's will translate this neutral data model into an
+ *   appropriate form for passing to the Airavata Server Execution API Calls.
+ * 
+ * The Experiment data model is divided into 6 categories: experiment metadata, experiment configuration
+ *   data, experiment generated data, experiment monitoring data, provenance data and error handling data.
+ *
+ *   Experiment Metadata:
+ *     this structure holds the owner of the experiment, name, description, creation and last update times,
+ *     last known status, and if is private to the user or shared publicly. 
+ *    FIXME: To start with, we will not define this but populate it inferring data from other structures. This
+ *    structure needs revisiting once the API gets used.
+ * 
+ *  Experiment Configuration Data:
+ *     this structure will contain all user provided configuration data.
+ * 
+ *  Experiment Generated Data:
+ *     this structure describes all intermediate and output data generated by executing the experiment.
+ * 
+ *  Experiment Monitoring Data:
+ *     this structure contains fine grained experiment status information.
+ *
+ *  Experiment Summary Data: 
+ *     this is derived information from all experiment objects to provide a quick summary.
+ *
+*/
+
+/**
+ * A structure holding the basic experiment metadata.
+ *
+ * userName:
+ *   The user name of the targeted gateway end user on whose behalf the experiment is being created.
+ *     the associated gateway identity can only be inferred from the security hand-shake so as to avoid
+ *     authorized Airavata Clients mimicking an unauthorized request. If a gateway is not registered with
+ *     Airavata, an authorization exception is thrown.
+ *
+ * experimentName:
+ *   The name of the experiment as defined by the user. The name need not be unique as uniqueness is enforced
+ *      by the generated experiment id.
+ *
+ * experimentDescription:
+ *    The verbose description of the experiment. This is an optional parameter.
+*/
+struct BasicMetadata {
+  1: required string userName,
+  2: required string experimentName,
+  3: optional string experimentDescription,
+  4: optional bool shareExperimentPublicly = 0
+}
+
+/**
+ * A structure holding the Computational Resource Scheduling.
+ *
+*/
+struct ComputationalResourceScheduling {
+  1:required bool airavataAutoSchedule = 1
+  2:required bool overrideManualScheduledParams = 0,
+  3:optional string resourceHostId,
+  4:optional i32 totalCPUCount,
+  5:optional i32 nodeCount,
+  6:optional i32 numberOfThreads,
+  7:optional string queueName,
+  8:optional i32 wallTimeLimit,
+  9:optional i32 jobStartTime,
+  10:optional i32 totalPhysicalMemory,
+  11:optional string ComputationalProjectAccount
+}
+
+/**
+ * A structure holding specified input data handling.
+ *
+*/
+struct AdvancedInputDataHandling {
+    1:optional bool stageInputFilesToWorkingDir = 0,
+    2: optional string workingDirectoryParent,
+    3: optional string uniqueWorkingDirectory,
+    4: optional bool cleanUpWorkingDirAfterJob = 0
+}
+
+/**
+ * A structure holding specified output data handling.
+ *
+*/
+struct AdvancedOutputDataHandling {
+    2:optional string outputdataDir,
+    3:optional string dataRegistryURL,
+    4:optional bool persistOutputData = 1
+}
+
+/**
+ * A structure holding Quality of Service Parameters.
+ *
+*/
+struct QualityOfServiceParams {
+    1:optional string startExecutionAt,
+    2:optional string executeBefore,
+    3:optional i32 numberofRetries,
+}
+
+/**
+ * A structure holding the experiment configuration.
+ *
+ *
+*/
+struct ConfigurationData {
+  1: optional BasicMetadata basicMetadata,
+  2: optional string applicationId,
+  3: optional string applicationVersion,
+  4: optional string workflowTemplateId,
+  5: optional string worklfowTemplateVersion,
+  6: optional map<string,string> experimentInputs,
+  7: optional ComputationalResourceScheduling computationalResourceScheduling,
+  8: optional AdvancedInputDataHandling advanceInputDataHandling,
+  9: optional AdvancedOutputDataHandling advanceOutputDataHandling,
+  10: optional QualityOfServiceParams qosParams
+}

http://git-wip-us.apache.org/repos/asf/airavata/blob/3070c3d9/modules/airavata-api/client-sdks/pom.xml
----------------------------------------------------------------------
diff --git a/modules/airavata-api/client-sdks/pom.xml b/modules/airavata-api/client-sdks/pom.xml
deleted file mode 100644
index 71a6cbb..0000000
--- a/modules/airavata-api/client-sdks/pom.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file
-    distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under
-    the Apache License, Version 2.0 (theÏ "License"); you may not use this file except in compliance with the License. You may
-    obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to
-    in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
-    ANY ~ KIND, either express or implied. See the License for the specific language governing permissions and limitations under
-    the License. -->
-
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <parent>
-        <artifactId>airavata-api</artifactId>
-        <groupId>org.apache.airavata</groupId>
-        <version>0.12-SNAPSHOT</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-    <modelVersion>4.0.0</modelVersion>
-
-    <artifactId>airavata-client-sdks</artifactId>
-    <packaging>jar</packaging>
-    <name>Airavata Client SDKS</name>
-    <url>http://airavata.apache.org/</url>
-
-</project>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata/blob/3070c3d9/modules/airavata-api/datamodel/pom.xml
----------------------------------------------------------------------
diff --git a/modules/airavata-api/datamodel/pom.xml b/modules/airavata-api/datamodel/pom.xml
deleted file mode 100644
index 10b0173..0000000
--- a/modules/airavata-api/datamodel/pom.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<!--Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file
-    distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under
-    the Apache License, Version 2.0 (theÏ "License"); you may not use this file except in compliance with the License. You may
-    obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to
-    in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
-    ANY ~ KIND, either express or implied. See the License for the specific language governing permissions and limitations under
-    the License. -->
-
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <parent>
-        <artifactId>airavata-api</artifactId>
-        <groupId>org.apache.airavata</groupId>
-        <version>0.12-SNAPSHOT</version>
-        <relativePath>../pom.xml</relativePath>
-    </parent>
-
-    <modelVersion>4.0.0</modelVersion>
-    <artifactId>airavata-datamodel</artifactId>
-    <packaging>jar</packaging>
-    <name>Airavata Data Models </name>
-    <url>http://airavata.apache.org/</url>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.apache.thrift</groupId>
-            <artifactId>libthrift</artifactId>
-            <version>0.9.1</version>
-        </dependency>
-        <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-log4j12</artifactId>
-            <version>1.7.5</version>
-        </dependency>
-    </dependencies>
-
-</project>