@Override
    public boolean equals(Object o) {
        if (this == o) {
            return true;
        }
        if (o == null || getClass() != o.getClass()) {
            return false;
        }
        Task task = (Task) o;
        return getRetryCount() == task.getRetryCount()
                && getSeq() == task.getSeq()
                && getPollCount() == task.getPollCount()
                && getScheduledTime() == task.getScheduledTime()
                && getStartTime() == task.getStartTime()
                && getEndTime() == task.getEndTime()
                && getUpdateTime() == task.getUpdateTime()
                && getStartDelayInSeconds() == task.getStartDelayInSeconds()
                && isRetried() == task.isRetried()
                && isExecuted() == task.isExecuted()
                && isCallbackFromWorker() == task.isCallbackFromWorker()
                && getResponseTimeoutSeconds() == task.getResponseTimeoutSeconds()
                && getCallbackAfterSeconds() == task.getCallbackAfterSeconds()
                && getRateLimitPerFrequency() == task.getRateLimitPerFrequency()
                && getRateLimitFrequencyInSeconds() == task.getRateLimitFrequencyInSeconds()
                && Objects.equals(getTaskType(), task.getTaskType())
                && getStatus() == task.getStatus()
                && getIteration() == task.getIteration()
                && getWorkflowPriority() == task.getWorkflowPriority()
                && Objects.equals(getInputData(), task.getInputData())
                && Objects.equals(getReferenceTaskName(), task.getReferenceTaskName())
                && Objects.equals(getCorrelationId(), task.getCorrelationId())
                && Objects.equals(getTaskDefName(), task.getTaskDefName())
                && Objects.equals(getRetriedTaskId(), task.getRetriedTaskId())
                && Objects.equals(getWorkflowInstanceId(), task.getWorkflowInstanceId())
                && Objects.equals(getWorkflowType(), task.getWorkflowType())
                && Objects.equals(getTaskId(), task.getTaskId())
                && Objects.equals(getReasonForIncompletion(), task.getReasonForIncompletion())
                && Objects.equals(getWorkerId(), task.getWorkerId())
                && Objects.equals(getOutputData(), task.getOutputData())
                && Objects.equals(getWorkflowTask(), task.getWorkflowTask())
                && Objects.equals(getDomain(), task.getDomain())
                && Objects.equals(getInputMessage(), task.getInputMessage())
                && Objects.equals(getOutputMessage(), task.getOutputMessage())
                && Objects.equals(
                        getExternalInputPayloadStoragePath(),
                        task.getExternalInputPayloadStoragePath())
                && Objects.equals(
                        getExternalOutputPayloadStoragePath(),
                        task.getExternalOutputPayloadStoragePath())
                && Objects.equals(getIsolationGroupId(), task.getIsolationGroupId())
                && Objects.equals(getExecutionNameSpace(), task.getExecutionNameSpace());
    }
@return a deep copy of the task instance To be used inside copy Workflow method to provide a
    valid deep copied object. Note: This does not copy the following fields:
    <ul>
      <li>retried
      <li>updateTime
      <li>retriedTaskId
    </ul>
common/src/main/java/com/netflix/conductor/common/metadata/tasks/Task.java