|
|
|
@ -73,11 +73,6 @@ public class StateWheelExecuteThread extends BaseDaemonThread {
|
|
|
|
|
*/ |
|
|
|
|
private final ConcurrentLinkedQueue<TaskInstanceKey> taskInstanceRetryCheckList = new ConcurrentLinkedQueue<>(); |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* task state check list |
|
|
|
|
*/ |
|
|
|
|
private final ConcurrentLinkedQueue<TaskInstanceKey> taskInstanceStateCheckList = new ConcurrentLinkedQueue<>(); |
|
|
|
|
|
|
|
|
|
@Autowired |
|
|
|
|
private MasterConfig masterConfig; |
|
|
|
|
|
|
|
|
@ -104,7 +99,6 @@ public class StateWheelExecuteThread extends BaseDaemonThread {
|
|
|
|
|
try { |
|
|
|
|
checkTask4Timeout(); |
|
|
|
|
checkTask4Retry(); |
|
|
|
|
checkTask4State(); |
|
|
|
|
checkProcess4Timeout(); |
|
|
|
|
} catch (Exception e) { |
|
|
|
|
log.error("state wheel thread check error:", e); |
|
|
|
@ -214,30 +208,10 @@ public class StateWheelExecuteThread extends BaseDaemonThread {
|
|
|
|
|
log.info("remove task instance from retry check list"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public void addTask4StateCheck(@NonNull ProcessInstance processInstance, @NonNull TaskInstance taskInstance) { |
|
|
|
|
log.info("Adding task instance into state check list"); |
|
|
|
|
TaskInstanceKey taskInstanceKey = TaskInstanceKey.getTaskInstanceKey(processInstance, taskInstance); |
|
|
|
|
if (taskInstanceStateCheckList.contains(taskInstanceKey)) { |
|
|
|
|
log.warn("Task instance is already in state check list"); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
if (taskInstance.isDependTask() || taskInstance.isSubProcess()) { |
|
|
|
|
taskInstanceStateCheckList.add(taskInstanceKey); |
|
|
|
|
log.info("Added task instance into state check list"); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public void removeTask4StateCheck(@NonNull ProcessInstance processInstance, @NonNull TaskInstance taskInstance) { |
|
|
|
|
TaskInstanceKey taskInstanceKey = TaskInstanceKey.getTaskInstanceKey(processInstance, taskInstance); |
|
|
|
|
taskInstanceStateCheckList.remove(taskInstanceKey); |
|
|
|
|
log.info("Removed task instance from state check list"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public void clearAllTasks() { |
|
|
|
|
processInstanceTimeoutCheckList.clear(); |
|
|
|
|
taskInstanceTimeoutCheckList.clear(); |
|
|
|
|
taskInstanceRetryCheckList.clear(); |
|
|
|
|
taskInstanceStateCheckList.clear(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void checkTask4Timeout() { |
|
|
|
@ -352,56 +326,6 @@ public class StateWheelExecuteThread extends BaseDaemonThread {
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void checkTask4State() { |
|
|
|
|
if (taskInstanceStateCheckList.isEmpty()) { |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
for (TaskInstanceKey taskInstanceKey : taskInstanceStateCheckList) { |
|
|
|
|
int processInstanceId = taskInstanceKey.getProcessInstanceId(); |
|
|
|
|
long taskCode = taskInstanceKey.getTaskCode(); |
|
|
|
|
|
|
|
|
|
try { |
|
|
|
|
LogUtils.setTaskInstanceIdMDC(processInstanceId); |
|
|
|
|
WorkflowExecuteRunnable workflowExecuteThread = |
|
|
|
|
processInstanceExecCacheManager.getByProcessInstanceId(processInstanceId); |
|
|
|
|
if (workflowExecuteThread == null) { |
|
|
|
|
log.warn( |
|
|
|
|
"Task instance state check failed, can not find workflowExecuteThread from cache manager, will remove this check task"); |
|
|
|
|
taskInstanceStateCheckList.remove(taskInstanceKey); |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
Optional<TaskInstance> taskInstanceOptional = |
|
|
|
|
workflowExecuteThread.getActiveTaskInstanceByTaskCode(taskCode); |
|
|
|
|
if (!taskInstanceOptional.isPresent()) { |
|
|
|
|
log.warn( |
|
|
|
|
"Task instance state check failed, can not find taskInstance from workflowExecuteThread, will remove this check event"); |
|
|
|
|
taskInstanceStateCheckList.remove(taskInstanceKey); |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
TaskInstance taskInstance = taskInstanceOptional.get(); |
|
|
|
|
if (taskInstance.getState().isFinished()) { |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
addTaskStateChangeEvent(taskInstance); |
|
|
|
|
} catch (Exception ex) { |
|
|
|
|
log.error("Task state check error, taskInstanceKey: {}", taskInstanceKey, ex); |
|
|
|
|
} finally { |
|
|
|
|
LogUtils.removeWorkflowInstanceIdMDC(); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void addTaskStateChangeEvent(TaskInstance taskInstance) { |
|
|
|
|
TaskStateEvent stateEvent = TaskStateEvent.builder() |
|
|
|
|
.processInstanceId(taskInstance.getProcessInstanceId()) |
|
|
|
|
.taskInstanceId(taskInstance.getId()) |
|
|
|
|
.taskCode(taskInstance.getTaskCode()) |
|
|
|
|
.type(StateEventType.TASK_STATE_CHANGE) |
|
|
|
|
.status(TaskExecutionStatus.RUNNING_EXECUTION) |
|
|
|
|
.build(); |
|
|
|
|
workflowExecuteThreadPool.submitStateEvent(stateEvent); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void addProcessStopEvent(ProcessInstance processInstance) { |
|
|
|
|
WorkflowStateEvent stateEvent = WorkflowStateEvent.builder() |
|
|
|
|
.processInstanceId(processInstance.getId()) |
|
|
|
|