You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by di...@apache.org on 2019/01/23 22:43:40 UTC

[airavata] branch staging updated: Adding maxRetry and currentRetry count fields to task

This is an automated email from the ASF dual-hosted git repository.

dimuthuupe pushed a commit to branch staging
in repository https://gitbox.apache.org/repos/asf/airavata.git


The following commit(s) were added to refs/heads/staging by this push:
     new 7897c0a  Adding maxRetry and currentRetry count fields to task
7897c0a is described below

commit 7897c0a2eb8e9d26dad094ad93475bfbc34cbc6c
Author: Dimuthu Wannipurage <di...@gmail.com>
AuthorDate: Wed Jan 23 17:43:26 2019 -0500

    Adding maxRetry and currentRetry count fields to task
---
 .../org/apache/airavata/model/task/TaskModel.java  | 204 ++++++++++++++++++++-
 .../catalog/impl/ExperimentRegistry.java           |   4 +
 .../core/experiment/catalog/model/Task.java        |  22 ++-
 .../experiment/catalog/resources/TaskResource.java |  20 ++
 .../core/experiment/catalog/resources/Utils.java   |   2 +
 .../catalog/utils/ThriftDataModelConversion.java   |   2 +
 .../src/main/resources/expcatalog-derby.sql        |   2 +
 .../src/main/resources/expcatalog-mysql.sql        |   2 +
 .../DeltaScripts/expCatalog_schema_delta.sql       |  13 +-
 .../experiment-catalog-models/task_model.thrift    |   4 +-
 10 files changed, 268 insertions(+), 7 deletions(-)

diff --git a/airavata-api/airavata-data-models/src/main/java/org/apache/airavata/model/task/TaskModel.java b/airavata-api/airavata-data-models/src/main/java/org/apache/airavata/model/task/TaskModel.java
index 2c853b0..4966783 100644
--- a/airavata-api/airavata-data-models/src/main/java/org/apache/airavata/model/task/TaskModel.java
+++ b/airavata-api/airavata-data-models/src/main/java/org/apache/airavata/model/task/TaskModel.java
@@ -47,6 +47,8 @@ public class TaskModel implements org.apache.thrift.TBase<TaskModel, TaskModel._
   private static final org.apache.thrift.protocol.TField SUB_TASK_MODEL_FIELD_DESC = new org.apache.thrift.protocol.TField("subTaskModel", org.apache.thrift.protocol.TType.STRING, (short)8);
   private static final org.apache.thrift.protocol.TField TASK_ERRORS_FIELD_DESC = new org.apache.thrift.protocol.TField("taskErrors", org.apache.thrift.protocol.TType.LIST, (short)9);
   private static final org.apache.thrift.protocol.TField JOBS_FIELD_DESC = new org.apache.thrift.protocol.TField("jobs", org.apache.thrift.protocol.TType.LIST, (short)10);
+  private static final org.apache.thrift.protocol.TField MAX_RETRY_FIELD_DESC = new org.apache.thrift.protocol.TField("maxRetry", org.apache.thrift.protocol.TType.I32, (short)11);
+  private static final org.apache.thrift.protocol.TField CURRENT_RETRY_FIELD_DESC = new org.apache.thrift.protocol.TField("currentRetry", org.apache.thrift.protocol.TType.I32, (short)12);
 
   private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new TaskModelStandardSchemeFactory();
   private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new TaskModelTupleSchemeFactory();
@@ -61,6 +63,8 @@ public class TaskModel implements org.apache.thrift.TBase<TaskModel, TaskModel._
   private java.nio.ByteBuffer subTaskModel; // optional
   private java.util.List<org.apache.airavata.model.commons.ErrorModel> taskErrors; // optional
   private java.util.List<org.apache.airavata.model.job.JobModel> jobs; // optional
