Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
apache
DolphinScheduler
提交
0bdfa0cf
DolphinScheduler
项目概览
apache
/
DolphinScheduler
上一次同步 1 年多
通知
704
Star
9572
Fork
3514
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
DolphinScheduler
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
未验证
提交
0bdfa0cf
编写于
6月 17, 2022
作者:
W
Wenjun Ruan
提交者:
GitHub
6月 17, 2022
1
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fix PeerTaskInstancePriorityQueue cannot contains method use taskInstanceId to check (#10491)
上级
f1a9c0d8
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
29 addition
and
11 deletion
+29
-11
dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/WorkflowExecuteRunnable.java
...heduler/server/master/runner/WorkflowExecuteRunnable.java
+1
-1
dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/queue/PeerTaskInstancePriorityQueue.java
...cheduler/service/queue/PeerTaskInstancePriorityQueue.java
+22
-10
dolphinscheduler-service/src/test/java/org/apache/dolphinscheduler/service/queue/PeerTaskInstancePriorityQueueTest.java
...uler/service/queue/PeerTaskInstancePriorityQueueTest.java
+6
-0
未找到文件。
dolphinscheduler-master/src/main/java/org/apache/dolphinscheduler/server/master/runner/WorkflowExecuteRunnable.java
浏览文件 @
0bdfa0cf
...
...
@@ -1103,7 +1103,7 @@ public class WorkflowExecuteRunnable implements Runnable {
}
/**
* encapsulation task
* encapsulation task
, this method will only create a new task instance, the return task instance will not contain id.
*
* @param processInstance process instance
* @param taskNode taskNode
...
...
dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/queue/PeerTaskInstancePriorityQueue.java
浏览文件 @
0bdfa0cf
...
...
@@ -29,6 +29,8 @@ import java.util.PriorityQueue;
import
java.util.Set
;
import
java.util.concurrent.TimeUnit
;
import
com.google.common.base.Preconditions
;
/**
* Task instances priority queue implementation
* All the task instances are in the same process instance.
...
...
@@ -43,7 +45,7 @@ public class PeerTaskInstancePriorityQueue implements TaskPriorityQueue<TaskInst
* queue
*/
private
final
PriorityQueue
<
TaskInstance
>
queue
=
new
PriorityQueue
<>(
QUEUE_MAX_SIZE
,
new
TaskInfoComparator
());
private
final
Set
<
Integer
>
taskInstanceId
Set
=
Collections
.
synchronizedSet
(
new
HashSet
<>());
private
final
Set
<
String
>
taskInstanceIdentify
Set
=
Collections
.
synchronizedSet
(
new
HashSet
<>());
/**
* put task instance to priority queue
...
...
@@ -53,8 +55,9 @@ public class PeerTaskInstancePriorityQueue implements TaskPriorityQueue<TaskInst
*/
@Override
public
void
put
(
TaskInstance
taskInstance
)
throws
TaskPriorityQueueException
{
Preconditions
.
checkNotNull
(
taskInstance
);
queue
.
add
(
taskInstance
);
taskInstanceId
Set
.
add
(
taskInstance
.
getId
(
));
taskInstanceId
entifySet
.
add
(
getTaskInstanceIdentify
(
taskInstance
));
}
/**
...
...
@@ -67,7 +70,7 @@ public class PeerTaskInstancePriorityQueue implements TaskPriorityQueue<TaskInst
public
TaskInstance
take
()
throws
TaskPriorityQueueException
{
TaskInstance
taskInstance
=
queue
.
poll
();
if
(
taskInstance
!=
null
)
{
taskInstanceId
Set
.
remove
(
taskInstance
.
getId
(
));
taskInstanceId
entifySet
.
remove
(
getTaskInstanceIdentify
(
taskInstance
));
}
return
taskInstance
;
}
...
...
@@ -114,7 +117,7 @@ public class PeerTaskInstancePriorityQueue implements TaskPriorityQueue<TaskInst
*/
public
void
clear
()
{
queue
.
clear
();
taskInstanceIdSet
.
clear
();
taskInstanceId
entify
Set
.
clear
();
}
/**
...
...
@@ -124,11 +127,8 @@ public class PeerTaskInstancePriorityQueue implements TaskPriorityQueue<TaskInst
* @return true is contains
*/
public
boolean
contains
(
TaskInstance
taskInstance
)
{
return
this
.
contains
(
taskInstance
.
getId
());
}
public
boolean
contains
(
int
taskInstanceId
)
{
return
taskInstanceIdSet
.
contains
(
taskInstanceId
);
Preconditions
.
checkNotNull
(
taskInstance
);
return
taskInstanceIdentifySet
.
contains
(
getTaskInstanceIdentify
(
taskInstance
));
}
/**
...
...
@@ -138,6 +138,8 @@ public class PeerTaskInstancePriorityQueue implements TaskPriorityQueue<TaskInst
* @return true if remove success
*/
public
boolean
remove
(
TaskInstance
taskInstance
)
{
Preconditions
.
checkNotNull
(
taskInstance
);
taskInstanceIdentifySet
.
remove
(
getTaskInstanceIdentify
(
taskInstance
));
return
queue
.
remove
(
taskInstance
);
}
...
...
@@ -150,10 +152,20 @@ public class PeerTaskInstancePriorityQueue implements TaskPriorityQueue<TaskInst
return
queue
.
iterator
();
}
// since the task instance will not contain taskInstanceId until insert into database
// So we use processInstanceId + taskCode + version to identify a taskInstance.
private
String
getTaskInstanceIdentify
(
TaskInstance
taskInstance
)
{
return
String
.
join
(
String
.
valueOf
(
taskInstance
.
getProcessInstanceId
()),
String
.
valueOf
(
taskInstance
.
getTaskCode
()),
String
.
valueOf
(
taskInstance
.
getTaskDefinitionVersion
())
,
"-"
);
}
/**
* TaskInfoComparator
*/
private
class
TaskInfoComparator
implements
Comparator
<
TaskInstance
>
{
private
static
class
TaskInfoComparator
implements
Comparator
<
TaskInstance
>
{
/**
* compare o1 o2
...
...
dolphinscheduler-service/src/test/java/org/apache/dolphinscheduler/service/queue/PeerTaskInstancePriorityQueueTest.java
浏览文件 @
0bdfa0cf
...
...
@@ -36,6 +36,8 @@ public class PeerTaskInstancePriorityQueueTest {
queue
.
put
(
taskInstanceHigPriority
);
queue
.
put
(
taskInstanceMediumPriority
);
Assert
.
assertEquals
(
2
,
queue
.
size
());
Assert
.
assertTrue
(
queue
.
contains
(
taskInstanceHigPriority
));
Assert
.
assertTrue
(
queue
.
contains
(
taskInstanceMediumPriority
));
}
@Test
...
...
@@ -108,6 +110,9 @@ public class PeerTaskInstancePriorityQueueTest {
TaskInstance
taskInstanceMediumPriority
=
createTaskInstance
(
"medium"
,
Priority
.
MEDIUM
,
1
);
queue
.
put
(
taskInstanceMediumPriority
);
Assert
.
assertTrue
(
queue
.
contains
(
taskInstanceMediumPriority
));
TaskInstance
taskInstance2
=
createTaskInstance
(
"medium2"
,
Priority
.
MEDIUM
,
1
);
taskInstance2
.
setProcessInstanceId
(
2
);
Assert
.
assertFalse
(
queue
.
contains
(
taskInstance2
));
}
@Test
...
...
@@ -118,6 +123,7 @@ public class PeerTaskInstancePriorityQueueTest {
int
peekBeforeLength
=
queue
.
size
();
queue
.
remove
(
taskInstanceMediumPriority
);
Assert
.
assertNotEquals
(
peekBeforeLength
,
queue
.
size
());
Assert
.
assertFalse
(
queue
.
contains
(
taskInstanceMediumPriority
));
}
/**
...
...
GitCode官方
@csdn_codechina
mentioned in commit
9a590546
·
9月 10, 2022
mentioned in commit
9a590546
mentioned in commit 9a590546552e198394e98865c143d639d59ea253
开关提交列表
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录