Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
DolphinScheduler社区
DolphinScheduler
提交
06927c2c
DolphinScheduler
项目概览
DolphinScheduler社区
/
DolphinScheduler
与 Fork 源项目一致
Fork自
apache / DolphinScheduler
通知
67
Star
1
Fork
0
代码
文件
提交
分支
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 搜索 >>
提交
06927c2c
编写于
2月 20, 2020
作者:
Q
qiaozhanwei
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
master/worker basic communication
上级
c39e5112
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
50 addition
and
25 deletion
+50
-25
dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/runner/MasterBaseTaskExecThread.java
...eduler/server/master/runner/MasterBaseTaskExecThread.java
+2
-1
dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/WorkerServer.java
...g/apache/dolphinscheduler/server/worker/WorkerServer.java
+2
-3
dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/processor/CallbackChannel.java
...hinscheduler/server/worker/processor/CallbackChannel.java
+9
-1
dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/processor/TaskCallbackService.java
...cheduler/server/worker/processor/TaskCallbackService.java
+2
-2
dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/processor/WorkerRequestProcessor.java
...duler/server/worker/processor/WorkerRequestProcessor.java
+30
-12
dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/runner/TaskScheduleThread.java
...hinscheduler/server/worker/runner/TaskScheduleThread.java
+5
-6
未找到文件。
dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/master/runner/MasterBaseTaskExecThread.java
浏览文件 @
06927c2c
...
...
@@ -121,7 +121,7 @@ public class MasterBaseTaskExecThread implements Callable<Boolean> {
// TODO send task to worker
public
void
sendToWorker
(
String
taskInstanceJson
){
final
Address
address
=
new
Address
(
"1
92.168.220.247
"
,
12346
);
final
Address
address
=
new
Address
(
"1
27.0.0.1
"
,
12346
);
ExecuteTaskRequestCommand
command
=
new
ExecuteTaskRequestCommand
(
taskInstanceJson
);
try
{
Command
response
=
nettyRemotingClient
.
sendSync
(
address
,
command
.
convert2Command
(),
Integer
.
MAX_VALUE
);
...
...
@@ -155,6 +155,7 @@ public class MasterBaseTaskExecThread implements Callable<Boolean> {
if
(
submitDB
&&
!
submitQueue
){
// submit task to queue
sendToWorker
(
JSONObject
.
toJSONString
(
task
));
submitQueue
=
true
;
}
if
(
submitDB
&&
submitQueue
){
return
task
;
...
...
dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/WorkerServer.java
浏览文件 @
06927c2c
...
...
@@ -35,9 +35,8 @@ import org.apache.dolphinscheduler.remote.config.NettyServerConfig;
import
org.apache.dolphinscheduler.server.registry.ZookeeperRegistryCenter
;
import
org.apache.dolphinscheduler.server.utils.ProcessUtils
;
import
org.apache.dolphinscheduler.server.worker.config.WorkerConfig
;
import
org.apache.dolphinscheduler.server.worker.processor.Worker
Netty
RequestProcessor
;
import
org.apache.dolphinscheduler.server.worker.processor.WorkerRequestProcessor
;
import
org.apache.dolphinscheduler.server.worker.registry.WorkerRegistry
;
import
org.apache.dolphinscheduler.server.worker.runner.FetchTaskThread
;
import
org.apache.dolphinscheduler.server.zk.ZKWorkerClient
;
import
org.apache.dolphinscheduler.service.bean.SpringApplicationContext
;
import
org.apache.dolphinscheduler.service.process.ProcessService
;
...
...
@@ -169,7 +168,7 @@ public class WorkerServer implements IStoppable {
//init remoting server
NettyServerConfig
serverConfig
=
new
NettyServerConfig
();
this
.
nettyRemotingServer
=
new
NettyRemotingServer
(
serverConfig
);
this
.
nettyRemotingServer
.
registerProcessor
(
CommandType
.
EXECUTE_TASK_REQUEST
,
new
Worker
Netty
RequestProcessor
(
processService
));
this
.
nettyRemotingServer
.
registerProcessor
(
CommandType
.
EXECUTE_TASK_REQUEST
,
new
WorkerRequestProcessor
(
processService
));
this
.
nettyRemotingServer
.
start
();
// TODO 注释掉,因为有心跳,可以复用心跳的逻辑,worker registry
...
...
dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/processor/CallbackChannel.java
浏览文件 @
06927c2c
...
...
@@ -19,11 +19,19 @@ package org.apache.dolphinscheduler.server.worker.processor;
import
io.netty.channel.Channel
;
/**
* callback channel
*/
public
class
CallbackChannel
{
/**
* channel
*/
private
Channel
channel
;
/**
* equest unique identification
*/
private
long
opaque
;
public
CallbackChannel
(
Channel
channel
,
long
opaque
)
{
...
...
dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/processor/Task
Instance
CallbackService.java
→
dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/processor/TaskCallbackService.java
浏览文件 @
06927c2c
...
...
@@ -26,7 +26,7 @@ import org.apache.dolphinscheduler.remote.command.ExecuteTaskResponseCommand;
import
java.util.concurrent.ConcurrentHashMap
;
public
class
Task
Instance
CallbackService
{
public
class
TaskCallbackService
{
private
static
final
ConcurrentHashMap
<
Integer
,
CallbackChannel
>
CALL_BACK_CHANNELS
=
new
ConcurrentHashMap
<>();
...
...
@@ -56,7 +56,7 @@ public class TaskInstanceCallbackService {
public
void
sendResult
(
int
taskInstanceId
,
ExecuteTaskResponseCommand
responseCommand
){
CallbackChannel
callbackChannel
=
getCallbackChannel
(
taskInstanceId
);
callbackChannel
.
getChannel
().
writeAndFlush
(
responseCommand
.
convert2Command
()).
addListener
(
new
ChannelFutureListener
(){
callbackChannel
.
getChannel
().
writeAndFlush
(
responseCommand
.
convert2Command
(
0
)).
addListener
(
new
ChannelFutureListener
(){
@Override
public
void
operationComplete
(
ChannelFuture
future
)
throws
Exception
{
...
...
dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/processor/Worker
Netty
RequestProcessor.java
→
dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/processor/WorkerRequestProcessor.java
浏览文件 @
06927c2c
...
...
@@ -31,7 +31,6 @@ import org.apache.dolphinscheduler.remote.command.Command;
import
org.apache.dolphinscheduler.remote.command.CommandType
;
import
org.apache.dolphinscheduler.remote.command.ExecuteTaskRequestCommand
;
import
org.apache.dolphinscheduler.remote.command.ExecuteTaskResponseCommand
;
import
org.apache.dolphinscheduler.remote.command.log.RollViewLogResponseCommand
;
import
org.apache.dolphinscheduler.remote.processor.NettyRequestProcessor
;
import
org.apache.dolphinscheduler.remote.utils.FastJsonSerializer
;
import
org.apache.dolphinscheduler.server.worker.config.WorkerConfig
;
...
...
@@ -44,22 +43,36 @@ import org.slf4j.LoggerFactory;
import
java.util.Date
;
import
java.util.concurrent.ExecutorService
;
/**
* worker request processor
*/
public
class
WorkerRequestProcessor
implements
NettyRequestProcessor
{
public
class
WorkerNettyRequestProcessor
implements
NettyRequestProcessor
{
private
final
Logger
logger
=
LoggerFactory
.
getLogger
(
WorkerNettyRequestProcessor
.
class
);
private
final
Logger
logger
=
LoggerFactory
.
getLogger
(
WorkerRequestProcessor
.
class
);
/**
* process service
*/
private
final
ProcessService
processService
;
/**
* thread executor service
*/
private
final
ExecutorService
workerExecService
;
/**
* worker config
*/
private
final
WorkerConfig
workerConfig
;
private
final
TaskInstanceCallbackService
taskInstanceCallbackService
;
/**
* task callback service
*/
private
final
TaskCallbackService
taskCallbackService
;
public
Worker
Netty
RequestProcessor
(
ProcessService
processService
){
public
WorkerRequestProcessor
(
ProcessService
processService
){
this
.
processService
=
processService
;
this
.
task
InstanceCallbackService
=
new
TaskInstance
CallbackService
();
this
.
task
CallbackService
=
new
Task
CallbackService
();
this
.
workerConfig
=
SpringApplicationContext
.
getBean
(
WorkerConfig
.
class
);
this
.
workerExecService
=
ThreadUtils
.
newDaemonFixedThreadExecutor
(
"Worker-Execute-Thread"
,
workerConfig
.
getWorkerExecThreads
());
}
...
...
@@ -68,7 +81,7 @@ public class WorkerNettyRequestProcessor implements NettyRequestProcessor {
public
void
process
(
Channel
channel
,
Command
command
)
{
Preconditions
.
checkArgument
(
CommandType
.
EXECUTE_TASK_REQUEST
==
command
.
getType
(),
String
.
format
(
"invalid command type : %s"
,
command
.
getType
()));
logger
.
debug
(
"received command : {}"
,
command
);
logger
.
info
(
"received command : {}"
,
command
);
ExecuteTaskRequestCommand
taskRequestCommand
=
FastJsonSerializer
.
deserialize
(
command
.
getBody
(),
ExecuteTaskRequestCommand
.
class
);
...
...
@@ -79,7 +92,7 @@ public class WorkerNettyRequestProcessor implements NettyRequestProcessor {
taskInstance
=
processService
.
getTaskInstanceDetailByTaskId
(
taskInstance
.
getId
());
//TODO
需要干掉,然后移到master里面。
//TODO
this logic need add to master
int
userId
=
taskInstance
.
getProcessDefine
()
==
null
?
0
:
taskInstance
.
getProcessDefine
().
getUserId
();
Tenant
tenant
=
processService
.
getTenantForProcess
(
taskInstance
.
getProcessInstance
().
getTenantId
(),
userId
);
// verify tenant is null
...
...
@@ -91,7 +104,8 @@ public class WorkerNettyRequestProcessor implements NettyRequestProcessor {
String
userQueue
=
processService
.
queryUserQueueByProcessInstanceId
(
taskInstance
.
getProcessInstanceId
());
taskInstance
.
getProcessInstance
().
setQueue
(
StringUtils
.
isEmpty
(
userQueue
)
?
tenant
.
getQueue
()
:
userQueue
);
taskInstance
.
getProcessInstance
().
setTenantCode
(
tenant
.
getTenantCode
());
//TODO 到这里。
//TODO end
// local execute path
String
execLocalPath
=
getExecLocalPath
(
taskInstance
);
logger
.
info
(
"task instance local execute path : {} "
,
execLocalPath
);
...
...
@@ -102,9 +116,13 @@ public class WorkerNettyRequestProcessor implements NettyRequestProcessor {
}
catch
(
Exception
ex
){
logger
.
error
(
String
.
format
(
"create execLocalPath : %s"
,
execLocalPath
),
ex
);
}
taskCallbackService
.
addCallbackChannel
(
taskInstance
.
getId
(),
new
CallbackChannel
(
channel
,
command
.
getOpaque
()));
// submit task
taskInstanceCallbackService
.
addCallbackChannel
(
taskInstance
.
getId
(),
new
CallbackChannel
(
channel
,
command
.
getOpaque
()));
workerExecService
.
submit
(
new
TaskScheduleThread
(
taskInstance
,
processService
,
taskInstance
CallbackService
));
workerExecService
.
submit
(
new
TaskScheduleThread
(
taskInstance
,
processService
,
task
CallbackService
));
ExecuteTaskResponseCommand
executeTaskResponseCommand
=
new
ExecuteTaskResponseCommand
(
taskInstance
.
getId
());
channel
.
writeAndFlush
(
executeTaskResponseCommand
.
convert2Command
(
command
.
getOpaque
()));
...
...
dolphinscheduler-server/src/main/java/org/apache/dolphinscheduler/server/worker/runner/TaskScheduleThread.java
浏览文件 @
06927c2c
...
...
@@ -35,10 +35,9 @@ import org.apache.dolphinscheduler.common.utils.LoggerUtils;
import
org.apache.dolphinscheduler.common.utils.TaskParametersUtils
;
import
org.apache.dolphinscheduler.dao.entity.ProcessInstance
;
import
org.apache.dolphinscheduler.dao.entity.TaskInstance
;
import
org.apache.dolphinscheduler.remote.NettyRemotingClient
;
import
org.apache.dolphinscheduler.remote.command.ExecuteTaskAckCommand
;
import
org.apache.dolphinscheduler.remote.command.ExecuteTaskResponseCommand
;
import
org.apache.dolphinscheduler.server.worker.processor.Task
Instance
CallbackService
;
import
org.apache.dolphinscheduler.server.worker.processor.TaskCallbackService
;
import
org.apache.dolphinscheduler.server.worker.task.AbstractTask
;
import
org.apache.dolphinscheduler.server.worker.task.TaskManager
;
import
org.apache.dolphinscheduler.server.worker.task.TaskProps
;
...
...
@@ -80,7 +79,7 @@ public class TaskScheduleThread implements Runnable {
/**
* task instance callback service
*/
private
Task
Instance
CallbackService
taskInstanceCallbackService
;
private
TaskCallbackService
taskInstanceCallbackService
;
/**
* constructor
...
...
@@ -88,7 +87,7 @@ public class TaskScheduleThread implements Runnable {
* @param taskInstance task instance
* @param processService process dao
*/
public
TaskScheduleThread
(
TaskInstance
taskInstance
,
ProcessService
processService
,
Task
Instance
CallbackService
taskInstanceCallbackService
){
public
TaskScheduleThread
(
TaskInstance
taskInstance
,
ProcessService
processService
,
TaskCallbackService
taskInstanceCallbackService
){
this
.
processService
=
processService
;
this
.
taskInstance
=
taskInstance
;
this
.
taskInstanceCallbackService
=
taskInstanceCallbackService
;
...
...
@@ -105,7 +104,7 @@ public class TaskScheduleThread implements Runnable {
try
{
// tell master that task is in executing
ExecuteTaskAckCommand
ackCommand
=
buildAckCommand
(
taskInstance
.
getTaskType
());
//
taskInstanceCallbackService.sendAck(taskInstance.getId(), ackCommand);
taskInstanceCallbackService
.
sendAck
(
taskInstance
.
getId
(),
ackCommand
);
logger
.
info
(
"script path : {}"
,
taskInstance
.
getExecutePath
());
// task node
...
...
@@ -182,7 +181,7 @@ public class TaskScheduleThread implements Runnable {
responseCommand
.
setEndTime
(
new
Date
());
}
finally
{
//
taskInstanceCallbackService.sendResult(taskInstance.getId(), responseCommand);
taskInstanceCallbackService
.
sendResult
(
taskInstance
.
getId
(),
responseCommand
);
}
logger
.
info
(
"task instance id : {},task final status : {}"
,
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录