+  private int maxRetry; // optional
+  private int currentRetry; // optional
 
   /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
   public enum _Fields implements org.apache.thrift.TFieldIdEnum {
@@ -77,7 +81,9 @@ public class TaskModel implements org.apache.thrift.TBase<TaskModel, TaskModel._
     TASK_DETAIL((short)7, "taskDetail"),
     SUB_TASK_MODEL((short)8, "subTaskModel"),
     TASK_ERRORS((short)9, "taskErrors"),
-    JOBS((short)10, "jobs");
+    JOBS((short)10, "jobs"),
+    MAX_RETRY((short)11, "maxRetry"),
+    CURRENT_RETRY((short)12, "currentRetry");
 
     private static final java.util.Map<java.lang.String, _Fields> byName = new java.util.HashMap<java.lang.String, _Fields>();
 
@@ -112,6 +118,10 @@ public class TaskModel implements org.apache.thrift.TBase<TaskModel, TaskModel._
           return TASK_ERRORS;
         case 10: // JOBS
           return JOBS;
+        case 11: // MAX_RETRY
+          return MAX_RETRY;
+        case 12: // CURRENT_RETRY
+          return CURRENT_RETRY;
         default:
           return null;
       }
@@ -154,8 +164,10 @@ public class TaskModel implements org.apache.thrift.TBase<TaskModel, TaskModel._
   // isset id assignments
   private static final int __CREATIONTIME_ISSET_ID = 0;
   private static final int __LASTUPDATETIME_ISSET_ID = 1;
+  private static final int __MAXRETRY_ISSET_ID = 2;
+  private static final int __CURRENTRETRY_ISSET_ID = 3;
   private byte __isset_bitfield = 0;
-  private static final _Fields optionals[] = {_Fields.TASK_DETAIL,_Fields.SUB_TASK_MODEL,_Fields.TASK_ERRORS,_Fields.JOBS};
+  private static final _Fields optionals[] = {_Fields.TASK_DETAIL,_Fields.SUB_TASK_MODEL,_Fields.TASK_ERRORS,_Fields.JOBS,_Fields.MAX_RETRY,_Fields.CURRENT_RETRY};
   public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
   static {
     java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
@@ -182,6 +194,10 @@ public class TaskModel implements org.apache.thrift.TBase<TaskModel, TaskModel._
     tmpMap.put(_Fields.JOBS, new org.apache.thrift.meta_data.FieldMetaData("jobs", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
         new org.apache.thrift.meta_data.ListMetaData(org.apache.thrift.protocol.TType.LIST, 
             new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, org.apache.airavata.model.job.JobModel.class))));
+    tmpMap.put(_Fields.MAX_RETRY, new org.apache.thrift.meta_data.FieldMetaData("maxRetry", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
+        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I32)));
+    tmpMap.put(_Fields.CURRENT_RETRY, new org.apache.thrift.meta_data.FieldMetaData("currentRetry", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
+        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I32)));
     metaDataMap = java.util.Collections.unmodifiableMap(tmpMap);
     org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(TaskModel.class, metaDataMap);
   }
@@ -253,6 +269,8 @@ public class TaskModel implements org.apache.thrift.TBase<TaskModel, TaskModel._
       }
       this.jobs = __this__jobs;
     }
+    this.maxRetry = other.maxRetry;
+    this.currentRetry = other.currentRetry;
   }
 
   public TaskModel deepCopy() {
@@ -274,6 +292,10 @@ public class TaskModel implements org.apache.thrift.TBase<TaskModel, TaskModel._
     this.subTaskModel = null;
     this.taskErrors = null;
     this.jobs = null;
+    setMaxRetryIsSet(false);
+    this.maxRetry = 0;
+    setCurrentRetryIsSet(false);
+    this.currentRetry = 0;
   }
 
   public java.lang.String getTaskId() {
@@ -566,6 +588,50 @@ public class TaskModel implements org.apache.thrift.TBase<TaskModel, TaskModel._
     }
   }
 
