Return-Path: X-Original-To: apmail-airavata-commits-archive@www.apache.org Delivered-To: apmail-airavata-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id DE532189A1 for ; Tue, 12 Jan 2016 22:04:13 +0000 (UTC) Received: (qmail 52023 invoked by uid 500); 12 Jan 2016 22:04:13 -0000 Delivered-To: apmail-airavata-commits-archive@airavata.apache.org Received: (qmail 51902 invoked by uid 500); 12 Jan 2016 22:04:13 -0000 Mailing-List: contact commits-help@airavata.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@airavata.apache.org Delivered-To: mailing list commits@airavata.apache.org Received: (qmail 50894 invoked by uid 99); 12 Jan 2016 22:04:12 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 12 Jan 2016 22:04:12 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id 7EEF1E2C87; Tue, 12 Jan 2016 22:04:12 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: scnakandala@apache.org To: commits@airavata.apache.org Date: Tue, 12 Jan 2016 22:04:33 -0000 Message-Id: In-Reply-To: <0ddf603810a24a07bcb905b58fe50766@git.apache.org> References: <0ddf603810a24a07bcb905b58fe50766@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: [22/50] [abbrv] airavata git commit: using experiment data directory when copying output data using experiment data directory when copying output data Project: http://git-wip-us.apache.org/repos/asf/airavata/repo Commit: http://git-wip-us.apache.org/repos/asf/airavata/commit/2fe5278f Tree: http://git-wip-us.apache.org/repos/asf/airavata/tree/2fe5278f Diff: http://git-wip-us.apache.org/repos/asf/airavata/diff/2fe5278f Branch: refs/heads/data-manager Commit: 2fe5278f52522c907908d22cc005f411701b9920 Parents: 531cbdf Author: scnakandala Authored: Wed Jan 6 13:10:29 2016 -0500 Committer: scnakandala Committed: Wed Jan 6 13:10:29 2016 -0500 ---------------------------------------------------------------------- .../lib/airavata/process_model_types.cpp | 22 ++++ .../lib/airavata/process_model_types.h | 12 +- .../lib/Airavata/Model/Process/Types.php | 23 ++++ .../lib/apache/airavata/model/process/ttypes.py | 15 ++- .../airavata/model/process/ProcessModel.java | 114 ++++++++++++++++++- .../model/util/ExperimentModelUtil.java | 1 + .../gfac/impl/task/SCPDataStageTask.java | 17 ++- .../catalog/impl/ExperimentRegistry.java | 2 + .../core/experiment/catalog/model/Process.java | 10 ++ .../catalog/resources/ProcessResource.java | 10 ++ .../utils/ThriftDataModelConversion.java | 1 + .../src/main/resources/expcatalog-derby.sql | 1 + .../src/main/resources/expcatalog-mysql.sql | 1 + .../process_model.thrift | 3 +- 14 files changed, 222 insertions(+), 10 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/airavata/blob/2fe5278f/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/process_model_types.cpp ---------------------------------------------------------------------- diff --git a/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/process_model_types.cpp b/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/process_model_types.cpp index b01eb50..629b78f 100644 --- a/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/process_model_types.cpp +++ b/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/process_model_types.cpp @@ -138,6 +138,11 @@ void ProcessModel::__set_generateCert(const bool val) { __isset.generateCert = true; } +void ProcessModel::__set_experimentDataDir(const std::string& val) { + this->experimentDataDir = val; +__isset.experimentDataDir = true; +} + uint32_t ProcessModel::read(::apache::thrift::protocol::TProtocol* iprot) { apache::thrift::protocol::TInputRecursionTracker tracker(*iprot); @@ -377,6 +382,14 @@ uint32_t ProcessModel::read(::apache::thrift::protocol::TProtocol* iprot) { xfer += iprot->skip(ftype); } break; + case 22: + if (ftype == ::apache::thrift::protocol::T_STRING) { + xfer += iprot->readString(this->experimentDataDir); + this->__isset.experimentDataDir = true; + } else { + xfer += iprot->skip(ftype); + } + break; default: xfer += iprot->skip(ftype); break; @@ -533,6 +546,11 @@ uint32_t ProcessModel::write(::apache::thrift::protocol::TProtocol* oprot) const xfer += oprot->writeBool(this->generateCert); xfer += oprot->writeFieldEnd(); } + if (this->__isset.experimentDataDir) { + xfer += oprot->writeFieldBegin("experimentDataDir", ::apache::thrift::protocol::T_STRING, 22); + xfer += oprot->writeString(this->experimentDataDir); + xfer += oprot->writeFieldEnd(); + } xfer += oprot->writeFieldStop(); xfer += oprot->writeStructEnd(); return xfer; @@ -561,6 +579,7 @@ void swap(ProcessModel &a, ProcessModel &b) { swap(a.storageResourceId, b.storageResourceId); swap(a.userDn, b.userDn); swap(a.generateCert, b.generateCert); + swap(a.experimentDataDir, b.experimentDataDir); swap(a.__isset, b.__isset); } @@ -586,6 +605,7 @@ ProcessModel::ProcessModel(const ProcessModel& other24) { storageResourceId = other24.storageResourceId; userDn = other24.userDn; generateCert = other24.generateCert; + experimentDataDir = other24.experimentDataDir; __isset = other24.__isset; } ProcessModel& ProcessModel::operator=(const ProcessModel& other25) { @@ -610,6 +630,7 @@ ProcessModel& ProcessModel::operator=(const ProcessModel& other25) { storageResourceId = other25.storageResourceId; userDn = other25.userDn; generateCert = other25.generateCert; + experimentDataDir = other25.experimentDataDir; __isset = other25.__isset; return *this; } @@ -637,6 +658,7 @@ void ProcessModel::printTo(std::ostream& out) const { out << ", " << "storageResourceId="; (__isset.storageResourceId ? (out << to_string(storageResourceId)) : (out << "")); out << ", " << "userDn="; (__isset.userDn ? (out << to_string(userDn)) : (out << "")); out << ", " << "generateCert="; (__isset.generateCert ? (out << to_string(generateCert)) : (out << "")); + out << ", " << "experimentDataDir="; (__isset.experimentDataDir ? (out << to_string(experimentDataDir)) : (out << "")); out << ")"; } http://git-wip-us.apache.org/repos/asf/airavata/blob/2fe5278f/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/process_model_types.h ---------------------------------------------------------------------- diff --git a/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/process_model_types.h b/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/process_model_types.h index 10515d0..efa30d1 100644 --- a/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/process_model_types.h +++ b/airavata-api/airavata-client-sdks/airavata-cpp-sdk/src/main/resources/lib/airavata/process_model_types.h @@ -44,7 +44,7 @@ namespace apache { namespace airavata { namespace model { namespace process { class ProcessModel; typedef struct _ProcessModel__isset { - _ProcessModel__isset() : creationTime(false), lastUpdateTime(false), processStatus(false), processDetail(false), applicationInterfaceId(false), applicationDeploymentId(false), computeResourceId(false), processInputs(false), processOutputs(false), resourceSchedule(false), tasks(false), taskDag(false), processError(false), gatewayExecutionId(false), enableEmailNotification(false), emailAddresses(false), storageResourceId(false), userDn(false), generateCert(true) {} + _ProcessModel__isset() : creationTime(false), lastUpdateTime(false), processStatus(false), processDetail(false), applicationInterfaceId(false), applicationDeploymentId(false), computeResourceId(false), processInputs(false), processOutputs(false), resourceSchedule(false), tasks(false), taskDag(false), processError(false), gatewayExecutionId(false), enableEmailNotification(false), emailAddresses(false), storageResourceId(false), userDn(false), generateCert(true), experimentDataDir(false) {} bool creationTime :1; bool lastUpdateTime :1; bool processStatus :1; @@ -64,6 +64,7 @@ typedef struct _ProcessModel__isset { bool storageResourceId :1; bool userDn :1; bool generateCert :1; + bool experimentDataDir :1; } _ProcessModel__isset; class ProcessModel { @@ -71,7 +72,7 @@ class ProcessModel { ProcessModel(const ProcessModel&); ProcessModel& operator=(const ProcessModel&); - ProcessModel() : processId("DO_NOT_SET_AT_CLIENTS"), experimentId(), creationTime(0), lastUpdateTime(0), processDetail(), applicationInterfaceId(), applicationDeploymentId(), computeResourceId(), taskDag(), gatewayExecutionId(), enableEmailNotification(0), storageResourceId(), userDn(), generateCert(false) { + ProcessModel() : processId("DO_NOT_SET_AT_CLIENTS"), experimentId(), creationTime(0), lastUpdateTime(0), processDetail(), applicationInterfaceId(), applicationDeploymentId(), computeResourceId(), taskDag(), gatewayExecutionId(), enableEmailNotification(0), storageResourceId(), userDn(), generateCert(false), experimentDataDir() { } virtual ~ProcessModel() throw(); @@ -96,6 +97,7 @@ class ProcessModel { std::string storageResourceId; std::string userDn; bool generateCert; + std::string experimentDataDir; _ProcessModel__isset __isset; @@ -141,6 +143,8 @@ class ProcessModel { void __set_generateCert(const bool val); + void __set_experimentDataDir(const std::string& val); + bool operator == (const ProcessModel & rhs) const { if (!(processId == rhs.processId)) @@ -223,6 +227,10 @@ class ProcessModel { return false; else if (__isset.generateCert && !(generateCert == rhs.generateCert)) return false; + if (__isset.experimentDataDir != rhs.__isset.experimentDataDir) + return false; + else if (__isset.experimentDataDir && !(experimentDataDir == rhs.experimentDataDir)) + return false; return true; } bool operator != (const ProcessModel &rhs) const { http://git-wip-us.apache.org/repos/asf/airavata/blob/2fe5278f/airavata-api/airavata-client-sdks/airavata-php-sdk/src/main/resources/lib/Airavata/Model/Process/Types.php ---------------------------------------------------------------------- diff --git a/airavata-api/airavata-client-sdks/airavata-php-sdk/src/main/resources/lib/Airavata/Model/Process/Types.php b/airavata-api/airavata-client-sdks/airavata-php-sdk/src/main/resources/lib/Airavata/Model/Process/Types.php index 120c078..c0000d0 100644 --- a/airavata-api/airavata-client-sdks/airavata-php-sdk/src/main/resources/lib/Airavata/Model/Process/Types.php +++ b/airavata-api/airavata-client-sdks/airavata-php-sdk/src/main/resources/lib/Airavata/Model/Process/Types.php @@ -113,6 +113,10 @@ class ProcessModel { * @var bool */ public $generateCert = false; + /** + * @var string + */ + public $experimentDataDir = null; public function __construct($vals=null) { if (!isset(self::$_TSPEC)) { @@ -223,6 +227,10 @@ class ProcessModel { 'var' => 'generateCert', 'type' => TType::BOOL, ), + 22 => array( + 'var' => 'experimentDataDir', + 'type' => TType::STRING, + ), ); } if (is_array($vals)) { @@ -289,6 +297,9 @@ class ProcessModel { if (isset($vals['generateCert'])) { $this->generateCert = $vals['generateCert']; } + if (isset($vals['experimentDataDir'])) { + $this->experimentDataDir = $vals['experimentDataDir']; + } } } @@ -504,6 +515,13 @@ class ProcessModel { $xfer += $input->skip($ftype); } break; + case 22: + if ($ftype == TType::STRING) { + $xfer += $input->readString($this->experimentDataDir); + } else { + $xfer += $input->skip($ftype); + } + break; default: $xfer += $input->skip($ftype); break; @@ -679,6 +697,11 @@ class ProcessModel { $xfer += $output->writeBool($this->generateCert); $xfer += $output->writeFieldEnd(); } + if ($this->experimentDataDir !== null) { + $xfer += $output->writeFieldBegin('experimentDataDir', TType::STRING, 22); + $xfer += $output->writeString($this->experimentDataDir); + $xfer += $output->writeFieldEnd(); + } $xfer += $output->writeFieldStop(); $xfer += $output->writeStructEnd(); return $xfer; http://git-wip-us.apache.org/repos/asf/airavata/blob/2fe5278f/airavata-api/airavata-client-sdks/airavata-python-sdk/src/main/resources/lib/apache/airavata/model/process/ttypes.py ---------------------------------------------------------------------- diff --git a/airavata-api/airavata-client-sdks/airavata-python-sdk/src/main/resources/lib/apache/airavata/model/process/ttypes.py b/airavata-api/airavata-client-sdks/airavata-python-sdk/src/main/resources/lib/apache/airavata/model/process/ttypes.py index 802d6a7..7355759 100644 --- a/airavata-api/airavata-client-sdks/airavata-python-sdk/src/main/resources/lib/apache/airavata/model/process/ttypes.py +++ b/airavata-api/airavata-client-sdks/airavata-python-sdk/src/main/resources/lib/apache/airavata/model/process/ttypes.py @@ -55,6 +55,7 @@ class ProcessModel: - storageResourceId - userDn - generateCert + - experimentDataDir """ thrift_spec = ( @@ -80,9 +81,10 @@ class ProcessModel: (19, TType.STRING, 'storageResourceId', None, None, ), # 19 (20, TType.STRING, 'userDn', None, None, ), # 20 (21, TType.BOOL, 'generateCert', None, False, ), # 21 + (22, TType.STRING, 'experimentDataDir', None, None, ), # 22 ) - def __init__(self, processId=thrift_spec[1][4], experimentId=None, creationTime=None, lastUpdateTime=None, processStatus=None, processDetail=None, applicationInterfaceId=None, applicationDeploymentId=None, computeResourceId=None, processInputs=None, processOutputs=None, resourceSchedule=None, tasks=None, taskDag=None, processError=None, gatewayExecutionId=None, enableEmailNotification=None, emailAddresses=None, storageResourceId=None, userDn=None, generateCert=thrift_spec[21][4],): + def __init__(self, processId=thrift_spec[1][4], experimentId=None, creationTime=None, lastUpdateTime=None, processStatus=None, processDetail=None, applicationInterfaceId=None, applicationDeploymentId=None, computeResourceId=None, processInputs=None, processOutputs=None, resourceSchedule=None, tasks=None, taskDag=None, processError=None, gatewayExecutionId=None, enableEmailNotification=None, emailAddresses=None, storageResourceId=None, userDn=None, generateCert=thrift_spec[21][4], experimentDataDir=None,): self.processId = processId self.experimentId = experimentId self.creationTime = creationTime @@ -104,6 +106,7 @@ class ProcessModel: self.storageResourceId = storageResourceId self.userDn = userDn self.generateCert = generateCert + self.experimentDataDir = experimentDataDir def read(self, iprot): if iprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None and fastbinary is not None: @@ -245,6 +248,11 @@ class ProcessModel: self.generateCert = iprot.readBool() else: iprot.skip(ftype) + elif fid == 22: + if ftype == TType.STRING: + self.experimentDataDir = iprot.readString() + else: + iprot.skip(ftype) else: iprot.skip(ftype) iprot.readFieldEnd() @@ -351,6 +359,10 @@ class ProcessModel: oprot.writeFieldBegin('generateCert', TType.BOOL, 21) oprot.writeBool(self.generateCert) oprot.writeFieldEnd() + if self.experimentDataDir is not None: + oprot.writeFieldBegin('experimentDataDir', TType.STRING, 22) + oprot.writeString(self.experimentDataDir) + oprot.writeFieldEnd() oprot.writeFieldStop() oprot.writeStructEnd() @@ -385,6 +397,7 @@ class ProcessModel: value = (value * 31) ^ hash(self.storageResourceId) value = (value * 31) ^ hash(self.userDn) value = (value * 31) ^ hash(self.generateCert) + value = (value * 31) ^ hash(self.experimentDataDir) return value def __repr__(self): http://git-wip-us.apache.org/repos/asf/airavata/blob/2fe5278f/airavata-api/airavata-data-models/src/main/java/org/apache/airavata/model/process/ProcessModel.java ---------------------------------------------------------------------- diff --git a/airavata-api/airavata-data-models/src/main/java/org/apache/airavata/model/process/ProcessModel.java b/airavata-api/airavata-data-models/src/main/java/org/apache/airavata/model/process/ProcessModel.java index 232d45c..ebd4158 100644 --- a/airavata-api/airavata-data-models/src/main/java/org/apache/airavata/model/process/ProcessModel.java +++ b/airavata-api/airavata-data-models/src/main/java/org/apache/airavata/model/process/ProcessModel.java @@ -85,6 +85,7 @@ public class ProcessModel implements org.apache.thrift.TBase, SchemeFactory> schemes = new HashMap, SchemeFactory>(); static { @@ -113,6 +114,7 @@ public class ProcessModel implements org.apache.thrift.TBase byName = new HashMap(); @@ -193,6 +196,8 @@ public class ProcessModel implements org.apache.thrift.TBase metaDataMap; static { Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class); @@ -288,6 +293,8 @@ public class ProcessModel implements org.apache.thrift.TBase processErrors; private Collection processInputs; @@ -193,6 +194,15 @@ public class Process { this.generateCert = generateCert; } + @Column(name = "EXPERIMENT_DATA_DIR") + public String getExperimentDataDir() { + return experimentDataDir; + } + + public void setExperimentDataDir(String experimentDataDir) { + this.experimentDataDir = experimentDataDir; + } + // @Override // public boolean equals(Object o) { // if (this == o) return true; http://git-wip-us.apache.org/repos/asf/airavata/blob/2fe5278f/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/resources/ProcessResource.java ---------------------------------------------------------------------- diff --git a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/resources/ProcessResource.java b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/resources/ProcessResource.java index 2934552..e1720de 100644 --- a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/resources/ProcessResource.java +++ b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/resources/ProcessResource.java @@ -55,6 +55,7 @@ public class ProcessResource extends AbstractExpCatResource { private String storageResourceId; private String userDn; private boolean generateCert; + private String experimentDataDir; public String getProcessId() { return processId; @@ -176,6 +177,14 @@ public class ProcessResource extends AbstractExpCatResource { this.generateCert = generateCert; } + public String getExperimentDataDir() { + return experimentDataDir; + } + + public void setExperimentDataDir(String experimentDataDir) { + this.experimentDataDir = experimentDataDir; + } + public ExperimentCatResource create(ResourceType type) throws RegistryException{ switch (type){ case PROCESS_ERROR: @@ -580,6 +589,7 @@ public class ProcessResource extends AbstractExpCatResource { process.setStorageId(storageResourceId); process.setUserDn(userDn); process.setGenerateCert(generateCert); + process.setExperimentDataDir(experimentDataDir); if (existingProcess == null){ em.persist(process); }else { http://git-wip-us.apache.org/repos/asf/airavata/blob/2fe5278f/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/utils/ThriftDataModelConversion.java ---------------------------------------------------------------------- diff --git a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/utils/ThriftDataModelConversion.java b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/utils/ThriftDataModelConversion.java index dc9bfde..1ecc37b 100644 --- a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/utils/ThriftDataModelConversion.java +++ b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/utils/ThriftDataModelConversion.java @@ -349,6 +349,7 @@ public class ThriftDataModelConversion { processModel.setApplicationDeploymentId(processResource.getApplicationDeploymentId()); processModel.setComputeResourceId(processResource.getComputeResourceId()); processModel.setEnableEmailNotification(processResource.getEnableEmailNotification()); + processModel.setExperimentDataDir(processResource.getExperimentDataDir()); if (processModel.isEnableEmailNotification()){ String notificationEmails = processResource.getEmailAddresses(); processModel.setEmailAddresses(getEmailAddresses(notificationEmails.split(","))); http://git-wip-us.apache.org/repos/asf/airavata/blob/2fe5278f/modules/registry/registry-core/src/main/resources/expcatalog-derby.sql ---------------------------------------------------------------------- diff --git a/modules/registry/registry-core/src/main/resources/expcatalog-derby.sql b/modules/registry/registry-core/src/main/resources/expcatalog-derby.sql index 603c921..c395b94 100644 --- a/modules/registry/registry-core/src/main/resources/expcatalog-derby.sql +++ b/modules/registry/registry-core/src/main/resources/expcatalog-derby.sql @@ -192,6 +192,7 @@ CREATE TABLE PROCESS ( STORAGE_RESOURCE_ID varchar(255), USER_DN varchar(255), GENERATE_CERT SMALLINT, + EXPERIMENT_DATA_DIR VARCHAR (512), PRIMARY KEY (PROCESS_ID), FOREIGN KEY (EXPERIMENT_ID) REFERENCES EXPERIMENT(EXPERIMENT_ID) ON DELETE CASCADE ); http://git-wip-us.apache.org/repos/asf/airavata/blob/2fe5278f/modules/registry/registry-core/src/main/resources/expcatalog-mysql.sql ---------------------------------------------------------------------- diff --git a/modules/registry/registry-core/src/main/resources/expcatalog-mysql.sql b/modules/registry/registry-core/src/main/resources/expcatalog-mysql.sql index 1bb170a..b3dcf43 100644 --- a/modules/registry/registry-core/src/main/resources/expcatalog-mysql.sql +++ b/modules/registry/registry-core/src/main/resources/expcatalog-mysql.sql @@ -196,6 +196,7 @@ CREATE TABLE PROCESS ( STORAGE_RESOURCE_ID varchar(255), USER_DN varchar(255), GENERATE_CERT SMALLINT, + EXPERIMENT_DATA_DIR VARCHAR (512), PRIMARY KEY (PROCESS_ID), FOREIGN KEY (EXPERIMENT_ID) REFERENCES EXPERIMENT(EXPERIMENT_ID) ON DELETE CASCADE ); http://git-wip-us.apache.org/repos/asf/airavata/blob/2fe5278f/thrift-interface-descriptions/data-models/experiment-catalog-models/process_model.thrift ---------------------------------------------------------------------- diff --git a/thrift-interface-descriptions/data-models/experiment-catalog-models/process_model.thrift b/thrift-interface-descriptions/data-models/experiment-catalog-models/process_model.thrift index 66c5f93..d46a7f4 100644 --- a/thrift-interface-descriptions/data-models/experiment-catalog-models/process_model.thrift +++ b/thrift-interface-descriptions/data-models/experiment-catalog-models/process_model.thrift @@ -60,5 +60,6 @@ struct ProcessModel { 18: optional list emailAddresses, 19: optional string storageResourceId, 20: optional string userDn, - 21: optional bool generateCert = 0 + 21: optional bool generateCert = 0, + 22: optional string experimentDataDir } \ No newline at end of file