|
|
@ -2424,7 +2424,12 @@ public class ProcessServiceImpl implements ProcessService { |
|
|
|
// Create a waiting taskGroupQueue, after acquire resource, we can update the status to ACQUIRE_SUCCESS
|
|
|
|
// Create a waiting taskGroupQueue, after acquire resource, we can update the status to ACQUIRE_SUCCESS
|
|
|
|
TaskGroupQueue taskGroupQueue = this.taskGroupQueueMapper.queryByTaskId(taskId); |
|
|
|
TaskGroupQueue taskGroupQueue = this.taskGroupQueueMapper.queryByTaskId(taskId); |
|
|
|
if (taskGroupQueue == null) { |
|
|
|
if (taskGroupQueue == null) { |
|
|
|
taskGroupQueue = insertIntoTaskGroupQueue(taskId, taskName, groupId, processId, priority, |
|
|
|
taskGroupQueue = insertIntoTaskGroupQueue( |
|
|
|
|
|
|
|
taskId, |
|
|
|
|
|
|
|
taskName, |
|
|
|
|
|
|
|
groupId, |
|
|
|
|
|
|
|
processId, |
|
|
|
|
|
|
|
priority, |
|
|
|
TaskGroupQueueStatus.WAIT_QUEUE); |
|
|
|
TaskGroupQueueStatus.WAIT_QUEUE); |
|
|
|
} else { |
|
|
|
} else { |
|
|
|
logger.info("The task queue is already exist, taskId: {}", taskId); |
|
|
|
logger.info("The task queue is already exist, taskId: {}", taskId); |
|
|
@ -2436,7 +2441,9 @@ public class ProcessServiceImpl implements ProcessService { |
|
|
|
this.taskGroupQueueMapper.updateById(taskGroupQueue); |
|
|
|
this.taskGroupQueueMapper.updateById(taskGroupQueue); |
|
|
|
} |
|
|
|
} |
|
|
|
// check if there already exist higher priority tasks
|
|
|
|
// check if there already exist higher priority tasks
|
|
|
|
List<TaskGroupQueue> highPriorityTasks = taskGroupQueueMapper.queryHighPriorityTasks(groupId, priority, |
|
|
|
List<TaskGroupQueue> highPriorityTasks = taskGroupQueueMapper.queryHighPriorityTasks( |
|
|
|
|
|
|
|
groupId, |
|
|
|
|
|
|
|
priority, |
|
|
|
TaskGroupQueueStatus.WAIT_QUEUE.getCode()); |
|
|
|
TaskGroupQueueStatus.WAIT_QUEUE.getCode()); |
|
|
|
if (CollectionUtils.isNotEmpty(highPriorityTasks)) { |
|
|
|
if (CollectionUtils.isNotEmpty(highPriorityTasks)) { |
|
|
|
return false; |
|
|
|
return false; |
|
|
@ -2457,20 +2464,27 @@ public class ProcessServiceImpl implements ProcessService { |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
@Override |
|
|
|
@Override |
|
|
|
public boolean robTaskGroupResource(TaskGroupQueue taskGroupQueue) { |
|
|
|
public boolean robTaskGroupResource(TaskGroupQueue taskGroupQueue) { |
|
|
|
TaskGroup taskGroup = taskGroupMapper.selectById(taskGroupQueue.getGroupId()); |
|
|
|
// set the default max size to avoid dead loop
|
|
|
|
int affectedCount = taskGroupMapper.updateTaskGroupResource(taskGroup.getId(), |
|
|
|
for (int i = 0; i < 10; i++) { |
|
|
|
taskGroupQueue.getId(), |
|
|
|
TaskGroup taskGroup = taskGroupMapper.selectById(taskGroupQueue.getGroupId()); |
|
|
|
TaskGroupQueueStatus.WAIT_QUEUE.getCode()); |
|
|
|
if (taskGroup.getGroupSize() <= taskGroup.getUseSize()) { |
|
|
|
if (affectedCount > 0) { |
|
|
|
logger.info("The current task Group is full, taskGroup: {}", taskGroup); |
|
|
|
logger.info("Success rob taskGroup, taskInstanceId: {}, taskGroupId: {}", taskGroupQueue.getTaskId(), |
|
|
|
return false; |
|
|
|
taskGroupQueue.getId()); |
|
|
|
} |
|
|
|
taskGroupQueue.setStatus(TaskGroupQueueStatus.ACQUIRE_SUCCESS); |
|
|
|
int affectedCount = taskGroupMapper.robTaskGroupResource(taskGroup.getId(), |
|
|
|
this.taskGroupQueueMapper.updateById(taskGroupQueue); |
|
|
|
taskGroup.getUseSize(), |
|
|
|
this.taskGroupQueueMapper.updateInQueue(Flag.NO.getCode(), taskGroupQueue.getId()); |
|
|
|
taskGroupQueue.getId(), |
|
|
|
return true; |
|
|
|
TaskGroupQueueStatus.WAIT_QUEUE.getCode()); |
|
|
|
|
|
|
|
if (affectedCount > 0) { |
|
|
|
|
|
|
|
logger.info("Success rob taskGroup, taskInstanceId: {}, taskGroupId: {}", taskGroupQueue.getTaskId(), |
|
|
|
|
|
|
|
taskGroupQueue.getId()); |
|
|
|
|
|
|
|
taskGroupQueue.setStatus(TaskGroupQueueStatus.ACQUIRE_SUCCESS); |
|
|
|
|
|
|
|
this.taskGroupQueueMapper.updateById(taskGroupQueue); |
|
|
|
|
|
|
|
this.taskGroupQueueMapper.updateInQueue(Flag.NO.getCode(), taskGroupQueue.getId()); |
|
|
|
|
|
|
|
return true; |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
logger.info("Failed to rob taskGroup, taskInstanceId: {}, taskGroupId: {}", taskGroupQueue.getTaskId(), |
|
|
|
logger.info("Failed to rob taskGroup, taskGroupQueue: {}", taskGroupQueue); |
|
|
|
taskGroupQueue.getId()); |
|
|
|
|
|
|
|
return false; |
|
|
|
return false; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -2551,23 +2565,24 @@ public class ProcessServiceImpl implements ProcessService { |
|
|
|
taskGroupQueueMapper.updateById(taskGroupQueue); |
|
|
|
taskGroupQueueMapper.updateById(taskGroupQueue); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
@Override |
|
|
|
* insert into task group queue |
|
|
|
public TaskGroupQueue insertIntoTaskGroupQueue(Integer taskInstanceId, |
|
|
|
* |
|
|
|
String taskName, |
|
|
|
* @param taskId task id |
|
|
|
Integer taskGroupId, |
|
|
|
* @param taskName task name |
|
|
|
Integer workflowInstanceId, |
|
|
|
* @param groupId group id |
|
|
|
Integer taskGroupPriority, |
|
|
|
* @param processId process id |
|
|
|
TaskGroupQueueStatus status) { |
|
|
|
* @param priority priority |
|
|
|
Date now = new Date(); |
|
|
|
* @return inserted task group queue |
|
|
|
TaskGroupQueue taskGroupQueue = TaskGroupQueue.builder() |
|
|
|
*/ |
|
|
|
.taskId(taskInstanceId) |
|
|
|
@Override |
|
|
|
.taskName(taskName) |
|
|
|
public TaskGroupQueue insertIntoTaskGroupQueue(Integer taskId, |
|
|
|
.groupId(taskGroupId) |
|
|
|
String taskName, Integer groupId, |
|
|
|
.processId(workflowInstanceId) |
|
|
|
Integer processId, Integer priority, TaskGroupQueueStatus status) { |
|
|
|
.priority(taskGroupPriority) |
|
|
|
TaskGroupQueue taskGroupQueue = new TaskGroupQueue(taskId, taskName, groupId, processId, priority, status); |
|
|
|
.status(status) |
|
|
|
taskGroupQueue.setCreateTime(new Date()); |
|
|
|
.createTime(now) |
|
|
|
taskGroupQueue.setUpdateTime(new Date()); |
|
|
|
.updateTime(now) |
|
|
|
|
|
|
|
.build(); |
|
|
|
taskGroupQueueMapper.insert(taskGroupQueue); |
|
|
|
taskGroupQueueMapper.insert(taskGroupQueue); |
|
|
|
return taskGroupQueue; |
|
|
|
return taskGroupQueue; |
|
|
|
} |
|
|
|
} |
|
|
|