+  public int getMaxRetry() {
+    return this.maxRetry;
+  }
+
+  public void setMaxRetry(int maxRetry) {
+    this.maxRetry = maxRetry;
+    setMaxRetryIsSet(true);
+  }
+
+  public void unsetMaxRetry() {
+    __isset_bitfield = org.apache.thrift.EncodingUtils.clearBit(__isset_bitfield, __MAXRETRY_ISSET_ID);
+  }
+
+  /** Returns true if field maxRetry is set (has been assigned a value) and false otherwise */
+  public boolean isSetMaxRetry() {
+    return org.apache.thrift.EncodingUtils.testBit(__isset_bitfield, __MAXRETRY_ISSET_ID);
+  }
+
+  public void setMaxRetryIsSet(boolean value) {
+    __isset_bitfield = org.apache.thrift.EncodingUtils.setBit(__isset_bitfield, __MAXRETRY_ISSET_ID, value);
+  }
+
+  public int getCurrentRetry() {
+    return this.currentRetry;
+  }
+
+  public void setCurrentRetry(int currentRetry) {
+    this.currentRetry = currentRetry;
+    setCurrentRetryIsSet(true);
+  }
+
+  public void unsetCurrentRetry() {
+    __isset_bitfield = org.apache.thrift.EncodingUtils.clearBit(__isset_bitfield, __CURRENTRETRY_ISSET_ID);
+  }
+
+  /** Returns true if field currentRetry is set (has been assigned a value) and false otherwise */
+  public boolean isSetCurrentRetry() {
+    return org.apache.thrift.EncodingUtils.testBit(__isset_bitfield, __CURRENTRETRY_ISSET_ID);
+  }
+
+  public void setCurrentRetryIsSet(boolean value) {
+    __isset_bitfield = org.apache.thrift.EncodingUtils.setBit(__isset_bitfield, __CURRENTRETRY_ISSET_ID, value);
+  }
+
   public void setFieldValue(_Fields field, java.lang.Object value) {
     switch (field) {
     case TASK_ID:
@@ -652,6 +718,22 @@ public class TaskModel implements org.apache.thrift.TBase<TaskModel, TaskModel._
       }
       break;
 
+    case MAX_RETRY:
+      if (value == null) {
+        unsetMaxRetry();
+      } else {
+        setMaxRetry((java.lang.Integer)value);
+      }
+      break;
+
+    case CURRENT_RETRY:
+      if (value == null) {
+        unsetCurrentRetry();
+      } else {
+        setCurrentRetry((java.lang.Integer)value);
+      }
+      break;
+
     }
   }
 
@@ -687,6 +769,12 @@ public class TaskModel implements org.apache.thrift.TBase<TaskModel, TaskModel._
     case JOBS:
       return getJobs();
 
+    case MAX_RETRY:
+      return getMaxRetry();
+
+    case CURRENT_RETRY:
+      return getCurrentRetry();
+
     }
     throw new java.lang.IllegalStateException();
   }
@@ -718,6 +806,10 @@ public class TaskModel implements org.apache.thrift.TBase<TaskModel, TaskModel._
       return isSetTaskErrors();
     case JOBS:
       return isSetJobs();
+    case MAX_RETRY:
+      return isSetMaxRetry();
+    case CURRENT_RETRY:
+      return isSetCurrentRetry();
     }
     throw new java.lang.IllegalStateException();
   }
@@ -827,6 +919,24 @@ public class TaskModel implements org.apache.thrift.TBase<TaskModel, TaskModel._
         return false;
     }
 
+    boolean this_present_maxRetry = true && this.isSetMaxRetry();
+    boolean that_present_maxRetry = true && that.isSetMaxRetry();
+    if (this_present_maxRetry || that_present_maxRetry) {
+      if (!(this_present_maxRetry && that_present_maxRetry))
+        return false;
+      if (this.maxRetry != that.maxRetry)
+        return false;
+    }
+
+    boolean this_present_currentRetry = true && this.isSetCurrentRetry();
+    boolean that_present_currentRetry = true && that.isSetCurrentRetry();
+    if (this_present_currentRetry || that_present_currentRetry) {
+      if (!(this_present_currentRetry && that_present_currentRetry))
+        return false;
+      if (this.currentRetry != that.currentRetry)
+        return false;
+    }
+
     return true;
   }
 
