@Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        TaskModel taskModel = (TaskModel) o;
        return getRetryCount() == taskModel.getRetryCount()
                && getSeq() == taskModel.getSeq()
                && getPollCount() == taskModel.getPollCount()
                && getScheduledTime() == taskModel.getScheduledTime()
                && getStartTime() == taskModel.getStartTime()
                && getEndTime() == taskModel.getEndTime()
                && getUpdateTime() == taskModel.getUpdateTime()
                && getStartDelayInSeconds() == taskModel.getStartDelayInSeconds()
                && isRetried() == taskModel.isRetried()
                && isExecuted() == taskModel.isExecuted()
                && isCallbackFromWorker() == taskModel.isCallbackFromWorker()
                && getResponseTimeoutSeconds() == taskModel.getResponseTimeoutSeconds()
                && getCallbackAfterSeconds() == taskModel.getCallbackAfterSeconds()
                && getRateLimitPerFrequency() == taskModel.getRateLimitPerFrequency()
                && getRateLimitFrequencyInSeconds() == taskModel.getRateLimitFrequencyInSeconds()
                && getWorkflowPriority() == taskModel.getWorkflowPriority()
                && getIteration() == taskModel.getIteration()
                && isSubworkflowChanged() == taskModel.isSubworkflowChanged()
                && Objects.equals(getTaskType(), taskModel.getTaskType())
                && getStatus() == taskModel.getStatus()
                && Objects.equals(getInputData(), taskModel.getInputData())
                && Objects.equals(getReferenceTaskName(), taskModel.getReferenceTaskName())
                && Objects.equals(getCorrelationId(), taskModel.getCorrelationId())
                && Objects.equals(getTaskDefName(), taskModel.getTaskDefName())
                && Objects.equals(getRetriedTaskId(), taskModel.getRetriedTaskId())
                && Objects.equals(getWorkflowInstanceId(), taskModel.getWorkflowInstanceId())
                && Objects.equals(getWorkflowType(), taskModel.getWorkflowType())
                && Objects.equals(getTaskId(), taskModel.getTaskId())
                && Objects.equals(getReasonForIncompletion(), taskModel.getReasonForIncompletion())
                && Objects.equals(getWorkerId(), taskModel.getWorkerId())
                && Objects.equals(getWaitTimeout(), taskModel.getWaitTimeout())
                && Objects.equals(outputData, taskModel.outputData)
                && Objects.equals(outputPayload, taskModel.outputPayload)
                && Objects.equals(getWorkflowTask(), taskModel.getWorkflowTask())
                && Objects.equals(getDomain(), taskModel.getDomain())
                && Objects.equals(getInputMessage(), taskModel.getInputMessage())
                && Objects.equals(getOutputMessage(), taskModel.getOutputMessage())
                && Objects.equals(
                        getExternalInputPayloadStoragePath(),
                        taskModel.getExternalInputPayloadStoragePath())
                && Objects.equals(
                        getExternalOutputPayloadStoragePath(),
                        taskModel.getExternalOutputPayloadStoragePath())
                && Objects.equals(getExecutionNameSpace(), taskModel.getExecutionNameSpace())
                && Objects.equals(getIsolationGroupId(), taskModel.getIsolationGroupId())
                && Objects.equals(getSubWorkflowId(), taskModel.getSubWorkflowId());
    }
@return a copy of the task instance
core/src/main/java/com/netflix/conductor/model/TaskModel.java