Skip to content

Commit 9a2b883

Browse files
author
gq47193
committed
[DS-7256][refactor] Optimization for task instances query
- assemble a Map<Long, User> outside of the loop instead of the query inside
1 parent 6beae19 commit 9a2b883

1 file changed

Lines changed: 6 additions & 4 deletions

File tree

dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/TaskInstanceServiceImpl.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
import java.util.List;
4141
import java.util.Map;
4242
import java.util.Set;
43+
import java.util.stream.Collectors;
4344

4445
import org.springframework.beans.factory.annotation.Autowired;
4546
import org.springframework.stereotype.Service;
@@ -132,12 +133,13 @@ public Result queryTaskListPaging(User loginUser,
132133
exclusionSet.add(Constants.CLASS);
133134
exclusionSet.add("taskJson");
134135
List<TaskInstance> taskInstanceList = taskInstanceIPage.getRecords();
135-
136+
List<Integer> executorIds = taskInstanceList.stream().map(TaskInstance::getExecutorId).distinct().collect(Collectors.toList());
137+
List<User> users = usersService.queryUser(executorIds);
138+
Map<Integer, User> userMap = users.stream().collect(Collectors.toMap(User::getId, v -> v));
136139
for (TaskInstance taskInstance : taskInstanceList) {
137140
taskInstance.setDuration(DateUtils.format2Duration(taskInstance.getStartTime(), taskInstance.getEndTime()));
138-
User executor = usersService.queryUser(taskInstance.getExecutorId());
139-
if (null != executor) {
140-
taskInstance.setExecutorName(executor.getUserName());
141+
if (userMap.containsKey(taskInstance.getExecutorId())) {
142+
taskInstance.setExecutorName(userMap.get(taskInstance.getExecutorId()).getUserName());
141143
}
142144
}
143145
pageInfo.setTotal((int) taskInstanceIPage.getTotal());

0 commit comments

Comments
 (0)