@@ -870,6 +980,14 @@ public class TaskModel implements org.apache.thrift.TBase<TaskModel, TaskModel._
     if (isSetJobs())
       hashCode = hashCode * 8191 + jobs.hashCode();
 
+    hashCode = hashCode * 8191 + ((isSetMaxRetry()) ? 131071 : 524287);
+    if (isSetMaxRetry())
+      hashCode = hashCode * 8191 + maxRetry;
+
+    hashCode = hashCode * 8191 + ((isSetCurrentRetry()) ? 131071 : 524287);
+    if (isSetCurrentRetry())
+      hashCode = hashCode * 8191 + currentRetry;
+
     return hashCode;
   }
 
@@ -981,6 +1099,26 @@ public class TaskModel implements org.apache.thrift.TBase<TaskModel, TaskModel._
         return lastComparison;
       }
     }
+    lastComparison = java.lang.Boolean.valueOf(isSetMaxRetry()).compareTo(other.isSetMaxRetry());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetMaxRetry()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.maxRetry, other.maxRetry);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    lastComparison = java.lang.Boolean.valueOf(isSetCurrentRetry()).compareTo(other.isSetCurrentRetry());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetCurrentRetry()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.currentRetry, other.currentRetry);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
     return 0;
   }
 
@@ -1080,6 +1218,18 @@ public class TaskModel implements org.apache.thrift.TBase<TaskModel, TaskModel._
       }
       first = false;
     }
+    if (isSetMaxRetry()) {
+      if (!first) sb.append(", ");
+      sb.append("maxRetry:");
+      sb.append(this.maxRetry);
+      first = false;
+    }
+    if (isSetCurrentRetry()) {
+      if (!first) sb.append(", ");
+      sb.append("currentRetry:");
+      sb.append(this.currentRetry);
+      first = false;
+    }
     sb.append(")");
     return sb.toString();
   }
@@ -1262,6 +1412,22 @@ public class TaskModel implements org.apache.thrift.TBase<TaskModel, TaskModel._
               org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
             }
             break;
+          case 11: // MAX_RETRY
+            if (schemeField.type == org.apache.thrift.protocol.TType.I32) {
+              struct.maxRetry = iprot.readI32();
+              struct.setMaxRetryIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
+          case 12: // CURRENT_RETRY
+            if (schemeField.type == org.apache.thrift.protocol.TType.I32) {
+              struct.currentRetry = iprot.readI32();
+              struct.setCurrentRetryIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
           default:
             org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
         }
@@ -1350,6 +1516,16 @@ public class TaskModel implements org.apache.thrift.TBase<TaskModel, TaskModel._
           oprot.writeFieldEnd();
         }
       }
+      if (struct.isSetMaxRetry()) {
+        oprot.writeFieldBegin(MAX_RETRY_FIELD_DESC);
+        oprot.writeI32(struct.maxRetry);
+        oprot.writeFieldEnd();
+      }
+      if (struct.isSetCurrentRetry()) {
+        oprot.writeFieldBegin(CURRENT_RETRY_FIELD_DESC);
+        oprot.writeI32(struct.currentRetry);
+        oprot.writeFieldEnd();
+      }
       oprot.writeFieldStop();
       oprot.writeStructEnd();
     }
@@ -1392,7 +1568,13 @@ public class TaskModel implements org.apache.thrift.TBase<TaskModel, TaskModel._
       if (struct.isSetJobs()) {
         optionals.set(3);
       }
-      oprot.writeBitSet(optionals, 4);
+      if (struct.isSetMaxRetry()) {
+        optionals.set(4);
+      }
+      if (struct.isSetCurrentRetry()) {
+        optionals.set(5);
+      }
+      oprot.writeBitSet(optionals, 6);
       if (struct.isSetTaskDetail()) {
         oprot.writeString(struct.taskDetail);
       }
@@ -1417,6 +1599,12 @@ public class TaskModel implements org.apache.thrift.TBase<TaskModel, TaskModel._
           }
         }
       }
+      if (struct.isSetMaxRetry()) {
+        oprot.writeI32(struct.maxRetry);
+      }
+      if (struct.isSetCurrentRetry()) {
+        oprot.writeI32(struct.currentRetry);
+      }
     }
 
     @Override
@@ -1444,7 +1632,7 @@ public class TaskModel implements org.apache.thrift.TBase<TaskModel, TaskModel._
         }
       }
       struct.setTaskStatusesIsSet(true);
-      java.util.BitSet incoming = iprot.readBitSet(4);
+      java.util.BitSet incoming = iprot.readBitSet(6);
       if (incoming.get(0)) {
         struct.taskDetail = iprot.readString();
         struct.setTaskDetailIsSet(true);
@@ -1481,6 +1669,14 @@ public class TaskModel implements org.apache.thrift.TBase<TaskModel, TaskModel._
         }
         struct.setJobsIsSet(true);
       }
+      if (incoming.get(4)) {
+        struct.maxRetry = iprot.readI32();
+        struct.setMaxRetryIsSet(true);
+      }
+      if (incoming.get(5)) {
+        struct.currentRetry = iprot.readI32();
+        struct.setCurrentRetryIsSet(true);
+      }
     }
   }
 
diff --git a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/impl/ExperimentRegistry.java b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/impl/ExperimentRegistry.java
index 1be8514..35e912f 100644
--- a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/impl/ExperimentRegistry.java
+++ b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/impl/ExperimentRegistry.java
@@ -467,6 +467,8 @@ public class ExperimentRegistry {
             taskResource.setLastUpdateTime(AiravataUtils.getTime(task.getLastUpdateTime()));
             taskResource.setTaskDetail(task.getTaskDetail());
             taskResource.setSubTaskModel(task.getSubTaskModel());
+            taskResource.setMaxRetry(task.getMaxRetry());
+            taskResource.setCurrentRetry(task.getCurrentRetry());
             taskResource.save();
 
             TaskStatus taskStatus = new TaskStatus();
@@ -930,6 +932,8 @@ public class ExperimentRegistry {
             taskResource.setLastUpdateTime(AiravataUtils.getTime(task.getLastUpdateTime()));
             taskResource.setTaskDetail(task.getTaskDetail());
             taskResource.setSubTaskModel(task.getSubTaskModel());
+            taskResource.setMaxRetry(task.getMaxRetry());
+            taskResource.setCurrentRetry(task.getCurrentRetry());
             taskResource.save();
 
             if(task.getTaskErrors() != null) {
diff --git a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/model/Task.java b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/model/Task.java
index 898b30b..c1be37a 100644
--- a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/model/Task.java
+++ b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/model/Task.java
@@ -41,6 +41,8 @@ public class Task {
     private Process process;
     private Collection<TaskError> taskErrors;
     private Collection<TaskStatus> taskStatuses;
+    private int maxRetry;
+    private int currentRetry;
 
     @Id
     @Column(name = "TASK_ID")
@@ -107,7 +109,25 @@ public class Task {
         this.setSubTaskModel = taskInternalStore;
     }
 
-//    @Override
+    @Column(name = "MAX_RETRY")
+    public int getMaxRetry() {
+        return maxRetry;
+    }
+
+    public void setMaxRetry(int maxRetry) {
+        this.maxRetry = maxRetry;
+    }
+
+    @Column(name = "CURRENT_RETRY")
+    public int getCurrentRetry() {
+        return currentRetry;
+    }
+
+    public void setCurrentRetry(int currentRetry) {
+        this.currentRetry = currentRetry;
+    }
+
+    //    @Override
 //    public boolean equals(Object o) {
 //        if (this == o) return true;
 //        if (o == null || getClass() != o.getClass()) return false;
diff --git a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/resources/TaskResource.java b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/resources/TaskResource.java
index 32acf5f..0b85371 100644
--- a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/resources/TaskResource.java
+++ b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/resources/TaskResource.java
@@ -47,6 +47,8 @@ public class TaskResource extends AbstractExpCatResource {
     private Timestamp lastUpdateTime;
     private String taskDetail;
     private byte[] subTaskModel;
+    private int maxRetry;
+    private int currentRetry;
 
     public String getTaskId() {
         return taskId;
@@ -104,6 +106,22 @@ public class TaskResource extends AbstractExpCatResource {
         this.subTaskModel = subTaskModel;
     }
 
+    public int getMaxRetry() {
+        return maxRetry;
+    }
+
+    public void setMaxRetry(int maxRetry) {
+        this.maxRetry = maxRetry;
+    }
+
+    public int getCurrentRetry() {
+        return currentRetry;
+    }
+
+    public void setCurrentRetry(int currentRetry) {
+        this.currentRetry = currentRetry;
+    }
+
     public ExperimentCatResource create(ResourceType type) throws RegistryException {
         switch (type){
             case TASK_STATUS:
@@ -360,6 +378,8 @@ public class TaskResource extends AbstractExpCatResource {
             task.setLastUpdateTime(lastUpdateTime);
             task.setTaskDetail(taskDetail);
             task.setSetSubTaskModel(subTaskModel);
+            task.setCurrentRetry(currentRetry);
+            task.setMaxRetry(maxRetry);
             if (existingTask == null){
                 em.persist(task);
             }else {
diff --git a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/resources/Utils.java b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/resources/Utils.java
index a727bad..603ca55 100644
--- a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/resources/Utils.java
+++ b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/resources/Utils.java
@@ -656,6 +656,8 @@ public class Utils {
             taskResource.setLastUpdateTime(o.getLastUpdateTime());
             taskResource.setTaskDetail(o.getTaskDetail());
             taskResource.setSubTaskModel(o.getSetSubTaskModel());
+            taskResource.setMaxRetry(o.getMaxRetry());
+            taskResource.setCurrentRetry(o.getCurrentRetry());
         }
         return taskResource;
     }
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 750b490..bcf9349 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
@@ -452,6 +452,8 @@ public class ThriftDataModelConversion {
         model.setLastUpdateTime(taskResource.getLastUpdateTime().getTime());
         model.setTaskDetail(taskResource.getTaskDetail());
         model.setSubTaskModel(taskResource.getSubTaskModel());
+        model.setMaxRetry(taskResource.getMaxRetry());
+        model.setCurrentRetry(taskResource.getCurrentRetry());
 
         TaskStatus taskStatus = getTaskStatus(taskResource.getTaskStatus());
         if (taskStatus != null){
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 57d72d6..8e2f1be 100644
--- a/modules/registry/registry-core/src/main/resources/expcatalog-derby.sql
+++ b/modules/registry/registry-core/src/main/resources/expcatalog-derby.sql
@@ -319,6 +319,8 @@ CREATE TABLE TASK (
   LAST_UPDATE_TIME timestamp DEFAULT CURRENT_TIMESTAMP,
   TASK_DETAIL CLOB,
   TASK_INTERNAL_STORE CHAR,
+  MAX_RETRY int(11) NOT NULL DEFAULT '3',
+  CURRENT_RETRY int(11) NOT NULL DEFAULT '0',
   PRIMARY KEY (TASK_ID),
   FOREIGN KEY (PARENT_PROCESS_ID) REFERENCES PROCESS(PROCESS_ID) ON DELETE CASCADE
 );
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 6b07069..0ed247b 100644
--- a/modules/registry/registry-core/src/main/resources/expcatalog-mysql.sql
+++ b/modules/registry/registry-core/src/main/resources/expcatalog-mysql.sql
@@ -322,6 +322,8 @@ CREATE TABLE TASK (
   LAST_UPDATE_TIME TIMESTAMP DEFAULT '0000-00-00 00:00:00',
   TASK_DETAIL text,
   TASK_INTERNAL_STORE tinyint(4),
+  MAX_RETRY int(11) NOT NULL DEFAULT '3',
+  CURRENT_RETRY int(11) NOT NULL DEFAULT '0',
   PRIMARY KEY (TASK_ID),
   FOREIGN KEY (PARENT_PROCESS_ID) REFERENCES PROCESS(PROCESS_ID) ON DELETE CASCADE
 );
diff --git a/modules/registry/release-migration-scripts/0.16-0.17/DeltaScripts/expCatalog_schema_delta.sql b/modules/registry/release-migration-scripts/0.16-0.17/DeltaScripts/expCatalog_schema_delta.sql
index 984089e..636c8fa 100644
--- a/modules/registry/release-migration-scripts/0.16-0.17/DeltaScripts/expCatalog_schema_delta.sql
+++ b/modules/registry/release-migration-scripts/0.16-0.17/DeltaScripts/expCatalog_schema_delta.sql
@@ -43,4 +43,15 @@ ALTER TABLE `USERS` CHANGE `AIRAVATA_INTERNAL_USER_ID` `AIRAVATA_INTERNAL_USER_I
 ALTER TABLE `EXPERIMENT_STATUS` CHANGE `TIME_OF_STATE_CHANGE` `TIME_OF_STATE_CHANGE` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6);
 ALTER TABLE `NOTIFICATION` CHANGE `NOTIFICATION_MESSAGE` `NOTIFICATION_MESSAGE` varchar(4096) NOT NULL;
 ALTER TABLE `JOB_STATUS` CHANGE `TIME_OF_STATE_CHANGE` `TIME_OF_STATE_CHANGE` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;
-ALTER TABLE `USERS` ADD UNIQUE KEY `AIRAVATA_INTERNAL_USER_ID` (`AIRAVATA_INTERNAL_USER_ID`);
\ No newline at end of file
+ALTER TABLE `USERS` ADD UNIQUE KEY `AIRAVATA_INTERNAL_USER_ID` (`AIRAVATA_INTERNAL_USER_ID`);
+
+CREATE TABLE PROCESS_WORKFLOW
+(
+  PROCESS_ID varchar(255) NOT NULL,
+  WORKFLOW_ID varchar(255) NOT NULL,
+  TYPE varchar(255) DEFAULT NULL,
+  CREATION_TIME timestamp DEFAULT NOW()
+) ENGINE=InnoDB DEFAULT CHARSET=latin1;
+
+ALTER TABLE `TASK` ADD `MAX_RETRY` int(11) NOT NULL DEFAULT '3';
+ALTER TABLE `TASK` ADD `CURRENT_RETRY` int(11) NOT NULL DEFAULT '0';
\ No newline at end of file
diff --git a/thrift-interface-descriptions/data-models/experiment-catalog-models/task_model.thrift b/thrift-interface-descriptions/data-models/experiment-catalog-models/task_model.thrift
index e7b8fed..f6c1087 100644
--- a/thrift-interface-descriptions/data-models/experiment-catalog-models/task_model.thrift
+++ b/thrift-interface-descriptions/data-models/experiment-catalog-models/task_model.thrift
@@ -62,7 +62,9 @@ struct TaskModel {
     7: optional string taskDetail,
     8: optional binary subTaskModel,
     9: optional list<airavata_commons.ErrorModel> taskErrors,
-    10: optional list<job_model.JobModel> jobs
+    10: optional list<job_model.JobModel> jobs,
+    11: optional i32 maxRetry,
+    12: optional i32 currentRetry,
 }
 
 /**